Прошу помощи в проверку кода

 

Попробовал самостоятельно, по ролику с ютуб создать программу для трейлинг-стопа.

К сожалению по изображению толком ничего понять не получается. Единственное, что понимаю запутался в скобках { }.

Но попытки добавить скобки только увеличивает количество ошибок. 

//+------------------------------------------------------------------+
//|                                                    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])
     {
      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);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

Документация по MQL5: Торговые функции / OrderSelect
Документация по MQL5: Торговые функции / OrderSelect
  • www.mql5.com
OrderSelect - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Файлы:
6.png  9 kb
 

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  Исходный кодпредназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.

 
sanyok-de:

Попробовал самостоятельно, по ролику с ютуб создать программу для трейлинг-стопа.

К сожалению по изображению толком ничего понять не получается. Единственное, что понимаю запутался в скобках { }.

Но попытки добавить скобки только увеличивает количество ошибок.

Здравствуйте. Сильно не вникал, но первое, что бросилось в глаза, так это отсутствие закрывающей скобки } в самом конце кода после return(0);

С уважением, Владимир.

 
Sergey Golubev #:

Вставляйте правильно код -

----------------‌

MQL5.community - Памятка пользователя 

Кнопка  предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.

Благодарю. Отредактировать сообщение уже, я так понимаю, не получится.
 
MrBrooklin #:

Здравствуйте. Сильно не вникал, но первое, что бросилось в глаза, так это отсутствие закрывающей скобки } в самом конце кода после 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);
   }
//+------------------------------------------------------------------+
 
sanyok-de #:
Благодарю. Отредактировать сообщение уже, я так понимаю, не получится.

Даже сейчас получится. Внизу справа от сообщения «правка»

 
БAlexey Viktorov #:

Даже сейчас получится. Внизу справа от сообщения «правка»

Благодарю. Оказывается появляется при наведении курсора.
 
sanyok-de #:

Если вы уберёте лишнюю точку с запятой, код возможно скомпилируется, но вот работать правильно не будет.

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;

Наверное всё таки должен быть +

 
Aleksandr Slavskii #:




Благодарю, но всё таки ошибки выдаются.

 
sanyok-de #:

Благодарю, но всё таки ошибки выдаются.

Какие? Скрин ошибок в студию)

Там в послесловии не верно я подумал, правильнее поменять знак в другой строке.

SL = Low[1] + iATR(NULL, 0, ATR_Period, 1) * ATR_K;

Так выглядит логично.