gryps2/UI-code/T-045_AutoSpread.txt

176 lines
14 KiB
Text
Raw Permalink Normal View History

2025-05-30 14:58:21 +02:00
<EFBFBD><EFBFBD> double MaxSpread_pips = 4.0; // 1<><31>[<5B>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<08>Pips <09>
input double AllowSpread = 10.0; // 1<><31>[<5B>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Pips<08>0:<00><><EFBFBD>R <09>
// <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<08>,n(u
double MeasureSpread, SpreadMin = 1000, SpreadMax = 0, SpreadSum = 0, SpreadAve = 0;
double SpreadMin1 = 100, SpreadMax1 = 0, SpreadSum1 = 0, SpreadAve1 = 0;
int TickCount = 0, TickCount1 = 0, lastBars;
// <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(u
double Adjustspread = 5.0; // s^GW<47>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{(u<>[<00>
double AllowMaxSpread = 8.0; // <00><><EFBFBD>Rg'Y1<59><31>[<5B>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
double Adjustspread_Margin = 2.0; // <00><><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><30>teE^
double Adjustspread_Margin1 = 1.0; // <00><><EFBFBD>R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><30>teE^<08>1:00 <09>
int OnInit()
{
// RgS<>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<08><>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Bf~0_0o0Kb<4B>RBf0]0<>0<EFBFBD>NY<>0<EFBFBD><30><EFBFBD>R <09>
if (IsTesting() || AllowSpread != 0) MaxSpread_pips = AllowSpread;
if (AllowSpread == 0) MaxSpread_pips = AllowMaxSpread;
}
void OnTick()
{
// <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0$P<>S<EFBFBD>_
if (!IsTesting() && AllowSpread == 0)
{
MeasureSpread = MarketInfo(Symbol(),MODE_SPREAD) / 10;
MeasureSP();
//PipsObject(); // <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<6B>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<30>:y
}
}
//+------------------------------------------------------------------+
//| <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<08>,n<>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 |
//+------------------------------------------------------------------+
void MeasureSP()
{
TickCount++;
SpreadSum += MeasureSpread;
SpreadMin = SpreadMin == 0 ? SpreadMin = MeasureSpread : SpreadMin;
if (TickCount > 0 && SpreadSum > 0) SpreadAve = SpreadSum / TickCount;
if (SpreadMax < MeasureSpread) SpreadMax = MeasureSpread;
if (SpreadMin > MeasureSpread) SpreadMin = MeasureSpread;
// g<><67>n0<6E>0<EFBFBD>0<EFBFBD>f<EFBFBD>eBfk0/}Mz$P<>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if (lastBars != iBars(NULL, PERIOD_MN1))
{
lastBars = iBars(NULL, PERIOD_MN1);
SpreadSum = 0;
TickCount = 0;
}
// <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<08><>{
Adjustspread = SpreadAve + Adjustspread_Margin; // s^GWk0<6B>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{
MaxSpread_pips = MathMin(Adjustspread, AllowMaxSpread); // <00>Q<EFBFBD><51>-<2D><>[n0g'Y$Ph0<68>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{<7B>0<EFBFBD>k<03>W0\U0D0<44>e<EFBFBD>0<EFBFBD>c(u
}
//+------------------------------------------------------------------+
// <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><30>k0<6B>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<30>:y
void PipsObject()
{
// 1:00<00>0<EFBFBD>0<03>naW0j0D04XT
string Data1 = "Tradeable limit : " + DoubleToStr(MaxSpread_pips,1) + " ";
string Data2 = "MarketInfo : "+DoubleToStr(MeasureSpread,1) + " ";
string Data3 = "Average : " + DoubleToStr(SpreadAve,1) + " ";
string Data4 = "Max : " + DoubleToStr(SpreadMax,1) + " ";
string Data5 = "Min : " + (SpreadMin==1000? "---" : DoubleToStr(SpreadMin,1)) + " ";
label("SP0", "[Spread data (pips)]" + " ", 0, 114, 11, clrWhite);
label("SP1", Data1, 0, 88, 11, clrYellow);
label("SP2", Data2, 0, 66, 11, clrWhite);
label("SP3", Data3, 0, 44, 11, clrWhite);
label("SP4", Data4, 0, 22, 11, clrWhite);
label("SP5", Data5, 0, 0, 11, clrWhite);
}
//+------------------------------------------------------------------+
void label(string name, string label_text, int pos_x, int pos_y, int s, color clr= clrBlack)
{
name = name;
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
ObjectSetString (0, name, OBJPROP_TEXT, label_text);
ObjectSetInteger(0, name, OBJPROP_FONTSIZE, s);
ObjectSetString (0, name, OBJPROP_FONT, "Segoe UI");
ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_RIGHT_LOWER);
ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_RIGHT_LOWER);
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, pos_x);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, pos_y);
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_BACK, true);
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<08>,n<>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<08>1:00<08>,n<>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0 <09> |
//+------------------------------------------------------------------+
// T<>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0$P<08><>{
void MeasureSP()
{
TickCount++;
SpreadSum += MeasureSpread;
SpreadMin = SpreadMin == 0 ? SpreadMin = MeasureSpread : SpreadMin;
if (TickCount > 0 && SpreadSum > 0) SpreadAve = SpreadSum / TickCount;
if (SpreadMax < MeasureSpread) SpreadMax = MeasureSpread;
if (SpreadMin > MeasureSpread) SpreadMin = MeasureSpread;
// MT4Bf<42><66>1:00n0<6E>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
yTime = TimeMinute(TimeCurrent());
if (xxTime == 1 && yTime == 0)
{
TickCount1++;
SpreadSum1 += MeasureSpread;
SpreadMin1 = SpreadMin1 == 0 ? SpreadMin1 = MeasureSpread : SpreadMin1;
if (TickCount1 > 0 && SpreadSum1 > 0) SpreadAve1 = SpreadSum1 / TickCount1;
if (SpreadMax1 < MeasureSpread) SpreadMax1 = MeasureSpread;
if (SpreadMin1 > MeasureSpread) SpreadMin1 = MeasureSpread;
}
// g<><67>n0<6E>0<EFBFBD>0<EFBFBD>f<EFBFBD>eBfk0/}Mz$P<>0<EFBFBD>0<EFBFBD>0<EFBFBD>0
if (lastBars != iBars(NULL, PERIOD_MN1))
{
lastBars = iBars(NULL, PERIOD_MN1);
SpreadSum = 0;
TickCount = 0;
SpreadSum1 = 0;
TickCount1 = 0;
}
// <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0-<2D><>[_j<5F><6A>
Adjustspread = SpreadAve + Adjustspread_Margin; // s^GWk0<6B>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{
MaxSpread_pips = MathMin(Adjustspread, AllowMaxSpread); // <00>Q<EFBFBD><51>-<2D><>[n0g'Y$Ph0<68>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{<7B>0<EFBFBD>k<03>W0\U0D0<44>e<EFBFBD>0<EFBFBD>c(u
if (SpreadAve1 != 0) // 1:00<00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0EA(u
{
Adjustspread = SpreadAve1 + Adjustspread_Margin1; // s^GWk0<6B>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{
MaxSpread_pips = MathMax(MathMin(Adjustspread, AllowMaxSpread), MaxSpread_pips); // g'Y$Ph0<68>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>R<EFBFBD>{0hQSOs^GW<47>0<EFBFBD>k<03>
}
}
//+------------------------------------------------------------------+
// <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD><30>k0<6B>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0h<30>:y
void PipsObject()
{
// 1:00<00>0<EFBFBD>0<03>naW0j0D04XT
string Data1 = "Tradeable limit : " + DoubleToStr(MaxSpread_pips,1) + " ";
string Data2 = "MarketInfo : "+DoubleToStr(MeasureSpread,1) + " ";
string Data3 = "Average : " + DoubleToStr(SpreadAve,1) + " ";
string Data4 = "Max : " + DoubleToStr(SpreadMax,1) + " ";
string Data5 = "Min : " + (SpreadMin==1000? "---" : DoubleToStr(SpreadMin,1)) + " ";
label("SP0", "[Spread data (pips)]" + " ", 0, 114, 11, clrWhite);
label("SP1", Data1, 0, 88, 11, clrYellow);
label("SP2", Data2, 0, 66, 11, clrWhite);
label("SP3", Data3, 0, 44, 11, clrWhite);
label("SP4", Data4, 0, 22, 11, clrWhite);
label("SP5", Data5, 0, 0, 11, clrWhite);
}
//+------------------------------------------------------------------+
void label(string name, string label_text, int pos_x, int pos_y, int s, color clr= clrBlack)
{
name = name;
ObjectCreate(name, OBJ_LABEL, 0, 0, 0);
ObjectSetString (0, name, OBJPROP_TEXT, label_text);
ObjectSetInteger(0, name, OBJPROP_FONTSIZE, s);
ObjectSetString (0, name, OBJPROP_FONT, "Segoe UI");
ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_RIGHT_LOWER);
ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_RIGHT_LOWER);
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, pos_x);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, pos_y);
ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
ObjectSetInteger(0, name, OBJPROP_BACK, true);
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
}
//+------------------------------------------------------------------+