Написание торгового советника. Параметр закрытия всех ордеров.

 
Всем здравствуйте.
Столкнулся с проблемой при написание советника.
Хочу вывести параметр в настройки при включение (true) которого будут закрываться все открытые ордера.

На данный момент вот что у меня получилось.
Для каждой сетки BUY или SELL отдельно, а мне нужно объединить все в один параметр "Закрытия всех ордеров"
Голова уже кругом, может быть я перемудрил и все можно сделать проще? Буду признателен советам и любой помощи, всех с Новым Годом!
//Функция закрытия всех бай ордеров
void CloseAllBuy(int Magic)
  {
   int total = OrdersTotal();
   int i;
   int order_r;
   int tics[][3];
   ArrayResize(tics,iCountMarket_Orders(Magic,OP_BUY));
   ArrayInitialize(tics,0);
   int q=0;
   for(i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol()&&(OrderMagicNumber()==Magic)&&OrderType()==OP_BUY)
           {
            tics[q][1]=OrderTicket();
            tics[q][2]=int(OrderLots()*100);
            tics[q][0]=int((OrderProfit()+OrderCommission()+OrderSwap())*100);
            q++;
           }
        }
     }
   if(q>0)
      ArraySort(tics,WHOLE_ARRAY,0,MODE_DESCEND);
   for(i=0; i<q; i++)
     {
      order_r=OrderClose(tics[i][1],ND(double(tics[i][2])/100.0),Bid,20,clrNONE);
      //Print("CloseBuy "+IntegerToString(tics[i][1])+" "+DoubleToString(ND(double(tics[i][2])/100.0)));
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//Функция закрытия всех селл ордеров
void CloseAllSell(int Magic)
  {
   int total = OrdersTotal();
   int i;
   int order_r;
   int tics[][3];
   ArrayResize(tics,iCountMarket_Orders(Magic,OP_SELL));
   ArrayInitialize(tics,0);
   int q=0;
   for(i=0; i<total; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol()&&(OrderMagicNumber()==Magic)&&OrderType()==OP_SELL)
           {
            tics[q][1]=OrderTicket();
            tics[q][2]=int(OrderLots()*100);
            tics[q][0]=int((OrderProfit()+OrderCommission()+OrderSwap())*100);
            q++;
           }
        }
     }
   if(q>0)
      ArraySort(tics,WHOLE_ARRAY,0,MODE_DESCEND);
   for(i=0; i<q; i++)
     {
      order_r=OrderClose(tics[i][1],ND(double(tics[i][2])/100.0),Ask,20,clrNONE);
      //Print("CloseSell "+IntegerToString(tics[i][1])+" "+DoubleToString(ND(double(tics[i][2])/100.0)));
     }
  }
 
VladimirSerdyuk:
Всем здравствуйте.
Столкнулся с проблемой при написание советника.
Хочу вывести параметр в настройки при включение (true) которого будут закрываться все открытые ордера.

На данный момент вот что у меня получилось.
Для каждой сетки BUY или SELL отдельно, а мне нужно объединить все в один параметр "Закрытия всех ордеров"
Голова уже кругом, может быть я перемудрил и все можно сделать проще? Буду признателен советам и любой помощи, всех с Новым Годом!

Ордера - не закрываются, но удаляются.

https://www.mql5.com/ru/articles/138

пример, + в коде базе много кода по удалению в цикле всех ордеров:


Как использовать торговые классы Стандартной библиотеки при написании советника
Как использовать торговые классы Стандартной библиотеки при написании советника
  • www.mql5.com
В статье рассказывается о том, как использовать основной функционал торговых классов Стандартной библиотеки при написании советников, в которых применяется открытие, закрытие и модификация позиции, проверка свободной маржи перед размещением торговых ордеров, размещение и удаление отложенных ордеров. Показано, как использовать торговые классы для получения свойств ордеров и сделок.
 
VladimirSerdyuk:
Всем здравствуйте.
Столкнулся с проблемой при написание советника.
Хочу вывести параметр в настройки при включение (true) которого будут закрываться все открытые ордера.

На данный момент вот что у меня получилось.
Для каждой сетки BUY или SELL отдельно, а мне нужно объединить все в один параметр "Закрытия всех ордеров"
Голова уже кругом, может быть я перемудрил и все можно сделать проще? Буду признателен советам и любой помощи, всех с Новым Годом!

ИЛИ

в условиях отбора где тип ордера условие должно быть Бай ИЛИ Селл

Или вообще отбирать только по магику из рыночный ордеров, но так можно задеть отложки.

if(OrderSymbol()==Symbol()&&(OrderMagicNumber()==Magic)&& (OrderType()==OP_BUY || OrderType()==OP_SELL))

И лучше в скобки заключать логически совместные сравнения, что бы не было путаницы. и в отладке проще

Только не понял зачем 2 цикла. Можно и в одном сразу удалять рыночные ордера/позиции. Тикеты рыночных ордеров в 4ке не меняются от удаления соседних.
 
Valeriy Yastremskiy #:

ИЛИ

в условиях отбора где тип ордера условие должно быть Бай ИЛИ Селл

Или вообще отбирать только по магику из рыночный ордеров, но так можно задеть отложки.

И лучше в скобки заключать логически совместные сравнения, что бы не было путаницы. и в отладке проще

Ну мне нужно не ИЛИ
А чтобы закрылись все открытые ордера.

 


Перебор всегда от total к нулю. 

https://www.mql5.com/ru/users/automated-trading/publications  - страница для поиска примеров по Ctrl - F .


Automated-Trading
Automated-Trading
  • www.mql5.com
Профиль трейдера
 
VladimirSerdyuk #:

Ну мне нужно не ИЛИ
А чтобы закрылись все открытые ордера.

И отложки с одинаковым магиком или вообще все ордера на всех инструментах?

 
Valeriy Yastremskiy #:

И отложки с одинаковым магиком или вообще все ордера?

он ордерами - считает рыночные позиции... :-)
 
VladimirSerdyuk:
Всем здравствуйте.
Столкнулся с проблемой при написание советника.
Хочу вывести параметр в настройки при включение (true) которого будут закрываться все открытые ордера.

На данный момент вот что у меня получилось.
Для каждой сетки BUY или SELL отдельно, а мне нужно объединить все в один параметр "Закрытия всех ордеров"
Голова уже кругом, может быть я перемудрил и все можно сделать проще? Буду признателен советам и любой помощи, всех с Новым Годом!

https://www.mql5.com/ru/forum/438700

https://www.mql5.com/ru/forum/439091

Ищу советник закрывающий сделки по срествам на депозите
Ищу советник закрывающий сделки по срествам на депозите
  • 2022.12.27
  • www.mql5.com
Привет! Ищу советника, который будет закрывать все сделки при достижении депозитом определенного уровня...
 
Roman Shiredchenko #:
он ордера - считает рыночными позициями... :-)

в 4ке так и есть, есть рыночные ордера - позиции и есть отложки. Позиций в 4ке в доках нет.

 
Valeriy Yastremskiy #:

в 4ке так и есть, есть рыночные ордера - позиции и есть отложки. Позиций в 4ке в доках нет.

Для "динозавров" - нижний раздел! :-)

https://www.mql5.com/ru/forum/mql4


В "Общем...", куда он пишет  - только МТ 5... (в моем понимании)

 
Valeriy Yastremskiy #:

И отложки с одинаковым магиком или вообще все ордера на всех инструментах?

Алгоритм торговли советника основан на сеточной торговли, там не будет отложенных ордеров.
Например набрана сетка на BUY из 5 позиций и на Sell из 2 позиций 
И мне нужен параметр закрытия одновременно всех открытых позиций.

Щас я прописал на подобие, как ответили выше

if(OrderSymbol()==Symbol()&&(OrderMagicNumber()==Magic)&& (OrderType()==OP_BUY || OrderType()==OP_SELL))

Но так позиции закрываются не все сразу а по порядку и при большой сетке разница между закрытием первой и крайней позиций доходит до 4-5 секунд, а за это время рынок может сделать неприятное движение

Причина обращения: