Получение текущей цены инструмента

 

Есть структура MqlTick и функция для ее наполнения SymbolInfoTick(Symbol(), tick) которая возвращает bool значение.

Из пример документации https://www.mql5.com/ru/docs/constants/structures/mqltick

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);
     }
   else 
      Print("SymbolInfoTick() failed, error = ",GetLastError());
//---
  }

Получается что функция SymbolInfoTick может отработать а может и нет.

А гарантированный способ получить последнюю цену существует? Что в данном случае означает false в ответ на SymbolInfoTick если я должен проверять сработал вызов или нет? 

С той же страницы с документацией:

У каждого тика всегда заполняются все параметры, независимо от того, изменились ли данные по сравнению с предыдущим тиком. Это позволяет всегда иметь актуальное состояние цен на любой момент времени без поиска предыдущих значений по тиковой истории.


Так всегда или не всегда? Если SymbolInfoTick вернуло bool это как понимать?

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен
  • www.mql5.com
Структура для получения текущих цен - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

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

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

 
Nikolay Ivanov #:

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

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

Ок. Тогда гарантированный способ получить последнюю известную цену существует?

 
Павел Раввич #:

Ок. Тогда гарантированный способ получить последнюю известную цену существует?

 SymbolInfoDouble(_Symbol,SYMBOL_ASK)

 
Nikita Chernyshov #:

 SymbolInfoDouble(_Symbol,SYMBOL_ASK)

Он бывает 0 возвращает.

 
Павел Раввич:

Есть структура MqlTick и функция для ее наполнения SymbolInfoTick(Symbol(), tick) которая возвращает bool значение.

Из пример документации https://www.mql5.com/ru/docs/constants/structures/mqltick

Получается что функция SymbolInfoTick может отработать а может и нет.

А гарантированный способ получить последнюю цену существует? Что в данном случае означает false в ответ на SymbolInfoTick если я должен проверять сработал вызов или нет? 

С той же страницы с документацией:

У каждого тика всегда заполняются все параметры, независимо от того, изменились ли данные по сравнению с предыдущим тиком. Это позволяет всегда иметь актуальное состояние цен на любой момент времени без поиска предыдущих значений по тиковой истории.


Так всегда или не всегда? Если SymbolInfoTick вернуло bool это как понимать?

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

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

О чем разговор - не совсем понятно. Вы можете гарантировать беспрерывное соединение с брокером и с пингом стремящимся к 0? Нет. О каком гарантированном тике мы говорим?

 
Павел Раввич #:

Он бывает 0 возвращает.

if(Он бывает 0 возвращает) return;

---

или, как вариант:

SymbolInfoDouble(Symbol(),SYMBOL_ASK)
 
vbymrf #:

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

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

О чем разговор - не совсем понятно. Вы можете гарантировать беспрерывное соединение с брокером и с пингом стремящимся к 0? Нет. О каком гарантированном тике мы говорим?

Мы не говорим о гарантированном тике, а о гарантированном получении последнего известного значения bid и ask не 0 без вероятностных допущений 

 
Павел Раввич #:

Мы не говорим о гарантированном тике, а о гарантированном получении последнего известного значения bid и ask не 0 без вероятностных допущений 

пока вы будете прокручивать цикл в поиске НЕ 0, уже придет нормальный тик, а если нет, то и смысл в тот момент что-то получать, за много лет ниразу не видел, что-бы у меня открылся ордер с 0 или в стопах стоял 0

а если брокер дает такие котировки, полезно закидать его торговыми приказами)

что-бы не было спам-приказов, и есть проверка на 0, а искать последний рабочих, нужна какая-то веская причина, у вас я ее не вижу.

 
lynxntech #:

пока вы будете прокручивать цикл в поиске НЕ 0, уже придет нормальный тик, а если нет, то и смысл в тот момент что-то получать, за много лет ниразу не видел, что-бы у меня открылся ордер с 0 или в стопах стоял 0

а если брокер дает такие котировки, полезно закидать его торговыми приказами)

что-бы не было спам-приказов, и есть проверка на 0, а искать последний рабочих, нужна какая-то веская причина, у вас я ее не вижу.

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

 
Павел Раввич #:

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

я вроде ответил на все ваши вопросы, 

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

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