Ошибки, баги, вопросы - страница 3313

 
Vitaly Muzichenko #:

Есть некоторые баги, которые многие пропускают считая, что это нормальное явление,

но fxsaber об этом всегда пишет, а mql правят, чем многим помогают ускоряя работу кодов.

Надеюсь, ваши сомнения развеял? 

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

 
fxsaber #:

Теоретически советник может иметь все время (после выполнения OnInit) полную информацию об ордерах/позициях/сделках без следующих функций.

Теоретически ДА. Но ведь вы предлагаете

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

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

fxsaber, 2023.04.25 12:04

Запустите этот скрипт.

void OnStart()
{
  long State = -1;
  
  while (!IsStopped())
    if (OrderGetTicket(OrdersTotal() - 1) && (State != OrderGetInteger(ORDER_STATE)))
      Print(EnumToString((ENUM_ORDER_STATE)(State = OrderGetInteger(ORDER_STATE))));
}

И руками откройте отложку (желательно, чтобы не было других ордеров).

2023.04.25 12:57:26.983 '160325739': buy limit 1 AUDUSD at 0.66664
2023.04.25 12:57:27.036 '160325739': accepted buy limit 1 AUDUSD at 0.66664
2023.04.25 12:57:27.036 ORDER_STATE_STARTED

2023.04.25 12:57:27.041 ORDER_STATE_PLACED
2023.04.25 12:57:27.043 '160325739': order #2289634089 buy limit 1 / 1 AUDUSD at 0.66664 done in 59.632 ms

2023.04.25 12:58:11.323 ORDER_STATE_REQUEST_ADD
2023.04.25 12:58:11.352 ORDER_STATE_PLACED
2023.04.25 12:58:11.352 '160325739': deal #2278919416 buy 1 AUDUSD at 0.66664 done (based on order #2289634089)

 
Alexey Viktorov #:

Теоретически ДА. Но ведь вы предлагаете

Не вижу связи между приведенными вами двумя цитатами.

 
fxsaber #:

Не вижу связи между приведенными вами двумя цитатами.

Главное что я вижу. На этом я с благодарностью откланиваюсь…

 
Alexey Viktorov #:

Может это связано с тем, что модификация отправляется из  функции OnTradeTransaction()?

Сейчас буду пробовать связать OnTradeTransaction() с OnTick(). Пусть модифаит на следующем тике. Конечно это не правильно, с моей точки зрения, но как-то надо ведь сделать чтобы работало…

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

 
Andrey Dik #:

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

Да, именно так и получилось. 

Я заменил строку 

    if(trans.type == TRADE_TRANSACTION_ORDER_ADD)

на 

    if(trans.type == TRADE_TRANSACTION_ORDER_UPDATE && trans.order_state == ORDER_STATE_PLACED && trans.order > order)

Правда пришлось поставить проверку тикета ордера. Иначе получалась модификация дважды с соответствующей ошибкой [нет изменений]


ps; В принципе, наверное можно в цикле do while подождать пока статус ордера изменится, но не уверен, что это будет быстрей…

 

На всякий случай напомню, что возможны ситуации, когда ордера уже нет в действующих и ещё нет в истории.

Также, когда ордера в действующих уже нет, а позиции, открытой этим ордером, ещё нет (или наоборот, ещё есть позиция, закрытая этим ордером).

 
JRandomTrader #:

На всякий случай напомню, что возможны ситуации, когда ордера уже нет в действующих и ещё нет в истории.

Также, когда ордера в действующих уже нет, а позиции, открытой этим ордером, ещё нет (или наоборот, ещё есть позиция, закрытая этим ордером).

И такое встречается довольно часто.

 
JRandomTrader #:

На всякий случай напомню, что возможны ситуации, когда ордера уже нет в действующих и ещё нет в истории.

Также, когда ордера в действующих уже нет, а позиции, открытой этим ордером, ещё нет (или наоборот, ещё есть позиция, закрытая этим ордером).

fxsaber #:

И такое встречается довольно часто.

Поделитесь пожалуйста ссылками, где это обсуждалось.

Я уже создавал тему по этому поводу для 4ки. Но это явление для 4ки так и осталось в категории "хз". Были даже такие мнения:

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

Как правильно работать с историей ордеров?

Aleksey Semenov, 2022.07.12 11:34

в мт4 у ордера только 2 состояния (открыт и закрыт), функция не может потерять ордер где-то между, может быть несоответствие состояния из-за запаздывания ответа, но чтоб потерять

Также был бы благодарен за ссылку, где вы (@fxsaber) приводили метод воспроизведения для МТ5 (а вы наверняка занимались этим вопросом, я полагаю)

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

Как правильно работать с историей ордеров?

fxsaber, 2022.07.12 09:38

Попробуйте воспроизвести на MT4. На MT5 это делается легко, а вот на MT4 - сомневаюсь.

 
Vladislav Boyko #:

Поделитесь пожалуйста ссылками, где это обсуждалось.

Здесь.
Причина обращения: