TRUE Forex

Просмотр кода форекс советника ZigZagTrader v4~.mq4

/*
   G e n e r a t e d  by ex4-to-mq4 decompiler FREEWARE 4.0.509.5
   Website:  H T TP:/ / wW w .ME TA quo t e S. net
   E-mail : SUppoRT @M e TA q UOt Es. n eT
*/
#property copyright "Copyright © 2010, Vladimir Hlystov"
#property link      "cmillion@narod.ru"

extern string Managing.capital = " If a lot = 0, then the lot is calculated as a percentage(LOTrisk) of available funds";
extern double LOT = 0.1;
extern double LOTrisk = 5.0;
extern int takeprofit = 500;
extern double K_lot = 2.0;
extern double Maxlot = 5.0;
extern int MaxRisk = 100;
extern string Away.from.the = " fractal, candles or Zigzag Отступ от фрактала";
extern int Delta = 100;
extern string Options.Trailing = "(0)-notTral (-1)-fractals (-2)-candl (-3)-ZigZag (>0)-PipsTral";
extern int TrailingStop = 100;
extern string Duration.of.open.orders = " to close to the minimum profit";
extern int AllTimeStopOrders = 10;
extern string Time.Work = "RestDay - weekday (0-Sunday,1,2,3,4,5,6); TimeStart,TimeEnd - (0-24)";
extern int RestDay_I = 0;
extern int RestDay_II = 0;
extern int TimeStart = 0;
extern int TimeEnd = 24;
extern string Options.Zigzag = " ";
extern int Zigzag_Depth = 12;
extern int Zigzag_Deviation = 5;
extern int Zigzag_Backstep = 3;
extern string Options.Visualization = " ";
color G_color_212 = Silver;
extern bool DrawInfo = TRUE;
extern int Magic = 0;
double Gd_224;
double Gd_232;
double G_price_240;
double G_price_248;
double G_price_256;
double G_price_264;
int Gi_272;
double Gd_276;
double Gd_284;
double Gd_292;
double Gd_300;
double Gd_308;
int Gi_316;
int Gi_320;
int Gi_324;
int Gi_328;

// E37F0136AA3FFAF149B351F6A4C948E9
int init() {
   Gd_232 = MarketInfo(Symbol(), MODE_MINLOT);
   Gd_224 = MarketInfo(Symbol(), MODE_MAXLOT);
   if (Maxlot > Gd_224) Maxlot = Gd_224;
   if (Gd_232 == 0.01) Gi_272 = 2;
   if (Gd_232 > 0.01) Gi_272 = 1;
   if (Gd_232 > 0.1) Gi_272 = 0;
   if (DrawInfo) {
      ObjectCreate("БАЛАНС", OBJ_LABEL, 0, 0, 0);
      ObjectSet("БАЛАНС", OBJPROP_CORNER, 1);
      ObjectSet("БАЛАНС", OBJPROP_XDISTANCE, 10);
      ObjectSet("БАЛАНС", OBJPROP_YDISTANCE, 25);
      ObjectCreate("доход", OBJ_LABEL, 0, 0, 0);
      ObjectSet("доход", OBJPROP_CORNER, 1);
      ObjectSet("доход", OBJPROP_XDISTANCE, 10);
      ObjectSet("доход", OBJPROP_YDISTANCE, 55);
      ObjectCreate("доходS", OBJ_LABEL, 0, 0, 0);
      ObjectSet("доходS", OBJPROP_CORNER, 1);
      ObjectSet("доходS", OBJPROP_XDISTANCE, 10);
      ObjectSet("доходS", OBJPROP_YDISTANCE, 35);
      ObjectCreate("доходB", OBJ_LABEL, 0, 0, 0);
      ObjectSet("доходB", OBJPROP_CORNER, 1);
      ObjectSet("доходB", OBJPROP_XDISTANCE, 10);
      ObjectSet("доходB", OBJPROP_YDISTANCE, 45);
   }
   return (0);
}

// 52D46093050F38C27267BCE42543EF60
int deinit() {
   return (0);
}

// EA2B2676C28C0DB26D39331A336C6B92
int start() {
   string Ls_unused_12;
   string name_20;
   bool Li_36;
   double lots_40;
   double Ld_48;
   double Ld_56;
   double Ld_64;
   double Ld_72;
   double Ld_88;
   double Ld_96;
   double order_open_price_104;
   double price_120;
   double Ld_128;
   double price_136;
   double order_lots_144;
   double order_lots_152;
   int ticket_160;
   int ticket_164;
   double order_lots_168;
   double order_lots_176;
   double order_lots_184;
   int spread_28 = MarketInfo(Symbol(), MODE_SPREAD);
   int hour_32 = Hour();
   if (hour_32 >= TimeStart && hour_32 < TimeEnd) Li_36 = TRUE;
   else {
      Li_36 = FALSE;
      Comment("Торговля запрещена по времени");
   }
   if (DayOfWeek() == RestDay_I || DayOfWeek() == RestDay_II) {
      Li_36 = FALSE;
      Comment("Торговля запрещена в этот день недели");
   }
   Gd_224 = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED) - Gd_232, Gi_272);
   if (Gd_224 < 0.0) Gd_224 = 0;
   if (Gd_224 > MarketInfo(Symbol(), MODE_MAXLOT)) Gd_224 = MarketInfo(Symbol(), MODE_MAXLOT);
   if (LOT != 0.0) {
      if (LOT > Gd_224) {
         if (LOT < Gd_232) lots_40 = 0;
         else lots_40 = Gd_232;
      } else lots_40 = LOT;
   } else lots_40 = NormalizeDouble(Gd_224 * LOTrisk / 100.0, Gi_272);
   if (lots_40 < Gd_232) lots_40 = Gd_232;
   if (Gd_224 < Gd_232) lots_40 = 0;
   Gd_276 = MarketInfo(Symbol(), MODE_STOPLEVEL);
   if (takeprofit < Gd_276 && takeprofit != 0) takeprofit = Gd_276;
   if (DrawInfo) {
      ObjectDelete("STOPLEVEL_Up");
      ObjectCreate("STOPLEVEL_Up", OBJ_ARROW, 0, Time[0], Ask + Gd_276 * Point, 0, 0, 0, 0);
      ObjectSet("STOPLEVEL_Up", OBJPROP_ARROWCODE, 4);
      ObjectSet("STOPLEVEL_Up", OBJPROP_COLOR, Aqua);
      ObjectDelete("STOPLEVEL_Dn");
      ObjectCreate("STOPLEVEL_Dn", OBJ_ARROW, 0, Time[0], Bid - Gd_276 * Point, 0, 0, 0, 0);
      ObjectSet("STOPLEVEL_Dn", OBJPROP_ARROWCODE, 4);
      ObjectSet("STOPLEVEL_Dn", OBJPROP_COLOR, DeepPink);
   }
   int count_80 = 0;
   for (int Li_84 = 1; Li_84 < 100; Li_84++) {
      Ld_48 = NormalizeDouble(iFractals(NULL, 0, MODE_UPPER, Li_84), Digits);
      if (Ld_48 != 0.0) {
         Ld_48 = NormalizeDouble(iCustom(NULL, 0, "Zigzag", Zigzag_Depth, Zigzag_Deviation, Zigzag_Backstep, 0, Li_84), Digits);
         if (Ld_48 != 0.0 && count_80 == 0) {
            count_80++;
            Ld_64 = Ld_48;
            Ld_48 = 0;
            continue;
         }
         if (Ld_48 != 0.0 && count_80 > 0 && Ld_64 <= Ld_48) {
            Ld_48 += Delta * Point;
            if (Ask + Gd_276 * Point < Ld_48) break;
         }
         Ld_48 = 0;
      }
   }
   count_80 = 0;
   for (Li_84 = 1; Li_84 < 100; Li_84++) {
      Ld_56 = NormalizeDouble(iFractals(NULL, 0, MODE_LOWER, Li_84), Digits);
      if (Ld_56 != 0.0) {
         Ld_56 = NormalizeDouble(iCustom(NULL, 0, "Zigzag", Zigzag_Depth, Zigzag_Deviation, Zigzag_Backstep, 0, Li_84), Digits);
         if (Ld_48 != 0.0 && count_80 == 0) {
            count_80++;
            Ld_72 = Ld_56;
            Ld_56 = 0;
            continue;
         }
         if (Ld_56 != 0.0 && count_80 > 0 && Ld_72 >= Ld_56) {
            Ld_56 -= Delta * Point;
            if (Bid - Gd_276 * Point > Ld_56) break;
         }
         Ld_56 = 0;
      }
   }
   double Ld_112 = 1000000000;
   Gi_316 = 0;
   Gi_320 = 0;
   for (Li_84 = 0; Li_84 < OrdersTotal(); Li_84++) {
      if (OrderSelect(Li_84, SELECT_BY_POS, MODE_TRADES) == TRUE) {
         order_open_price_104 = OrderOpenPrice();
         if (Magic == OrderMagicNumber() && OrderSymbol() == Symbol()) {
            if (OrderType() == OP_BUYSTOP) {
               Ld_88 = order_open_price_104;
               ticket_160 = OrderTicket();
               order_lots_168 = OrderLots();
            }
            if (OrderType() == OP_SELLSTOP) {
               Ld_96 = order_open_price_104;
               ticket_164 = OrderTicket();
               order_lots_176 = OrderLots();
            }
            if (OrderType() == OP_BUY) {
               Gi_316 = Gi_316 + TimeCurrent() - OrderOpenTime();
               if (Ld_112 > order_open_price_104) Ld_112 = order_open_price_104;
               Ld_128 = order_open_price_104;
               order_lots_144 = OrderLots();
               if (DrawInfo && (!IsTesting())) {
                  name_20 = "ордер Bay  " + OrderTicket();
                  ObjectDelete(name_20);
                  ObjectDelete(name_20 + " з");
                  ObjectCreate(name_20, OBJ_TREND, 0, OrderOpenTime(), order_open_price_104, Time[0], Bid);
                  ObjectSet(name_20, OBJPROP_COLOR, LightSkyBlue);
                  ObjectCreate(name_20 + " з", OBJ_ARROW, 0, Time[0], Bid, 0, 0, 0, 0);
                  ObjectSet(name_20, OBJPROP_STYLE, STYLE_DOT);
                  ObjectSet(name_20, OBJPROP_RAY, FALSE);
                  ObjectSet(name_20 + " з", OBJPROP_ARROWCODE, 3);
                  ObjectSet(name_20 + " з", OBJPROP_COLOR, G_color_212);
               }
            }
            if (OrderType() == OP_SELL) {
               Gi_320 = Gi_320 + TimeCurrent() - OrderOpenTime();
               if (price_120 < order_open_price_104) price_120 = order_open_price_104;
               price_136 = order_open_price_104;
               order_lots_152 = OrderLots();
               if (DrawInfo && (!IsTesting())) {
                  name_20 = "ордер Sell " + OrderTicket();
                  ObjectDelete(name_20);
                  ObjectDelete(name_20 + " з");
                  ObjectCreate(name_20, OBJ_TREND, 0, OrderOpenTime(), order_open_price_104, Time[0], Ask);
                  ObjectSet(name_20, OBJPROP_COLOR, Pink);
                  ObjectCreate(name_20 + " з", OBJ_ARROW, 0, Time[0], Ask, 0, 0, 0, 0);
                  ObjectSet(name_20, OBJPROP_STYLE, STYLE_DOT);
                  ObjectSet(name_20, OBJPROP_RAY, FALSE);
                  ObjectSet(name_20 + " з", OBJPROP_ARROWCODE, 3);
                  ObjectSet(name_20 + " з", OBJPROP_COLOR, G_color_212);
               }
            }
         }
      }
   }
   if (Ld_112 == D'09.09.2001 04:46:40' && price_120 == 0.0 && order_lots_168 != order_lots_176) f0_3();
   if (order_lots_184 < order_lots_144) order_lots_184 = order_lots_144;
   if (order_lots_184 < order_lots_152) order_lots_184 = order_lots_152;
   if (Ld_88 - Point > Ld_48 || Ld_88 == 0.0 && Ld_48 != 0.0) {
      if (MathAbs(Ld_128 - Ld_48) / Point >= spread_28) {
         if (ticket_160 != 0) {
            OrderDelete(ticket_160, Blue);
            Print("удаление ", ticket_160, " StopOrderUp ", Ld_88, " FrUp ", Ld_48);
            Sleep(500);
         }
         if (Ld_128 != 0.0) {
            lots_40 = NormalizeDouble(order_lots_184 * K_lot, Gi_272);
            if (lots_40 > Maxlot) lots_40 = Maxlot;
         }
         if (lots_40 != 0.0) {
            if (Li_36 && Gi_328 != Time[0]) {
               if (OrderSend(Symbol(), OP_BUYSTOP, lots_40, NormalizeDouble(Ld_48, Digits), 3, 0, 0, 0, Magic, 0, Blue) == -1) Print("Ошибка открытия BUYSTOP ", f0_6(0/* NO_ERROR */), "   ", Symbol(), " Тек.цена ", Ask, " Lot ", lots_40, " FrUp ", Ld_48);
               else Gi_328 = Time[0];
            }
         } else Comment(Symbol(), "BUYSTOP недостаточно средств Lot=", lots_40, " MAXLOT ", Gd_224, "  MinLot ", Gd_232);
      }
   }
   if (Ld_96 + Point < Ld_56) {
      if (MathAbs(price_136 - Ld_56) / Point >= spread_28) {
         if (ticket_164 != 0) {
            OrderDelete(ticket_164, Red);
            Print("удаление ", ticket_164, " StopOrderDn ", Ld_96, " FrDn ", Ld_56);
            Sleep(500);
         }
         if (price_136 != 0.0) {
            lots_40 = NormalizeDouble(order_lots_184 * K_lot, Gi_272);
            if (lots_40 > Maxlot) lots_40 = Maxlot;
         }
         if (lots_40 != 0.0) {
            if (Li_36 && Gi_324 != Time[0]) {
               if (OrderSend(Symbol(), OP_SELLSTOP, lots_40, NormalizeDouble(Ld_56, Digits), 3, 0, 0, 0, Magic, 0, Red) == -1) Print("Ошибка открытия SELLSTOP ", f0_6(0/* NO_ERROR */), "   ", Symbol(), " Тек.цена ", Bid, " Lot ", lots_40, " FrDn ", Ld_56);
               else Gi_324 = Time[0];
            }
         } else Comment(Symbol(), " SELLSTOP недостаточно средств Lot=", lots_40, " MAXLOT ", Gd_224, "  MinLot ", Gd_232);
      }
   }
   f0_2();
   f0_5();
   if (takeprofit != 0) f0_4();
   if (Gi_316 + Gi_320 > 3600 * AllTimeStopOrders && AccountProfit() > 0.0) f0_1(100);
   return (0);
}

// 83F5C5289426296951D2B9F35FE0FED5
void f0_4() {
   int cmd_0;
   int ticket_4;
   bool bool_8;
   double order_takeprofit_12;
   for (int pos_20 = 0; pos_20 < OrdersTotal(); pos_20++) {
      if (OrderSelect(pos_20, SELECT_BY_POS) == TRUE) {
         cmd_0 = OrderType();
         if (cmd_0 < OP_BUYLIMIT && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
            order_takeprofit_12 = OrderTakeProfit();
            ticket_4 = OrderTicket();
            if (cmd_0 == OP_BUY && MathAbs(order_takeprofit_12 - G_price_240) / Point > Gd_276) {
               if (G_price_240 > Ask + Gd_276 * Point && G_price_240 > order_takeprofit_12) {
                  bool_8 = OrderModify(ticket_4, OrderOpenPrice(), OrderStopLoss(), G_price_240, 0, White);
                  Comment("TrailingStop ", ticket_4, " ", TimeToStr(TimeCurrent(), TIME_MINUTES));
                  if (!bool_8) Print("Error order ", ticket_4, " TakeProfit ", f0_6(0/* NO_ERROR */), "   ", Symbol(), "   TP ", G_price_240);
               }
            }
            if (cmd_0 == OP_SELL && MathAbs(order_takeprofit_12 - G_price_248) / Point > Gd_276) {
               if (G_price_248 < Bid - Gd_276 * Point && G_price_248 < order_takeprofit_12 || order_takeprofit_12 == 0.0) {
                  bool_8 = OrderModify(ticket_4, OrderOpenPrice(), OrderStopLoss(), G_price_248, 0, White);
                  Comment("TrailingStop " + ticket_4, " ", TimeToStr(TimeCurrent(), TIME_MINUTES));
                  if (!bool_8) Print("Error order ", ticket_4, " TakeProfit ", f0_6(0/* NO_ERROR */), "   ", Symbol(), "   TP ", G_price_248);
               }
            }
         }
      }
   }
}

