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

Alexey Navoykov
4561
Alexey Navoykov  
fxsaber:

Возникает необходимость передать по ссылке без модификации - для скорости, либо же объект.

Ну с этим-то никаких проблем вообще нет.  Если необходимости передать для модификации не возникает, тогда можете смело пропустить всё написанное мной мимо ушей )

Есть реальный пример в MQL5, когда возникает эта проблема?

Реального примера удобства не хватает.

Я ж вроде всё подробно описал, и в словах, и в кодах.  Раз вам по какой-то причине это кажется непонятным, то очевидно с описанными проблемами вы точно не сталкиваетесь, с чем вас и поздравляю. Спите спокойно, дорогой товарищ )

Мой пост наверно был больше ориентирован на хардкорных шаблонщиков, а также любителей занудного контроля типов.

TheXpert
18196
TheXpert  
Alexey Navoykov:

Часто возникает необходимость передать какую-то переменную в качестве шаблонного аргумента по ссылке для её модификации.  Однако существующая спецификация шаблонов C++, к сожалению, не позволяет явно указать неконстантность аргумента, как это происходит в обычных функциях:

во-первых в С++ просто гораздо богаче возможности шаблонов, во-вторых в С++ есть SFINAE, который позволяет наворотить такое что волосы дыбом.

вот так это может выглядеть:

template<class T>
    static void const_check(T & t){
        BOOST_STATIC_ASSERT(! boost::is_const<T>::value);
    }
а вообще это то же самое что с указателем. нельзя задать напрямую что нужный тип должен быть не указателем, но можно это сделать через некомпилируемую специализацию.
Alexey Navoykov
4561
Alexey Navoykov  
TheXpert:

вот так это может выглядеть

Как я понимаю, это вызывает ошибку компиляции в теле функции (которую и так можно вызвать), но на процесс выбор шаблона не влияет.  Требуется манипуляция с типом возвращаемого значения функции.  Впрочем не суть. Конечно понятно, что в С++ можно много чего наворотить.  Но там всё это реализуется не только благодаря шаблонам, но также за счёт спецификатора decltype, которого в MQL нет, а он нужен.

fxsaber
16257
fxsaber  
Alexey Navoykov:

Мой пост наверно был больше ориентирован на хардкорных шаблонщиков, а также любителей занудного контроля типов.

Думал, что после написания TypeToBytes стал компетентнее в шаблонах.

Alexey Navoykov
4561
Alexey Navoykov  
fxsaber:

Думал, что после написания TypeToBytes стал компетентнее в шаблонах.

Вообще я щас осознал, что словосочетание "хардкорный шаблонщик" применительно к MQL звучит иронично. Примерно как "дипломированный MQL-программист" ))

Тут на шаблонах особо сложного ничего не сделаешь, причём не только ввиду отсутствия дополнительного функционала языка, но и из-за некорректной работы имеющегося. Постоянно натыкаясь на баги.

fxsaber
16257
fxsaber  

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Slava, 2018.09.19 06:37

Чтобы поместить объект над всеми остальными вне зависимости от порядка прописки, необходимо сначала сделать его невидимым на всех таймфреймах, а потом обратно вернуть видимость
Andrey Kotrin
4496
Andrey Kotrin  

Добрый день!

В документации явным образом прописано, что на время работы обработчика OnTick https://www.mql5.com/ru/docs/runtime/event_fire#newtick

обработка вновь поступающих тиков не производится. Верно ли то же самое в отношении обработчиков OnBookEvent, OnTimer, OnChartEvent  или нет.

Вопрос вызван тем, что во всех перечисленных обработчиках использую собственную обработку тика.

Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Сразу же после того, как клиентский терминал загрузит программу (эксперт или пользовательский индикатор) и запустит процесс инициализации глобальных переменных, будет послано событие Init, которое обрабатывается функцией OnInit(), если она есть. Это событие также генерируется после смены финансового инструмента и/или периода графика, после...
fxsaber
16257
fxsaber  
Andrey Kotrin:

Добрый день!

В документации явным образом прописано, что на время работы обработчика OnTick https://www.mql5.com/ru/docs/runtime/event_fire#newtick

обработка вновь поступающих тиков не производится. Верно ли то же самое в отношении обработчиков OnBookEvent, OnTimer, OnChartEvent  или нет.

Вопрос вызван тем, что во всех перечисленных обработчиках использую собственную обработку тика.

Точно не верно.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: HistoryTicks

fxsaber, 2018.04.10 17:53

Боевой советник на высокочастотном символе (200-350 тиков в минуту) с частыми торговыми приказами (несколько раз в минуту) и пингом 100 ms в стандартном режиме работы теряет ~5% тиков.

В режиме HistoryTicks потерь нет.


ЗЫ Можете смело использовать мультивалютный OnTick под MT5.

Andrey Kotrin
4496
Andrey Kotrin  
fxsaber:

Точно не верно.


ЗЫ Можете смело использовать мультивалютный OnTick под MT5З

За ссылку спасибо! Собственно проблема не в потере тиков, а в возможном частичном обновлении информации  при обработке текущего. Аналогичную проблему решал при организации общения роботов одновременно торгующих

на разных инструментах через переменные терминала. Поскольку робот ориентирован на работу на хостинге использование сторонних dll, а соответсвенно mutex’а невозможно, использовал эмуляцию с GlobalVariableSetOnCondition.

fxsaber
16257
fxsaber  
Andrey Kotrin:

За ссылку спасибо! Собственно проблема не в потере тиков, а в возможном частичном обновлении информации  при обработке текущего. Аналогичную проблему решал при организации общения роботов одновременно торгующих

на разных инструментах через переменные терминала. Поскольку робот ориентирован на работу на хостинге использование сторонних dll, а соответсвенно mutex’а невозможно, использовал эмуляцию с GlobalVariableSetOnCondition.

Возможно, Вам подойдет вариант передачи данных через Ресурсы.