Как можно закрывать ордера по истечению определенного времени?

 

Здравствуйте!

Пожалуйста, помогите начинающему програмисту разобраться:

У меня получается закрывать сделки подобным образом: if(Hour()>=23) и т.д..... Но я никак не могу понять -

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

 
а если из текущего времени вычесть время открытия ордера - чо будет?
 
Gans-deGlucker:
а если из текущего времени вычесть время открытия ордера - чо будет?

Пробовал - не получается :(
 
Gans-deGlucker:
а если из текущего времени вычесть время открытия ордера - чо будет?


Может я не правильно само условие составил...

if(TimeCurrent() - 23*60*60 < OrderOpenTime())

 
if (OrderOpenTime()+23*60*60 <=TimeCurrent()) CLOSE
 
Типо прошло 23 часа после открытия - и позиция должна закрыться
 
KLMNC:


Может я не правильно само условие составил...

if(TimeCurrent() - 23*60*60 < OrderOpenTime())

ну только не меньше, а больше OrderOpenTime() тогда уже. Тогда условие выполнится и можно закрывать. Или код Владона.
 
Vladon:
Типо прошло 23 часа после открытия - и позиция должна закрыться


Все верно именно ето мне нужно, но и так не получается :(

Вот фрагмент кода:

void CheckForClose()

{

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderSymbol()!=Symbol()) continue;

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

{

if (OrderOpenTime()+23*60*60 <=TimeCurrent())

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

break;

}

}

}

 
Gans-deGlucker:
ну только не меньше, а больше OrderOpenTime() тогда уже. Тогда условие выполнится и можно закрывать. Или код Владона.


Так тоже не закрывает

 

это работает, проверил лично.

void CheckForClose()
{
   for(int i=0;i<OrdersTotal();i++)
      {
        if(OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()==0||1)
          if(TimeCurrent()>=OrderOpenTime()+23*3600)
              OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5,White);
      }
}
 
KLMNC:


Все верно именно ето мне нужно, но и так не получается :(

Вот фрагмент кода:

void CheckForClose()

{

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderSymbol()!=Symbol()) continue;

if(OrderType()==OP_BUY || OrderType()==OP_SELL)

{

if (OrderOpenTime()+23*60*60 <=TimeCurrent())

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

break;

}

}

}

А что в ошибке пишет? уверен что 129 ошибку...
Причина обращения: