Два способа получения Bid и Ask: идентичны ли они?

 

В эксперте можно так

Ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);

А можно и так

MqlTick CurrentTick;
Ask=CurrentTick.ask;
Bid=CurrentTick.bid;

Какой способ превильнее?

Из справочника:

"Для получения текущей рыночной информации служат функции SymbolInfoInteger(), SymbolInfoDouble() и SymbolInfoString()."

"MqlTick ... Предназначена для быстрого получения наиболее востребованной информации о текущих ценах."

 То есть получается что MqlTick быстрее чем SymbolInfoDouble?

 
gpwr:

А можно и так


не совсем так.

надо аналогично запрос сделать и проверить его успешность. Вот из справки.

   MqlTick last_tick;
   if (SymbolInfoTick(Symbol(),last_tick)) Print(last_tick.time,": Bid =", last_tick.bid, " Ask =", last_tick.ask, "  Volume =", last_tick.volume);
   else Print("SymbolInfoTick() failed, error =", GetLastError());


а про то какой способ точнее- тут все равно. Функция вернет последние актуальные данные.

в MQL4 аналогичные ведь были способы. только назывался MarketInfo(Symbol(), MODE_ASK) / MODE_BID


 
o_O:

не совсем так.

надо аналогично запрос сделать и проверить его успешность. Вот из справки.

   MqlTick last_tick;
   if (SymbolInfoTick(Symbol(),last_tick)) Print(last_tick.time,": Bid =", last_tick.bid, " Ask =", last_tick.ask, "  Volume =", last_tick.volume);
   else Print("SymbolInfoTick() failed, error =", GetLastError());


а про то какой способ точнее- тут все равно. Функция вернет последние актуальные данные.

в MQL4 аналогичные ведь были способы. только назывался MarketInfo(Symbol(), MODE_ASK) / MODE_BID


Не могу заставить работать этот код из справки. Time, Bid, Ask - нормально, volume всегда =0. Добавлял задержку 10 секунд, за это время цена несколько раз успевает меняться. Все равно volume=0. Пробовал на EURUSD, M1, H1, Oil, M1, H1. Результат одинаков. Пожалуйста, помогите.

 
      void OnTick()
  {
    MqlTick last_tick;
//---
   if(SymbolInfoTick(Symbol(),last_tick))
     {
       Print(last_tick.time,": Bid = ",last_tick.bid,
            " Ask = ",last_tick.ask,"  Volume = ",last_tick.volume);
            FileWrite(filehandle,last_tick.time,last_tick.bid,last_tick.ask,last_tick.volume);
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());

   Sleep(10000);
   }