cheater.wot:
второй алерт возвращает 4108(ошибка в номере тикета). Где ошибка понять не могу, в теории должно работать. Помогите плиз
Не должно работать, т. к. перед удалением ордера нужно проверить его тип. Рыночные ордера удалить невозможно. Только закрыть. Поэтому:
for (int i = OrdersTotal() - 1; i >= 0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if (OrderType() == OP_BUY || OrderType() == OP_SELL) continue; ResetLastError(); if (!OrderDelete(OrderTicket())) Alert(GetLastError()); }
#property strict input int MagicNumber = 12345, // Магик номер SlipPage = 5; // Проскальзывание input bool Symbol_type = false, // FALSE: все ордера, TRUE: только ордера Symbol графика Magic_type = false, // FALSE: все ордера, TRUE: только ордера с MagicNumber Close_BUY = false, // BUY ордера. TRUE: закрыть, FALSE: не закрывать Close_SELL = false, // SELL ордера. TRUE: закрыть, FALSE: не закрывать Del_BUYLIMIT = false, // BUYLIMIT ордера. TRUE: удалить, FALSE: не удалять Del_BUYSTOP = false, // BUYSTOP ордера. TRUE: удалить, FALSE: не удалять Del_SELLLIMIT = false, // SELLLIMIT ордера. TRUE: удалить, FALSE: не удалять Del_SELLSTOP = false; // SELLSTOP ордера. TRUE: удалить, FALSE: не удалять void OnStart() { for (int i = OrdersTotal() - 1; i >= 0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; if( Symbol_type ) if (OrderSymbol()!=_Symbol) continue; if( Magic_type ) if (OrderMagicNumber()!=MagicNumber) continue; ResetLastError(); switch( OrderType() ) { case OP_BUY: if( !Close_BUY ) break; if(!OrderClose(OrderTicket(), OrderLots(), SymbolInfoDouble(OrderSymbol(), SYMBOL_BID), SlipPage)) Alert(GetLastError()); break; case OP_SELL: if( !Close_SELL ) break; if(!OrderClose(OrderTicket(), OrderLots(), SymbolInfoDouble(OrderSymbol(), SYMBOL_ASK), SlipPage)) Alert(GetLastError()); break; case OP_BUYLIMIT: if( !Del_BUYLIMIT ) break; if (!OrderDelete(OrderTicket())) Alert(GetLastError()); break; case OP_BUYSTOP: if( !Del_BUYSTOP ) break; if (!OrderDelete(OrderTicket())) Alert(GetLastError()); break; case OP_SELLLIMIT: if( !Del_SELLLIMIT ) break; if (!OrderDelete(OrderTicket())) Alert(GetLastError()); break; case OP_SELLSTOP: if( !Del_SELLSTOP ) break; if (!OrderDelete(OrderTicket())) Alert(GetLastError()); break; } } }Лучше сделать экспертом.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
написал скрипт, исходя из прочтенного в документации:
int i = OrdersTotal() - 1;
for(i; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
Alert(GetLastError());
OrderDelete(OrderTicket());
Alert(GetLastError());
}
первый алерт пишет об отсутствие ошибки(0)
второй алерт возвращает 4108(ошибка в номере тикета). Где ошибка понять не могу, в теории должно работать. Помогите плиз