Скачать MetaTrader 5

Как закрыть все ордера в конце дня - страница 2

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Denis
43
Denis  
borilunad:

https://docs.mql4.com/ru/dateandtime

Смотрите Hour() и Minute() ! Нельзя же быть таким беспомощным и ленивым!


как вычислить время я знаю.

у меня вопрос как закрыть ордер по этому времени.

вы не нервничайте) можете просто не отвечать)

Paladin80
704
Paladin80  
sipulpa:


да мне надо закрыть все открытые ордера неважно в плюсе они или в минусе примерно в 23:50

отложенные ордера у меня закрываются по expiration с этим проблем нет.

Ок. Для тотального закрытия всех открытых позиций (не отложенных ордеров), без приверки на символ и магик-номер, можно так:

if (Hour()==23 && Minute()>=50)
{  if (OrdersTotal()>0)
   {  for (int i=OrdersTotal()-1; i>=0; i--)
      {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {  
            if (OrderType()==OP_BUY)
            {  RefreshRates();
               OrderClose(OrderTicket(),OrderLots(),Bid,1000);
               return(0);
            }
            if (OrderType()==OP_SELL)
            {  RefreshRates();
               OrderClose(OrderTicket(),OrderLots(),Ask,1000);
               return(0);
            }
         }
}  }  }
В этом случае у вас будет только 10 мин на закрытие. Если очень много позиций то сами смотрите много это времени или мало. Тут сделал так что после выслания приказа на закрытие следующий приказ будет обработан на новом тике. Ночью может дойти до дого, что 1 тик придётся на 1-2 минуты и можно не успеть.
Denis
43
Denis  
paladin80:

Ок. Для тотального закрытия всех открытых позиций (не отложенных ордеров), без приверки на символ и магик-номер, можно так:



спасибо!

сегодня вечером буду пробовать)

Paladin80
704
Paladin80  

Если бы я делал для себя советник с таким алгоритмом, то я бы на первых тиках нового дня закрывал все открытые позиции, а только потом "открывал дорогу" для дальшей части кода:

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  
         if (OrderType()==OP_BUY && OrderOpenTime()<iTime(Symbol,PERIOD_D1,0)
         {  RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Bid,1000);
            return(0);
         }
         if (OrderType()==OP_SELL && OrderOpenTime()<iTime(Symbol,PERIOD_D1,0))
         {  RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Ask,1000);
            return(0);
         }
      }
}  }
Mikhail Kozhemyako
1262
Mikhail Kozhemyako  
paladin80:

Если бы я делал для себя советник с таким алгоритмом, то я бы на первых тиках нового дня закрывал все открытые позиции, а только потом "открывал дорогу" для дальшей части кода:

Какой смысл ставить промежуточную точку на первых тиках нового дня, особенно если этот день - понедельник? Т.е. резкое увеличение спрэдов под занавес в пятницу Вам пофигу? А Гэп, любящий понедельники, никто не обещал что он будет в Вашу сторону?
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий