Эксперт при компиляции без ошибок, но в тестере не работает.

 
Доброго времени суток. Начал изучать mql5, написал кодик, но что-то как-то.... В тестере результата нет(( Что может быть не так с кодом, ткните носом меня пожалуйста и подскажите как решить.

input double LotSize = 0.01; // Размер лота
double MaxValue, MinValue;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // Найти максимальное и минимальное значение open и close за предыдущий период H1
   MaxValue = -1e10; // Инициализировать максимальное значение с очень маленьким числом
   MinValue = 1e10;  // Инициализировать минимальное значение с очень большим числом

   int prevPeriod = iBarShift(Symbol(), PERIOD_H1, TimeCurrent()) - 1; // Индекс свечи предыдущего периода H1

   for (int i = prevPeriod; i >= 0; i--)
     {
      double high = iHigh(Symbol(), PERIOD_H1, i);
      double low = iLow(Symbol(), PERIOD_H1, i);
      double open = iOpen(Symbol(), PERIOD_H1, i);
      double close = iClose(Symbol(), PERIOD_H1, i);

      // Найти максимальное и минимальное значение
      MaxValue = MathMax(MaxValue, MathMax(open, close));
      MinValue = MathMin(MinValue, MathMin(open, close));
     }

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // В этой функции можно добавить код для закрытия всех ордеров перед завершением работы
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double currentPrice = SymbolInfoDouble(Symbol(), SYMBOL_BID);

   MqlTradeRequest request = {};
   MqlTradeResult result = {};
   
   if (currentPrice > MaxValue) //если текущая цена выше точки, открываем ордер в покупку
     { 
      request.action=TRADE_ACTION_DEAL;         
      request.symbol=_Symbol;                      
      request.volume=0.01;                         
      request.sl=0;                                
      request.tp=0;
      request.type=ORDER_TYPE_BUY;                
      request.price=currentPrice;  
      if (OrderSend(request, result))
        {
         Print("Открыт ордер на покупку: Ticket = ", result.order);
        }
      else
        {
         Print("Ошибка открытия ордера на покупку: ", result.order);
        }
     }
   else if (currentPrice < MinValue) //если текущая цена ниже точки, открываем ордер в продажу
     {      
      request.action=TRADE_ACTION_DEAL;         
      request.symbol=_Symbol;                      
      request.volume=0.01;                          
      request.sl=0;                               
      request.tp=0;
      request.type=ORDER_TYPE_SELL; 
      request.price=currentPrice; 
      if (OrderSend(request, result))
        {
         Print("Открыт ордер на продажу: Ticket = ", result.order);
        }
      else
        {
         Print("Ошибка открытия ордера на продажу: ", result.order);
        }
     }
  }
 
Rad89:
Доброго времени суток. Начал изучать mql5, написал кодик, но что-то как-то.... В тестере результата нет(( Что может быть не так с кодом, ткните носом меня пожалуйста и подскажите как решить.

Часто функции начинающиеся на i не работают в OnInit(). Точнее, не успевают сработать.


Нужно делать проверку на то, что возвращает функция.

Вам, лучше всего перенести блок расчётов мин и макс в функцию OnTick().

И если i функции возвращают 0 или -1, делать return, повторить расчёт на следующем тике.

 
Aleksandr Slavskii #:
return

Блин, бро( Воюю-воюю, но нифига не получается(. prevPeriod постоянно возвращает -1(( Как это решить?
UPD:

>>> в iBarShift: Код ошибки - 4756.

эээээм. В тестере торговый запрос?. 


я определенно не понял, как работает mql5....

UPUPD:
Понял прикол. Смысла искать уровни через анализ данных за пред период нет. Я могу в текущем периоде при запуске определить их в переменные и в дальнейшем в новом периоде просто переписывать их, как исторические. Можно через новые переменные и потом просто переписывать OLD на NEW
 
Rad89 #:

Блин, бро( Воюю-воюю, но нифига не получается(. prevPeriod постоянно возвращает -1(( Как это решить?
UPD:

>>> в iBarShift: Код ошибки - 4756.

эээээм. В тестере торговый запрос?. 


я определенно не понял, как работает mql5....

UPUPD:
Понял прикол. Смысла искать уровни через анализ данных за пред период нет. Я могу в текущем периоде при запуске определить их в переменные и в дальнейшем в новом периоде просто переписывать их, как исторические. Можно через новые переменные и потом просто переписывать OLD на NEW

В OnInit() данные графика ещё не загружены. Просто перенесите всё это в OnTick() под флаг первого запуска.

Причина обращения: