Прошу помощи!

 

Здравствуйте, друзья! Простите новичка за, возможно, тривиальный вопрос. Написал эксперта на базе встроенного в MQL4 Moving Average - не работает. На каждом баре открывает SELL, на следующем - закрывает. WRMABB - мой индикатор. Спасибо!

void CheckForOpen()
  {
   double signal,bbup,bblow;
   int    res;
   if(Volume[0]>1) return;
   signal=iCustom(NULL,0,"WRMABB",2,0);
   bbup=iCustom(NULL,0,"WRMABB",4,0);
   bblow=iCustom(NULL,0,"WRMABB",3,0);
   if(signal<bbup)
     {
      res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"",0,0,Red);
      return;
     }
   if(signal>bblow)
     {
      res=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,0,0,"",0,0,Blue);
      return;
     }
  }
void CheckForClose()
  {
   double signal,bbup,bblow;
   if(Volume[0]>1) return;
   signal=iCustom(NULL,0,"WRMABB",2,0);
   bbup=iCustom(NULL,0,"WRMABB",4,0);
   bblow=iCustom(NULL,0,"WRMABB",3,0);
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=0 || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(signal>bbup)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
               return;
           }
        }
      if(OrderType()==OP_SELL)
        {
         if(signal<bblow)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
               return;
           }
        }
     }
  }
void OnTick()
  {
   if(Bars<100 || IsTradeAllowed()==false)
      return;
   
   if(OrdersTotal()==0) CheckForOpen();
   else                 CheckForClose();
  }
 
Виктор Ганчар:

Здравствуйте, друзья! Простите новичка за, возможно, тривиальный вопрос. Написал эксперта на базе встроенного в MQL4 Moving Average - не работает. На каждом баре открывает SELL, на следующем - закрывает. WRMABB - мой индикатор. Спасибо!

Рекомендую локализовать проблему, провести отладку. Пожалуйста!

 
Виктор Ганчар:

Здравствуйте, друзья! Простите новичка за, возможно, тривиальный вопрос. Написал эксперта на базе встроенного в MQL4 Moving Average - не работает. На каждом баре открывает SELL, на следующем - закрывает. WRMABB - мой индикатор. Спасибо!

Это для фриланса по идее. Закажите на фрилансе. 30 долларов в виде WMT в Вебмани - нынче не дорого стоят.

Второе - лучше на MQL5 для МТ5 писать, чем на MQL4 для МТ4 (ИМХО). Если бы вы выложили код на MQL5, то его можно было бы быстро проверить в отладчике, но на MQL4 надо возиться, да и сам индикатор вы не опубликовали - поэтому ничего толком не проверить.

К просьбам о проверке нужно .set файлы прикладывать на которых вы тестили и скриншот настроек тестера(где видно период, символ, спред, режим тестирования), бывает что юзеры в настройках ошибаются. Так что на будущее: еще два .set файла должно быть, от индикатора(если индикатор отдельно накладывается на график) и от советника. А в случае с МТ5 ещё и .ini файл обязательно нужен, для точного воспроизведения ситуации.

Может кто-то и разберет ваш код.

Создание заказа - Фриланс-сервис на MQL5.com
Создание заказа - Фриланс-сервис на MQL5.com
  • www.mql5.com
Закажи во Фрилансе технический индикатор, торгового робота или любое другое приложение для торговли на рынках
 

во фрагменте 

   signal=iCustom(NULL,0,"WRMABB",2,0);
   bbup=iCustom(NULL,0,"WRMABB",4,0);
   bblow=iCustom(NULL,0,"WRMABB",3,0);
   if(signal<bbup)
     {
      res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0,"",0,0,Red);
      return;
     }

signal ВСЕГДА меньше чем bbup...(и в фрагменте про закрытия тоже) 

Вам остаётся разобраться почему так.

скорее ошибка в вашем WRMABB, или неправильный буфер оттуда берёте, например перепутаны bbup и bblow 

(или даже бар, 0-й и не всегда верно считают и при сигналах на открытии баров подчас логично брать 1-й то есть свеже-закрытый)

 
Maxim Kuznetsov #:

во фрагменте 

signal ВСЕГДА меньше чем bbup...(и в фрагменте про закрытия тоже) 

Вам остаётся разобраться почему так.

скорее ошибка в вашем WRMABB, или неправильный буфер оттуда берёте, например перепутаны bbup и bblow 

(или даже бар, 0-й и не всегда верно считают и при сигналах на открытии баров подчас логично брать 1-й то есть свеже-закрытый)

Всем спасибо! Буду разбираться.