// 3AB2799732588E34138D987B460B8019
void f0_2() {
   int cmd_0;
   int ticket_4;
   bool bool_8;
   double Ld_12;
   double order_stoploss_20;
   double order_open_price_28;
   double order_takeprofit_36;
   for (int pos_44 = 0; pos_44 < OrdersTotal(); pos_44++) {
      if (OrderSelect(pos_44, SELECT_BY_POS) == TRUE) {
         cmd_0 = OrderType();
         if (cmd_0 < OP_BUYLIMIT && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
            order_stoploss_20 = OrderStopLoss();
            order_open_price_28 = OrderOpenPrice();
            ticket_4 = OrderTicket();
            if (cmd_0 == OP_BUY) {
               Ld_12 = f0_0(1, Bid - Gd_276 * Point, TrailingStop);
               order_takeprofit_36 = OrderTakeProfit();
               if (Ld_12 > G_price_256 && Ld_12 < Bid - Gd_276 * Point) {
                  if (Ld_12 > order_stoploss_20 && G_price_256 != 0.0) {
                     bool_8 = OrderModify(ticket_4, order_open_price_28, NormalizeDouble(Ld_12, Digits), order_takeprofit_36, 0, White);
                     Comment("TrailingStop ", ticket_4, " ", TimeToStr(TimeCurrent(), TIME_MINUTES));
                     Sleep(500);
                     if (!bool_8) Print("Error order ", ticket_4, " TrailingStop ", f0_6(0/* NO_ERROR */), "   ", Symbol(), "   SL ", Ld_12, "   TP ", order_takeprofit_36);
                  }
               }
            }
            if (cmd_0 == OP_SELL) {
               Ld_12 = f0_0(-1, Ask + Gd_276 * Point, TrailingStop);
               if (Ld_12 != 0.0) {
                  order_takeprofit_36 = OrderTakeProfit();
                  if (Ld_12 < G_price_264 && Ld_12 > Ask + Gd_276 * Point) {
                     if (Ld_12 < order_stoploss_20 || order_stoploss_20 == 0.0) {
                        bool_8 = OrderModify(ticket_4, order_open_price_28, NormalizeDouble(Ld_12, Digits), order_takeprofit_36, 0, White);
                        Comment("TrailingStop " + ticket_4, " ", TimeToStr(TimeCurrent(), TIME_MINUTES));
                        Sleep(500);
                        if (!bool_8) Print("Error order ", ticket_4, " TrailingStop ", f0_6(0/* NO_ERROR */), "   ", Symbol(), "   SL ", Ld_12, "   TP ", order_takeprofit_36);
                     }
                  }
               }
            }
         }
      }
   }
}

// 0E521811373FA5F0D1EE10BF0C823CF0
double f0_0(int Ai_0, double Ad_4, int Ai_12) {
   double Ld_ret_16;
   if (Ai_12 == 0) return (0);
   if (Ai_12 > 0) {
      if (Ai_0 == 1) Ld_ret_16 = Bid - Ai_12 * Point;
      else Ld_ret_16 = Ask + Ai_12 * Point;
   }
   if (Ai_12 == -1) {
      if (Ai_0 == 1) {
         for (int Li_24 = 2; Li_24 < 100; Li_24++) {
            Ld_ret_16 = iFractals(NULL, 0, MODE_LOWER, Li_24);
            if (Ld_ret_16 != 0.0) {
               Ld_ret_16 -= Delta * Point;
               if (Ad_4 > Ld_ret_16) break;
            } else Ld_ret_16 = 0;
         }
      }
      if (Ai_0 == -1) {
         for (Li_24 = 2; Li_24 < 100; Li_24++) {
            Ld_ret_16 = iFractals(NULL, 0, MODE_UPPER, Li_24);
            if (Ld_ret_16 != 0.0) {
               Ld_ret_16 += Delta * Point;
               if (Ad_4 < Ld_ret_16) break;
            } else Ld_ret_16 = 0;
         }
      }
   }
   if (Ai_12 == -2) {
      if (Ai_0 == 1) {
         for (Li_24 = 1; Li_24 < 100; Li_24++) {
            Ld_ret_16 = iLow(NULL, 0, Li_24);
            if (Ld_ret_16 != 0.0) {
               Ld_ret_16 -= Delta * Point;
               if (Ad_4 > Ld_ret_16) break;
            } else Ld_ret_16 = 0;
         }
      }
      if (Ai_0 == -1) {
         for (Li_24 = 1; Li_24 < 100; Li_24++) {
            Ld_ret_16 = iHigh(NULL, 0, Li_24);
            if (Ld_ret_16 != 0.0) {
               Ld_ret_16 += Delta * Point;
               if (Ad_4 < Ld_ret_16) break;
            } else Ld_ret_16 = 0;
         }
      }
   }
   if (Ai_12 == -3) {
      if (Ai_0 == 1) {
         for (Li_24 = 2; Li_24 < 100; Li_24++) {
            Ld_ret_16 = iCustom(NULL, 0, "Zigzag", Zigzag_Depth, Zigzag_Deviation, Zigzag_Backstep, 0, Li_24);
            if (Ld_ret_16 != 0.0) {
               Ld_ret_16 -= Delta * Point;
               if (Ad_4 > Ld_ret_16) break;
            } else Ld_ret_16 = 0;
         }
      }
      if (Ai_0 == -1) {
         for (Li_24 = 2; Li_24 < 100; Li_24++) {
            Ld_ret_16 = iCustom(NULL, 0, "Zigzag", Zigzag_Depth, Zigzag_Deviation, Zigzag_Backstep, 0, Li_24);
            if (Ld_ret_16 != 0.0) {
               Ld_ret_16 += Delta * Point;
               if (Ad_4 < Ld_ret_16) break;
            } else Ld_ret_16 = 0;
         }
      }
   }
   return (Ld_ret_16);
}

