今現在試行錯誤中のEA開発で出来た関数です。

この関数の処理はオーダーオープンしてから6ヶ月後しても含み損状態にあるポジションを強制決済させる処理です。

今のEAで試験的に導入してみたけど、成績にあまり変化がなかったので、コード中から削除します。

こういう処理って定期的に必要になって調べながら書く事が多いので、開発備忘録として記録に残しておきます。

void TimerStopLoss()
{
  int total=OrdersTotal();
  for(int cnt=total;cnt>=0;cnt--)
  {
    if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
    continue;
    
    if(!(OrderType()==OP_BUY || OrderType()==OP_SELL))
    continue;
    
    if(OrderOpenTime()+PERIOD_MN1*60*6>TimeCurrent() && OrderProfit()<-0)
    {
      RefreshRates();
      if(OrderType()==OP_BUY && OrderProfit()<0)
      {
        if(!OrderClose(OrderTicket(),OrderLots(),Bid,SLIPPAGE,CLR_NONE))
        Print("OrderClose error ",GetLastError());
      }
      if(OrderType()==OP_SELL && OrderProfit()<0)
      {
        if(!OrderClose(OrderTicket(),OrderLots(),Ask,SLIPPAGE,CLR_NONE))
        Print("OrderClose error ",GetLastError());
      }
      
    }
  }
}