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

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

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);
}
TwitterでシェアFacebookでシェアGoogle+でシェアはてなブックマークに追加

TOPへ