slave-yang nyontek~.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.