if (OrdersTotal()!=0) { OrderSelect(n,SELECT_BY_POS); if (ЗакрытьДлинную==true && OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,Проскальзывание,Black); if (ЗакрытьКороткую==true && OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,Проскальзывание,Black); }Люди, подскажите что не так! Пишет ошибка 4051 invalid ticket. И еще, почему неправильный лот (ошибка 131):
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
Возможно проблема в OrderSelect ( n, SELECT_BY_POS ), т.к может выбирать среди отложенных или уже закрытых ордеров. Кода не достаточно, чтобы точно назвать причину. Откуда берется n?
if (OrdersTotal()!=0) { OrderSelect(n,SELECT_BY_POS); if (ЗакрытьДлинную==true && OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,Проскальзывание,Black); if (ЗакрытьКороткую==true && OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,Проскальзывание,Black); }
Люди, подскажите что не так! Пишет ошибка 4051 invalid ticket. И еще, почему неправильный лот (ошибка 131):
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
Возможно проблема в OrderSelect ( n, SELECT_BY_POS ), т.к может выбирать среди отложенных или уже закрытых ордеров. Кода не достаточно, чтобы точно назвать причину. Откуда берется n?
В моей МТС открытым может быть только один ордер, после открытия n++.Уже второй день бьюсь((
В моей МТС открытым может быть только один ордер, после открытия n++.Уже второй день бьюсь((
надежней всегда указывать явно MODE_TRADE
при закрытии ордера я стараюсь вычислять тикет а не номер
делайте перед каждым новым ордером эту команду и возможно неверно вычиляете n
сделайте принтовку - и смотрите журнал
Print ( " А ТОТ ЛИ ТИКЕТ Я ОБРАБАТЫВАЮ [ "+n+ " ]" );
OrderSelect( n, SELECT_BY_TICKET, MODE_TRADES );
--- а вы обрабатываете номер --- а не тикет
index | - | Позиция ордера или номер ордера в зависимости от второго параметра. |
select | - | Флаг способа выбора. Mожет быть одним из следующих величин: SELECT_BY_POS - в параметре index передается порядковый номер позиции в списке, SELECT_BY_TICKET - в параметре index передается номер тикета. |
pool | - | Источник данных для выбора. Используется, когда параметр select равен SELECT_BY_POS. Mожет быть одной из следующих величин: MODE_TRADES (по умолчанию) - ордер выбирается среди открытых и отложенных ордеров, MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров. |
OrderSelect( n, SELECT_BY_TICKET, MODE_TRADES ); не знаю где вы такое у меня нашли)))
To Figar0 ну да, ноль. А как это влияет???
Вы выбираете ордер 1, а надо ордер 0. Нумерация BY_POS начинается с 0!
Полюбому, Вы как-то корявенько делаете,возьмите в качестве примера стандартные советники и посмотрите как организован перебор открытых ордеров.
OrderSelect( n, SELECT_BY_TICKET, MODE_TRADES ); не знаю где вы такое у меня нашли)))
To Figar0 ну да, ноль. А как это влияет???
Я рекомендую вычислять ТИКЕТ
а не номер
в примере я привел работу именно с тикетом а не с номером позиции
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования