Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Строка о "каждом тике" может быть причиной того, что этого больше не происходит.
Функция выполняется только при появлении нового бара. Поэтому, скорее всего, только первый тик бара может привести к исполнению сделки. После первого бара код получает "возврат" до появления нового бара. Возможно, это решило мою проблему.
Я думаю, что этот кусок кода взят из статей:
Конечно. Я имею в виду "почему он мог видеть...". Дело в том, что в вашем коде нет ничего, что могло бы объяснить, почему вы получили эти 2 сделки.
Я думаю, что очень важно найти причину этой проблемы, конечно, также важно иметь обходной путь (Sleep ?), пока мы не сможем полностью понять, что происходит. Итак, я попытаюсь восстановить ситуацию:
* При использовании метода PositionOpen из класса CTrade, по крайней мере 3 пользователя получили в определенное время 2 сделки в одном направлении вместо 1, что привело к позиции с удвоенным объемом по сравнению с ожидаемым.
Я использую оба метода, для открытия новой позиции = "старый способ", модификация стоплосса = "CTrade class".
* Эта проблема, похоже, возникает на одном и том же брокере, с символом, где активирована Depth of Market (могут ли заинтересованные люди подтвердить это, пожалуйста).
Да, сервер брокера X, Depth of Market активирован.
* Эта проблема возникает с синхронным ордером, асинхронный ордер не использовался (подтвердите, пожалуйста).
Да, асинхронный ордер не использовался.
* Проблема возникает случайным образом.
Да, но только в напряженные часы работы рынка(макроэкономические события).
На мой взгляд, эту проблему можно легко решить.
Советник должен всегда ждать ответа/ответа, если используется функция "PositionSelect(Symbol())" и терминал обновил данные функции, прежде чем возобновить выполнение кода.
Советник всегда должен ждать ответа/отклика, если используется функция "OrderSend(mrequest,mresult)" и терминал обновил данные функции, прежде чем он сможет возобновить выполнение кода.
Я также упоминаю сам терминал, потому что данные функции будут скопированы на терминал, и это также займет некоторое время.
Таким образом, размер текущей позиции всегда будет рассчитываться правильно, поэтому двойной ордер больше не будет иметь места.
Что вы думаете?
На мой взгляд, эту проблему можно легко решить.
Советник должен всегда ждать ответа/ответа, если используется функция "PositionSelect(Symbol())" и терминал обновил данные функции, прежде чем он сможет возобновить выполнение кода.
Советник должен всегда ожидать ответа/ответа, если используется функция "OrderSend(mrequest,mresult)" и терминал обновил данные функции, прежде чем возобновить выполнение кода.
Я также упоминаю сам терминал, потому что данные функции будут скопированы в терминал, и это также займет некоторое время.
Таким образом, размер текущей позиции всегда будет рассчитываться правильно, поэтому двойной ордер больше не будет иметь место.
Что вы думаете?
Не совсем понимаю, что вы имеете в виду под "всегда ждать ответа..." ?
В любом случае я отправил запрос в ServiceDesk, чтобы попросить совета. Посмотрим.
Не совсем понимаю, что вы имеете в виду под "всегда ждать ответа..." ?
В любом случае, я отправил запрос в ServiceDesk, чтобы попросить совета. Посмотрим.
"Не уверен, что вы имеете в виду под "всегда ждать ответа..." ?"
Советник должен ждать/останавливаться, пока функция PositionSelect(Symbol()) не завершит копирование данных о позиции в среду программы.
Рассматривайте это как принудительную функцию sleep().
"Не совсем понимаю, что вы имеете в виду под "всегда ждать ответа..." ?"
Советник должен ждать/останавливаться, пока функция PositionSelect(Symbol()) не завершит копирование данных о позиции в среду программы.
Рассматривайте это как принудительную функцию sleep().