現在保有中のポジションを全て決済する関数です。
ナンピンやピラミッディングで増えたポジションを一括決済する場合にご利用下さい。
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);
}
| 検索結果がありません。 |
| 検索結果がありません。 |
いつも大変助けられています。ありがとうございます。
本記事に関連し、同時に待機注文も全決済しようと思い、次の行をコメントアウトしました。
//if(OrderType() != OP_BUY && OrderType() != OP_SELL) continue;
しかし、実行しても待機注文は残ったままでした。
これだけでは駄目なのでしょうか。ご教示頂けると幸甚です。
いつもご利用いただきまして誠にありがとうございます。
待機注文を削除する際は
OrderDelete()をご利用くださいませ。下記に待機注文削除の関連記事をご案内いたします。
ご参考いただけますと幸いです。
今後とも何卒よろしくお願い申し上げます。
本件、オプションにある
全決済 にチェックを入れていれば(マジックナンバー 未記入)であれば) 機能する(=保有ポジ 全決済)
されるとの認識ですが、正しいでしょうか?
~~~~~~~~~~~~~~~~~~~
本件、ちょうど下記
https://labo.gogojungle.co.jp/articles/1659
上記質問中の 【追加質問】部分にて質問させていただいた内容となります。
全決済のオプションで機能いたします。
取引条件以外の決済(基本項目の損切り・利食い)には適用されませんので予めご了承くださいませ。
ご参考いただけますと幸いです。何卒よろしくお願い申し上げます。