OrderClose в скрипте

 
Почему в скрипте оператор
OrderClose(OrderTicket(),OrderLots(),Bid,10);


всегда выдает

2005.06.21 15:48:20	ListPositions EURJPY,Daily: error(129): invalid price
2005.06.21 15:48:20	ListPositions EURJPY,Daily: USDJPY #875663 m0 t0
2005.06.21 15:48:20	ListPositions EURJPY,Daily: error(129): invalid price
2005.06.21 15:48:20	ListPositions EURJPY,Daily: USDCAD #898684 m0 t1
2005.06.21 15:48:20	ListPositions EURJPY,Daily: error(129): invalid price
2005.06.21 15:48:20	ListPositions EURJPY,Daily: GBPJPY #901213 m0 t0
2005.06.21 15:48:20	ListPositions EURJPY,Daily: error(129): invalid price


?

Попытался просто закрыть все ордера с маджик = 0.
Написал маленький скриптик, но он работать не хочет.

//+------------------------------------------------------------------+
//|                                                ListPositions.mq4 |
//|                                   Copyright © 2005, Yuri Makarov |
//|                                       http://mak.tradersmind.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Yuri Makarov"
#property link      "http://mak.tradersmind.com"
#include <stdlib.mqh>

int start()
{
   int count=OrdersTotal();
   
   for(int i = 0; i < count; i++)
   {
      if (OrderSelect(i, SELECT_BY_POS) == false) continue;
      if (OrderMagicNumber( ) == 0)
      {
         Print(OrderSymbol()," #",OrderTicket()," m",OrderMagicNumber(),
            " t",OrderType());
         OrderClose(OrderTicket(),OrderLots(),Bid,10);
         int err=GetLastError();
         Print("error(",err,"): ",ErrorDescription(err));

      }  
   }
}
 
Дошло, скрипт запускаю на одном чарте, а ордера перебираю все :((
 
Дошло, скрипт запускаю на одном чарте, а ордера перебираю все :((

напомню, что при закрытии ордеров в цикле, цикл надо организовывать задом-наперёд
 
напомню, что при закрытии ордеров в цикле, цикл надо организовывать задом-наперёд


Спасибо.
Забыл про это.
Но ошибка была другая ...

Вот работающий вариант:

#property copyright "Copyright © 2005, Yuri Makarov"
#property link      "http://mak.tradersmind.com"
#include <stdlib.mqh>

int start()
{
   int count=OrdersTotal();
   
   for(int i = count-1; i >= 0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS) == false) continue;
      if (OrderMagicNumber( ) == 0)
      {
         Print(OrderSymbol()," #",OrderTicket()," m",OrderMagicNumber(),
            " t",OrderType());

         double p;
         if (OrderType()==0) p = MarketInfo(OrderSymbol(),MODE_BID);
         if (OrderType()==1) p = MarketInfo(OrderSymbol(),MODE_ASK);

         OrderClose(OrderTicket(),OrderLots(),p,10);
         int err=GetLastError();
         Print("error(",err,"): ",ErrorDescription(err));
      }  
   }
}
 
Но ошибка была другая ...

А где обработка(пропуск) отложенных ордеров?
OrderType() принимает значения не только 0 или 1.
 
А где обработка(пропуск) отложенных ордеров?
OrderType() принимает значения не только 0 или 1.

Все верно говорите.
Просто у меня нет отложенных ордеров.

Это скрипт на 1 раз.
Модифицировал эксперта и нужно было закрыть все ордера открытые предыдущей версией с нулевым маджиком.

Если бы маджик можно было отобразить в закладке,
скрипт бы не понадобился .. :)
 
Просто у меня нет отложенных ордеров.

А если все-таки в списке окажутся отложенные ордеры, то будет попытка совершить неверную операцию. Лучше писать так, чтобы корректно сработало в любой ситуации.

Если бы маджик можно было отобразить в закладке, скрипт бы не понадобился .. :)

Давно обещали показать детали ордера вместе с magic number в тултипе.
В релизе это уже будет.
 
Давно обещали показать детали ордера вместе с magic number в тултипе.
В релизе это уже будет.

Это хорошо.

А если все-таки в списке окажутся отложенные ордеры, то будет попытка совершить неверную операцию. Лучше писать так, чтобы корректно сработало в любой ситуации.

Согласен.
Но этот скрипт все равно на выброс, одноразовый.
Я просто поначалу сильно удивлен был что неработает.
Потом нашел свою ошибку.

Можно эту ветку убить,
чтобы форум не засорять.
 
Только что обнаружил что маджик и в текущей версии отображается вместе с тикером
если мышку на ордер навести.
Только обозначен он как id.
 
Только глючит эта фича.
При наведении мышки на ордер часто вместо нужного ордера показувает первый в списке,
и иногда показывает сразу по 2 ордера.