При закрытии рыночных позиций пользуюсь конструкцией класса Trade. Примерно такого вида (в цикле перебора)
И периодически возникает ошибка 10004 (Requote)
Ну то есть позиции то в итоге закрываются скриптом, но алерт с данной ошибкой начал уже раздражать. Можно ли что-то с этим сделать, кроме исключения данной ошибки из отчета?
полностью реквоты исключить нельзя, но можно минимизировать: торговые действия должны быть в самом начале OnTick. До всего прочего. И всё прочее тоже должно быстро работать.
то есть надо "вывернуть" алгоритм советника чтобы торговые приказы стали первыми, потом взять профилировщик и забороть тормоза. Потом вручную проводить измерения и вычищать хвосты. И так далее.
в основном реквот - это значит вы не успели среагировать за отведённое время.
полностью реквоты исключить нельзя, но можно минимизировать: торговые действия должны быть в самом начале OnTick. До всего прочего. И всё прочее тоже должно быстро работать.
то есть надо "вывернуть" алгоритм советника чтобы торговые приказы стали первыми, потом взять профилировщик и забороть тормоза. Потом вручную проводить измерения и вычищать хвосты. И так далее.
в основном реквот - это значит вы не успели среагировать за отведённое время.
Не поможет. Там цены используются свежие
//--- check if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) { //--- prepare request for close BUY position m_request.type =ORDER_TYPE_SELL; m_request.price=SymbolInfoDouble(symbol,SYMBOL_BID); } else { //--- prepare request for close SELL position m_request.type =ORDER_TYPE_BUY; m_request.price=SymbolInfoDouble(symbol,SYMBOL_ASK); }
А вот в конструкторе
//+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CTrade::CTrade(void) : m_async_mode(false), m_magic(0), m_deviation(10), m_type_filling(ORDER_FILLING_FOK), m_log_level(LOG_LEVEL_ERRORS)
Можно попробовать увеличить указав бо́льшее значение в строке
bool result_close = Trade.PositionClose(PositionInfo.Ticket(), 500);
Но и это не панацея. Возможны другие причины. И с некоторыми можно бороться только кардинальными методами.
Смените кухню.
Эта кухня - демосчет метаквотов.
Не поможет. Там цены используются свежие
А вот в конструкторе
Можно попробовать увеличить указав бо́льшее значение в строке
Но и это не панацея. Возможны другие причины. И с некоторыми можно бороться только кардинальными методами.
Спасибо! Да, это ближе к теме, я то до этого как-то считал, что там в настройках стоит -1, то есть принимается любое проскальзывание.
Обновление котировок через SymbolInfoTick перед каждым закрытием позиции бессмысленно?
SYMBOL_BID точно берет самые свежие данные из возможного?
Эта кухня - демосчет метаквотов.
Спасибо! Да, это ближе к теме, я то до этого как-то считал, что там в настройках стоит -1, то есть принимается любое проскальзывание.
Обновление котировок через SymbolInfoTick перед каждым закрытием позиции бессмысленно?
SYMBOL_BID точно берет самые свежие данные из возможного?
Почему бессмысленно? Это ведь не обновление котировок, а указание цены по которой надо закрывать позицию.
Что касается свежести SYMBOL_BID читайте документацию… по SymbolInfoTick
Но и это не панацея. Возможны другие причины. И с некоторыми можно бороться только кардинальными методами.
Какие еще могут быть причины? Увеличение значения проскальзывания до 500 сократило число реквотов, но не решило проблему до конца. Скачков больше 20 пунктов в любом случае не было.
Какие еще могут быть причины? Увеличение значения проскальзывания до 500 сократило число реквотов, но не решило проблему до конца. Скачков больше 20 пунктов в любом случае не было.
После этого
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Можно ли полностью исключить реквоты при закрытии позиций?
leon_17, 2022.07.30 10:38
Эта кухня - демосчет метаквотов.
говорить о кардинальных методах не приходится.
Остаётся только писать обработчик ошибок и при получении реквоты действовать соответственно стратегии, в зависимости от размера разницы цен…
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
bool result_close = Trade.PositionClose(PositionInfo.Ticket());
И периодически возникает ошибка 10004 (Requote)Ну то есть позиции то в итоге закрываются скриптом, но алерт с данной ошибкой начал уже раздражать. Можно ли что-то с этим сделать, кроме исключения данной ошибки из отчета?