Что добавить в код, чтобы кроме проверки профита сделки проверялось еще и время прошедшее после открытия позиции?

 
void TrailingPositions() 
{
  int cnt = OrdersTotal();
 
  for (int i=0; i<cnt; i++) {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;        
 
    if (OrderType() == OP_BUY) {
      if (Bid-OrderOpenPrice() > lMinProfit*Point) {
        if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point, OrderTakeProfit(), 0, Blue);
        }
      }
    }
 
    if (OrderType() == OP_SELL) {
      if (OrderOpenPrice()-Ask > sMinProfit*Point) {
        if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point || OrderStopLoss() == 0) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point, OrderTakeProfit(), 0, Blue);
        }
      }
    }
  }
  
}

Вот это простой трал .Подскажите что добавить в код чтобы кроме проверки профита сделки проверялось еще и время прошедшее после открытия позиции(то есть время жизни сделки ).

 
azfaraon:

Вот это простой трал .Подскажите что добавить в код чтобы кроме проверки профита сделки проверялось еще и время прошедшее после открытия позиции(то есть время жизни сделки ).

Что-то типа так, подробнее см. справку эдитора
  if(TimeCurrent()-OrderOpenTime()<3600) continue;
 
Figar0:
Что-то типа так, подробнее см. справку эдитора
  if(TimeCurrent()-OrderOpenTime()<3600) continue;
Да, такое конечно покатит... но только в периоды активности на рынке, когда котировки часто меняются. В противном случае если долгое время не приходит нового тика, то TimeCurrent() будет уже устаревшим (по сравнению с реальным временем). Поэтому наверное лучше использовать TimeLocal() со сдвижкой по времени. . . Вот только жаль что нет встроенной функции, связывающей между собой TimeCurrent() и TimeLocal()...
 
Если тиков нет:
- то и эксперт не запустится,
- изменения цен не будет, значит нет смысла тралить.
 
Meat:
Figar0:
Что-то типа так, подробнее см. справку эдитора
  if(TimeCurrent()-OrderOpenTime()<3600) continue;
Да, такое конечно покатит... но только в периоды активности на рынке, когда котировки часто меняются. В противном случае если долгое время не приходит нового тика, то TimeCurrent() будет уже устаревшим (по сравнению с реальным временем). Поэтому наверное лучше использовать TimeLocal() со сдвижкой по времени. . . Вот только жаль что нет встроенной функции, связывающей между собой TimeCurrent() и TimeLocal()...

по моему там время не котировок, а время компьютера, я проверял
 
m_a_sim:
по моему там время не котировок, а время компьютера, я проверял

Плохо значит проверял :) Там отображается время последней котировки по терминальному времени

timbo:
Если тиков нет:
- то и эксперт не запустится,
- изменения цен не будет, значит нет смысла тралить.
Ну а если например тиков нет, а тралить надо :) Бывает ведь такое. .. Тогда нужно зацикливать и использовать TimeLocal()
 
Meat:
Ну а если например тиков нет, а тралить надо :) Бывает ведь такое. .. Тогда нужно зацикливать и использовать TimeLocal()
Может и бывает, но я такой ситуации придумать не могу. Мне кажется, что проблема притянута за уши. Логичным продолжением этой нелогичной ситуации станет: тиков нет, а открываться/закрываться надо. Особенно актуально это будет по воскресеньям, тиков нет, а поторговать хочется.
 
timbo:
Meat:
Ну а если например тиков нет, а тралить надо :) Бывает ведь такое. .. Тогда нужно зацикливать и использовать TimeLocal()
Может и бывает, но я такой ситуации придумать не могу. Мне кажется, что проблема притянута за уши. Логичным продолжением этой нелогичной ситуации станет: тиков нет, а открываться/закрываться надо. Особенно актуально это будет по воскресеньям, тиков нет, а поторговать хочется.

Отсюда вывод - отменить выходные :-))