Можно ли получить данные предыдущего тика?

 

Пожалуйста, подскажите, есть ли какая-то простая возможность, находясь в обработчике OnTick, получить данные (цены bid и ask) с предыдущего тика (если он был).

Изначально стоит задача узнать, произошло ли с приходом нового тика пересечение ценой определённого уровня по отношению к предыдущему тику. Предварительно делается проверка на то, что это не первый поступивший тик с момента запуска советника.

Нужно ли для решения этой задачи сохранять на каждом новом тике данные предыдущего тика в статических переменных или терминал где-то хранит эти данные и можно получить цены bid и ask c предыдущего тика одним запросом?

 
Самое простое, но не супер-надежное.
class TICK
{
public:  
  static MqlTick Prev;
    
  ~TICK() { ::SymbolInfoTick(_Symbol, TICK::Prev); }
};

static MqlTick TICK::Prev = {};

void OnTick()
{
  const TICK PrevTick;

  Print(SymbolInfoDouble(_Symbol, SYMBOL_BID));
  Print(TICK::Prev.bid);
  Print("--------");
}


1.04761
1.04758
--------
1.04762
1.04761
--------
1.04761
1.04762
--------
 
Janis Ozols:

Пожалуйста, подскажите, есть ли какая-то простая возможность, находясь в обработчике OnTick, получить данные (цены bid и ask) с предыдущего тика (если он был).

Изначально стоит задача узнать, произошло ли с приходом нового тика пересечение ценой определённого уровня по отношению к предыдущему тику. Предварительно делается проверка на то, что это не первый поступивший тик с момента запуска советника.

Нужно ли для решения этой задачи сохранять на каждом новом тике данные предыдущего тика в статических переменных или терминал где-то хранит эти данные и можно получить цены bid и ask c предыдущего тика одним запросом?

Самое простое получить последние два тика в массив и проверить желаемое.

int  CopyTicks( 
   string           symbol_name,           // имя символа 
   MqlTick&         ticks_array[],         // массив для приёма тиков 
   uint             flags=COPY_TICKS_ALL,  // флаг, определяющий тип получаемых тиков 
   ulong            from=0,                // дата, начиная с которой запрашиваются тики 
   uint             count=0                // количество тиков, которые необходимо получить 
   );
 
fxsaber #:
Самое простое, но не супер-надежное.


А зачем класс? Проще "статичный" тик описать внутри функции OnTick и там сохранять значение.

 
Stanislav Korotky #:

А зачем класс?

Чтобы получить тик на выходе из OnTick.