← К каталогу
Исходный код · ID 641

slave-yang nyontek~.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Данный продукт представляет собой торговый советник для MetaTrader 4, предназначенный для автоматического копирования торговых операций внешнего мастер-советника. Он получает данные о сделках через внешнюю библиотеку copier.dll и открывает соответствующие ордера на счёте-рабочем с настраиваемыми параметрами лотов, стоп-лосса и тейк-профита.

Советник поддерживает синхронизацию позиций с мастер-торговлей: модификацию цен ордеров, закрытие и удаление позиций при изменениях на стороне мастера. Также реализована функция трейлинг-стоп для управления защитными уровнями.

Внутренняя логика включает проверку уровней стопа, ограничения по времени экспирации ордеров и контроль допустимого отклонения цен. Данные о сопоставлении ордеров сохраняются в локальный файл для поддержания синхронизации между перезапусками.

Настройки программы

НастройкаОписание
Ngikut_Lot_Master Следовать лоту мастера — Переключатель: при активации размер лота рассчитывается как произведение лота мастера на множитель.
Pengali_Lot_Master Множитель лота мастера — Множитель лота мастера, используемый при расчёте размера позиции.
Lots_Sendiri Лот самостоятельной торговли — Размер лота для самостоятельного открытия позиций.
TP_SL_Manual Ручное управление SL/TP — Переключатель ручного управления стоп-лоссом и тейк-профитом.
TakeProfit Тейк-профит (пункты) — Значение тейк-профита в пунктах при ручном режиме управления уровнями.
StopLoss Стоп-лосс (пункты) — Значение стоп-лосса в пунктах при ручном режиме управления уровнями.
Trailing_Stop Трейлинг-стоп (пункты) — Расстояние трейлинг-стопа в пунктах для управления защитными уровнями открытых позиций.
Получить полный код

Поиск по коду файла

/*
   G e n e r a t e d  by ex4-to-mq4 decompiler FREEWARE 4.0.509.5
   Website: H ttP:// www . M etAqu O tE s.n Et
   E-mail :  S u P P O rt@mE t a qU OT es. N et
*/

#property show_inputs

#import "stdlib.ex4"
   string ErrorDescription(int a0); // DA69CBAFF4D38B87377667EEC549DE5A
#import "copier.dll"
   int GV_GetNamedInt(string a0, int a1);
   double GV_GetNamedDouble(string a0, double a1);
#import

extern bool Ngikut_Lot_Master = TRUE;
extern double Pengali_Lot_Master = 1.0;
extern double Lots_Sendiri = 0.1;
extern bool TP_SL_Manual = FALSE;
extern int TakeProfit = 0;
extern int StopLoss = 0;
extern int Trailing_Stop = 0;
string Gs_copier_112 = "copier";
string Gs_120 = "AUDCAD,AUDCHF,EURAUD,AUDJPY,AUDNZD,AUDUSD,CADCHF,CADJPY,CHFJPY,EURCAD,EURCHF,EURDKK,EURGBP,EURJPY,EURNOK,EURNZD,EURSEK,EURUSD,GBPAUD,GBPCAD,GBPCHF,GBPNZD,GBPUSD,GBPJPY,NZDCAD,NZDCHF,NZDJPY,NZDUSD,SGDJPY,USDCAD,USDCHF,USDHKD,USDJPY,USDSGD";
string Gs_128 = "AUDCADm,AUDCHFm,EURAUDm,AUDJPYm,AUDNZDm,AUDUSDm,CADCHFm,CADJPYm,CHFJPYm,EURCADm,EURCHFm,EURDKKm,EURGBPm,EURJPYm,EURNOKm,EURNZDm,EURSEKm,EURUSDm";
string Gs_136 = "GBPAUDm,GBPCADm,GBPCHFm,GBPNZDm,GBPUSDm,GBPJPYm,NZDCADm,NZDCHFm,NZDJPYm,NZDUSDm,SGDJPYm,USDCADm,USDCHFm,USDHKDm,USDJPYm,USDSGDm";
string Gs_144 = "AUDCAD.,AUDCHF.,EURAUD.,AUDJPY.,AUDNZD.,AUDUSD.,CADCHF.,CADJPY.,CHFJPY.,EURCAD.,EURCHF.,EURDKK.,EURGBP.,EURJPY.,EURNOK.,EURNZD.,EURSEK.,EURUSD.";
string Gs_152 = "GBPAUD.,GBPCAD.,GBPCHF.,GBPNZD.,GBPUSD.,GBPJPY.,NZDCAD.,NZDCHF.,NZDJPY.,NZDUSD.,SGDJPY.,USDCAD.,USDCHF.,USDHKD.,USDJPY.,USDSGD.";
string Gs_160;
bool Gi_168 = TRUE;
bool Gi_172 = FALSE;
int G_slippage_176 = 10;
int Gi_180 = 100;
int Gi_184 = 450;
int Gi_188 = 50;
bool Gi_192 = TRUE;
int Gi_196 = 200;
bool Gi_200 = FALSE;
bool Gi_204 = FALSE;
int G_count_208;
string G_name_212 = "map.dat";
double Gda_220[][11];
double Gda_224[][11];
int Gia_228[][2];
double Gda_unused_232[1][2];
string Gsa_236[];
string Gsa_240[];
string Gsa_244[];
string Gs_248;
int G_datetime_256;
int G_datetime_260;
int Gi_264;
int Gia_268[];
int Gi_272;
int Gi_276;
int Gi_280;

void init() {
      // код доступен только после оплаты
   }

int start() {
      // код доступен только после оплаты
   }

int FindTrades() {
   int order_total_0 = OrdersTotal();
   ArrayResize(Gda_224, 0);
   for (int pos_4 = order_total_0 - 1; pos_4 >= 0; pos_4--)
      if (OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES)) AddTrade(OrderTicket());
   return (1);
}

int AddTrade(int A_ticket_0) {
   string Ls_4;
   int str2int_12;
   int Li_16;
   int Li_20 = ArraySize(Gda_224) / 11 + 1;
   int Li_24 = -1;
   if (OrderSelect(A_ticket_0, SELECT_BY_TICKET, MODE_TRADES)) {
      for (int index_28 = 0; index_28 < ArraySize(Gsa_236); index_28++) {
         if (Gsa_236[index_28] == OrderSymbol()) {
            Li_24 = index_28;
            break;
         }
      }
      if (Li_24 < 0) return (0);
      Ls_4 = OrderComment();
      str2int_12 = 0;
      if (StringFind(Ls_4, "from #", 0) >= 0) {
         Li_16 = StringFind(Ls_4, "#", 0);
         str2int_12 = StrToInteger(StringSubstr(Ls_4, Li_16 + 1, StringLen(Ls_4) - Li_16 - 1));
      }
      ArrayResize(Gda_224, Li_20);
      Gda_224[Li_20 - 1][0] = A_ticket_0;
      Gda_224[Li_20 - 1][1] = OrderType();
      Gda_224[Li_20 - 1][2] = OrderOpenPrice();
      Gda_224[Li_20 - 1][3] = OrderStopLoss();
      Gda_224[Li_20 - 1][4] = OrderTakeProfit();
      Gda_224[Li_20 - 1][5] = OrderOpenTime();
      Gda_224[Li_20 - 1][6] = Li_24;
      Gda_224[Li_20 - 1][7] = OrderLots();
      Gda_224[Li_20 - 1][8] = 0;
      Gda_224[Li_20 - 1][9] = OrderClosePrice();
      Gda_224[Li_20 - 1][10] = str2int_12;
   }
   return (0);
}

string GetSlaveTrades() {
   int Li_0;
   int count_4;
   double Ld_8;
   string Ls_ret_16;
   ArrayResize(Gda_220, 0);
   ArrayResize(Gsa_244, 0);
   int Li_24 = 0;
   for (int index_28 = 0; index_28 < ArraySize(Gsa_240); index_28++) {
      count_4 = 0;
      Li_0 = GV_GetNamedInt(Gsa_240[index_28] + "lines", -1);
      if (Li_0 > 0) {
         Ls_ret_16 = Ls_ret_16 + " " + Gsa_240[index_28] + " ";
         for (int count_32 = 0; count_32 < Li_0; count_32++) {
            Li_24++;
            ArrayResize(Gda_220, Li_24);
            ArrayResize(Gsa_244, Li_24);
            Gsa_244[Li_24 - 1] = Gsa_240[index_28];
            for (int count_36 = 0; count_36 < 11; count_36++) {
               count_4++;
               Ld_8 = GV_GetNamedDouble(Gsa_240[index_28] + "_mt_" + count_4, -1);
               if (Ld_8 >= 0.0) Gda_220[Li_24 - 1][count_36] = Ld_8;
               else Gda_220[Li_24 - 1][count_36] = 0;
            }
         }
      }
   }
   return (Ls_ret_16);
}

int ReadMap() {
   int Li_0;
   int file_4 = FileOpen(G_name_212, FILE_CSV|FILE_READ);
   if (file_4 < 1) return (0);
   ArrayResize(Gia_228, 0);
   while (!FileIsEnding(file_4)) {
      Li_0++;
      ArrayResize(Gia_228, Li_0);
      Gia_228[Li_0 - 1][0] = FileReadNumber(file_4);
      Gia_228[Li_0 - 1][1] = FileReadNumber(file_4);
   }
   ArrayResize(Gia_228, Li_0 - 1);
   FileClose(file_4);
   return (1);
}

int MakeMap() {
   int Li_0;
   int Li_4;
   int Li_8;
   int Li_12;
   int Li_16;
   bool Li_20;
   for (int index_24 = 0; index_24 < ArraySize(Gda_220) / 11; index_24++) {
      if (Gda_220[index_24][8] <= 0.9) {
         if (Gda_220[index_24][10] <= 0.9) {
            Li_20 = FALSE;
            Li_0 = Gda_220[index_24][0];
            for (int index_28 = 0; index_28 < ArraySize(Gia_228) / 2; index_28++) {
               Li_4 = Gia_228[index_28][0];
               if (Li_0 == Li_4) {
                  Li_8 = Gia_228[index_28][1];
                  for (int index_32 = 0; index_32 < ArraySize(Gda_224) / 11; index_32++) {
                     Li_12 = Gda_224[index_32][0];
                     if (Li_8 == Li_12) {
                        Li_20 = TRUE;
                        index_32 = 99999;
                        index_28 = 99999;
                     }
                  }
               }
            }
            if ((!Li_20) && Li_0 > 0) {
               Li_16 = MakeOrder(index_24);
               if (Li_16 > 0) AddMap(Li_0, Li_16);
            }
         }
      }
   }
   return (0);
}

int AddMap(int Ai_0, int Ai_4) {
   int Li_8;
   if (Ai_4 > 0) {
      Li_8 = ArraySize(Gia_228) / 2 + 1;
      ArrayResize(Gia_228, Li_8);
      Gia_228[Li_8 - 1][0] = Ai_0;
      Gia_228[Li_8 - 1][1] = Ai_4;
   }
   return (0);
}

int MakeOrder(int Ai_0) {
   int count_4;
   int ticket_8;
   double price_12;
   double Ld_20;
   double bid_28;
   double ask_36;
   int Li_44;
   int cmd_48 = Gda_220[Ai_0][1];
   int magic_52 = Gda_220[Ai_0][0];
   if (IsNoTrade(magic_52)) return (0);
   if (!Gi_192)
      if (cmd_48 != OP_BUY && cmd_48 != OP_SELL) return;
   int Li_56 = 1;
   if (cmd_48 == OP_SELL || cmd_48 == OP_SELLSTOP || cmd_48 == OP_SELLLIMIT) Li_56 = -1;
   double price_60 = Gda_220[Ai_0][3];
   double price_68 = Gda_220[Ai_0][4];
   double price_76 = price_60;
   double price_84 = price_68;
   string symbol_92 = GetSymbol(Gda_220[Ai_0][6]);
   double Ld_100 = MarketInfo(symbol_92, MODE_MINLOT);
   if (Ld_100 < 1.0) Gi_264 = 1;
   if (Ld_100 < 0.1) Gi_264 = 2;
   if (Ld_100 < 0.01) Gi_264 = 3;
   double lots_108 = Lots_Sendiri;
   if (Ngikut_Lot_Master) lots_108 = NormalizeDouble(Pengali_Lot_Master * Gda_220[Ai_0][7], Gi_264);
   double point_116 = MarketInfo(symbol_92, MODE_POINT);
   int digits_124 = MarketInfo(symbol_92, MODE_DIGITS);
   int stoplevel_128 = MarketInfo(symbol_92, MODE_STOPLEVEL);
   if (lots_108 < Ld_100) lots_108 = Ld_100;
   for (G_count_208 = 0; ticket_8 <= 0 && G_count_208 < Gi_188; G_count_208++) {
      count_4 = 0;
      while (count_4 < 7 && !IsTradeAllowed()) {
         count_4++;
         Sleep(3000);
      }
      RefreshRates();
      if (cmd_48 != OP_BUY && cmd_48 != OP_SELL) price_12 = Gda_220[Ai_0][2];
      if (cmd_48 == OP_BUY) price_12 = MarketInfo(symbol_92, MODE_ASK);
      if (cmd_48 == OP_SELL) price_12 = MarketInfo(symbol_92, MODE_BID);
      Ld_20 = Gda_220[Ai_0][2];
      if (Gi_172) {
         if (NormalizeDouble(price_76, 1) >= 0.1) price_76 = NormalizeDouble(price_12 - Li_56 * MathAbs(Ld_20 - price_60), digits_124);
         if (NormalizeDouble(price_84, 1) >= 0.1) price_84 = NormalizeDouble(price_12 + Li_56 * MathAbs(price_68 - Ld_20), digits_124);
      }
      if (TP_SL_Manual) {
         price_76 = 0;
         price_84 = 0;
         if (StopLoss > 0) price_76 = NormalizeDouble(price_12 - Li_56 * StopLoss * point_116, digits_124);
         if (TakeProfit > 0) price_84 = NormalizeDouble(price_12 + Li_56 * TakeProfit * point_116, digits_124);
      }
      bid_28 = MarketInfo(symbol_92, MODE_BID);
      ask_36 = MarketInfo(symbol_92, MODE_ASK);
      Print("stoplev=", stoplevel_128, ", bid=", bid_28, ", ask=", ask_36, " , ticket=", magic_52, " order : ", symbol_92, ", type=", cmd_48, ", lots=", lots_108, ", entry=",
         price_12, ", slip=", G_slippage_176, ", sl=", price_76, ", tp=", price_84, ", cmt=", Gsa_244[Ai_0], " fr # ", Gda_220[Ai_0][10]);
      if (Gi_184 > 0 && TimeCurrent() - Gda_220[Ai_0][5] > 60 * Gi_184) {
         Print(magic_52 + " No trade - ExpireMinutes limitation" + TimeToStr(Gda_220[Ai_0][5], TIME_DATE|TIME_MINUTES));
         Alert(magic_52 + " No trade - ExpireMinutes limitation" + TimeToStr(Gda_220[Ai_0][5], TIME_DATE|TIME_MINUTES));
         AddNoTrade(magic_52);
         return (-1);
      }
      if (MathAbs(Ld_20 - price_12) > Gi_180 * point_116) {
         Print(magic_52 + " No trade - MaxMarketDiff limitation, order=", Ld_20, "  local=", price_12, " pnt=", point_116, " ", Gi_180 * point_116);
         Alert(magic_52 + " No trade - MaxMarketDiff limitation, order=" + Ld_20 + "  local=" + price_12 + " pnt=" + point_116 + " " + (Gi_180 * point_116));
         AddNoTrade(magic_52);
         return (-1);
      }
      if ((cmd_48 == OP_BUYLIMIT || cmd_48 == OP_SELLSTOP && price_12 > bid_28 - stoplevel_128 * point_116) || (cmd_48 == OP_BUYSTOP || cmd_48 == OP_SELLLIMIT && price_12 < ask_36 +
         stoplevel_128 * point_116)) {
         Gs_248 = Gs_248 
            + "\n" 
         + "ticket - import - wrong entry price (stoplevel)!";
         return (0);
      }
      if (Li_56 > 0 && NormalizeDouble(price_76, 1) >= 0.1 && price_76 > price_12 - stoplevel_128 * point_116) {
         Gs_248 = Gs_248 
            + "\n" 
         + "ticket - import - wrong SL for buy!";
         return (0);
      }
      if (Li_56 > 0 && NormalizeDouble(price_84, 1) >= 0.1 && price_84 < price_12 + stoplevel_128 * point_116) {
         Gs_24

Показано первые 50% кода (символов: 18640)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 864₽ ≈ $22.78