【MQL5】OrderGetInteger関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

OrderGetInteger関数の役割・働き

OrderGetInteger関数は、MetaTrader 5 (MT5)プラットフォームで取引注文の特定の整数型情報を取得するために使用されます。この関数を使うことで、注文の有効期限、注文のタイプ、注文の状態など、様々な整数型の情報をプログラムから直接確認することができます。

OrderGetInteger関数の引数について

OrderGetInteger関数は複数の書式を持つオーバーロード関数です。

OrderGetInteger関数には2つの書式があります。

オーバーロード関数については↓の記事をご参照ください

OrderGetInteger関数の第1書式について

OrderGetInteger関数第1書式の引数構成は以下の通りです

long  OrderGetInteger(
  ENUM_ORDER_PROPERTY_INTEGER  property_id        // プロパティ識別子
  );

OrderGetInteger関数第1書式における引数の説明

OrderGetInteger関数第1書式の引数は1つだけです。

prop_id: 取得したい注文プロパティの種類を指定する、データ型ENUM_ORDER_PROPERTY_INTEGER列挙型の値です。

ENUM_ORDER_PROPERTY_INTEGERの詳細については後程解説します。

enum列挙型についての詳細は↓の記事をご参照ください

OrderGetInteger関数第1書式の戻り値について

OrderGetInteger関数第1書式の戻り値ENUM_ORDER_PROPERTY_INTEGER型で要求されたプロパティ値をlong型の数値で直接返します。

プロパティが存在し、取得できる場合はその値が返されます。存在しないプロパティを要求した場合や、何らかの理由で情報が取得できなかった場合は通常「0」が返されます。

OrderGetInteger関数の第2書式について

OrderGetInteger関数第2書式の引数構成は以下の通りです

bool  OrderGetInteger(
  ENUM_ORDER_PROPERTY_INTEGER  property_id,       // プロパティ識別子
  long&                        long_var          // プロパティ値を受け取る
  );

OrderGetInteger関数の第2書式の引数構成について

prop_id: 第1引数は、取得したい待機注文の具体的なプロパティを指定するための識別子です。

データ型の書式は第1書式と同じENUM_ORDER_PROPERTY_INTEGER型です。

long_var: 第2引数は、取得したプロパティ値を格納するための変数参照渡しで指定します。

参照渡しについての詳細は↓の記事をご参照ください

OrderGetInteger関数の処理が成功すれば、この変数には指定されたプロパティの値が格納されます。

OrderGetInteger関数の第2書式の戻り値について

OrderGetInteger関数処理が成功した場合にtrueを、失敗した場合にfalseを返します。成功の場合、long_varに指定したプロパティの値が格納されます。

OrderGetInteger関数を使う際の注意点

OrderGetInteger関数を使うには、事前にOrderGetTicket関数OrderSelect関数によって、OrderGetInteger関数が処理を行うオーダー番号を指定する必要があります。

また、大前提としてMetaTrader 5MT5)には注文とポジションという概念がある点に注意が必要です。

  • 注文とは、取引を開始するためのリクエストです。これは、MQL5の公式リファレンスでの日本語訳では「未決注文(待機注文)」いう訳があてられており、実際に取引が行われる前の段階を指します。そしてOrderGetInteger関数はこの「注文」に対して処理を行う関数である、という事を押さえておきましょう。
  • ポジションとは、実際に取引が行われた後の結果です。つまり、買いまたは売りの注文が実行された後に持つ取引のことを指します。

MetaTrader 5MT5)の「ツールボックス」の「取引」タブで見られるのはポジションの情報なので、これを待機注文と混同しないようにしましょう。

ENUM_ORDER_PROPERTY_INTEGERについて

ENUM_ORDER_PROPERTY_INTEGERは、待機注文における特定の整数型の情報を取得するために使用される識別子の集合です。

これらの識別子を使用して、注文の有効期限、注文のタイプ、注文の状態など、注文に関する様々な数値情報を取得できます。以下は、ENUM_ORDER_PROPERTY_INTEGER識別子とそれに関連するデータの種類です。

ORDER_TICKET

ORDER_TICKETは各待機注文に割り当てられるオーダー番号を取得します。

データ型long型です。

ORDER_TIME_SETUP

ORDER_TIME_SETUPは待機注文の設定時刻を取得します。

データ型datetime型です。

ORDER_TYPE

この識別子は、注文のタイプを示します。戻り値データ型ENUM_ORDER_TYPEで、注文が買い注文なのか売り注文なのか、またはその他の特定のタイプの注文なのかを表します。

ENUM_ORDER_TYPE識別子一覧は以下の通りです。

