Тестирование тикового робота - страница 2

 
Не работал с рендж барами. А можно ли их вообще тестировать штатным тестером? У них же нет времени?
 
alhimik7:
Написан на MT5 и МQL5 соответственно. К спреду не чувствителен. Вспомнил кое что, тестировал ранее, когда еще не был прикручена самописная функция стоплосса, кличество трейдов было большое, т.е. работал нормально.
по моему ответ очевиден, ищите баги в коде ;) чем же вам форум то поможет...
 
alhimik7:
Здравствуйте!
Написал робота торгующего по рэндж-барам строящимся по тикам. Робот корректно отрабатывает на демо-счете.
Однако при попытке прогнать его в тестере стратегий за все проходы выдает всего 1-2 трейда на несколько проходов и все остальные - депозит не меняется, т.е. робот не осуществляет торговлю.
В журнале тестера стратегий ошибок и/или предупреждений не обнаружил.
В как направлении копать? Как отладить?
Спасибо!
Ф-ю онтик используете или онтаймер?
 
Maxim Dmitrievsky , использую OnTick().
 
Всем Спасибо! Проблема решена - закомментировал функцию для сбора внутренней статистики.
 
Ошибся - забыл что закомментировал и функцию трейлинг стопа. Если закомментировать функцию трейлингстопа то все работает норм. Трейдов много. Хэлп! Вот написанная мной функция трейлингстопа, изза которой советник не хочет работать в тестере корректно:
 
//CurrentTrailingStop
//+------------------------------------------------------------------+ 
   if(PositionSelect(_Symbol))
     {
      if(InpTrailingStop<=SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL))
        {
         CurrentTrailingStop=SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)*Point();
        }
      else
        {
         CurrentTrailingStop=InpTrailingStop*Point();
        }

      if(InpTrailingStop>0)
        {

         if(PositionGetInteger(POSITION_TYPE)==(long)POSITION_TYPE_SELL)
           {

            if(PositionGetDouble(POSITION_SL)==0)
              {
               CTrade PM;
               PM.PositionModify(_Symbol,SymbolInfoDouble(Symbol(),SYMBOL_ASK)+CurrentTrailingStop,0);
              }

            if(NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN)-SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits)>CurrentTrailingStop)
              {
               if(PositionGetDouble(POSITION_SL)>SymbolInfoDouble(Symbol(),SYMBOL_ASK)+CurrentTrailingStop)
                 {
                  CTrade PM;
                  PM.PositionModify(_Symbol,SymbolInfoDouble(Symbol(),SYMBOL_ASK)+CurrentTrailingStop,0);
                 }
              }
           }

         if(PositionGetInteger(POSITION_TYPE)==(long)POSITION_TYPE_BUY)
           {

            if(PositionGetDouble(POSITION_SL)==0)
              {
               CTrade PM;
               PM.PositionModify(_Symbol,SymbolInfoDouble(Symbol(),SYMBOL_BID)-CurrentTrailingStop,0);
              }
            if(NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID)-PositionGetDouble(POSITION_PRICE_OPEN),_Digits)>CurrentTrailingStop)
              {
               if(PositionGetDouble(POSITION_SL)<SymbolInfoDouble(Symbol(),SYMBOL_BID)-CurrentTrailingStop || PositionGetDouble(POSITION_SL)==0)
                 {
                  CTrade PM;
                  PM.PositionModify(_Symbol,SymbolInfoDouble(Symbol(),SYMBOL_BID)-CurrentTrailingStop,0);

                 }
              }
           }
        }
     }