一定時間経過で決済する関数 CloseByTime

MetaTrader 4
GogoJungle
2019/08/02 21:32
86

一定時間の経過でポジションを決済する関数です。

bool CloseByTime(
   int magic,
   uint time,
   int slippage);

パラメータ
magic
決済対象とするポジションのマジックナンバー

time
保有時間。単位は秒で指定する。
例:1時間で決済する場合は、3600(60×60=3600)と指定する。

slippage
OrderClose関数に指定するスリッページを指定する。

戻り値
決済が完了した場合、もしくは決済対象となるポジションが無かった場合にはtrueを返す。
決済に失敗した場合、もしくは処理中にエラーが生じた場合にはfalseを返す。
決済に失敗した場合にはエラーコードを出力する。

bool CloseByTime(int magic, uint time, int slippage){
   for(int i = OrdersTotal() - 1; i >= 0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) return(false);
      if(OrderMagicNumber() != magic) continue;
      if(OrderSymbol() != Symbol()) continue;
      if(OrderType() != OP_BUY && OrderType() != OP_SELL) continue;
      
      if(TimeCurrent() > OrderOpenTime() + time){
         if(OrderType() == OP_BUY){
            if(!OrderClose(OrderTicket(), OrderLots(), Bid, slippage)){
               Print("OrderClose Error : ErrorCode=", GetLastError());
               return(false);
            }
         }
         else if(OrderType() == OP_SELL){
            if(!OrderClose(OrderTicket(), OrderLots(), Ask, slippage)){
               Print("OrderClose Error : ErrorCode=", GetLastError());
               return(false);
            }
         }
      }
   }
   return(true);
}

コメント

関連項目

検索結果がありません。