OrderClose 関数
注文番号で選択したポジションを決済します。買い取引のポジションは売り、売り取引のポジションは買戻しをします。
データ型と構成・戻り値
bool OrderClose(①, ②, ③, ④, ⑤);
戻り値は、決済ができた時は true又は 1、できなかった時は false又は -1が取得されます。
発生するエラーについては、GetLastError関数で取得することができます。
引数 [5]
OrderClose関数は 5個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | ticket | int | - | - | 決済する注文番号。 |
② | lots | double | ロット | - | 決済するロット数。 |
③ | price | double | 決済通貨の単位 | - | 決済価格。通常、 買いポジションを売る時は、Bid 売りポジションを買い戻す時は、Ask が使われます。 |
④ | slippage | int | Point | - | 最大許容スリッページの設定。 |
⑤ | arrow_color | color | - | clrNONE | 決済位置の矢印の色。設定しない場合は「clrNONE」を入力すると矢印が表示されません。 Webカラーの種類はこちら。 |
使用例
OrderClose 関数による決済
最初に OrderSend関数を使って買い成行注文を 0.02ロットします。そしてそれを OrderClose関数を使って 0.01ロットだけ分割決済させます。買いのポジション 0.01ロットが残ります。
※業者によっては、新規取引後、直ぐに決済できないところもあります。(楽天FXはできませんでした。2023年11月確認) その場合は、次のコードを実行すると 0.02ロットのポジションが残りますので 0.02ロットが残った状態で、コードの①をコメント化、②③をコメント解除して実行すると 0.01ロットずつ決済されます。但し、これで決済されるポジションは他のポジションがターミナルに残っている時はターミナル中に表示される注文番号で数字の小さい方から順番に決済されます。他のポジションがターミナルに残っている時は注意してください。
コード
// OrderClose関数による決済
#property strict
void OnInit() {
int ticket; // 注文番号
bool tf; // true or false の判定
ticket = OrderSend(Symbol(), OP_BUY, 0.02, Ask, 30, 0, 0); // ①0.02ロット買い成行注文
//tf = OrderSelect(0, SELECT_BY_POS, MODE_TRADES); // ②
//ticket = OrderTicket(); // ③
tf = OrderClose(ticket, 0.01, Bid, 30); // ①を0.01ロットだけ決済
if (tf == true) {
Print("注文番号",ticket," : 0.01ロット決済完了");
} else {
Print("注文番号",ticket,"決済できません");
}
}
このコードをコンパイルして実行するのに、自動売買を許可しておく必要があります。
自動売買を許可する方法はこちら、コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
0.02ロット買って、その内 0.01ロットを決済したので 0.01ロットのポジションが残ります。