OrderSelect関数の役割・働き
OrderSelect関数は、MetaTrader 5(MT5) 環境でトレーダーが待機注文を選択し、その後の処理を行うために使用される関数です。
OrderSelect関数は、特定の注文を操作するための第一歩となり、注文の詳細な情報へアクセスしたり、その注文に対して変更やクローズなどのアクションを取る前提となります。
OrderSelect関数でオーダー番号を使い、待機注文を特定後、OrderGetInteger、OrderGetDouble、OrderGetStringなどの後続関数が使えるようになります。
OrderSelect関数の引数について
OrderSelect関数の引数構成は以下の通りです
bool OrderSelect(
ulong ticket // 注文チケット(オーダー番号)
);
OrderSelect関数が取る引数は1つだけです
OrderSelect関数の戻り値について
OrderSelect関数の戻り値はbool
型です。OrderSelect関数の処理が成功し、指定された注文が選択された場合はtrue
を返し、失敗した場合はfalse
を返します。
OrderSelect関数を使う際の注意点
OrderSelect関数を使用する際には、正しいオーダー番号を指定することが重要です。
また、注文が存在しない場合や、すでにクローズしている場合はfalse
を返すため、戻り値を適切に処理する必要があります。
OrderSelect関数は、特定の注文を選択して、その注文のデータをコンピューターのプログラム内部にコピーします。それによってOrderGetDouble、OrderGetInteger、OrderGetStringといった関数を使えるようになる、という事は冒頭に書いた通りですが、
OrderSelect関数でコピーされたデータは、あくまでその時点の情報であり、
例えば選択後に注文がキャンセルされたり、価格や有効期限などの条件が変更されたりしても、OrderSelect関数で一度コピーしたデータは変わりません。
したがって、常に最新の注文データを取得したい場合は、OrderSelect関数を用いて注文を選択するたびに、事前にOrderGetTicket関数などで注文の最新情報を確認する必要があります。
これにより、常に最新の状態を反映した注文情報を扱うことができるようになります。
注文とポジションの違い
大前提としてMetaTrader 5(MT5)には注文とポジションという概念がある点に注意が必要です。
・注文とは、取引を開始するためのリクエストです。これは、MQL5の公式リファレンスでの日本語訳では「未決注文(待機注文)」いう訳があてられており、実際に取引が行われる前の段階を指します。
・ポジションとは、実際に取引が行われた後の結果です。つまり、買いまたは売りの注文が実行された後に持つ取引のことを指します。
そしてOrderSelect関数は待機注文に対して選択処理を行う関数であり、ポジション選択をする場合はPositionSelect関数やPositionSelectByTicket関数などを用いる、という事を押さえておきましょう
※MetaTrader 5(MT5)の「ツールボックス」の「取引」タブで見られるのはポジションの情報なので、これを待機注文と混同しないようにしましょう。
ポジションのネッティング計算
- ネッティングとは、同じシンボルに対する複数の取引を一つのポジションに統合する計算方法です。ネッティングシステムにおいては、各シンボルにつき1つのポジションのみを保有することができます。
※ネッティングシステムについては↓の記事リンクをご参照ください
複数ポジションの保有(ヘッジングシステム)
- 一方で、ヘッジングシステムを使用している場合は、各シンボルに対して複数のポジションを同時に保有することが可能です。
※ヘッジングシステムについては↓の記事リンクをご参照ください
MQL4のOrderSelect関数との違い
MT4環境下のMQL4にも同名の関数が存在しますが、働きは異なります。
そもそもMQL4には、この記事内の「OrderSelect関数を使う際の注意点」セクションで書いたような、注文、ポジションといった概念がありません。
詳しい事は↓の記事群でご確認ください。
・MQL5 EA講座 第60回「OrderSend関数とMqlTradeRequest構造体」
・MQL5 EA講座 第61回「MqlTradeResult構造体について」
MQL4との違いを理解し、MT5のOrderSelect関数を適切に使用することが重要です。
<参照>