Мой эксперт выполняет двойную запись - страница 5

 
Klammeraffe:

Строка о "каждом тике" может быть причиной того, что этого больше не происходит.

Функция выполняется только при появлении нового бара. Поэтому, скорее всего, только первый тик бара может привести к исполнению сделки. После первого бара код получает "возврат" до появления нового бара. Возможно, это решило мою проблему.

Я думаю, что этот кусок кода взят из статей:

Это еще одно решение, но если брокер или кто-то еще возвращает ошибку, ваш сигнал больше не будет действителен, если только вы не сделаете цикл для проверки снова и снова.
 
doshur:
  • Код, первоначально опубликованный doshur, может объяснить, почему он может видеть в своем журнале "Позиция открыта в...", в то время как ни одна сделка не была открыта. Это потому, что даже если PositionOpen() возвращает true, это не означает, что сделка открыта.См. документацию. Но это не может объяснить, почему была размещена "двойная" сделка.
исправление. Есть двойная"Позиция открыта в..." и 2 сделки были открыты.
Конечно. Я имею в виду "почему он мог видеть...". Дело в том, что в вашем коде нет ничего, что могло бы объяснить, почему вы получили эти 2 сделки.
 
angevoyageur:
Конечно. Я имею в виду "почему он мог видеть...". Дело в том, что в вашем коде нет ничего, что могло бы объяснить, почему вы получили эти 2 сделки.
Хорошо. Поймите.
 
angevoyageur:

Я думаю, что очень важно найти причину этой проблемы, конечно, также важно иметь обходной путь (Sleep ?), пока мы не сможем полностью понять, что происходит. Итак, я попытаюсь восстановить ситуацию:

* При использовании метода PositionOpen из класса CTrade, по крайней мере 3 пользователя получили в определенное время 2 сделки в одном направлении вместо 1, что привело к позиции с удвоенным объемом по сравнению с ожидаемым.

Я использую оба метода, для открытия новой позиции = "старый способ", модификация стоплосса = "CTrade class".


* Эта проблема, похоже, возникает на одном и том же брокере, с символом, где активирована Depth of Market (могут ли заинтересованные люди подтвердить это, пожалуйста).

Да, сервер брокера X, Depth of Market активирован.


* Эта проблема возникает с синхронным ордером, асинхронный ордер не использовался (подтвердите, пожалуйста).

Да, асинхронный ордер не использовался.


* Проблема возникает случайным образом.

Да, но только в напряженные часы работы рынка(макроэкономические события).



 

На мой взгляд, эту проблему можно легко решить.


Советник должен всегда ждать ответа/ответа, если используется функция "PositionSelect(Symbol())" и терминал обновил данные функции, прежде чем возобновить выполнение кода.

Советник всегда должен ждать ответа/отклика, если используется функция "OrderSend(mrequest,mresult)" и терминал обновил данные функции, прежде чем он сможет возобновить выполнение кода.


Я также упоминаю сам терминал, потому что данные функции будут скопированы на терминал, и это также займет некоторое время.

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


Что вы думаете?

 
snelle_moda:

На мой взгляд, эту проблему можно легко решить.


Советник должен всегда ждать ответа/ответа, если используется функция "PositionSelect(Symbol())" и терминал обновил данные функции, прежде чем он сможет возобновить выполнение кода.

Советник должен всегда ожидать ответа/ответа, если используется функция "OrderSend(mrequest,mresult)" и терминал обновил данные функции, прежде чем возобновить выполнение кода.


Я также упоминаю сам терминал, потому что данные функции будут скопированы в терминал, и это также займет некоторое время.

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


Что вы думаете?

Не совсем понимаю, что вы имеете в виду под "всегда ждать ответа..." ?

В любом случае я отправил запрос в ServiceDesk, чтобы попросить совета. Посмотрим.

 
angevoyageur:

Не совсем понимаю, что вы имеете в виду под "всегда ждать ответа..." ?

В любом случае, я отправил запрос в ServiceDesk, чтобы попросить совета. Посмотрим.

"Не уверен, что вы имеете в виду под "всегда ждать ответа..." ?"


Советник должен ждать/останавливаться, пока функция PositionSelect(Symbol()) не завершит копирование данных о позиции в среду программы.

Рассматривайте это как принудительную функцию sleep().

 
snelle_moda:

"Не совсем понимаю, что вы имеете в виду под "всегда ждать ответа..." ?"


Советник должен ждать/останавливаться, пока функция PositionSelect(Symbol()) не завершит копирование данных о позиции в среду программы.

Рассматривайте это как принудительную функцию sleep().

Понятно. Но меня такое решение не устраивает , либо мы чего-то не понимаем, либо где-то есть баг.
 
Я просто надеюсь, что решение будет найдено.

В любом случае, поздравляю всех с Рождеством.
 
Есть ли какие-либо новости от службы технической поддержки?