Бэктестирование мультивалютного советника - страница 2

 
В моем случае решением был метод IsNewBar() и включение метода исполнения "Every Tick", если мой советник не работает только на открытых ценах...
Documentation on MQL5: Standard Constants, Enumerations and Structures / Indicator Constants / Price Constants
  • www.mql5.com
Standard Constants, Enumerations and Structures / Indicator Constants / Price Constants - Documentation on MQL5
 
trendick:

Али, пример, который я привел выше, это советник, на который вы ссылаетесь, который является источником упомянутой вами функции IsNewBar() и уже использует ее.

Как вы это объясните?

Я говорил о своем советнике, который торгует на двух символах. Один символ получает данные с помощью функции ontick().

другой использует Isnewbar()

Когда я меняю их способ получения данных, результат остается тем же. Вы можете попробовать и сравнить результаты. Я также пытался получить котировки обоих символов с помощью isnewbar, как советник, о котором говорилось выше, и имел те же проблемы, однако, получив котировки исходного символа с помощью ontick(), проблема разрешилась.

Конечно, есть проблема с тестером, я просто показал, как мне удалось получить желаемые результаты.

 
kgo:
В моем случае решением был метод IsNewBar() и включение метода исполнения "Every Tick", если мой советник не работает только на открытых ценах...

Не могли бы вы рассказать подробнее? Может быть, продемонстрировать фрагмент кода? Можете ли вы работать с 3 валютами?
 
trendick:
Не могли бы вы рассказать подробнее? Может быть, продемонстрировать фрагмент кода? Можете ли вы работать с 3 валютами?

Хорошо, я понял, что вы имеете в виду. Одна из пар используется для запуска открытия нового бара, а для остальных вы мгновенно считываете тики.

 

Kgo, но это все равно не решает проблему в моем случае. Не могли бы вы показать фрагмент того, что вы делаете?

Спасибо, трендик

 
Спасибо TheEconmist! (Я думал, что вы придерживаетесь гипотезы случайного хождения...:-)): сейчас же проверю это.
 
Я сделал несколько новых тестов, и мое предыдущее сообщение неверно. Метод IsNewBar() не помогает. TheEconomist показывает хороший пример того, как должен быть реализован OnTick() для мультивалютного советника.
 
Вы можете поверить, что я даже не знаю, где находится этот метод IsNewBar()? В каком классе?
 
TheEconomist:
Вы можете поверить, что я даже не знаю, где находится этот метод IsNewBar()? В каком классе?

Мы имеем в виду метод из статьи 105. Вот он (уместны только начало и конец):

Вот он:

/+X================================================================X+
//| IsNewBar() function                                              |
//+X================================================================X+
bool IsNewBar(int Number,string symbol,ENUM_TIMEFRAMES timeframe)
  {
//----+
   static datetime Told[];
   datetime Tnew[1];
//----+ Declare variable to store sizes of variables arrays
   static int Size_=0;

//----+ Change size of variables arrays
   if(Number+1>Size_)
     {
      uint size=Number+1;
      //----
      if(ArrayResize(Told,size)==-1)
        {
         string word="";
         StringConcatenate(word,"IsNewBar( ",Number,
                           " ): Error!!! Unable to change sizes of variables arrays!!!");
         Print(word);
         //----          
         int error=GetLastError();
         ResetLastError();
         if(error>4000)
           {
            StringConcatenate(word,"IsNewBar( ",Number," ): Error code ",error);
            Print(word);
           }
         //----                                                                                                                                                                                                  
         Size_=-2;
         return(false);
        }
     }

   CopyTime(symbol,timeframe,0,1,Tnew);
   if(Tnew[0]!=Told[Number])
     {
      Told[Number]=Tnew[0];
      return(true);
     }
//----+
   return(false);
  }