Всем добрый день.
Разбираюсь с MQL5, пишу простого эксперта для первого подхода и всё бы хорошо, но наткнулся на проблему, которая не гуглится.
Проблема следующая - при запуске бэктеста, такое ощущение, что OnTick выполняется одновременно в несколько потоков. Поэтому как дело доходит до исполнения ордера, то вместо одного ордера размещается три(!). Не могу понять почему (код ниже).
Защищаюсь от наличия нескольких ордеров глобальной переменной, которая если True, то ордера открываться не должны. Ан нет. Уже и избыточных проверок наставил, return'ов навтыкал после размещения ордеров, пробовал делать Sleep после размещения ордера (да, думал, вдруг, значение переменной hasOrders обновляется с задержкой, поэтому раз уж я выставил ордер, то подождать секунду это нормально). Уже закрадывается мысль что какой-то кусок кода выполняется на самом деле асинхронно, но не могу найти этому подтверждения.
Буду признателен за подсказку в какую сторону глядеть.
OrdersTotal() возвращает количество ордеров, а Вы открываете позицию.
Всем добрый день.
Разбираюсь с MQL5, пишу простого эксперта для первого подхода и всё бы хорошо, но наткнулся на проблему, которая не гуглится.
Проблема следующая - при запуске бэктеста, такое ощущение, что OnTick выполняется одновременно в несколько потоков. Поэтому как дело доходит до исполнения ордера, то вместо одного ордера размещается три(!). Не могу понять почему (код ниже).
Защищаюсь от наличия нескольких ордеров глобальной переменной, которая если True, то ордера открываться не должны. Ан нет. Уже и избыточных проверок наставил, return'ов навтыкал после размещения ордеров, пробовал делать Sleep после размещения ордера (да, думал, вдруг, значение переменной hasOrders обновляется с задержкой, поэтому раз уж я выставил ордер, то подождать секунду это нормально). Уже закрадывается мысль что какой-то кусок кода выполняется на самом деле асинхронно, но не могу найти этому подтверждения.
Буду признателен за подсказку в какую сторону глядеть.
вместо OrdersTotal() использовать PositionsTotal()
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем добрый день.
Разбираюсь с MQL5, пишу простого эксперта для первого подхода и всё бы хорошо, но наткнулся на проблему, которая не гуглится.
Проблема следующая - при запуске бэктеста, такое ощущение, что OnTick выполняется одновременно в несколько потоков. Поэтому как дело доходит до исполнения ордера, то вместо одного ордера размещается три(!). Не могу понять почему (код ниже).
Защищаюсь от наличия нескольких ордеров глобальной переменной, которая если True, то ордера открываться не должны. Ан нет. Уже и избыточных проверок наставил, return'ов навтыкал после размещения ордеров, пробовал делать Sleep после размещения ордера (да, думал, вдруг, значение переменной hasOrders обновляется с задержкой, поэтому раз уж я выставил ордер, то подождать секунду это нормально). Уже закрадывается мысль что какой-то кусок кода выполняется на самом деле асинхронно, но не могу найти этому подтверждения.
Буду признателен за подсказку в какую сторону глядеть.