識別子説明
ORDER_TYPE_BUY成行買い注文。
ORDER_TYPE_SELL成行売り注文。
ORDER_TYPE_BUY_LIMIT買い指値注文。
ORDER_TYPE_SELL_LIMIT売り指値注文。
ORDER_TYPE_BUY_STOP買い逆指値注文。
ORDER_TYPE_SELL_STOP売り逆指値注文。
ORDER_TYPE_BUY_STOP_LIMIT注文価格に達すると、未決の買い指値注文はストップリミット価格で出されます。
ORDER_TYPE_SELL_STOP_LIMIT注文価格に達すると、未決の売り指値注文はストップリミット価格で出されます。
ORDER_TYPE_CLOSE_BYポジションを反対のポジションで決済するための注文。

※オーダー種類については、MqlTradeRequest構造体インスタンスが呼び出すメンバ変数 .type のセクションでも解説をしておりますので、↓の記事リンクをご参照ください

ORDER_STATE

ORDER_STATEは、注文の現在の状態を示します。戻り値データ型ENUM_ORDER_STATEで、注文がまだ実行中なのか、完了したのか、またはキャンセルされたのかなど、注文のステータスを教えてくれます。

ENUM_ORDER_STATEの識別子一覧は以下の通りです。

識別子説明
ORDER_STATE_STARTED注文がチェック済み、ブローカによっての受け入れがまだ。
ORDER_STATE_PLACED受付済みの注文。
ORDER_STATE_CANCELEDクライアントによってキャンセルされた注文。
ORDER_STATE_PARTIAL実行中の注文。
ORDER_STATE_FILLED実行済みの注文。
ORDER_STATE_REJECTED拒絶された注文。
ORDER_STATE_EXPIRED期限切れの注文。
ORDER_STATE_REQUEST_ADD注文が登録中(取引システムに配置)。
ORDER_STATE_REQUEST_MODIFY注文が更新中(パラメータの変更)。
ORDER_STATE_REQUEST_CANCEL注文が削除中(取引システムからの削除)。

ORDER_TIME_EXPIRATION

ORDER_TIME_EXPIRATIONは待機注文の有効期限を返します。

データ型datetime型です。

ORDER_TIME_DONE

ORDER_TIME_DONEは待機注文の実行、あるいはキャンセルがなされた時刻を返します。

データ型datetime型です。

※「注文の実行」とは

注文の実行」とは、トレーダーがプラットフォーム上で設定した注文が市場で実際に処理され、成立(約定)するプロセス全体を指します。これには、注文がブローカーに送信されること、ブローカーによって市場に出されること、そして最終的にその注文が満たされる(約定する)ことが含まれます。

MQL5における注文(Order)約定(Deal)の違いを一度押さえておきましょう。

  • 注文(Order): トレーダーが市場に送る指示で、特定の条件下で取引を開始または終了するように求めるものです。注文には、成行注文、指値注文、逆指値注文など様々なタイプがあります。
  • 約定(Deal): 注文が実際に市場で取引され、成立すること。約定は注文が具体的に実行された結果として発生します。

ORDER_TIME_SETUP_MSC

ORDER_TIME_SETUP_MSCは1970年1月1日を基準点としてミリ秒表された、※「注文の実行」が出された時刻を返します。

データ型long型です

※ミリ秒は、1秒の1000分の1に相当する時間の単位です。

1ミリ秒は、0.001秒と表されます。コンピュータの処理速度やスポーツのタイム測定など、極めて短い時間を測る場合に使われます。

ORDER_TIME_DONE_MSC

ORDER_TIME_DONE_MSCは1970年1月1日を基準点としてミリ秒表された、※「注文の実行」あるいは注文キャンセルが出された時刻を返します。

データ型long型です

ORDER_TYPE_FILLING

ORDER_TYPE_FILLINGは注文に指定されているフィルポリシーを返します。

データ型はENUM_ORDER_TYPE_FILLINGです。

フィルポリシーとは、

流動性が極端に低下する等の事情で、発注した量のロット数では約定できないときの対応方法

を指します。フィルポリシーについての詳細は↓の記事をご参照ください

ENUM_ORDER_TYPE_FILLINGの識別子一覧は以下の通りです。

実行ポリシー説明ENUM_ORDER_TYPE_FILLINGの値
FOK注文は指定されたボリュームでのみ実行できます。 必要な量の金融商品が現在市場で入手できない場合、注文は実行されません。 必要なボリュームは、いくつかの利用可能なオファーで構成できます。 FOK注文を使用する可能性は、取引サーバで決定されます。ORDER_FILLING_FOK
即時またはキャンセルトレーダーは、注文に示された量の範囲内で市場で最大限に利用可能な量で取引を実行することに同意します。 リクエストを完全に満たすことができない場合、利用可能なボリュームでの注文が実行され、残りのボリュームはキャンセルされます。 IOC注文を使用する可能性は、取引サーバで決定されます。 ORDER_FILLING_IOC
パッシブ(BOC)BoC注文は、注文が板情報でのみ発注でき、すぐに実行できないことを前提としています。発注時にすぐに約定できる場合、注文はキャンセルされます。 実際、BOCのポリシーは、発注された注文の価格が現在の市場よりも悪くなることを保証しています。BoC注文はパッシブ取引を実装するために使用されるため、注文が出されてもすぐには実行されず、現在の流動性には影響しません。 指値注文と逆指値注文のみがサポートされています(ORDER_TYPE_BUY_LIMIT 、ORDER_TYPE_SELL_LIMIT、ORDER_TYPE_BUY_STOP_LIMIT、 ORDER_TYPE_SELL_STOP_LIMIT)。ORDER_FILLING_BOC
リターン部分的な実行の場合、残りのボリュームのある注文はキャンセルされず、さらに処理されます。 成行実行モード(成行実行— SYMBOL_TRADE_EXECUTION_MARKET)では、リターン注文は許可されていません。ORDER_FILLING_RETURN

ORDER_TYPE_TIME

ORDER_TYPE_TIMEは待機注文の注文期限切れモードに関する情報を返します。

データ型ENUM_ORDER_TYPE_TIMEです。

ENUM_ORDER_TYPE_TIME識別子一覧は以下の通りです

識別子説明
ORDER_TIME_GTCGTC注文(キャンセルするまで有効)。
ORDER_TIME_DAY現在の取引日のみ有効である注文。
ORDER_TIME_SPECIFIED指定した特定の有効期限まで有効な注文。
ORDER_TIME_SPECIFIED_DAY注文が指定された日の 23:59:59 まで有効となります。この時刻が取引セッション外である場合は、注文は最も近い取引時間中に満了します。

MqlTradeRequest構造体インスタンスが呼び出すメンバ変数 .type_timeのセクションでも解説しておりますので、宜しければ↓の記事リンクもご参照ください

ORDER_MAGIC

ORDER_MAGICは、注文に関連付けられたマジックナンバーを示します。戻り値データ型longで、特定のEA(自動売買プログラム)から来た注文を識別するために使用されます。

ORDER_REASON

ORDER_REASONはある注文がなぜ出されたのか、その理由を教えてくれる情報を含んでいます。これは、人が直接操作して出した注文なのか、プログラムによって自動で行われたものなのか、または特定の市場の状況が引き起こしたものなのかを区別するために使います。この理由は、データ型=ENUM_ORDER_REASONによって分類されています。

  • ORDER_REASON_CLIENT: この理由が指定された注文は、デスクトップ版のMetaTrader 5(MT5)プラットフォームを使って人が直接出したものです。
  • ORDER_REASON_MOBILE: この理由が指定された注文は、MetaTrader 5のモバイルアプリを使って人が直接出したものです。
  • ORDER_REASON_WEB: この理由が指定された注文は、 Webプラットフォームを使って人が直接出したものです。
  • ORDER_REASON_EXPERT: この理由が指定された注文は、自動取引プログラムであるEAスクリプトによって出されたものです。
  • ORDER_REASON_SL: この理由が指定された注文は、設定されたストップロス(損切り)が発動した結果として出されたものです。これは、損失を限定するためにあらかじめ設定された価格に達したときに自動で発動します。
  • ORDER_REASON_TP: この理由が指定された注文は、設定されたテイクプロフィット(利益確定)が発動した結果として出されたものです。これは、利益を確保するためにあらかじめ設定された価格に達したときに自動で発動します。
  • ORDER_REASON_SO: この理由が指定された注文は、ストップアウトイベントの結果として出されたものです。アカウントの資金が不足してポジションを保持できなくなった場合に、自動でポジションが閉じられることを指します。

ORDER_POSITION_ID

ORDER_POSITION_IDは、注文が市場で実行された(約定した)瞬間に、その注文に自動的に割り当てられる一意の番号(ID)を返します。

注文が実行されるということは、新しい取引が開始されるか、または既に存在する取引(ポジション)が変更されることを意味します。

この一意(=他に同じものがない)の番号は、その注文によって開始または変更された具体的な取引(ポジション)を識別するために使用されます。

ORDER_POSITION_BY_ID

ORDER_POSITION_BY_IDはORDER_TYPE_CLOSE_BY型の注文をする時に使われます。

そもそもORDER_TYPE_CLOSE_BY型の注文とは、MetaTrader 5 (MT5)プラットフォームで使用される特別な注文タイプで、2つの反対方向のポジション(例えば、同じ通貨ペアに対する買いポジションと売りポジション)を同時に決済するために使用されます。

ORDER_POSITION_BY_IDは、そのような注文(ORDER_TYPE_CLOSE_BY)を行う際に、閉じる対象となる反対ポジションの一意の識別番号(ID)を返します。

簡単に言えば、あるポジションを閉じるために使われる別のポジションの「名札」や「番号札」のようなものです。

