Помогите с программой, закрыть убыточный ордер через 5 дней после открытия

 

Помогите пожалуйста найти ошибку или подскажите как сделать, цель закрыть ордер если он убыточен на 5 мин таймфрейме, при тестировании закрывает ордер сразу если он убыточен, не дожидаясь условия что ВРЕМЯ ОТКРЫТИЯ + 300 секунд <= Текучещее время

ticket = Buy(Symbol(), Lots, price, sl, tp, Magic);
if (ticket > 0)
{
int cnt = OrdersTotal();
for (int i=0; i < cnt; i++)
{
if (!OrderSelect(g, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != Magic) continue;
Orders_time = OrderOpenTime();

Orders_price = OrderOpenPrice();
}

}esle alert("Error");

if ((Orders_time + 300)<=Time[0] && bid>Orders_price) closeorder();

 

Сделать проверку:

if(TimeCurrent()>OrderOpenTime()+МаксимальноеВремяСуществованияОрдераВСекундах){
 

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

 
Roger писал(а) >>

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

А если ордеров много?

 
Так тикет у него уже есть сразу после открытия. :-)
 
Roger писал(а) >>
Так тикет у него уже есть сразу после открытия. :-)

Есть, и что с ним делать? Хранить в яйце, яйцо в сундуке, сундук в утке и т.д.? А если ордеров сотни? Можно, конечно, вести массив тикетов, сохранять его в файл на случай перезагрузки... Но в данном случае незачем, имхо. Хотя дело вкуса...

 
Ты код внимательно глянь, там главное определить цену и время открытия сразу после открытия.
 
int LossTicket(int magic,int pause=0,double loss=0){
  for(int i=OrdersTotal();i>=0;i--){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Symbol()){
        if(OrderProfit()<loss){
          if(OrderMagicNumber()==magic){
            if(TimeCurrent()-OrderOpenTime()>pause){
              return(OrderTicket());
            }
          }
        }
      }
    }
  }
return(-1);
}
 
Roger писал(а) >>
Ты код внимательно глянь, там главное определить цену и время открытия сразу после открытия.

Есть правда в твоих словах) Но, да мне сегодня косоглазие простительно, профпраздник все ж... Гулял немного) На всяк случай заткнусь, пока еще чего не набредил и совсем левого не нафлудил.

 
Integer писал(а) >>

А если терминал перезапускался?

Он в эту ветку уже все равно не попадет.

 
xrust писал(а) >>

Всем огромное спасибо, все получилось только я не понял, почему МТ как-то искажает количество секунд, если тайм фрейм 5 мин, то допустим закрытие позиции через 5 баров было бы равно TimeCurrent()-OrderOpenTime()>300, где 300 это пять баров по 60 секунд, но МТ закрывает позицию если вместо 300 указать допусти 1000, только где-то так он закрывает через 5 баров