Вставляйте правильно код -
----------------
MQL5.community - Памятка пользователя
Кнопка предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.
Попробовал самостоятельно, по ролику с ютуб создать программу для трейлинг-стопа.
К сожалению по изображению толком ничего понять не получается. Единственное, что понимаю запутался в скобках { }.
Но попытки добавить скобки только увеличивает количество ошибок.
Здравствуйте. Сильно не вникал, но первое, что бросилось в глаза, так это отсутствие закрывающей скобки } в самом конце кода после return(0);
С уважением, Владимир.
Вставляйте правильно код -
----------------
MQL5.community - Памятка пользователя
Кнопка предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.
Здравствуйте. Сильно не вникал, но первое, что бросилось в глаза, так это отсутствие закрывающей скобки } в самом конце кода после return(0);
С уважением, Владимир.
Была, но не скопировалась, а сам не доглядел.
//+------------------------------------------------------------------+ //| Expert start function | //+------------------------------------------------------------------+ int start() { //--- bool error = false; if(LBT!=Time[0]) { if(OrdersTotal()>0){ for(int i=0; i<OrdetsTotal(); i++) { if(OrderSelect(1,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) { double SL = OrderStopLoss(); if(OrderType()==0) { switch(TralType) { case 0: SL = iSAR(NULL,0,SAR_Step, SAR_Max,0); break; case 1: SL = High[1] - iATR(NULL,0,ATR_Period,1)*ATR_K; break; case 2: SL = iCustom(NULL,0,"VininI_HMA_sound&Alert",HMA_Period, HMA_Method, 3, HMA_Shift,false,false,"",1,0,0); break; } if(SL<OrderStopLoss()) SL = OrderStopLoss(); } } } } } } if(OrderType()==1) { switch(TralType()) { case 0: SL = iSAR(NULL,0,SAR_Step,SAR_Max,0); break; case 1: SL = Low[1] - iATR(NULL,0,ATR_Period,1)*ATR_K; break; case 2: SL = iCustom(NULL,0,"VininI_HMA_sound&Alert",HMA_Period,HMA_Method,2,HMA_Shift,false,false,"",1,0,0); break; } if(SL>OrderStopLoss()) SL = OrderStopLoss(); } if(SL!=OrderStopLoss()) { if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0)); error = true; } } } } if(!error) LBT = Time[0]; } //--- return(0); } //+------------------------------------------------------------------+
Если вы уберёте лишнюю точку с запятой, код возможно скомпилируется, но вот работать правильно не будет.
if(!OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0));
Нету у меня МТ4, чтоб проверить, да и не знаю я MQL4 от слова совсем.
Попробуйте так, вдруг повезёт)))
//+------------------------------------------------------------------+ //| Stop-loss.mq4 | //| sanyok-de | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "sanyok-de" #property link "https://www.mql5.com" #property version "1.00" #property strict extern int TralType = 0; // 0-SAR, 1-ATR, 2-HMA extern double SAR_Step = 0.02; extern double SAR_Max = 0.2; extern int ATR_Period = 14; extern double ATR_K = 2.0; extern int HMA_Period = 16; extern int HMA_Method = 3; extern int HMA_Shift = 0; datetime LBT; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return (INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- //--- } //+------------------------------------------------------------------+ //| Expert start function | //+------------------------------------------------------------------+ int start() { //--- bool error = false; if (LBT != Time[0]) { for (int i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(1, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderType() < 2) { double SL; if (OrderType() == 0) { switch (TralType) { case 0: SL = iSAR(NULL, 0, SAR_Step, SAR_Max, 0); break; case 1: SL = High[1] - iATR(NULL, 0, ATR_Period, 1) * ATR_K; break; case 2: SL = iCustom(NULL, 0, "VininI_HMA_sound&Alert", HMA_Period, HMA_Method, 3, HMA_Shift, false, false, "", 1, 0, 0); break; } if (SL < OrderStopLoss()) SL = OrderStopLoss(); } else if (OrderType() == 1) { switch (TralType) { case 0: SL = iSAR(NULL, 0, SAR_Step, SAR_Max, 0); break; case 1: SL = Low[1] - iATR(NULL, 0, ATR_Period, 1) * ATR_K; break; case 2: SL = iCustom(NULL, 0, "VininI_HMA_sound&Alert", HMA_Period, HMA_Method, 2, HMA_Shift, false, false, "", 1, 0, 0); break; } if (SL > OrderStopLoss()) SL = OrderStopLoss(); } if (SL != OrderStopLoss()) if (!OrderModify(OrderTicket(), OrderOpenPrice(), SL, OrderTakeProfit(), 0)) error = true; } } } if (!error) LBT = Time[0]; //--- return (0); } //+------------------------------------------------------------------+
P.S. и в строке:
SL = High[1] - iATR(NULL, 0, ATR_Period, 1) * ATR_K;
Наверное всё таки должен быть +
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Попробовал самостоятельно, по ролику с ютуб создать программу для трейлинг-стопа.
К сожалению по изображению толком ничего понять не получается. Единственное, что понимаю запутался в скобках { }.
Но попытки добавить скобки только увеличивает количество ошибок.