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

 
fxsaber:
В чем ошибка?
ORDER_TIME_GTC на символе не поддерживается
 
A100:
ORDER_TIME_GTC на символе не поддерживается
Спасибо!
 

Серьезный баг, т.к. касается самой торговли.

Сервер FIBOGroup-MT5 Server, демо, базовая валюта USD, Netting, build 1525.

Сначала скрин "Ордера, Сделки"

 

Была открыта позиция на 1 лот, и закрыта (не перевернута!) на 1.5 лота.

То, что это одна позиция, подтверждает скрин режим "Позиции"

 

Выделил красным, что еще ошибка произошла с начислением свопа (позиция жила 1 секунду) и с каким-то огромным убытком.

Так выглядит лог

2017.02.09 08:39:14.285 Trades  '1013175': exchange buy 1.00 EURUSD at market
2017.02.09 08:39:15.352 Trades  '1013175': deal #1542796 buy 1.00 EURUSD at 1.06763 done (based on order #2246162)
2017.02.09 08:39:15.354 Trades  '1013175': order #2246162 buy 1.00 / 1.00 EURUSD at 1.06763 done in 1069.212 ms
2017.02.09 08:39:15.354 Trades  '1013175': failed modify #2156238 buy 1.50 EURUSD sl: 0.00000, tp: 0.00000 -> sl: 1.06990, tp: 1.07190 [Invalid stops]
2017.02.09 08:39:15.355 Trades  '1013175': exchange sell 1.50 EURUSD at market, close #2156238 buy 1.50 EURUSD 1.07090333
2017.02.09 08:39:16.421 Trades  '1013175': deal #1542797 sell 1.50 EURUSD at 1.06761 done (based on order #2246163)
2017.02.09 08:39:16.422 Trades  '1013175': order #2246163 sell 1.50 / 1.50 EURUSD at 1.06761 done in 1066.734 ms

Красным выледил автоматическую попытку установить SL/TP открытой позиции. PositionGetDouble(POSITION_VOLUME) вернул 1.5 лота, вместо 1.0. Возникла ошибка Invalid stops, хотя SYMBOL_TRADE_STOPS_LEVEL == 0.

Нужно, наверное, добавить, что закрытие позиции происходило с указанием Request.position = PositionTicket. Т.е. этот параметр был не нулевой.

 

В общем, БАЖИЩЕ, которое напрямую касается денег! 

 

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

ФОРТС. Вопросы по исполнению

fxsaber, 2017.02.09 08:56

Правильно ли понимаю, что в данном случае OrderSend вернул true практически мгновенно, но 65 секунд наблюдалось (ENUM_ORDER_STATE)::OrderGetInteger(ORDER_STATE) == ORDER_STATE_STARTED ?

Кстати, а почему при выставлении отложки через OrderSend он возвращает true сразу, как состояние ордера становится ORDER_STATE_STARTED, а не дожидается ORDER_STATE_PLACED?

Это же не асинхронная OrderSendAsync. 

 
fxsaber:

Кстати, а почему при выставлении отложки через OrderSend он возвращает true сразу, как состояние ордера становится ORDER_STATE_STARTED, а не дожидается ORDER_STATE_PLACED?

Это же не асинхронная OrderSendAsync. 

Наверное потому, что это результат успешного выполнения OrderSend, а не результата успешности установки ордера?
 
Artyom Trishkin:
Наверное потому, что это результат успешного выполнения OrderSend, а не результата успешности установки ордера?
ORDER_STATE_STARTED - это результат успешного OrderCheck.
 
fxsaber:
ORDER_STATE_STARTED - это результат успешного OrderCheck.
А когда ордер уже выставлен, то что-то возвращается?
 
Artyom Trishkin:
А когда ордер уже выставлен, то что-то возвращается?
ORDER_STATE_PLACED.
 
Ну так описано же:


Идентификатор

Описание

ORDER_STATE_STARTED

Ордер проверен на корректность, но еще не принят брокером

ORDER_STATE_PLACED

Ордер принят


Отправляете торговый запрос (OrderSend) - проверяется его корректность и, если ОК, то возвращается true. Те., это ответ о корректности торгового запроса. Сервер ещё не принял этот запрос.

Далее, когда запрос будет принят сервером, то вернётся ответ об этом: ORDER_STATE_PLACED - ордер установлен.

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


Идентификатор

Описание

ORDER_STATE_STARTED

Ордер проверен на корректность, но еще не принят брокером

ORDER_STATE_PLACED

Ордер принят


Отправляете торговый запрос (OrderSend) - проверяется его корректность и, если ОК, то возвращается true. Те., это ответ о корректности торгового запроса. Сервер ещё не принял этот запрос.

Далее, когда запрос будет принят сервером, то вернётся ответ об этом: ORDER_STATE_PLACED - ордер установлен.

Не берусь утверждать, но по логике так получается. Камней подводных не знаю.
Вы описали логику работы с OrderSendAsync, а не OrderSend. После текущего OrderSend отложки захотите удалить ордер и с немалой вероятностью обломаетесь, т.к. Started-ордера не удаляются.