Как получить предыдущий тик - страница 2

 
Понял, буду разбираться. Спасибо.
 
Ihor Herasko #:

Приведенный выше код справедлив и для MQL5 (только Bid поменять на m_symbol.Bid()). Это наиболее простой способ. 

Если же нужно знать предыдущий тик, который был до старта советника, то придется использовать функции CopyTicks() или CopyTicksRange(). Но в этом случае логика получится сложнее.

Можно наверное и попроще - сохранить значение предыдущего / первого тика в static или глобальной переменной.

 
Alexander Sevastyanov #:

Можно наверное и попроще - сохранить значение предыдущего / первого тика в static или глобальной переменной.

Гм-м. Так ведь об этом и идет речь. Это самый простой способ. Через CopyTicks() выйдет сложнее.

 

Добрый день.

Попробовал - не хочет открывать сделки, но при компиляции ошибок нет...((

Было - Mode2 - работает, но не так как, надо.

Стало - Mode3 - не работает.

Правки вводил в стоках: 112-124,  140,  147,  158-170,  238-265

Поправьте плз, если не сложно.  

 
Ihor Herasko #:

Гм-м. Так ведь об этом и идет речь. Это самый простой способ. Через CopyTicks() выйдет сложнее.

Но через CopyTicks это единственно верное решение.

Пояснительное : обработчик OnTick() может: 1)пропустить имеющийся тик (когда имеется более актуальный). 2) предыдущий тик может стать известен после OnTick

поэтому "предыдущий обработанный в OnTick" тик и "действительно предыдущий" тик - это разные вещи. Предыдущий тик - только через CopyTicks

 
А можно так же какой-то пример кода?
 
Malishmalish #:
А можно так же какой-то пример кода?

псевдо-код, "с руки" :

bool PrevTick(MqlTick &saveHere) {
   // получаем текущий тик (тот по которому вызван OnTick)
   MqlTick currTick;
   if (!SymbolInfoTick(_Symbol,currTick)) {
       return false;
   }
   // получаем историю тиков
   MqlTick history[];
   int total=CopyTicks(_Symbol,history,COPY_TICKS_ALL,0,200); // поменяйте флаги на нужные
   if (total<2) {
      return false;
   }
   // лучше перебдеть - не факт что текущий тик самый последний
   // ищим тик в истории, возвращаем непосредственно предыдущий
   // функцию сравнения тиков bool TicksAreEqual(MqlTick &,MqlTick &) реализуйте сами
   for(int pos=total-1;pos>0;pos--) {
      if ( TicksAreEqual(currTick,history[pos]) ) {
         // нашли тик в истории, отдаём предыдущий
         saveHere=history[pos-1];
         return true;
      }
   }
   return false;
}

как-то так

 

Всё равно не выходит. (

Напишите плз в личку, кто сможет помочь, пусть даже платно.  Заодно и еще кое-что туда добавить.

На фриланс не отправляйте - знаю.