【MQL5】OrderGetDouble関数について

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

OrderGetDouble関数の役割・働き

OrderGetDouble関数は、MetaTrader 5 (MT5)プラットフォームで取引注文の特定の実数型(double型)情報を取得するために使用されます。OrderGetDouble関数を使うことで、待機注文の価格、量(ロット数)、スリッページなど、様々な実数型(double型)情報をプログラムから直接確認することができます。

OrderGetDouble関数の引数について

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

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

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

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

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

double  OrderGetDouble(
  ENUM_ORDER_PROPERTY_DOUBLE  property_id        // プロパティ識別子
  );

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

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

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

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

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

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

OrderGetDouble関数第1書式の戻り値ENUM_ORDER_PROPERTY_DOUBLE型で要求されたプロパティ値を実数型(double型)で直接返します。

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

OrderGetDouble関数第2書式の引数について

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

bool  OrderGetDouble(
  ENUM_ORDER_PROPERTY_DOUBLE  property_id,       // プロパティ識別子
  double&                        double_var        // プロパティ値を受け取る
  );

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

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

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

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

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

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

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

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

OrderGetDouble関数を使う際の注意点

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

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

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

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

ENUM_ORDER_PROPERTY_DOUBLEについて

ENUM_ORDER_PROPERTY_DOUBLE待機注文における特定の種類の情報にアクセスするための識別子一覧です。

ENUM_ORDER_PROPERTY_DOUBLEで定められている各識別子は、待機注文(=保留中のオーダー)に関するdouble型の情報を取得するために使用されます。それぞれの識別子がどのような役割を持っているか、簡単に説明します。

ORDER_VOLUME_INITIAL

ORDER_VOLUME_INITIALはオーダーが作成された当初の量(ロット数)を返します。トレーダーが注文を出したときの取引量を意味します。

ORDER_VOLUME_CURRENT

ORDER_VOLUME_CURRENTは注文における現在のオーダーの量を返します。もし何かの事情で一部のみが約定した場合には、約定していない残りの量を示します。

ORDER_PRICE_OPEN

ORDER_PRICE_OPENはオーダーで指定している約定希望価格を返します。この価格に市場価格が達した場合、オーダーは実行されます。

ORDER_SL

ORDER_SLはオーダーに設定したストップロスの価格を返します。

ORDER_TP

ORDER_TPはオーダーに設定されたテイクプロフィットを返します。

ORDER_PRICE_CURRENT

ORDER_PRICE_CURRENTは、注文が出されているシンボル(銘柄)の現在価格を返します。

ORDER_PRICE_STOPLIMIT

ORDER_PRICE_STOPLIMITストップリミット注文の価格を返します。

ストップリミット注文MQL5から新しく追加された注文方式で

基本的にブレイクアウトした後、一旦押し目をつくるという想定の元、その押し目で待つような注文方法になります。↓

ORDER_PRICE_STOPLIMITが返す値というのは、具体的には、発注に用いるMqlTradeRequest構造体メンバ変数である.stoplimitに格納されている値になります。

詳しくは↓の記事リンクをご参照ください

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

以下のサンプルコードは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

OrderGetInteger

OrderGetString

OrdersTotal

————————————————————————————–

※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる

<MQL5でEAを作ろう講座>

をメインコンテンツとして展開しています。

【言語基礎編】

【中級実際にEAを作ろう編】

【発展編・MT5用EAを作る工程をカスタマイズしていく】

第0回から、順を追って勉強していけばプログラミングの経験がなくてもMQL5を使って、MT5用のEAが作れるように書いています。最初は難しいと感じるかもしれませんが、繰り返し勉強していく事で自然とスキルが身についていくはずです。興味ある方は是非ご覧ください。

コメント

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