Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 244

 
forexman77:
Подскажите, кроме "SymbolInfoTick", есть ли еще какие быстрые способы получения текущей цены. Может есть более быстрый способ получить текущую котировку?

Можно воспользоваться SymbolInfoDouble 

с идентификаторами SYMBOL_BID и SYMBOL_ASK. 

 
Fleder:

Можно воспользоваться SymbolInfoDouble 

с идентификаторами SYMBOL_BID и SYMBOL_ASK. 

Спасибо! 

Не совсем понятно, что следует из "SYMBOL_BID" (Bid - лучшее предложение на продажу).  Это все-таки текущая котировка или лучшая цена по рынку из стакана ESN?

 
forexman77:

Спасибо! 

Не совсем понятно, что следует из "SYMBOL_BID" (Bid - лучшее предложение на продажу).  Это все-таки текущая котировка или лучшая цена по рынку из стакана ESN?

Текущая котировка и лучшая цена в стакане ECN - это одно и то же. 

 
Fleder:

Текущая котировка и лучшая цена в стакане ECN - это одно и то же. 

Вообщем получается, что если используем "SymbolInfoDouble " при запросе, то сделка по этой цене может не произойти, то есть это текущий Bid.

Если используем "SymbolInfoTick", то цена там точно была, то есть это текущая цена по которой произошла последняя сделка, при использовании double last; // Текущая цена последней сделки (Last)

 
forexman77:

Вообщем получается, что если используем "SymbolInfoDouble " при запросе, то сделка по этой цене может не произойти, то есть это текущий Bid.

Если используем "SymbolInfoTick", то цена там точно была, то есть это текущая цена по которой произошла последняя сделка. 

Примечание

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

SymbolInfoTick может вернуть неопределённое значение, если с момента подключения терминала к серверу не было ни одного тика.

SymbolInfoDouble исключает такую ситуацию.

 
Fleder:

Примечание

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

SymbolInfoTick может вернуть неопределённое значение, если с момента присоединения эксперта к графику не было ни одного тика.

SymbolInfoDouble исключает такую ситуацию.

Понял. Спасибо! Теперь осталось найти простенький пример кода, для проверки сколько времени при вызове занимает та и другая функция?
 
forexman77:
Понял. Спасибо! Теперь осталось найти простенький пример кода, для проверки сколько времени при вызове занимает та и другая функция?
uint start=GetTickCount();
// здесь Ваш код вызова 
Print("Вызов прошёл за = ",GetTickCount()-start);
 
barabashkakvn:

Скорее всего этот трюк в данной ситуации не пройдёт.

Всегда будет распринтовка нуля.

Уж слишком быстро работают функции  SymbolInfoTick и SymbolInfoDouble - не дольше единиц микросекунд.

 
Fleder:

Скорее всего этот трюк в данной ситуации не пройдёт.

Всегда будет распринтовка нуля.

Уж слишком быстро работают функции  SymbolInfoTick и SymbolInfoDouble - не дольше единиц микросекунд.

Тем более интересно, пример кода есть. Ждем результата.
 
barabashkakvn:
Fleder:

Скорее всего этот трюк в данной ситуации не пройдёт.

Всегда будет распринтовка нуля.

Уж слишком быстро работают функции  SymbolInfoTick и SymbolInfoDouble - не дольше единиц микросекунд.

В скрипте сделал вот такую штуку:

void OnStart()
  {
uint start=GetTickCount();
double ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
Alert("ask=",ask);
uint time=GetTickCount()-start;
Alert("time=",time);
   
  }
//+------------------------------------------------------------------+

time=0

SymbolInfoTick  в понедельник проверю 

Причина обращения: