OrderSelect()

 OrderSelect()関数は、注文を選択するために使用します。

 OrderSelect()関数は、以下のように定義されています。

bool OrderSelect(
int index,
int select,
int pool=MODE_TRADES
);

 各引数の意味は、以下のとおりです。

  • int index
    選択したい注文の「インデックス」か「チケット番号」を指定します。
    インデックスとは、各注文に振られたから始まる整数値です。具体的には、MetaTradr4(MT4)で「A」、「B」、「C」という順にポジションを保有した場合、「A」には「0」、「B」には「1」、「C」には「2」という番号(インデックス)が振られます。
    したがって、注文「A」を選択したい場合には「0」を、注文「B」を選択したい場合には「1」を、注文「C」を選択したい場合には「2」を記述します。
  • int select
    注文の選択方法を指定します。具体的には、以下のように記述します。
    SELECT_BY_POS
    インデックスを使用して注文を選択する。
    SELECT_BY_TICKET
    チケット番号を使用して注文を選択する。
  • int pool
    注文を、「現在保有しているもの、又は待機注文の中から選択するか、すでに決済したものの中から選択するかを指定します。具体的には、以下のように記述します。
    MODE_TRADES
    現在保有しているもの、又は待機注文の中から選択します。
    MODE_HISTORY
    すでに決済したものの中から選択します。

戻り値

 注文が正常に選択された場合には「true」が、正常に選択されなかった場合には「false」が返されます。

 「false」が返された場合の詳しいエラー情報を取得したい場合には、GetLastError()関数を使用します。

 GetLastError()関数の詳細については「こちら」を参照してください。

注意点

 第二引数int selectSELECT_BY_TICKETとした場合には、チケット番号は、待機注文・未決済注文(=保有ポジション)・既決済注文を通じて重複しないので、第三引数int poolの指定は無視されるため、記述する必要はありません。

 選択した注文が未決済か既決済かを区別するためには、その注文の決済時刻を確認します(決済時刻の確認には、OrderCloseTime()関数(詳細については「こちら」を参照してください。)を使用します。)。

  • 決済時刻が「0」の場合
    選択した注文は待機注文か未決済注文です。
  • 決済時刻が「0」でない場合
    選択した注文は既決済注文か取り消された待機注文です。

 選択した注文が待機注文か未決済注文(=保有ポジション)かは、その注文のタイプ(成行き、指値等)によって区別することができます。

 OrderSelect()関数は、以下の関数を使用する前に実行する必要があります。

具体例

 マジックナンバーが等しい注文(=同一のEAによって取得されたポジション)に対してのみ決済処理を行う場合には、以下のように記述します。


int Magic  = 1212;
int Ticket = 0;

if(OrderSelect(Ticket,SELECT_BY_TICKET) == true)
  {
   if(OrderMagicNumber() == Magic)
     {
      決済処理
      ……

関連ツール

MQL言語の学習ができ、裁量トレーダーもEA開発が可能になる!
『EAつくーる』
『EAつくーる』 | fx-on.com

『EAつくーる』
『EAつくーる』 | fx-on.com

 上記ツール(EAつくーる『EAつくーる』 | fx-on.com)の詳細については「こちら『EAつくーる』 | fx-on.com」を参照してください。


MT4の使い方からプログラミングまで、わかりやすく解説