Ошибка 4051 invalid ticket

 
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);
 
WyRus:
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?

 
Talex:
WyRus:

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++.Уже второй день бьюсь((
 
WyRus:
В моей МТС открытым может быть только один ордер, после открытия n++.Уже второй день бьюсь((
После открытия n++, а до ++ что? Не иначе 0? Такое впечатление, что нам надо Вам помочь, а не Вам получить помощь.) Каждую деталь как под пытками...
 
WyRus писал (а)

надежней всегда указывать явно 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 - ордер выбирается среди закрытых и удаленных ордеров.

 

To YuraZ
OrderSelect( n, SELECT_BY_TICKET, MODE_TRADES ); не знаю где вы такое у меня нашли)))

To Figar0 ну да, ноль. А как это влияет???
 

Вы выбираете ордер 1, а надо ордер 0. Нумерация BY_POS начинается с 0!

Полюбому, Вы как-то корявенько делаете,возьмите в качестве примера стандартные советники и посмотрите как организован перебор открытых ордеров.

 
WyRus:

To YuraZ
OrderSelect( n, SELECT_BY_TICKET, MODE_TRADES ); не знаю где вы такое у меня нашли)))

To Figar0 ну да, ноль. А как это влияет???



Я рекомендую вычислять ТИКЕТ

а не номер

в примере я привел работу именно с тикетом а не с номером позиции

 
Да, теперь работает! Figar0 поклон до земли))
Причина обращения: