OrderSelect 関数
この関数は、注文(現在のポジションとオーダー中のもの および 決済済みのポジションやキャンセルしたオーダー)を選択することが出来ます。
選択した注文は、他の関数を使ってポジションやオーダーの情報を確認したり、書き換えたりすることが出来ます。
データ型と構成・戻り値
bool OrderSelect(①,②,③);
戻り値は、選択した注文が有る時は true、それ以外は falseを返します。
発生するエラーについては、GetLastError関数で取得することが出来ます。
引数 [3]
OrderSelect関数は 3個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | index | int | - | - | インデックス番号、又は注文番号。 |
② | selsect | int | - | - | ①がインデックス番号、注文番号かの選択。 |
③ | pool | int | - | MODE_TRADES | ①がインデックス番号の時、取引プール又は履歴プールの選択が必要。 ②が注文番号の選択であれば「③pool」は無効になります。 |
インデックス番号は 0から順番に 0、1、2、3、…と各注文に付与される番号のことです。
インデックス番号は各プール(取引プール or 履歴プール)の注文日時順に付与されます。
取引プールの場合、決済済みポジションやキャンセルしたオーダーが発生して取引プールから削除されると、インデックス番号はその時の取引プールにある注文が注文日時順にインデックス番号が再付与されます。
履歴プールの場合も同様で、取引プールで決済済みポジションやキャンセルしたオーダーが発生すると、インデックス番号はその時の履歴プールにある注文が注文日時順にインデックス番号が再付与されます。
② ①がインデックス番号、注文番号かの選択
値 | ID | 説明 |
---|---|---|
0 | SELECT_BY_POS | ①でインデックス番号を使用。 |
1 | SELECT_BY_TICKET | ①で注文番号を使用。 |
③ 注文プールの選択
値 | ID | 説明 |
---|---|---|
0 | MODE_TRADES | 取引プール。現在のポジションとオーダーが入っています。 |
1 | MODE_HISTORY | 履歴プール。決済済ポジションとキャンセルしたオーダーが入っています。 |
省略可能。省略した場合は「MODE_TRADES」が選択されたことになります。
※引数は「値」又は「ID」が使用可能です。
使用例
OrderSelect関数 注文番号を使ったログ出力
最初に OrderSend関数を使って買い成行注文をします。そして OrderSelect関数を使って、注文したポジションの情報を表示します。
コード
// OrderSelect関数で取得できる情報
#property strict
void OnInit() {
int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 30, 80, 200, "テスト出力です", 1001, 0, clrNONE);
if(OrderSelect(ticket, SELECT_BY_TICKET) == true) {
Print("⑯選択注文の保留有効期限 :" ,OrderExpiration()); // ⑯
Print("⑮選択注文のマジックナンバー:" ,OrderMagicNumber()); // ⑮
Print("⑭選択注文のコメント :" ,OrderComment()); // ⑭
Print("⑬選択注文の損益 :" ,OrderProfit()); // ⑬
Print("⑫選択注文のスワップ :" ,OrderSwap()); // ⑫
Print("⑪選択注文の手数料 :" ,OrderCommission()); // ⑪
Print("⑩選択注文の決済価格 :" ,OrderClosePrice()); // ⑩
Print("⑨選択注文の決済時間 :" ,OrderCloseTime()); // ⑨
Print("⑧選択注文の指値決済価格 :" ,OrderTakeProfit()); // ⑧
Print("⑦選択注文の指値損切価格 :" ,OrderStopLoss()); // ⑦
Print("⑥選択注文の注文価格 :" ,OrderOpenPrice()); // ⑥
Print("⑤選択注文の通貨ペア :" ,OrderSymbol()); // ⑤
Print("④選択注文のロット数 :" ,OrderLots()); // ④
Print("③選択注文の注文タイプ :" ,OrderType()); // ③
Print("②選択注文の注文時間 :" ,OrderOpenTime()); // ②
Print("①選択注文の注文番号 :" ,OrderTicket()); // ①
OrderPrint(); // 16個の情報を一括出力
}
else {
Print("選択注文無し");
}
}
このコードをコンパイルして実行するのに、自動売買を許可しておく必要があります。
自動売買を許可する方法はこちら、コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
OrderSelect 関数 インデックス番号を使ったログ出力
ターミナルの取引タブの中にある注文は空にしてください。もし注文が入っている場合は、その注文の情報が表示されることになります。今回、OrderSelect関数で選択するインデックス番号を 0にしているので、注文番号が一番小さい注文の情報が表示されます。
コード
// OrderSelect関数で取得できる情報
#property strict
void OnInit() {
int ticket = OrderSend(Symbol(), OP_BUY, 0.01, Ask, 30, 80, 200, "テスト出力です", 1001, 0, clrNONE);
if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES) == true) {
Print("⑯選択注文の保留有効期限 :" ,OrderExpiration()); // ⑯
Print("⑮選択注文のマジックナンバー:" ,OrderMagicNumber()); // ⑮
Print("⑭選択注文のコメント :" ,OrderComment()); // ⑭
Print("⑬選択注文の損益 :" ,OrderProfit()); // ⑬
Print("⑫選択注文のスワップ :" ,OrderSwap()); // ⑫
Print("⑪選択注文の手数料 :" ,OrderCommission()); // ⑪
Print("⑩選択注文の決済価格 :" ,OrderClosePrice()); // ⑩
Print("⑨選択注文の決済時間 :" ,OrderCloseTime()); // ⑨
Print("⑧選択注文の指値決済価格 :" ,OrderTakeProfit()); // ⑧
Print("⑦選択注文の指値損切価格 :" ,OrderStopLoss()); // ⑦
Print("⑥選択注文の注文価格 :" ,OrderOpenPrice()); // ⑥
Print("⑤選択注文の通貨ペア :" ,OrderSymbol()); // ⑤
Print("④選択注文のロット数 :" ,OrderLots()); // ④
Print("③選択注文の注文タイプ :" ,OrderType()); // ③
Print("②選択注文の注文時間 :" ,OrderOpenTime()); // ②
Print("①選択注文の注文番号 :" ,OrderTicket()); // ①
OrderPrint(); // 16個の情報を一括出力
}
else {
Print("選択注文無し");
}
}
このコードをコンパイルして実行するのに、自動売買を許可しておく必要があります。
自動売買を許可する方法はこちら、コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)
結果
その他の例
実際のプログラムで OrderSelect関数は、各ポジションや各オーダーの情報を取得するために使われることがあります。
買いのみトラリピEA-コードの解説-価格変動毎の処理-③注文有無のチェック で使われている OrderSelect関数を参考にしてください。