// A4FE30EBC3C35A417D1DE6E660341002
void f0_5() {
   int Li_0;
   int Li_4;
   double order_open_price_8;
   double Ld_16;
   double Ld_24;
   double order_lots_32;
   double Ld_52;
   double Ld_60;
   color color_68;
   if (takeprofit != 0) {
      Gd_284 = 0;
      Gd_292 = 0;
      G_price_256 = 0;
      G_price_264 = 0;
      Gd_300 = 0;
      Gd_308 = 0;
      for (int pos_48 = 0; pos_48 < OrdersTotal(); pos_48++) {
         if (OrderSelect(pos_48, SELECT_BY_POS, MODE_TRADES) == TRUE) {
            if (Magic == OrderMagicNumber() && OrderSymbol() == Symbol()) {
               order_open_price_8 = OrderOpenPrice();
               order_lots_32 = OrderLots();
               if (OrderType() == OP_BUY) {
                  Ld_16 += order_open_price_8 * order_lots_32;
                  Li_0++;
                  Gd_292 += order_lots_32;
                  Gd_308 += OrderProfit();
               }
               if (OrderType() == OP_SELL) {
                  Ld_24 += order_open_price_8 * order_lots_32;
                  Li_4++;
                  Gd_284 += order_lots_32;
                  Gd_300 += OrderProfit();
               }
            }
         }
      }
      if (Li_0 == 0) G_price_240 = NormalizeDouble(Ask + takeprofit * Point, Digits);
      else G_price_240 = NormalizeDouble(Ld_16 / Gd_292 + takeprofit * Point, Digits);
      if (Li_4 == 0) G_price_248 = NormalizeDouble(Bid - takeprofit * Point, Digits);
      else G_price_248 = NormalizeDouble(Ld_24 / Gd_284 - takeprofit * Point, Digits);
      if (G_price_240 < Ask + Gd_276 * Point) G_price_240 = Ask + Gd_276 * Point;
      if (G_price_248 > Bid - Gd_276 * Point) G_price_248 = Bid - Gd_276 * Point;
      if (DrawInfo) {
         ObjectDelete("SLb");
         ObjectDelete("SLb_");
      }
      if (Li_0 != 0) {
         G_price_256 = Ld_16 / Gd_292;
         if (DrawInfo) {
            ObjectCreate("SLb", OBJ_ARROW, 0, Time[0], G_price_240, 0, 0, 0, 0);
            ObjectSet("SLb", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
            ObjectSet("SLb", OBJPROP_COLOR, Blue);
            ObjectCreate("SLb_", OBJ_ARROW, 0, Time[0], G_price_256, 0, 0, 0, 0);
            ObjectSet("SLb_", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
            ObjectSet("SLb_", OBJPROP_COLOR, Navy);
         }
      }
      if (DrawInfo) {
         ObjectDelete("SLs");
         ObjectDelete("SLs_");
      }
      if (Li_4 != 0) {
         G_price_264 = Ld_24 / Gd_284;
         if (DrawInfo) {
            ObjectCreate("SLs", OBJ_ARROW, 0, Time[0], G_price_248, 0, 0, 0, 0);
            ObjectSet("SLs", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
            ObjectSet("SLs", OBJPROP_COLOR, Red);
            ObjectCreate("SLs_", OBJ_ARROW, 0, Time[0], G_price_264, 0, 0, 0, 0);
            ObjectSet("SLs_", OBJPROP_ARROWCODE, SYMBOL_RIGHTPRICE);
            ObjectSet("SLs_", OBJPROP_COLOR, Maroon);
         }
      }
      Ld_52 = AccountBalance();
      if (DrawInfo) {
         Ld_60 = Gd_308 + Gd_300;
         color_68 = Green;
         ObjectSetText("БАЛАНС", "  БАЛАНС = " + DoubleToStr(Ld_52, 2) + " |своб " + DoubleToStr(AccountFreeMargin(), 2) + " | " + DoubleToStr(Gd_224, 2) + " | " + WindowFirstVisibleBar(),
            8, "Arial", G_color_212);
         if (Ld_60 < 0.0) color_68 = Red;
         ObjectSetText("доход", StringConcatenate("Общий доход = ", DoubleToStr(Ld_60, 2)), 8, "Arial", color_68);
         if (Gd_300 < 0.0) color_68 = Red;
         else color_68 = Green;
         ObjectSetText("доходS", StringConcatenate(Li_4, " SELL ", DoubleToStr(Gd_284, Gi_272), " лот  доход = ", DoubleToStr(Gd_300, 2), "     Т ", TimeToStr(Gi_320, TIME_MINUTES)),
            8, "Arial", color_68);
         if (Gd_308 < 0.0) color_68 = Red;
         else color_68 = Green;
         ObjectSetText("доходB", StringConcatenate(Li_0, " BUY  ", DoubleToStr(Gd_292, Gi_272), " лот  доход = ", DoubleToStr(Gd_308, 2), "     Т ", TimeToStr(Gi_316, TIME_MINUTES)),
            8, "Arial", color_68);
      }
      if (-(Gd_308 + Gd_300) > Ld_52 * MaxRisk / 100.0) f0_1(100);
   }
}

// EACBC5153792350B62D432B45DA8471C
string f0_6(int A_error_0) {
   if (A_error_0 == 0/* NO_ERROR */) A_error_0 = GetLastError();
   switch (A_error_0) {
   case 0/* NO_ERROR */: return/*(WARN)*/;
   case 1/* NO_RESULT */: return/*(WARN)*/;
   case 2/* COMMON_ERROR */:
      return ("Общая ошибка  ");
   case 3/* INVALID_TRADE_PARAMETERS */:
      return ("неправильные параметры   ");
   case 6/* NO_CONNECTION */:
      return ("Нет связи с торговым сервером   ");
   case 130/* INVALID_STOPS */:
      return ("Неправильные стопы   ");
   case 131/* INVALID_TRADE_VOLUME */:
      return ("Неправильный объем ");
   case 133/* TRADE_DISABLED */:
      return ("Торговля запрещена ");
   case 134/* NOT_ENOUGH_MONEY */:
      return ("Недостаточно денег   ");
   case 136/* OFF_QUOTES */:
      return ("Нет цен ");
   case 146/* TRADE_CONTEXT_BUSY */:
      return ("Подсистема торговли занята ");
   case 129/* INVALID_PRICE */:
      return ("Неправильная цена ");
   case 131/* INVALID_TRADE_VOLUME */:
      return ("Неправильный объем ");
   case 4051/* INVALID_FUNCTION_PARAMETER_VALUE */:
      return ("Недопустимое значение параметра функции ");
   case 4059/* FUNCTION_NOT_ALLOWED_IN_TESTING_MODE */:
      return ("Функция не разрешена в тестовом режиме");
   case 4063/* INTEGER_PARAMETER_EXPECTED */:
      return ("Ожидается параметр типа integer ");
   case 4105/* NO_ORDER_SELECTED */:
      return ("Ни один ордер не выбран ");
   case 4107/* INVALID_PRICE_PARAM */:
      return ("Неправильный параметр цены для торговой функции ");
   case 4108/* INVALID_TICKET */:
      return ("Неверный номер тикета ");
   case 4109/* TRADE_NOT_ALLOWED */:
      return ("Торговля не разрешена. Необходимо включить опцию `Разрешить советнику торговать` в свойствах эксперта.");
   case 4200/* OBJECT_ALREADY_EXISTS */:
      return ("Объект уже существует ");
   }
   return (StringConcatenate("Error  ", A_error_0, "   "));
}

// 13A2725CD087895B12CCDC6D026BFC6C
int f0_1(int A_cmd_0) {
   int error_8;
   int Li_12;
   string str_concat_16;
   int count_28;
   bool is_closed_4 = TRUE;
   while (true) {
      for (int pos_24 = 0; pos_24 < OrdersTotal(); pos_24++) {
         if (OrderSelect(pos_24, SELECT_BY_POS)) {
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
               if (A_cmd_0 == OP_BUY || A_cmd_0 == 100 && OrderType() == OP_BUY) {
                  is_closed_4 = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid, Digits), 3, Red);
                  if (is_closed_4) {
                     str_concat_16 = StringConcatenate(str_concat_16, "Закрыт ордер N ", OrderTicket(), "  прибыль ", OrderProfit(), "     ", TimeToStr(TimeCurrent(), TIME_MINUTES), 
                     "\n");
                  }
               }
               if (A_cmd_0 == OP_SELL || A_cmd_0 == 100 && OrderType() == OP_SELL) {
                  is_closed_4 = OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask, Digits), 3, Red);
                  if (is_closed_4) {
                     str_concat_16 = StringConcatenate(str_concat_16, "Закрыт ордер N ", OrderTicket(), "  прибыль ", OrderProfit(), "     ", TimeToStr(TimeCurrent(), TIME_MINUTES), 
                     "\n");
                  }
               }
               if (!is_closed_4) {
                  pos_24--;
                  error_8 = GetLastError();
                  if (error_8 >= 2/* COMMON_ERROR */) {
                     if (error_8 == 129/* INVALID_PRICE */) {
                        Sleep(5000);
                        RefreshRates();
                        continue;
                     }
                     if (error_8 == 146/* TRADE_CONTEXT_BUSY */) {
                        if (!(!IsTesting())) continue;
                        if (!(IsTradeContextBusy())) continue;
                        Sleep(2000);
                        continue;
                     }
                     str_concat_16 = StringConcatenate("Ошибка закрытия ордера N ", OrderTicket(), "   ", f0_6(error_8), "   ", TimeToStr(TimeCurrent(), TIME_MINUTES), 
                     "\n");
                  }
               }
            }
         }
      }
      Comment(str_concat_16);
      count_28 = 0;
      str_concat_16 = "";
      for (pos_24 = 0; pos_24 < OrdersTotal(); pos_24++) {
         if (OrderSelect(pos_24, SELECT_BY_POS)) {
            if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == A_cmd_0 || A_cmd_0 == 100) {
               str_concat_16 = StringConcatenate(str_concat_16, OrderTicket(), 
               "\n");
               count_28++;
            }
         }
      }
      if (count_28 == 0) break;
      Sleep(2000);
      Comment("Не все ордера удалены, осталось еще ", count_28, 
      "\n", str_concat_16);
      Li_12++;
      if (Li_12 <= 100) continue;
      Comment("не могу закрыть ордер");
      break;
   }
   return (0);
}

// 4C1C6E4F825F696CC5A1FC961A319091
void f0_3() {
   for (int pos_0 = 0; pos_0 < OrdersTotal(); pos_0++) {
      if (OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
            if (OrderType() > OP_SELL)
               if (!OrderDelete(OrderTicket())) Print("=== Error DeleteStopOrders ", GetLastError());
         }
      }
   }
}

Комментарии к исходному коду форекс советника ZigZagTrader v4~.mq4
В целях безопасности и борьбы со спамом в тексте комментариев запрещено размещать html-теги и ссылки. Благодарим за понимание.

  • X
  • 0% загружено
« советник ZigZagPointer.mq4
советник ZigZagTrader v5.3.mq4 »