データ型long型です。

OrderGetInteger関数を使ったサンプルコード

以下のサンプルコードはMetaTrader 5MT5)で現在保持している未決注文(=

待機注文)の情報を取得して表示するためのものです。

これにより、プログラムが実行された際に、各待機注文オーダー番号、種類、ボリューム、通貨ペア、開始価格、および設定時刻が出力されます。

void OnStart()
 {
  // 注文の詳細情報を格納するための変数を宣言
  ulong    ticket;          // 注文のオーダー番号
  double   open_price;      // 注文の開始価格
  double   initial_volume;  // 注文の初期ボリューム(注文サイズ)
  datetime time_setup;      // 注文が設定された時刻
  string   symbol;          // 注文が行われた通貨ペア
  string   type;            // 注文の種類(買い注文、売り注文など)
  long     order_magic;     // 注文のマジックナンバー
  long     positionID;      // 注文に関連付けられたポジションのID

  // 現在の未決注文の総数を取得
  uint     total = OrdersTotal();

  // 未決注文を一つずつ確認するループ
  for(uint i = 0; i < total; i++)
    {
    // 注文のオーダー番号を取得。注文が存在すれば、そのオーダー番号が0より大きくなる
    if((ticket = OrderGetTicket(i)) > 0)
       {
        // 注文の各種プロパティを取得
        open_price     = OrderGetDouble(ORDER_PRICE_OPEN); // 注文の開始価格
        time_setup     = (datetime)OrderGetInteger(ORDER_TIME_SETUP); // 注文設定時刻
        symbol         = OrderGetString(ORDER_SYMBOL); // 取引シンボル
        order_magic    = OrderGetInteger(ORDER_MAGIC); // マジックナンバー
        positionID     = OrderGetInteger(ORDER_POSITION_ID); // ポジションID
        initial_volume = OrderGetDouble(ORDER_VOLUME_INITIAL); // 初期ボリューム
        type           = EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE))); // 注文の種類を文字列で取得

        // 取得した注文情報を表示
        printf("#ticket %d %s %G %s at %G was set up at %s",
               ticket,                 // 注文オーダー番号
               type,                   // 注文の種類
               initial_volume,         // 注文量
               symbol,                 // 通貨ペア
               open_price,             // 注文の開始価格
               TimeToString(time_setup)// 注文設定時刻を文字列で表示
               );
       }
    }
// その他の処理はここに記述
 }

printf関数内の表記について

printf関数内の

“#ticket %d %s %G %s at %G was set up at %s”

という表記についてですが、

そもそもprintf関数は、指定されたフォーマットに従って文字列を出力するための関数です。printf関数の中で使用される%d%s%Gなどは、フォーマット指定子と呼ばれ、変数の種類に応じて出力形式を指定します。それぞれのフォーマット指定子が持つ意味は以下の通りです:

  • %d: 整数を10進数で出力します。整数型変数(例えば、intlongなど)を出力する際に使用します。
  • %s: 文字列を出力します。文字列型変数string文字列配列など)を出力する際に使用します。
  • %G: 浮動小数点数を指数形式または10進数で出力し、より短い方を選択します。不要な0は省略されます。浮動小数点型の変数doublefloatなど)を出力する際に使用します。

例えば、printf関数を使って以下のように書くと、

int number = 10;
string text = "apple";
double value = 123.456;

printf("Number is %d, Text is %s, Value is %G", number, text, value);

出力は次のようになります:

Number is 10, Text is apple, Value is 123.456

フォーマット指定し%G と%fの違い

%fフォーマット指定子は、浮動小数点数を10進数形式で出力する際に使用されます。%fを使用すると、数値が固定小数点形式で出力され、通常は小数点以下6桁まで表示されます(表示される小数点以下の桁数は、指定によって変更可能です)。%fは、特に小数点以下の桁数を明確に指定したい場合や、指数形式ではなく常に10進数形式で数値を表示したい場合に適しています。

例えば、%fを使用して浮動小数点数を出力する例を見てみましょう

double value = 123.456;

printf("Value is %f", value);

Value is 123.456000

小数点以下の桁数を指定したい場合は、%fの前に.(ピリオド)と桁数を指定します。たとえば、小数点以下2桁だけを表示したい場合は%.2fと記述します

printf("Value is %.2f", value);

出力は以下のようになります

Value is 123.46

このように、%f指定子は浮動小数点数を出力する際に便利で、出力形式を柔軟に制御することができます。一方で、%G指定子は数値をより短い形式で表現することができ、不要な0を省略するために使われます。どちらを使用するかは、出力したい数値の形式やコンテキストによって決まります。

<参照>

OrderSelect

OrderGetTicket

OrderGetDouble

OrderGetString

OrdersTotal

タイトルとURLをコピーしました