гарантии только бог даёт =)
я, например, написал себе ф-цию - пользуюсь ею:
я, например, написал себе ф-цию - пользуюсь ею:
///////////////////////////////////////////////////////////////////////////////// /**/ int _OrderClose ( int _OrderTicket, int _Slippage ) ///////////////////////////////////////////////////////////////////////////////// // Стандартная ф-ция OrderClose + вывод информации. // При успешном выполнении возвращает "1", при ошибке возвращает "-1", при ошибке № ордера возвращает "-2" ///////////////////////////////////////////////////////////////////////////////// { Print( "_OrderClose ( ", _OrderTicket, ", ", _Slippage, " ) - loaded..." ); if ( OrderSelect( _OrderTicket, SELECT_BY_TICKET ) == false ) { Print( "_OrderClose ( ", _OrderTicket, ", ", _Slippage, " ) - return(-2);" ); return(-2); } int ordertype = OrderType(); string ordersymbol = OrderSymbol(); double orderlots = NormalizeDouble( OrderLots(), 1 ); string _OrderType_str = _OrderType_str ( ordertype ); int digits = MarketInfo( ordersymbol, MODE_DIGITS ); if ( ordertype > OP_SELL ) { return(-1); } if ( _Slippage < 0 ) { _Slippage = 0; } double _ClosePrice = NormalizeDouble( MarketInfo ( ordersymbol, MODE_ASK ), digits ); if ( ordertype == OP_BUY ) { _ClosePrice = NormalizeDouble( MarketInfo ( ordersymbol, MODE_BID ), digits ); } color _Color = Red; for ( int x = 0; x < 3; x ++ ) { if ( OrderSelect( _OrderTicket, SELECT_BY_TICKET ) == false ) { Print( "_OrderClose ( ", _OrderTicket, ", ", _Slippage, " ) - return(-2);" ); return(-2); } int orderclose = OrderClose( _OrderTicket, orderlots, _ClosePrice, _Slippage, _Color ); if ( orderclose > 0 ) { Print( "_OrderClose ( ", _OrderTicket, ", ", _Slippage, " ) - return(1);" ); return(1); } int error_code = GetLastError(); Print ( "Ошибка при закрытии позиции - ", error_code ); Sleep(10000); } Print( "_OrderClose ( ", _OrderTicket, ", ", _Slippage, " ) - return(-1);" ); return(-1); }
и всё это - вместо одной строчки ордерклоус... =)))
Может как-то анализировать причины?
да, это у меня делает другая ф-ция =0)
только пока нет развёрнутого описания ошибок и рекомендаций - что с ними делать, она у меня просто отправляет уведомление на мыло и, в крайнем случае (серьёзная ошибка), прекращает работу эксперта.
Спасибо.
Опять не сработал OrderClose - второй раз за две недели.
OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow);
К сожалению, вышепреведенный код тоже не гарантирует закрытие позиции - он просто пытается сделать это три раза...
Я специально смоделировал закрытие ордера в эксперте по каждому тику. Не закрывает. (Конечно, я мог закрыть вручную, но это не решит проблему в целом). Более глубокий анализ показал следующее:
1. OrderClose возвращает 0. То есть ордер не закрыт.
2. GetLastError выдает 129 (Invalid Price) и 138 (Requote).
Что делать? Как обработать ошибки и закрыть ордер программно?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Просто OrderClose иногда не срабатывает по разным причинам с печальными последствиями...
Может как-то анализировать причины?