гарантии только бог даёт =)
я, например, написал себе ф-цию - пользуюсь ею:
я, например, написал себе ф-цию - пользуюсь ею:
/////////////////////////////////////////////////////////////////////////////////
/**/ 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 иногда не срабатывает по разным причинам с печальными последствиями...
Может как-то анализировать причины?