保有中ポジションを全決済する関数 OrderCloseAll

現在保有中のポジションを全て決済する関数です。
ナンピンやピラミッディングで増えたポジションを一括決済する場合にご利用下さい。

bool OrderCloseAll(
int magic,
int slippage
);


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

slippage
   スリッページ


magicに指定したマジックナンバーで、尚且つ実行中のチャートの通貨ペアと同じ通貨ペアのポジションを決済します。
ポジションが全て決済されるか、決済対象となるポジションが存在しない場合、結果はtrueとなります。
決済に失敗した場合や、処理中に何らかのエラーが発生した場合には結果がfalseとなります。
待機注文は削除しません。


bool OrderCloseAll(int magic, int slippage){
double price = 0;

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;

RefreshRates();
if(OrderType() == OP_BUY){
price = Bid;
}
else if(OrderType() == OP_SELL){
price = Ask;
}

if(OrderClose(OrderTicket(), OrderLots(), price, slippage, clrNONE) == false){
Print(__FUNCTION__, " OrderClose Error : ErrorCode=", GetLastError());
return(false);
}
}
return(true);
}


マジックナンバーをチェックしている部分や通貨ペアをチェックしている部分を削除することで、全てのマジックナンバー・全ての通貨ペアを対象とするよう修正可能です。
例えば以下のコードは全てのマジックナンバー・通貨ペアのポジションを決済します。

bool OrderCloseAll(int slippage){
double price = 0;

for(int i = OrdersTotal() - 1; i >= 0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) return(false);
if(OrderType() != OP_BUY && OrderType() != OP_SELL) continue;

RefreshRates();
if(OrderType() == OP_BUY){
price = Bid;
}
else if(OrderType() == OP_SELL){
price = Ask;
}

if(OrderClose(OrderTicket(), OrderLots(), price, slippage, clrNONE) == false){
Print(__FUNCTION__, " OrderClose Error : ErrorCode=", GetLastError());
return(false);
}
}
return(true);
}
TwitterでシェアFacebookでシェアGoogle+でシェアはてなブックマークに追加

TOPへ