#property copyright "Copyright © 2011-2022, cmillion@narod.ru"
#property link "https://www.mql5.com/en/market/product/83179"
#property strict
#import "kernel32.dll"
int _lopen(string a0, int a1);
int _lclose(int a0);
#import
extern bool ðàçðåøèòü_ñäåëêè_Buy = TRUE;//Allow Buy
extern bool ðàçðåøèòü_ñäåëêè_Sell = TRUE;//Allow Sell
extern bool çàïðåò_ïåðâîãî_îðäåðà = TRUE;//EA markes first order
extern bool îòêðûâàòü_îðäåðà_ïî_òðåíäó = FALSE;//Open order on trend
extern int ïåðâûé_øàã = 10;//First step
extern int íå_ñòàâèòü_îðäåð_áëèæå = 30;//Minimum price distance
extern int øàã_ïåðåìåùåíèÿ = 5;//Move Step
extern int ðàññòîÿíèå_ìåæäó_îðäåðàìè = 30;//Distance between orders
extern double ìàêñèìàëüíûé_óáûòîê = 100000.0;//Maximum allowed loss
extern double óáûòîê_çàêð_ïî_îáù_ïðîôèòó = 10.0;//Close loss by drawdown
extern double îáúåì_îðäåðà = 0.1;//Order lotsize
extern double äîáàâêà_ê_îáúåìó_îðäåðà = 0.0;//Increase losize by
extern double óìíîæåíèå_îáúåìà_îðäåðà = 1.5;//Multiply losize by
extern int îêðóãëåíèå_ëîòîâ = 2;//Rounding losize decimals
extern double ïðèáûëü_çàêð_2_íàïðàâëåíèé = 10.0;//Profit for closing 2 directions
extern double ïðèáûëü_çàêð_1_íàïðàâëåíèÿ = 50.0;//Profit for closing 1 direction
extern int Ê_àâòîðàñ÷åòà_ïðèáûëè = 50;//Auto calculated profit
extern double óáûòîê_äëÿ_çàêðûòèÿ = 100000.0;//Loss for closing
input string in_01= "";//__________________
extern string Íàñòðîéêè_òðàëëà = "0-Off 1-Candle 2-Fractals 3-Points";//Trailing_settings
extern int äëèííà_òðàëëà = 1;// trailing_type
extern int øàã_òðàëëà = 0;// trailing_step
extern int ìèíèìàëüíûé_ïðîôèò_òðàëëà = 10;// Minimum trailing profit
extern int îòñòóï_îò_ôðàêòàëà_ñâå÷è = 0;// Padding by fractal or candles
extern int òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ = 15;// Timeframe fractal or candles
extern string in_02 = "";//__________________
extern int Magic = 777;//Magic
extern int ðàçìåð_øðèôòà = 10;//Font size
extern color öâåò_âûâîäà_èíôîðìàöèè = Lime;//info_color
extern int Stoploss = 0;//Stop Loss
extern int Takeprofit = 0;//TakeProfit
extern string Íàñòðîéêè_èíäèêàòîðà = "RSI";//indicator
extern bool îòêðûòèå_1_îðäåðà_ïî_èíäèêàòó = FALSE;//open_1_order_by_indicator
extern int çîíà_ïåðåïðîäàííîñòè = 15;//Oversold zone
extern int çîíà_ïåðåêóïëåííîñòè = 85;//Overbought zone
extern int RSI_Period = 5;//RSI_Period
extern int òàéìôðåéì_èíäèêàòîðà = 0;//timeframe of the indicator
extern int Key = 0;//Key
// 添加ATR加权RSI参数
extern int ATR_Period = 14; // ATR周期
extern double ATR_Weight = 0.30; // ATR权重 (0~1),收盘价权重 = 1-ATR_Weight
extern bool UseATR_RSI = false; // 是否启用ATR加权RSI
// 添加单边市场识别参数
extern bool UseTrendFilter = true; // 启用单边市场过滤
extern int TrendPeriod = 50; // 趋势判断周期
extern double TrendThreshold = 0.002; // 趋势阈值 (0.2%)
extern int TrendTimeframe = 60; // 趋势判断时间框架
bool G_bool_292;
double G_tickvalue_296;
int Gi_304;
int Gi_308 = 3456;
int G_acc_number_312;
int G_slippage_316;
string Gs_320;
//+------------------------------------------------------------------+
//| 计算ATR加权价格 |
//+------------------------------------------------------------------+
double ATRWeightedPrice(int tf, int index)
{
double close_price = iClose(NULL, tf, index);
if(!UseATR_RSI) return(close_price); // 如果未启用ATR加权,返回普通收盘价
double atr_value = iATR(NULL, tf, ATR_Period, index);
return(close_price * (1.0 - ATR_Weight) + atr_value * ATR_Weight);
}
//+------------------------------------------------------------------+
//| 计算ATR加权RSI |
//+------------------------------------------------------------------+
double RSI_ATR(int tf, int period, int shift)
{
double prices[];
int bars = 2 * period + 1;
ArrayResize(prices, bars);
ArraySetAsSeries(prices, true);
for(int i = 0; i < bars; i++)
prices[i] = ATRWeightedPrice(tf, shift + i);
return(iRSIOnArray(prices, 0, period, 0));
}
//+------------------------------------------------------------------+
//| 单边市场识别函数 |
//+------------------------------------------------------------------+
bool IsTrendingMarket()
{
if(!UseTrendFilter) return(false);
double emaFast = iMA(NULL, TrendTimeframe, TrendPeriod/2, 0, MODE_EMA, PRICE_CLOSE, 0);
double emaSlow = iMA(NULL, TrendTimeframe, TrendPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
double currentPrice = iClose(NULL, TrendTimeframe, 0);
// 计算价格相对于EMA的偏离程度
double deviation = MathAbs(currentPrice - emaSlow) / emaSlow;
// 如果价格偏离EMA超过阈值,认为是单边市
if(deviation > TrendThreshold) {
return(true);
}
// 额外检查:如果快慢EMA分离明显,也认为是趋势市
double emaSeparation = MathAbs(emaFast - emaSlow) / emaSlow;
if(emaSeparation > TrendThreshold * 0.7) {
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
//| 获取市场趋势方向 |
//+------------------------------------------------------------------+
int GetMarketTrendDirection()
{
if(!UseTrendFilter) return(0);
double ema = iMA(NULL, TrendTimeframe, TrendPeriod, 0, MODE_EMA, PRICE_CLOSE, 0);
double currentPrice = iClose(NULL, TrendTimeframe, 0);
if(currentPrice > ema * (1 + TrendThreshold)) {
return(1); // 上升趋势
}
else if(currentPrice < ema * (1 - TrendThreshold)) {
return(-1); // 下降趋势
}
return(0); // 震荡市
}
// E37F0136AA3FFAF149B351F6A4C948E9
int init()
{
Gs_320 = " " + AccountCurrency();
G_tickvalue_296 = MarketInfo(Symbol(), MODE_TICKVALUE);
if (!IsDllsAllowed()) {
Comment("Âêëþ÷èòå ðàçðåøèòü èñïîëüçîâàíèå DLL");
return(0);
}
òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ = f0_4285(òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ);
if (Digits == 5 || Digits == 3) G_slippage_316 = 30;
Comment("Ñåòêà-ïîëçó÷êà");
Gi_304 = MarketInfo(Symbol(), MODE_STOPLEVEL);
if (ðàññòîÿíèå_ìåæäó_îðäåðàìè < Gi_304) {
Alert("ðàññòîÿíèå_ìåæäó_îðäåðàìè ìåíüøå STOPLEVEL, èçìåíåí íà ", Gi_304);
ðàññòîÿíèå_ìåæäó_îðäåðàìè = Gi_304;
}
if (ïåðâûé_øàã < Gi_304) {
Alert("ïåðâûé_øàã ìåíüøå STOPLEVEL, èçìåíåí íà ", Gi_304);
ïåðâûé_øàã = Gi_304;
}
int y_0 = ðàçìåð_øðèôòà + ðàçìåð_øðèôòà / 2;
ObjectCreate("Balance", OBJ_LABEL, 0, 0, 0);
ObjectSet("Balance", OBJPROP_CORNER, 1);
ObjectSet("Balance", OBJPROP_XDISTANCE, 5);
ObjectSet("Balance", OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectCreate("Equity", OBJ_LABEL, 0, 0, 0);
ObjectSet("Equity", OBJPROP_CORNER, 1);
ObjectSet("Equity", OBJPROP_XDISTANCE, 5);
ObjectSet("Equity", OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectCreate("FreeMargin", OBJ_LABEL, 0, 0, 0);
ObjectSet("FreeMargin", OBJPROP_CORNER, 1);
ObjectSet("FreeMargin", OBJPROP_XDISTANCE, 5);
ObjectSet("FreeMargin", OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
G_acc_number_312 = AccountNumber();
G_bool_292 = (!IsDemo()) && (!IsTesting());
ObjectCreate("ProfitB", OBJ_LABEL, 0, 0, 0);
ObjectSet("ProfitB", OBJPROP_CORNER, 1);
ObjectSet("ProfitB", OBJPROP_XDISTANCE, 5);
ObjectSet("ProfitB", OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectCreate("ProfitS", OBJ_LABEL, 0, 0, 0);
ObjectSet("ProfitS", OBJPROP_CORNER, 1);
ObjectSet("ProfitS", OBJPROP_XDISTANCE, 5);
ObjectSet("ProfitS", OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectCreate("Profit", OBJ_LABEL, 0, 0, 0);
ObjectSet("Profit", OBJPROP_CORNER, 1);
ObjectSet("Profit", OBJPROP_XDISTANCE, 5);
ObjectSet("Profit", OBJPROP_YDISTANCE, y_0);
y_0 += 3 * ðàçìåð_øðèôòà;
int count_4 = 0;
string name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, "--------------------------------------------------------", ðàçìåð_øðèôòà, "Arial", Aqua);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += 3 * ðàçìåð_øðèôòà;
ObjectSetText(name_8, "Óñòàíîâëåííûå ïàðàìåòðû", ðàçìåð_øðèôòà + 2, "Arial", Aqua);
count_4++;
name_8 = "Param" + count_4;
string str_concat_16 = "";
if (ðàçðåøèòü_ñäåëêè_Buy) str_concat_16 = "Buy ";
if (ðàçðåøèòü_ñäåëêè_Sell) str_concat_16 = StringConcatenate(str_concat_16, "Sell ");
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, StringConcatenate("Ðàçðåøåíû ", str_concat_16), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Object" + count_4;
if (!îòêðûâàòü_îðäåðà_ïî_òðåíäó) {
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, "Íå îòêðûâàòü îðäåðà ïî òðåíäó ", ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Object" + count_4;
}
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += 2 * ðàçìåð_øðèôòà;
if (çàïðåò_ïåðâîãî_îðäåðà) ObjectSetText(name_8, "Ñîâåòíèê ñàì âûñòàâëÿåò ïåðâûé îðäåð", ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
else ObjectSetText(name_8, "Ñîâåòíèê æäåò ïåðâûé îðäåð", ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, StringConcatenate("Ïåðâûé øàã ", ïåðâûé_øàã, " ï"), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, StringConcatenate("Ìèíèìàëüíîå ðàññòîÿíèå äî öåíû ", íå_ñòàâèòü_îðäåð_áëèæå, " ï"), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, StringConcatenate("Øàã èçìåíåíèÿ îðäåðà ", øàã_ïåðåìåùåíèÿ, " ï"), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, StringConcatenate("Øàã ìåæäó îðäåðàìè ", ðàññòîÿíèå_ìåæäó_îðäåðàìè, " ï"), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, "--------------------------------------------------------", ðàçìåð_øðèôòà, "Arial", Aqua);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 35);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
ObjectSetText(name_8, "íå îòêðûâàòü äàííîå íàïðàâëåíèå", ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate("Char.b", OBJ_LABEL, 0, 0, 0);
ObjectSet("Char.b", OBJPROP_CORNER, 1);
ObjectSet("Char.b", OBJPROP_XDISTANCE, 5);
ObjectSet("Char.b", OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText("Char.b", CharToStr(233), ðàçìåð_øðèôòà, "Wingdings", Lime);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 35);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
ObjectSetText(name_8, StringConcatenate("ïðè äîñòèæåíèè óáûòêà ", ìàêñèìàëüíûé_óáûòîê, Gs_320), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate("Char.s", OBJ_LABEL, 0, 0, 0);
ObjectSet("Char.s", OBJPROP_CORNER, 1);
ObjectSet("Char.s", OBJPROP_XDISTANCE, 5);
ObjectSet("Char.s", OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText("Char.s", CharToStr(234), ðàçìåð_øðèôòà, "Wingdings", Lime);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, "--------------------------------------------------------", ðàçìåð_øðèôòà, "Arial", Aqua);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 35);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà;
ObjectSetText(name_8, "çàêðûòèå ïî îáùåìó ïðîôèòó", ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate("Char.op", OBJ_LABEL, 0, 0, 0);
ObjectSet("Char.op", OBJPROP_CORNER, 1);
ObjectSet("Char.op", OBJPROP_XDISTANCE, 5);
ObjectSet("Char.op", OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà;
ObjectSetText("Char.op", CharToStr(75), ðàçìåð_øðèôòà + 2, "Wingdings", Silver);
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 35);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, StringConcatenate("ïðè ïðîñàäêå ", óáûòîê_çàêð_ïî_îáù_ïðîôèòó, Gs_320), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, "--------------------------------------------------------", ðàçìåð_øðèôòà, "Arial", Aqua);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += 2 * ðàçìåð_øðèôòà;
ObjectSetText(name_8, StringConcatenate("Ñòàðòîâûé ëîò ", DoubleToStr(îáúåì_îðäåðà, 2), " + ", DoubleToStr(äîáàâêà_ê_îáúåìó_îðäåðà, 2), " õ ", DoubleToStr(óìíîæåíèå_îáúåìà_îðäåðà,
2)), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += 2 * ðàçìåð_øðèôòà;
ObjectSetText(name_8, StringConcatenate("ïðèáûëü äëÿ çàêðûòèÿ âñåõ ", ïðèáûëü_çàêð_2_íàïðàâëåíèé, Gs_320), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
if (f0_8364()) ïðèáûëü_çàêð_2_íàïðàâëåíèé = 0.01;
if (Ê_àâòîðàñ÷åòà_ïðèáûëè == 0) f0_12282("ïðèáûëü_çàêð.1_íàïðàâëåíèÿ", StringConcatenate("ïðèáûëü çàêðûòèÿ íàïðàâëåíèÿ ", ïðèáûëü_çàêð_1_íàïðàâëåíèÿ, Gs_320), 5, y_0, öâåò_âûâîäà_èíôîðìàöèè);
else {
f0_12282("StopProfit1", StringConcatenate("Àâòîðàñ÷åò ïðèáûëè çàêðûòèÿ ", Ê_àâòîðàñ÷åòà_ïðèáûëè), 5, y_0, öâåò_âûâîäà_èíôîðìàöèè);
y_0 += ðàçìåð_øðèôòà * 2;
f0_12282("StopProfit2", StringConcatenate("Àâòîðàñ÷åò ïðèáûëè çàêðûòèÿ ", Ê_àâòîðàñ÷åòà_ïðèáûëè), 5, y_0, öâåò_âûâîäà_èíôîðìàöèè);
}
y_0 += 2 * ðàçìåð_øðèôòà;
count_4++;
name_8 = "Param" + count_4;
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += 2 * ðàçìåð_øðèôòà;
ObjectSetText(name_8, StringConcatenate("óáûòîê çàêðûòèÿ buy/sell ", óáûòîê_äëÿ_çàêðûòèÿ, Gs_320), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
if (äëèííà_òðàëëà != 0) {
if (äëèííà_òðàëëà == 1) str_concat_16 = StringConcatenate("Ïî ñâå÷àì ", f0_9613(òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ), " +- ", îòñòóï_îò_ôðàêòàëà_ñâå÷è);
if (äëèííà_òðàëëà == 2) str_concat_16 = StringConcatenate("Ïî ôðàêòàëàì ", f0_9613(òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ), " ", f0_9613(òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ), " +- ", îòñòóï_îò_ôðàêòàëà_ñâå÷è);
if (äëèííà_òðàëëà > 2) str_concat_16 = StringConcatenate("Ïî ïèïñàì ", äëèííà_òðàëëà, " ï");
if (øàã_òðàëëà > 0) str_concat_16 = StringConcatenate(str_concat_16, " ñ øàãîì ", øàã_òðàëëà, " ï", " ìèíèìàëüíûé ïðîôèò òðàëëà ", ìèíèìàëüíûé_ïðîôèò_òðàëëà, " ï");
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += 2 * ðàçìåð_øðèôòà;
ObjectSetText(name_8, StringConcatenate("äëèííà_òðàëëà ", str_concat_16), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
count_4++;
name_8 = "Param" + count_4;
}
ObjectCreate(name_8, OBJ_LABEL, 0, 0, 0);
ObjectSet(name_8, OBJPROP_CORNER, 1);
ObjectSet(name_8, OBJPROP_XDISTANCE, 5);
ObjectSet(name_8, OBJPROP_YDISTANCE, y_0);
y_0 += ðàçìåð_øðèôòà * 2;
ObjectSetText(name_8, "--------------------------------------------------------", ðàçìåð_øðèôòà, "Arial", Aqua);
count_4++;
name_8 = "Param" + count_4;
óáûòîê_çàêð_ïî_îáù_ïðîôèòó = -1.0 * óáûòîê_çàêð_ïî_îáù_ïðîôèòó;
ìàêñèìàëüíûé_óáûòîê = -1.0 * ìàêñèìàëüíûé_óáûòîê;
óáûòîê_äëÿ_çàêðûòèÿ = -1.0 * óáûòîê_äëÿ_çàêðûòèÿ;
return (0);
}
// 52D46093050F38C27267BCE42543EF60
int deinit() {
ObjectsDeleteAll(0);
return (0);
}
// EA2B2676C28C0DB26D39331A336C6B92
int start() {
double price_0;
double Ld_16;
double Ld_24;
double Ld_32;
double Ld_40;
double order_lots_48;
double price_56;
double price_64;
double price_72;
double price_80;
int Li_88;
int Li_92;
int Li_96;
int Li_100;
int cmd_104;
int ticket_108;
int ticket_112;
double price_116;
double price_124;
double price_132;
double price_140;
double price_148;
double price_156;
double Ld_164;
double Ld_172;
double price_180;
double price_188;
double price_200;
double Ld_208;
double Ld_216;
double price_224;
double lots_232;
double irsi_240;
// 单边市场识别
bool isTrending = IsTrendingMarket();
int trendDirection = GetMarketTrendDirection();
for (int pos_196 = 0; pos_196 < OrdersTotal(); pos_196++) {
if (OrderSelect(pos_196, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol() && Magic == OrderMagicNumber()) {
cmd_104 = OrderType();
order_lots_48 = OrderLots();
price_0 = NormalizeDouble(OrderOpenPrice(), Digits);
price_72 = NormalizeDouble(OrderStopLoss(), Digits);
price_80 = NormalizeDouble(OrderTakeProfit(), Digits);
price_56 = price_72;
price_64 = price_80;
if (cmd_104 == OP_BUYSTOP) {
Li_96++;
if (price_116 < price_0 || price_116 == 0.0) price_116 = price_0;
ticket_108 = OrderTicket();
price_148 = price_0;
}
if (cmd_104 == OP_SELLSTOP) {
Li_100++;
if (price_140 > price_0 || price_140 == 0.0) price_140 = price_0;
ticket_112 = OrderTicket();
price_156 = price_0;
}
if (cmd_104 == OP_BUY) {
Li_88++;
Ld_32 += order_lots_48;
Ld_172 += price_0 * order_lots_48;
if (price_116 < price_0 || price_116 == 0.0) price_116 = price_0;
if (price_124 > price_0 || price_124 == 0.0) price_124 = price_0;
Ld_24 += OrderProfit() + OrderSwap() + OrderCommission();
if (price_72 == 0.0 && Stoploss >= Gi_304 && Stoploss != 0) price_56 = NormalizeDouble(price_0 - Stoploss * Point, Digits);
else price_56 = price_72;
if (price_80 == 0.0 && Takeprofit >= Gi_304 && Takeprofit != 0) price_64 = NormalizeDouble(price_0 + Takeprofit * Point, Digits);
else price_64 = price_80;
if (price_56 > price_72 || price_64 != price_80)
if (!OrderModify(OrderTicket(), price_0, price_56, price_64, 0, White)) Print("Error OrderModify ", GetLastError());
}
if (cmd_104 == OP_SELL) {
Li_92++;
Ld_40 += order_lots_48;
Ld_164 += price_0 * order_lots_48;
if (price_140 > price_0 || price_140 == 0.0) price_140 = price_0;
if (price_132 < price_0 || price_132 == 0.0) price_132 = price_0;
Ld_16 += OrderProfit() + OrderSwap() + OrderCommission();
if (price_72 == 0.0 && Stoploss >= Gi_304 && Stoploss != 0) price_56 = NormalizeDouble(price_0 + Stoploss * Point, Digits);
else price_56 = price_72;
if (price_80 == 0.0 && Takeprofit >= Gi_304 && Takeprofit != 0) price_64 = NormalizeDouble(price_0 - Takeprofit * Point, Digits);
else price_64 = price_80;
if (price_56 < price_72 || (price_72 == 0.0 && price_56 != 0.0) || price_64 != price_80)
if (!OrderModify(OrderTicket(), price_0, price_56, price_64, 0, White)) Print("Error OrderModify ", GetLastError());
}
}
}
}
ObjectDelete("SLb");
ObjectDelete("SLs");
if (Li_88 > 0) {
price_180 = NormalizeDouble(Ld_172 / Ld_32, Digits);
ObjectCreate("SLb", OBJ_ARROW, 0, Time[0], price_180, 0, 0, 0, 0);
ObjectSet("SLb", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
ObjectSet("SLb", OBJPROP_COLOR, Blue);
}
if (Li_92 > 0) {
price_188 = NormalizeDouble(Ld_164 / Ld_40, Digits);
ObjectCreate("SLs", OBJ_ARROW, 0, Time[0], price_188, 0, 0, 0, 0);
ObjectSet("SLs", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
ObjectSet("SLs", OBJPROP_COLOR, Red);
}
if (äëèííà_òðàëëà != 0) {
for (int pos_196 = 0; pos_196 < OrdersTotal(); pos_196++) {
if (OrderSelect(pos_196, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol() && Magic == OrderMagicNumber()) {
cmd_104 = OrderType();
price_72 = NormalizeDouble(OrderStopLoss(), Digits);
price_0 = NormalizeDouble(OrderOpenPrice(), Digits);
price_56 = price_72;
if (cmd_104 == OP_BUY) {
price_200 = f0_833(1, Bid, äëèííà_òðàëëà);
if (price_200 >= price_180 + ìèíèìàëüíûé_ïðîôèò_òðàëëà * Point && price_200 > price_72 + øàã_òðàëëà * Point && (Bid - price_200) / Point > Gi_304) price_56 = price_200;
if (price_56 > price_72)
if (!OrderModify(OrderTicket(), price_0, price_56, OrderTakeProfit(), 0, White)) Print("Error ", GetLastError(), " Trailing Modify Buy SL ", price_72, "->", price_56);
}
if (cmd_104 == OP_SELL) {
price_200 = f0_833(-1, Ask, äëèííà_òðàëëà);
if (((price_200 <= price_188 - ìèíèìàëüíûé_ïðîôèò_òðàëëà * Point && price_200 < price_72 - øàã_òðàëëà * Point )|| price_72 == 0.0 )&& (price_200 - Ask) / Point > Gi_304) price_56 = price_200;
if ((price_56 < price_72 || price_72 == 0.0 )&& price_56 != 0.0)
if (!OrderModify(OrderTicket(), price_0, price_56, OrderTakeProfit(), 0, White)) Print("Error ", GetLastError(), " Trailing Modify Sell SL ", price_72, "->", price_56, " TP ");
}
}
}
}
}
if (Ê_àâòîðàñ÷åòà_ïðèáûëè == 0) {
Ld_208 = ïðèáûëü_çàêð_1_íàïðàâëåíèÿ;
Ld_216 = ïðèáûëü_çàêð_1_íàïðàâëåíèÿ;
} else {
if (Ld_32 == 0.0) Ld_208 = îáúåì_îðäåðà * Ê_àâòîðàñ÷åòà_ïðèáûëè * G_tickvalue_296;
else Ld_208 = Ld_32 * Ê_àâòîðàñ÷åòà_ïðèáûëè * G_tickvalue_296;
if (Ld_40 == 0.0) Ld_216 = îáúåì_îðäåðà * Ê_àâòîðàñ÷åòà_ïðèáûëè * G_tickvalue_296;
else Ld_216 = Ld_40 * Ê_àâòîðàñ÷åòà_ïðèáûëè * G_tickvalue_296;
f0_12282("StopProfit1", StringConcatenate("Àâòîðàñ÷åò ïðèáûëè çàêðûòèÿ Buy ", Ld_208), 5, 0, öâåò_âûâîäà_èíôîðìàöèè);
f0_12282("StopProfit2", StringConcatenate("Àâòîðàñ÷åò ïðèáûëè çàêðûòèÿ Sell ", Ld_216), 5, 0, öâåò_âûâîäà_èíôîðìàöèè);
}
if (Ld_24 > óáûòîê_çàêð_ïî_îáù_ïðîôèòó && Ld_16 > óáûòîê_çàêð_ïî_îáù_ïðîôèòó) {
ObjectSetText("Char.op", CharToStr(251), ðàçìåð_øðèôòà + 2, "Wingdings", Silver);
if (Ld_24 >= Ld_208) {
Print("Çàêðûòèå Buy ïî Profit ", Ld_24);
f0_1880(1);
return(0);
}
if (Ld_16 >= Ld_216) {
Print("Çàêðûòèå Sell ïî Profit ", Ld_16);
f0_1880(-1);
return(0);
}
} else {
ObjectSetText("Char.op", CharToStr(74), ðàçìåð_øðèôòà + 2, "Wingdings", Red);
if (Ld_24 + Ld_16 >= ïðèáûëü_çàêð_2_íàïðàâëåíèé) {
Print("Çàêðûòèå âñåõ îðäåðîâ ïî 2 íàïðàâëåíèÿì ", Ld_24 + Ld_16);
f0_1880(0);
return(0);
}
}
if (Ld_24 <= óáûòîê_äëÿ_çàêðûòèÿ) {
Print("Çàêðûòèå Buy ïî Loss ", Ld_24);
f0_1880(1);
return(0);
}
if (Ld_16 <= óáûòîê_äëÿ_çàêðûòèÿ) {
Print("Çàêðûòèå Sell ïî Loss ", Ld_16);
f0_1880(-1);
return(0);
}
if (Ld_24 <= ìàêñèìàëüíûé_óáûòîê) {
Comment("Íå îòêðûâàòü íàïðàâëåíèå Buy");
ObjectSetText("Char.b", CharToStr(225) + CharToStr(251), ðàçìåð_øðèôòà, "Wingdings", Red);
} else ObjectSetText("Char.b", CharToStr(233), ðàçìåð_øðèôòà, "Wingdings", Lime);
if (Ld_16 <= ìàêñèìàëüíûé_óáûòîê) {
Comment("Íå îòêðûâàòü íàïðàâëåíèå Sell");
ObjectSetText("Char.s", CharToStr(226) + CharToStr(251), ðàçìåð_øðèôòà, "Wingdings", Red);
} else ObjectSetText("Char.s", CharToStr(234), ðàçìåð_øðèôòà, "Wingdings", Lime);
// 修改RSI计算部分 - 使用ATR加权RSI或标准RSI
if (Li_88 == 0 || Li_92 == 0) {
if (UseATR_RSI) {
irsi_240 = RSI_ATR(òàéìôðåéì_èíäèêàòîðà, RSI_Period, 0);
} else {
irsi_240 = iRSI(NULL, òàéìôðåéì_èíäèêàòîðà, RSI_Period, PRICE_CLOSE, 0);
}
}
// 在开仓条件中加入单边市场过滤
if (Li_96 == 0 && Ld_24 > ìàêñèìàëüíûé_óáûòîê && ðàçðåøèòü_ñäåëêè_Buy) {
// 单边市场过滤:如果是强下降趋势,避免开多单
if (UseTrendFilter && isTrending && trendDirection == -1) {
Comment("单边下降市场,避免开多单");
price_224 = 0;
} else {
if (Li_88 == 0) {
if (irsi_240 < çîíà_ïåðåïðîäàííîñòè || (!îòêðûòèå_1_îðäåðà_ïî_èíäèêàòó)) price_224 = NormalizeDouble(Ask + ïåðâûé_øàã * Point, Digits);
else price_224 = 0;
} else {
price_224 = NormalizeDouble(Ask + íå_ñòàâèòü_îðäåð_áëèæå * Point, Digits);
if (price_224 < NormalizeDouble(price_124 - ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits)) price_224 = NormalizeDouble(Ask + ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits);
}
}
if ((Li_88 == 0 || (price_116 != 0.0 && price_224 >= NormalizeDouble(price_116 + ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits) && îòêðûâàòü_îðäåðà_ïî_òðåíäó) || (price_124 != 0.0 &&
price_224 <= NormalizeDouble(price_124 - ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits)) )&& price_224 != 0.0) {
if (Li_88 == 0) lots_232 = îáúåì_îðäåðà;
else lots_232 = NormalizeDouble(îáúåì_îðäåðà * MathPow(óìíîæåíèå_îáúåìà_îðäåðà, Li_88) + Li_88 * äîáàâêà_ê_îáúåìó_îðäåðà, îêðóãëåíèå_ëîòîâ);
if ((lots_232 < AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED) && Li_88 > 0 )|| çàïðåò_ïåðâîãî_îðäåðà) {
if (OrderSend(Symbol(), OP_BUYSTOP, lots_232, price_224, G_slippage_316, 0, 0, "cm_EA_TSO", Magic, 0, Blue) == -1) Print("íåâîçìîæíî âûñòàâèòü îðäåð BUYSTOP Lot ", DoubleToStr(lots_232, 2), " Price ", price_224, " Ask ", Ask);
} else Comment("íåâîçìîæíî âûñòàâèòü Lot ", DoubleToStr(lots_232, 2));
}
}
if (Li_100 == 0 && Ld_16 > ìàêñèìàëüíûé_óáûòîê && ðàçðåøèòü_ñäåëêè_Sell) {
// 单边市场过滤:如果是强上升趋势,避免开空单
if (UseTrendFilter && isTrending && trendDirection == 1) {
Comment("单边上升市场,避免开空单");
price_224 = 0;
} else {
if (Li_92 == 0) {
if (irsi_240 > çîíà_ïåðåêóïëåííîñòè || (!îòêðûòèå_1_îðäåðà_ïî_èíäèêàòó)) price_224 = NormalizeDouble(Bid - ïåðâûé_øàã * Point, Digits);
else price_224 = 0;
} else {
price_224 = NormalizeDouble(Bid - íå_ñòàâèòü_îðäåð_áëèæå * Point, Digits);
if (price_224 < NormalizeDouble(price_132 + ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits)) price_224 = NormalizeDouble(Bid - ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits);
}
}
if ((Li_92 == 0 || (price_140 != 0.0 && price_224 <= NormalizeDouble(price_140 - ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits) && îòêðûâàòü_îðäåðà_ïî_òðåíäó) || (price_132 != 0.0 &&
price_224 >= NormalizeDouble(price_132 + ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits)) )&& price_224 != 0.0) {
if (Li_92 == 0) lots_232 = îáúåì_îðäåðà;
else lots_232 = NormalizeDouble(îáúåì_îðäåðà * MathPow(óìíîæåíèå_îáúåìà_îðäåðà, Li_92) + Li_92 * äîáàâêà_ê_îáúåìó_îðäåðà, îêðóãëåíèå_ëîòîâ);
if ((lots_232 < AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED) && Li_92 > 0 )|| çàïðåò_ïåðâîãî_îðäåðà) {
if (OrderSend(Symbol(), OP_SELLSTOP, lots_232, price_224, G_slippage_316, 0, 0, "cm_EA_TSO", Magic, 0, Red) == -1) Print("íåâîçìîæíî âûñòàâèòü îðäåð SELLSTOP Lot ", DoubleToStr(lots_232, 2), " Price ", price_224, " Bid ", Bid);
} else Comment("íåâîçìîæíî âûñòàâèòü Lot ", DoubleToStr(lots_232, 2));
}
}
ObjectSetText("Balance", StringConcatenate("Balance ", DoubleToStr(AccountBalance(), 2)), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
ObjectSetText("Equity", StringConcatenate("Equity ", DoubleToStr(AccountEquity(), 2)), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
ObjectSetText("FreeMargin", StringConcatenate("Free Margin ", DoubleToStr(AccountFreeMargin(), 2)), ðàçìåð_øðèôòà, "Arial", öâåò_âûâîäà_èíôîðìàöèè);
double Ld_8 = Ld_24 + Ld_16;
if (Ld_32 > 0.0) {
ObjectSetText("ProfitB", StringConcatenate("Buy ", Li_88, " Profit ", DoubleToStr(Ld_24, 2), " Lot = ", DoubleToStr(Ld_32, 2)), ðàçìåð_øðèôòà, "Arial", f0_11449(Ld_24 > 0.0,
65280, 255));
} else ObjectSetText("ProfitB", "", ðàçìåð_øðèôòà, "Arial", Gray);
if (Ld_40 > 0.0) {
ObjectSetText("ProfitS", StringConcatenate("Sell ", Li_92, " Profit ", DoubleToStr(Ld_16, 2), " Lot = ", DoubleToStr(Ld_40, 2)), ðàçìåð_øðèôòà, "Arial", f0_11449(Ld_16 > 0.0,
65280, 255));
} else ObjectSetText("ProfitS", "", ðàçìåð_øðèôòà, "Arial", Gray);
if (Ld_40 + Ld_32 > 0.0) ObjectSetText("Profit", StringConcatenate("Profit All ", DoubleToStr(Ld_8, 2)), ðàçìåð_øðèôòà, "Arial", f0_11449(Ld_8 >= 0.0, 32768, 255));
else ObjectSetText("Profit", "", ðàçìåð_øðèôòà, "Arial", Gray);
if (price_148 != 0.0 && ðàçðåøèòü_ñäåëêè_Buy) {
if (Li_88 == 0) price_224 = NormalizeDouble(Ask + ïåðâûé_øàã * Point, Digits);
else price_224 = NormalizeDouble(Ask + íå_ñòàâèòü_îðäåð_áëèæå * Point, Digits);
if ((((NormalizeDouble(price_148 - øàã_ïåðåìåùåíèÿ * Point, Digits) > price_224 && price_224 <= NormalizeDouble(price_124 - ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits) )||
price_124 == 0.0 || îòêðûâàòü_îðäåðà_ïî_òðåíäó )&& Li_88 == 0 )|| price_224 >= NormalizeDouble(price_116 + ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits) || price_224 <= NormalizeDouble(price_124 - ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point,
Digits)) {
if (!OrderModify(ticket_108, price_224, 0, 0, 0, White)) Print("Error ", GetLastError(), " Order Modify Buy OOP ", price_148, "->", price_224);
else Print("Order Buy Modify OOP ", price_0, "->", price_224);
}
}
if (price_156 != 0.0 && ðàçðåøèòü_ñäåëêè_Sell) {
if (Li_92 == 0) price_224 = NormalizeDouble(Bid - ïåðâûé_øàã * Point, Digits);
else price_224 = NormalizeDouble(Bid - íå_ñòàâèòü_îðäåð_áëèæå * Point, Digits);
if ((((NormalizeDouble(price_156 + øàã_ïåðåìåùåíèÿ * Point, Digits) < price_224 && price_224 >= NormalizeDouble(price_132 + ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits) )||
price_132 == 0.0 || îòêðûâàòü_îðäåðà_ïî_òðåíäó )&& Li_92 == 0 )|| price_224 <= NormalizeDouble(price_140 - ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits) || price_224 >= NormalizeDouble(price_132 +
ðàññòîÿíèå_ìåæäó_îðäåðàìè * Point, Digits)) {
if (!OrderModify(ticket_112, price_224, 0, 0, 0, White)) Print("Error ", GetLastError(), " Order Modify Sell OOP ", price_156, "->", price_224);
else Print("Order Sell Modify OOP ", price_0, "->", price_224);
}
}
return (0);
}
// 2208AB04CCD91A8303FE0D7679EA198F
int f0_1880(int Ai_0) {
int error_8;
int Li_12;
int cmd_16;
int count_24;
bool Li_4 = TRUE;
if ((!G_bool_292) || Key == 5 * G_acc_number_312 - Gi_308) {
while (true) {
for (int pos_20 = OrdersTotal() - 1; pos_20 >= 0; pos_20--) {
if (OrderSelect(pos_20, SELECT_BY_POS)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
cmd_16 = OrderType();
if ((cmd_16 == OP_BUY && Ai_0 == 1 )|| Ai_0 == 0) {
Li_4 = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), G_slippage_316, Blue);
if (Li_4) Comment("Çàêðûò îðäåð N ", OrderTicket(), " ïðèáûëü ", OrderProfit(), " ", TimeToStr(TimeCurrent(), TIME_SECONDS));
}
if ((cmd_16 == OP_SELL && Ai_0 == -1 )|| Ai_0 == 0) {
Li_4 = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), G_slippage_316, Red);
if (Li_4) Comment("Çàêðûò îðäåð N ", OrderTicket(), " ïðèáûëü ", OrderProfit(), " ", TimeToStr(TimeCurrent(), TIME_SECONDS));
}
if ((cmd_16 == OP_BUYSTOP && Ai_0 == 1 )|| Ai_0 == 0) Li_4 = OrderDelete(OrderTicket());
if ((cmd_16 == OP_SELLSTOP && Ai_0 == -1 )|| Ai_0 == 0) Li_4 = OrderDelete(OrderTicket());
if (!Li_4) {
error_8 = GetLastError();
if (error_8 >= 2/* COMMON_ERROR */) {
if (error_8 == 129/* INVALID_PRICE */) {
Comment("Íåïðàâèëüíàÿ öåíà ", TimeToStr(TimeCurrent(), TIME_SECONDS));
RefreshRates();
continue;
}
if (error_8 == 146/* TRADE_CONTEXT_BUSY */) {
if (!(IsTradeContextBusy())) continue;
Sleep(2000);
continue;
}
Comment("Îøèáêà ", error_8, " çàêðûòèÿ îðäåðà N ", OrderTicket(), " ", TimeToStr(TimeCurrent(), TIME_SECONDS));
}
}
}
}
}
count_24 = 0;
for (int pos_20 = 0; pos_20 < OrdersTotal(); pos_20++) {
if (OrderSelect(pos_20, SELECT_BY_POS)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
cmd_16 = OrderType();
if (((cmd_16 == OP_BUYSTOP || cmd_16 == OP_BUY )&& Ai_0 == 1 )|| Ai_0 == 0) count_24++;
if (((cmd_16 == OP_SELLSTOP || cmd_16 == OP_SELL )&& Ai_0 == -1 )|| Ai_0 == 0) count_24++;
}
}
}
if (count_24 == 0) break;
Li_12++;
if (Li_12 > 10) {
Alert(Symbol(), " Íå óäàëîñü çàêðûòü âñå ñäåëêè, îñòàëîñü åùå ", count_24);
return (0);
}
Sleep(1000);
RefreshRates();
if (!G_bool_292 || Key == 5 * G_acc_number_312 - Gi_308) continue;
break;
}
}
return (1);
}
// CB5FEB1B7314637725A2E73BDC9F7295
int f0_11449(bool Ai_0, int Ai_4, int Ai_8) {
if (Ai_0) return (Ai_4);
return (Ai_8);
}
// 93ADA40DA341D3F06C6B5392C2A501C5
int f0_8364() {
string str_concat_0 = StringConcatenate(TerminalPath(), CharToStr(92), "experts", CharToStr(92), WindowExpertName(), ".mq", DoubleToStr(4, 0));
if (_lopen(str_concat_0, 4) >= 0) {
_lclose(str_concat_0);
return (1);
}
return (0);
}
// 0E521811373FA5F0D1EE10BF0C823CF0
double f0_833(int Ai_0, double Ad_4, double A_pips_12) {
double price_20 = 0;
if (A_pips_12 > 2.0) {
if (Ai_0 == 1) price_20 = NormalizeDouble(Ad_4 - A_pips_12 * Point, Digits);
else price_20 = NormalizeDouble(Ad_4 + A_pips_12 * Point, Digits);
} else {
if (A_pips_12 == 2.0) {
if (Ai_0 == 1) {
for (int Li_32 = 1; Li_32 < 100; Li_32++) {
price_20 = iFractals(Symbol(), òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ, MODE_LOWER, Li_32);
if (price_20 != 0.0) {
price_20 -= NormalizeDouble(îòñòóï_îò_ôðàêòàëà_ñâå÷è * Point, Digits);
if (Ad_4 - Gi_304 * Point > price_20) break;
} else price_20 = 0;
}
ObjectDelete("FR Buy");
ObjectCreate("FR Buy", OBJ_ARROW, 0, Time[0], price_20 + Point, 0, 0, 0, 0);
ObjectSet("FR Buy", OBJPROP_ARROWCODE, 218);
ObjectSet("FR Buy", OBJPROP_COLOR, Red);
}
if (Ai_0 == -1) {
for (int Li_28 = 1; Li_28 < 100; Li_28++) {
price_20 = iFractals(Symbol(), òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ, MODE_UPPER, Li_28);
if (price_20 != 0.0) {
price_20 += NormalizeDouble(îòñòóï_îò_ôðàêòàëà_ñâå÷è * Point, Digits);
if (Ad_4 + Gi_304 * Point < price_20) break;
} else price_20 = 0;
}
ObjectDelete("FR Sell");
ObjectCreate("FR Sell", OBJ_ARROW, 0, Time[0], price_20, 0, 0, 0, 0);
ObjectSet("FR Sell", OBJPROP_ARROWCODE, 217);
ObjectSet("FR Sell", OBJPROP_COLOR, Red);
}
}
if (A_pips_12 == 1.0) {
if (Ai_0 == 1) {
for (int Li_32 = 1; Li_32 < 500; Li_32++) {
price_20 = NormalizeDouble(iLow(Symbol(), òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ, Li_32) - îòñòóï_îò_ôðàêòàëà_ñâå÷è * Point, Digits);
if (price_20 != 0.0) {
if (Ad_4 - Gi_304 * Point > price_20) break;
price_20 = 0;
}
}
ObjectDelete("FR Buy");
ObjectCreate("FR Buy", OBJ_ARROW, 0, iTime(Symbol(), òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ, 0), price_20 + Point, 0, 0, 0, 0);
ObjectSet("FR Buy", OBJPROP_ARROWCODE, 159);
ObjectSet("FR Buy", OBJPROP_COLOR, Red);
}
if (Ai_0 == -1) {
for (int Li_28 = 1; Li_28 < 500; Li_28++) {
price_20 = NormalizeDouble(iHigh(Symbol(), òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ, Li_28) + îòñòóï_îò_ôðàêòàëà_ñâå÷è * Point, Digits);
if (price_20 != 0.0) {
if (Ad_4 + Gi_304 * Point < price_20) break;
price_20 = 0;
}
}
ObjectDelete("FR Sell");
ObjectCreate("FR Sell", OBJ_ARROW, 0, iTime(Symbol(), òàéìôðåéì_ñâå÷åé_èëè_ôðàêòàëîâ, 0), price_20, 0, 0, 0, 0);
ObjectSet("FR Sell", OBJPROP_ARROWCODE, 159);
ObjectSet("FR Sell", OBJPROP_COLOR, Red);
}
}
}
if (Ai_0 == 1) {
if (price_20 != 0.0) {
ObjectDelete("SL Buy");
ObjectCreate("SL Buy", OBJ_ARROW, 0, Time[0] + 60 * Period(), price_20, 0, 0, 0, 0);
ObjectSet("SL Buy", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
ObjectSet("SL Buy", OBJPROP_COLOR, Blue);
}
if (Gi_304 > 0) {
ObjectDelete("STOPLEVEL-");
ObjectCreate("STOPLEVEL-", OBJ_ARROW, 0, Time[0] + 60 * Period(), Ad_4 - Gi_304 * Point, 0, 0, 0, 0);
ObjectSet("STOPLEVEL-", OBJPROP_ARROWCODE, 4);
ObjectSet("STOPLEVEL-", OBJPROP_COLOR, Blue);
}
}
if (Ai_0 == -1) {
if (price_20 != 0.0) {
ObjectDelete("SL Sell");
ObjectCreate("SL Sell", OBJ_ARROW, 0, Time[0] + 60 * Period(), price_20, 0, 0, 0, 0);
ObjectSet("SL Sell", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
ObjectSet("SL Sell", OBJPROP_COLOR, Pink);
}
if (Gi_304 > 0) {
ObjectDelete("STOPLEVEL+");
ObjectCreate("STOPLEVEL+", OBJ_ARROW, 0, Time[0] + 60 * Period(), Ad_4 + Gi_304 * Point, 0, 0, 0, 0);
ObjectSet("STOPLEVEL+", OBJPROP_ARROWCODE, 4);
ObjectSet("STOPLEVEL+", OBJPROP_COLOR, Pink);
}
}
return (price_20);
}
// 4CEF47202C318359E58492821436342B
int f0_4285(int Ai_0) {
if (Ai_0 > 43200) return (0);
if (Ai_0 > 10080) return (43200);
if (Ai_0 > 1440) return (10080);
if (Ai_0 > 240) return (1440);
if (Ai_0 > 60) return (240);
if (Ai_0 > 30) return (60);
if (Ai_0 > 15) return (30);
if (Ai_0 > 5) return (15);
if (Ai_0 > 1) return (5);
if (Ai_0 == 1) return (1);
if (Ai_0 == 0) return (Period());
return (0);}
// A9E80DEDFA897CFD8F98BAD01077E0A7
string f0_9613(int Ai_0) {
if (Ai_0 == 1) return ("M1");
if (Ai_0 == 5) return ("M5");
if (Ai_0 == 15) return ("M15");
if (Ai_0 == 30) return ("M30");
if (Ai_0 == 60) return ("H1");
if (Ai_0 == 240) return ("H4");
if (Ai_0 == 1440) return ("D1");
if (Ai_0 == 10080) return ("W1");
if (Ai_0 == 43200) return ("MN1");
return ("îøèáêà ïåðèîäà");
}
// DABC5DBF75D151A587AD2276CD6849E6
void f0_12282(string A_name_0, string A_text_8, int A_x_16, int A_y_20, color A_color_24) {
if (ObjectFind(A_name_0) == -1) {
ObjectCreate(A_name_0, OBJ_LABEL, 0, 0, 0);
ObjectSet(A_name_0, OBJPROP_CORNER, 1);
ObjectSet(A_name_0, OBJPROP_XDISTANCE, A_x_16);
ObjectSet(A_name_0, OBJPROP_YDISTANCE, A_y_20);
}
ObjectSetText(A_name_0, A_text_8, ðàçìåð_øðèôòà, "Arial", A_color_24);
} 纠错