Вопрос по RefreshRates() Разработчикам

 

RefreshRates() возвращает true если новая цена. Если цена таже, но она с новым временем. Будет true или false?

 
Новый тик приходит только с изменеим цены. То есть - наличие новой цены автоматически означает наличие нового времени. Хотя с другой стороны, помню скриншоты одного из дилера (с МТ4), у которого не было пропусков минутных свечей, и пропуски заполнялись барами H=O=C=L .
 

Возвращает true, если были обновлены ценовые данные, то есть пока эксперт работал пришёл новый тик по данному инструменту. Или несколько тиков - тогда вполне возможно что текущая цена будет та же, что и при старте эксперта.

 

Прошло несколько тиков от начала выполнения функции старт, в связи с этим возможна ситуация - на момент вызова RefresheRates() цена опять таже, что и на момент запуска функции старт, но время другое. В этом случае будет true, или false?

 
true
 
stringo:

Возвращает true, если были обновлены ценовые данные, то есть пока эксперт работал пришёл новый тик по данному инструменту. Или несколько тиков - тогда вполне возможно что текущая цена будет та же, что и при старте эксперта.

Значит обновление данных проходит только по текущему инструменту. Так понимаю.
Вопрос:
А как тогда правильно обновить данные по другим инструментам по которым работает советник ?
Такой кусок кода понимаю не поможет обновить данные по разным валютам, только по текущей ?
RefreshRates();
double bid_EUR =MarketInfo("EURUSD",MODE_BID);
double ask_JPY =MarketInfo("USDJPY",MODE_ASK);
 
mazzz:

RefreshRates();
double bid_EUR =MarketInfo("EURUSD",MODE_BID);
double ask_JPY =MarketInfo("USDJPY",MODE_ASK);
Для MarketInfo не нужно вызывать RefreshRates, так как MarketInfo всегда выдает последнюю рыночную информацию.
 
Renat:
mazzz:

RefreshRates();
double bid_EUR =MarketInfo("EURUSD",MODE_BID);
double ask_JPY =MarketInfo("USDJPY",MODE_ASK);
Для MarketInfo не нужно вызывать RefreshRates, так как MarketInfo всегда выдает последнюю рыночную информацию.
Мне кажется тут есть разница. RefreshRates(), насколько я понимаю обращается к серверу и выдает свежую информацию.
А MarketInfo берет информацию уже существующую в терминале.
Или я чего то не понимаю ? В чем тогда разница между этими функциями ?
 
mazzz:

Мне кажется тут есть разница. RefreshRates(), насколько я понимаю обращается к серверу и выдает свежую информацию.
Неправильно. RefreshRates не обращается к серверу.

Каждый скрипт имеет у себя локальную копию части рыночной информации, которая обновляется при входе в start() или вызове RefreshRates(). Эта локальная копия информации нужна для того, чтобы у скрипта была точно закрепленные данные (чтобы вдруг не получилось, что Ask != Ask).

MarketInfo() позволяет обращаться напрямую к постоянно обновляемым данным в Market Watch и получать всегда последнюю информацию.
 
Renat:
mazzz:

Мне кажется тут есть разница. RefreshRates(), насколько я понимаю обращается к серверу и выдает свежую информацию.
Неправильно. RefreshRates не обращается к серверу.

Каждый скрипт имеет у себя локальную копию части рыночной информации, которая обновляется при входе в start() или вызове RefreshRates(). Эта локальная копия информации нужна для того, чтобы у скрипта была точно закрепленные данные (чтобы вдруг не получилось, что Ask != Ask).

MarketInfo() позволяет обращаться напрямую к постоянно обновляемым данным в Market Watch и получать всегда последнюю информацию.

Можно пояснить, что такое Market Watch ? Подозреваю имеется ввиду обращение к серверу ?
Потому информация MarketInfo() имеет большую актуальность по синхронизации с сервером. Правильно я понимаю ?
Благодарю за информативные ответы.
 
Никто к серверу не обращается. Терминал всегда имеет полное рыночное окружение (только исторические данные могут подгружаться в режиме on demand).

Попробуем по другому:
  • в терминале постоянно в режиме реального времени обновляется вся рыночная информация
  • каждый скрипт имеет свой КЕШ для часто используемых данных (Bid, Ask и тд)
Кеш рыночного окружения для скрипта нужен для того, чтобы заморозить образ рынка на момент старта и не иметь проблем с тем, что Ask в одной строке не равен аску в другой. Функция RefreshRates() как раз и обновляет именно этот кеш.

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