ограничение позициии по времени в МС

 
Кто знает как?
 
Знать бы что такое МС?
 

Механическая система должно быть?

 
Sergey_GS писал (а) >>
Кто знает как?
extern int Expiration = 3600 // each order lives for 1 hour
 
void CheckForExpired(int MN = -1)
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // already closed
      if(OrderSelect(i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber() != MN && MN != -1) continue;
      
      if (TimeCurrent() - OrderOpenTime() > Expiration)
      {
         if(OrderType() == OP_BUY)
         {
            OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue);
         }
         
         if(OrderType() == OP_SELL)
         {
            OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red);
         }
 
         RefreshRates();
      }
   }
}
 
int start()
{
    if (OrdersTotal() > 0) CheckForExpired(Magic);
}


Типа такого?

 
TheXpert писал (а) >>
Типа такого?

а до заданного часа? например 22.00?

 
extern int ExpirationHour = 22 // each order lives until ExpirationHour
 
void CheckForExpired(int MN = -1)
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // already closed
      if(OrderSelect(i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber() != MN && MN != -1) continue;
      
      if (TimeHour(TimeCurrent()) == ExpirationHour)
      {
         if(OrderType() == OP_BUY)
         {
            OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue);
         }
         
         if(OrderType() == OP_SELL)
         {
            OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red);
         }
 
         RefreshRates();
      }
   }
}
 
int start()
{
    if (OrdersTotal() > 0) CheckForExpired(Magic);
}
Нивапрос, код пишу буквально на коленке, так что не обижайтесь, если не скомпилится.
 
TheXpert писал (а) >>
Нивапрос, код пишу буквально на коленке, так что не обижайтесь, если не скомпилится.

спасибо. попробую. не хотелось бы надоедать, но что Вы скажете на это? т.е. я имею в виду как бы закрыть в 22.00 и открыть в 10.30? в одном советнике или скрипте? в известнейшем питерском ДЦ не работает такой скрипт, а обойти можно?

//+------------------------------------------------------------------+
//|                                       |
//|                                  (если хватит денюшки)           |ЗАМЕНИЛ НА
//|https://forum.mql4.com/ru/13255#83888 - Открытие ордера по заданому времени
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property show_inputs // Если есть желание менять экстерны в процессе
//----
extern int    H     = 10;   //ОТКРОЕМ ПОЗИЦИЮ В ... ЧАСОВ
extern int    M     = 30;   //И ... МИНУТ
//--------------------------
int start()
{
int H, M;
while (!IsStopped()) { //выполняется пока скрипт не остановлен
Sleep(1000); 
if (TimeHour(TimeCurrent( ) ) != H || TimeMinute(TimeCurrent( ) ) != M) continue;
//время еще не пришло - переходим в начало цикла и ждем 1с.
RefreshRates(); //обновляем котировки 
 
//OrderSend("EURUSD",OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol()
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol()
Print (GetLastError());
 
 //OrderSend("EURUSD",OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol()
//OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol()
//Print (GetLastError());
return(0); //если оставить эту строку позиции откроются только 1 раз
}
return(0);
}
 
OZ0 писал (а) >>

спасибо. попробую. не хотелось бы надоедать, но что Вы скажете на это? т.е. я имею в виду как бы закрыть в 22.00 и открыть в 10.30? в одном советнике или скрипте? в известнейшем питерском ДЦ не работает такой скрипт, а обойти можно?

Хмм, должен работать... Хотя,

OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol()


Проверьте стопы, возможно на Вашем ДЦ так близко нельзя (подчеркнул, что именно).

А возможно перекрытие переменных, тогда мое должно работать. Навскидку:

//+------------------------------------------------------------------+
//|                                       |
//|                                  (если хватит денюшки)           |ЗАМЕНИЛ НА
//|https://forum.mql4.com/ru/13255#83888 - Открытие ордера по заданому времени
//+------------------------------------------------------------------+
#property copyright ""
#property link      ""
#property show_inputs // Если есть желание менять экстерны в процессе
//----
extern int    H        = 10;   //ОТКРОЕМ ПОЗИЦИЮ В ... ЧАСОВ
extern int    M        = 30;   //И ... МИНУТ
extern int    CloseH   = 22;
extern int    CloseM   = 00; 
//--------------------------
int start()
{
while (!IsStopped()) { //выполняется пока скрипт не остановлен
Sleep(1000); 
if (TimeHour(TimeCurrent( ) ) == H && TimeMinute(TimeCurrent( ) ) == M);
{
RefreshRates(); //обновляем котировки 
 
//OrderSend("EURUSD",OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol()
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol()
Print (GetLastError());
 
 //OrderSend("EURUSD",OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol()
//OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol()
//Print (GetLastError());
return(0); //если оставить эту строку позиции откроются только 1 раз
}
if (TimeHour(TimeCurrent( ) ) == CloseH && TimeMinute(TimeCurrent( ) ) == CloseM);
{
CheckForExpired();
}
}
return(0);
}

Сорри за выравнивания, тут табов нет в редакторе :( .


 
TheXpert писал (а) >>

Хмм, должен работать... Хотя,


Проверьте стопы, возможно на Вашем ДЦ так близко нельзя (подчеркнул, что именно).

А возможно перекрытие переменных, тогда мое должно работать. Навскидку:

Сорри за выравнивания, тут табов нет в редакторе :( .

Компиляция '_Open_TIME_BYU.mq4'...
';' - semicolon unexpected D:\- \experts\scripts\_Open_TIME_BYU.mq4 (24, 72)
';' - semicolon unexpected D:\- \experts\scripts\_Open_TIME_BYU.mq4 (37, 82)
'CheckForExpired' - function is not defined D:\- \experts\scripts\_Open_TIME_BYU.mq4 (39, 1)
1 ошибка, 2 предупр
Что-то такое выдало

 
OZ0 писал (а) >>

Компиляция '_Open_TIME_BYU.mq4'...
';' - semicolon unexpected D:\- \experts\scripts\_Open_TIME_BYU.mq4 (24, 72)
';' - semicolon unexpected D:\- \experts\scripts\_Open_TIME_BYU.mq4 (37, 82)
'CheckForExpired' - function is not defined D:\- \experts\scripts\_Open_TIME_BYU.mq4 (39, 1)
1 ошибка, 2 предупр
Что-то такое выдало


Мои поздравления, Вам удалось таки заставить меня залезть в редактор :) .

//+------------------------------------------------------------------+
//|                                                            1.mq4 |
//|                                       Copyright © 2008, Tinytjan |
//|                                                 tinytjan@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Tinytjan"
#property link      "tinytjan@mail.ru"
 
extern int    H        = 10;   //ОТКРОЕМ ПОЗИЦИЮ В ... ЧАСОВ
extern int    M        = 30;   //И ... МИНУТ
extern int    CloseH   = 22;
extern int    CloseM   = 00; 
//--------------------------
int start()
{
   while (!IsStopped()) 
   { //выполняется пока скрипт не остановлен
      Sleep(1000); 
      if (TimeHour(TimeCurrent( ) ) == H && TimeMinute(TimeCurrent( ) ) == M)
      {
         RefreshRates(); //обновляем котировки 
 
         //OrderSend("EURUSD",OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol()
         OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-75*Point,Bid+9*Point,NULL,0,0,Red);//Symbol()
         Print (GetLastError());
 
          //OrderSend("EURUSD",OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol()
         //OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+75*Point,Bid-9*Point,NULL,0,0,Red);//Symbol()
         //Print (GetLastError());
         return(0); //если оставить эту строку позиции откроются только 1 раз
      }
      if (TimeHour(TimeCurrent( ) ) == CloseH && TimeMinute(TimeCurrent( ) ) == CloseM)
      {
         CheckForExpired();
      }
   }
   return(0);
}
 
void CheckForExpired(int MN = -1)
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // already closed
      if(OrderSelect(i, SELECT_BY_POS) == false) continue;
      // not current symbol
      if(OrderSymbol() != Symbol()) continue;
      // order was opened in another way
      if(OrderMagicNumber() != MN && MN != -1) continue;
      
      if (TimeHour(TimeCurrent( ) ) == CloseH && TimeMinute(TimeCurrent( ) ) == CloseM)
      {
         if(OrderType() == OP_BUY)
         {
            OrderClose(OrderTicket(), OrderLots(), Bid, 3, Blue);
         }
         
         if(OrderType() == OP_SELL)
         {
            OrderClose(OrderTicket(), OrderLots(), Ask, 3, Red);
         }
 
         RefreshRates();
      }
   }
}
Опять же сорри, только скомпилил, работоспособность не проверял.
 
TheXpert писал (а) >>

Мои поздравления, Вам удалось таки заставить меня залезть в редактор :) .

Опять же сорри, только скомпилил, работоспособность не проверял.

не хочет - спрашивает действительно ли хочу его закрыть и тут же запустить

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