Особенности языка mql5, тонкости и приёмы работы - страница 191

 
template <typename T>
void func(const T &IntOrArray) {} 

void OnStart()
{
  int a=0;
  char b[3]={};
  func(a);
  func(b);	//'b' - parameter conversion not allowed
}

Это баг или фича, что он выкидывает такую ошибку?

С++ это вполне кушает. И массивы в MQL свои. Так что какой-нибудь std::array данная конструкция тоже бы переварила.

 
traveller00:

Это баг или фича, что он выкидывает такую ошибку?

Не баг. Шаблонная перегрузка только поможет.

 

Есть какой-нибудь способ быстро узнать, что по инструменту нет истории (ни локально, ни на сервере)?

Любой запрос CopyXXX ждет получения данных 30 секунд, и перебор большого кол-ва инструментов занимает неоправданно много времени.

Для некоторых инструментов помогает проверка наличия Бида (он пустой), но не для всех.

Проверить можно на ICMarkets-MT5, инструмент Wheat_U0

 
Andrey Khatimlianskii:

Есть какой-нибудь способ быстро узнать, что по инструменту нет истории (ни локально, ни на сервере)?

Любой запрос CopyXXX ждет получения данных 30 секунд, и перебор большого кол-ва инструментов занимает неоправданно много времени.

Для некоторых инструментов помогает проверка наличия Бида (он пустой), но не для всех.

Проверить можно на ICMarkets-MT5, инструмент Wheat_U0

Об этом уже писалось и не раз вот первое что нашёл https://www.mql5.com/ru/forum/285631/page35#comment_9431199

Как вариант у таких символов Аск и Бид  == 0 

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.11.20
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Andrey Khatimlianskii:

Есть какой-нибудь способ быстро узнать, что по инструменту нет истории (ни локально, ни на сервере)?

Любой запрос CopyXXX ждет получения данных 30 секунд, и перебор большого кол-ва инструментов занимает неоправданно много времени.

Для некоторых инструментов помогает проверка наличия Бида (он пустой), но не для всех.

Проверить можно на ICMarkets-MT5, инструмент Wheat_U0

в индикаторе не будет ждать результата работы CopyXXX 

как вариант в таймере в индикаторе обрабатывать CopyXXX и вызывать этот индикатор из ЕА

 
Vladimir Pastushak:

Об этом уже писалось и не раз вот первое что нашёл https://www.mql5.com/ru/forum/285631/page35#comment_9431199

Как вариант у таких символов Аск и Бид  == 0 

Про нулевой Бид написал сразу, иногда он не нулевой.


Igor Makanu:

в индикаторе не будет ждать результата работы CopyXXX 

как вариант в таймере в индикаторе обрабатывать CopyXXX и вызывать этот индикатор из ЕА

А вот это мысль! Спасибо, попробую.

 
fxsaber:

Причина, почему так происходит. После первого OrderSend появляется маркет-ордер и если до момента его исполнения приходит новый тик, то позиции еще нет и делается второй OrderSend.

В связи с этим не будет правильно работать казалось бы нормальный MT5-шаблон и, как следствие, большинство MT5-советников в кодобазе. При этом почти идентичный MT4-шаблон продолжит пахать без проблем.

Неплохая на первый взгляд идея PositionsTotal несколько омрачается необходимостью в MT5 еще анализировать и OrdersTotal на предмет маркет-ордеров.

Будьте аккуратны!

Спасибо, что указали на это. Имел это в виду. А вот сейчас дошло дело до написания советника, и подумалось, есть ли смысл проверять отправленные запросы на сервер? Гипотетически, Вы всё верно описали, но фактически, сервер отвечает на запросы быстро, и такого состояния в большинстве случаев (99%, как мне думается) наступать не будет. А вот скорость алгоритма будет страдать каждый раз. Что по вашему мнению важнее?
 
Vasiliy_Saharov:
Спасибо, что указали на это. Имел это в виду. А вот сейчас дошло дело до написания советника, и подумалось, есть ли смысл проверять отправленные запросы на сервер? Гипотетически, Вы всё верно описали, но фактически, сервер отвечает на запросы быстро, и такого состояния в большинстве случаев (99%, как мне думается) наступать не будет. А вот скорость алгоритма будет страдать каждый раз. Что по вашему мнению важнее?

Войдете в рынок один раз 2 лотами вместо 0.1, и ответ сразу станет очевидным )

 
Andrey Khatimlianskii:

Войдете в рынок один раз 2 лотами вместо 0.1, и ответ сразу станет очевидным )

Если у Вас алгоритм должен заключить 0.1 лота, то есть вероятность совершить дважды по 0.1, и как мне думается, эта вероятность стремится к нулю, а трижды, думаю невозможно. Не говоря уже про 20 раз. Ведь мы говорим о прикладных вещах. Как правило, сервер отвечает наверно в пределе 10 мили сек (это так? я не уверен). Насколько высока вероятность схватить вторую сделку, на Ваш взгляд? А Вы у себя делаете эту проверку? Бывает ли, что сервер может отвечать долго?
 
Vasiliy_Saharov:
Если у Вас алгоритм должен заключить 0.1 лота, то есть вероятность совершить дважды по 0.1, и как мне думается, эта вероятность стремится к нулю, а трижды, думаю невозможно. Не говоря уже про 20 раз. Ведь мы говорим о прикладных вещах. Как правило, сервер отвечает наверно в пределе 10 мили сек (это так? я не уверен). Насколько высока вероятность схватить вторую сделку, на Ваш взгляд? А Вы у себя делаете эту проверку? Бывает ли, что сервер может отвечать долго?

Из статистики: порядка 200-300 сделок в день. Даже с нормальными проверками, но без совсем хитрожопых проверок, в среднем раза 2-3 в неделю ловил двойное открытие лота. Считайте вероятность и прикидывайте, нужны Вам проверки или готовы принять такую вероятность. Лично я себе сделал проверки на максимум.

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