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

 
borilunad:

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

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


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

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

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

 
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 минуты и можно не успеть.
 
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);
         }
      }
}  }
 
paladin80:

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

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

мне нужно похожую функцию написать.

Надо, чтобы советник в определенное время по магик номеру находил свои ордера и закрыл все ордера через 5 минут, после окончания торгов, которое задается в настройках.

Функция торговли по времени есть, могу ее написать, а вот с поиском ордеров не совсем понимаю как правильно написать. Помогите пожалуйста.

Надо для mt5

 
victoribr #:

мне нужно похожую функцию написать.

Надо, чтобы советник в определенное время по магик номеру находил свои ордера и закрыл все ордера через 5 минут, после окончания торгов, которое задается в настройках.

Функция торговли по времени есть, могу ее написать, а вот с поиском ордеров не совсем понимаю как правильно написать. Помогите пожалуйста.

Надо для mt5

Здравствуйте! Здесь в примерах всё подробно описано, как искать отложенные ордера и позиции.

С уважением, Владимир.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Структура торгового запроса - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

как закрыть все ордера в назначенное время в 22-00 ? подскажите

объявил переменную  EndWork           

sinput string  a2                = "----------- ФИЛЬТР РАБОТЫ ПО ВРЕМЕНИ -----------";//.

input  bool    UseTimeFilter     = false;           // Использовать фильтр

input  string  TimeTrade         = "00:00 - 23:59"; // Время работы

input  bool    TimeClose         = false;           // Закрывать ордера по окончанию работы

input string   EndWork           ="22:00";   //время закрытия всех сделок


дальше не знаю. ругается отладчик. пишу такое:

if TimeCurrent() > EndWork ();

else   CloseOrder("Sell"); CloseOrder("Buy"); 


'if' - open parenthesis expected

'else' - illegal 'else' without matching 'if'

?

 

тут зависит еще от на newbar или на каждом тике идет работа

для newbar нужна перестраховка, иначе могут не закрываться все позиции

для newbar такой использовал:

#include <Trade\Trade.mqh>
CTrade m_trade;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---- закрываем все открытые позиции по текущему символу
   for(uint count=0; count<10 && !IsStopped(); count++) // цикл повторов
     {
      int total=PositionsTotal();
      if(!total)
         return; // все позиции закрыты
      while(total>=0 && !IsStopped())
        {
         ulong ticket=ulong(PositionGetTicket(total));
         PositionSelectByTicket(ticket);
         m_trade.PositionClose(ticket);
         total--;
         Sleep(70);
        }
         Sleep(200);
     }
//---
   Print("Close pos: ",PositionsTotal());
  }

для потиковой торговли более короткий вариант

void CloseAllPositions()
  {
   for(int i=PositionsTotal()-1; i>=0; i--) // returns the number of current positions
      if(m_position.SelectByIndex(i))     // selects the position by index for further access to its properties
         // && m_position.Magic()==MagicNumber)
         m_trade.PositionClose(m_position.Ticket()); // close a position by the specified symbol
  }
Причина обращения: