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

 
doshur:
Есть ли новости от службы технической поддержки?
Пока нет.
 
angevoyageur:
Пока нет.

Здравствуйте,

Есть новости от службы поддержки?

 
doshur:

Здравствуйте,

Есть новости от службы поддержки?

Вы можете быть уверены, что я опубликую ответ здесь, если получу его.

Лично мне покане удается воспроизвести проблему.

 

Мой советник генерирует сигнал очень медленно, и сегодня он совершил сделку.

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

 
doshur:

Мой советник генерирует сигнал очень медленно, и сегодня он совершил сделку.

Никаких проблем с размером лота после использования нового кода, однако я не могу подтвердить, что новый код работает.

Привет, Дошур,

Ответа от ServiceDesk пока нет. Однако ваш вопрос "беспокоит" меня Можете ли вы подтвердить, что вы получаете эту проблему двойных сделок на реальном счете, а не на демо? (Я не могу воспроизвести эту проблему на моем демо-счете).

Также, проверив еще раз ваши сообщения, я заметил этот лог:

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

Мой советник делает двойную запись

(based on order #40018327) DEAL2 - Entry 3

2013.12.20 08:35:01 Trades '800****': exchange buy 0.01 EURUSD at market placed for execution in 331 ms DEAL2 - Entry 2

2013.12.20 08:35:01 Trades '800****': deal #27731691 buy 0.01 EURUSD at 1.36353 done (based on order #40018326) DEAL 1 - Entry 3

2013.12.20 08:35:00 Trades '800****': exchange buy 0.01 EURUSD at market DEAL2 - Entry 1

2013.12.20 08:35:00 Торговля '800****': биржевая покупка 0.01 EURUSD на рынке размещена для исполнения через 313 мс DEAL1 - Вход 2

2013.12.20 08:35:00 Торговля '800****': биржевая покупка 0.01 EURUSD на рынке DEAL1 - Вход 1

Если я правильно понимаю, это подтверждает, что проблема в том, что PositionSelect() все еще false, в то время как новая позиция открывается. Действительно, вы можете видеть, что 1 сделка приводит к 3 входам, и вторая сделка инициируется до того, как приходит третий вход для сделки 1 (подтверждение новой сделки/позиции).

Что касается обходного пути с использованием функции Sleep(), меня это не устраивает, поскольку нет способа узнать, какую задержку использовать. Конечно, чем больше эта задержка, тем меньше шанс получить "двойную сделку", но все же это возможно. Поэтому я все еще ищу лучшее решение.


 
angevoyageur:

Что касается обходного пути с использованием функции Sleep(), меня это не устраивает, так как нет возможности узнать, какую задержку использовать. Конечно, чем больше эта задержка, тем меньше шанс получить "двойную сделку", но все же это возможно. Поэтому я все еще ищу лучшее решение.

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

bool fatalError=false; // atention: declare this as global

....

if (fatalError==false) {
  if (m_Trade.PositionOpen(Symbol(), ORDER_TYPE_BUY, LotSize, Price, 0, 0)) {
    Print("Position opened in ", Symbol());
    int maxTimeout=0;
    while (!PositionSelect(Symbol())) {
       Sleep(100);
       maxTimeout++;
       if (maxTimeout>100) {
          Print("### PositionSelect fatal error!");
          fatalError=true;
          break;
       }
    }
    Print("--> PositionSelect delay=",maxTimeout*100);
    break;
  }
}
 
angevoyageur:

Привет, Дошур,

Ответа от ServiceDesk пока нет. Однако ваша проблема "беспокоит" меня Можете ли вы подтвердить, что вы получаете эту проблему двойных сделок на реальном счете, а не на демо? (Я не могу воспроизвести эту проблему на своем демо-счете).

Также, проверив еще раз ваши сообщения, я заметил этот лог:

Если я правильно понимаю, это подтверждает, что проблема в том, что PositionSelect() все еще false, в то время как новая позиция открывается. Действительно, вы можете видеть, что 1 сделка приводит к 3 входам, и вторая сделка начинается до того, как приходит третий вход для сделки 1 (подтверждение новой сделки/позиции).

Что касается обходного пути с использованием функции Sleep(), меня это не устраивает, так как нет способа узнать, какую задержку использовать. Конечно, чем больше эта задержка, тем меньше шанс получить "двойную сделку", но все же это возможно. Поэтому я все еще ищу лучшее решение.


Да. Я использую реальный счет
Еще одна сделка совершена. Никаких двойных записей. Может быть, мой новый код работает?
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Environment State / Account Properties - Documentation on MQL5
 
figurelli:

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

Интересная идея. Я воспользуюсь ею для выявления проблемы, но мне не нравится функция Sleep() Хотя каждый волен выбирать свое решение.

Спасибо.

Documentation on MQL5: Common Functions / Sleep
Documentation on MQL5: Common Functions / Sleep
  • www.mql5.com
Common Functions / Sleep - Documentation on MQL5
 
angevoyageur:

Интересная идея. Я буду использовать ее для выявления проблемы, но мне не нравится функция Sleep() Хотя каждый волен выбирать свое решение.

Спасибо.

Не за что, это решение - просто обходной путь, мне тоже не нравится Sleep, так как вы потеряете тики. Возможно, семафор/флаги или даже машины состояний были бы более безопасными/эффективными/элегантными.
 
figurelli:
Не за что, это решение - просто обходной путь, мне тоже не нравится Sleep, поскольку вы будете терять тики. Возможно, семафор/флаги или даже машины состояний были бы более безопасными/эффективными/элегантными.
Мои тесты с вашим решением показывают, что PositionSelect() иногда истинно сразу после PositionOpen (maxcount=0), или ложно (maxcount=1). Таким образом, очевидно, что существует задержка. Было бы интересно, если бы кто-нибудь смог проверить это на реальном счете.
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
Documentation on MQL5: Standard Constants, Enumerations and Structures / Environment State / Account Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Environment State / Account Properties - Documentation on MQL5