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 5(MT5)には注文とポジションという概念がある点に注意が必要です。
- 注文とは、取引を開始するためのリクエストです。これは、MQL5の公式リファレンスでの日本語訳では「未決注文(待機注文)」いう訳があてられており、実際に取引が行われる前の段階を指します。そしてOrderGetInteger関数はこの「注文」に対して処理を行う関数である、という事を押さえておきましょう。
- ポジションとは、実際に取引が行われた後の結果です。つまり、買いまたは売りの注文が実行された後に持つ取引のことを指します。
MetaTrader 5(MT5)の「ツールボックス」の「取引」タブで見られるのはポジションの情報なので、これを待機注文と混同しないようにしましょう。
ENUM_ORDER_PROPERTY_INTEGERについて
ENUM_ORDER_PROPERTY_INTEGERは、待機注文における特定の整数型の情報を取得するために使用される識別子の集合です。
これらの識別子を使用して、注文の有効期限、注文のタイプ、注文の状態など、注文に関する様々な数値情報を取得できます。以下は、ENUM_ORDER_PROPERTY_INTEGERの識別子とそれに関連するデータの種類です。
ORDER_TICKET
ORDER_TICKETは各待機注文に割り当てられるオーダー番号を取得します。
ORDER_TIME_SETUP
ORDER_TIME_SETUPは待機注文の設定時刻を取得します。
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_STAT
Eの識別子一覧は以下の通りです。
識別子 | 説明 |
---|---|
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は待機注文の有効期限を返します。
ORDER_TIME_DONE
ORDER_TIME_DONEは待機注文の実行、あるいはキャンセルがなされた時刻を返します。
※「注文の実行」とは
「注文の実行」とは、トレーダーがプラットフォーム上で設定した注文が市場で実際に処理され、成立(約定)するプロセス全体を指します。これには、注文がブローカーに送信されること、ブローカーによって市場に出されること、そして最終的にその注文が満たされる(約定する)ことが含まれます。
MQL5における注文(Order)と約定(Deal)の違いを一度押さえておきましょう。
- 注文(Order): トレーダーが市場に送る指示で、特定の条件下で取引を開始または終了するように求めるものです。注文には、成行注文、指値注文、逆指値注文など様々なタイプがあります。
- 約定(Deal): 注文が実際に市場で取引され、成立すること。約定は注文が具体的に実行された結果として発生します。
ORDER_TIME_SETUP_MSC
ORDER_TIME_SETUP_MSCは1970年1月1日を基準点としてミリ秒表された、※「注文の実行」が出された時刻を返します。
※ミリ秒は、1秒の1000分の1に相当する時間の単位です。
1ミリ秒は、0.001秒と表されます。コンピュータの処理速度やスポーツのタイム測定など、極めて短い時間を測る場合に使われます。
ORDER_TIME_DONE_MSC
ORDER_TIME_DONE_MSCは1970年1月1日を基準点としてミリ秒表された、※「注文の実行」あるいは注文キャンセルが出された時刻を返します。
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_GTC | GTC注文(キャンセルするまで有効)。 |
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)を返します。
簡単に言えば、あるポジションを閉じるために使われる別のポジションの「名札」や「番号札」のようなものです。
OrderGetInteger関数を使ったサンプルコード
以下のサンプルコードはMetaTrader 5(MT5)で現在保持している未決注文(=
待機注文)の情報を取得して表示するためのものです。
これにより、プログラムが実行された際に、各待機注文のオーダー番号、種類、ボリューム、通貨ペア、開始価格、および設定時刻が出力されます。
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進数で出力します。整数型の変数(例えば、intやlongなど)を出力する際に使用します。%s
: 文字列を出力します。文字列型の変数(stringや文字列の配列など)を出力する際に使用します。%G
: 浮動小数点数を指数形式または10進数で出力し、より短い方を選択します。不要な0は省略されます。浮動小数点型の変数(double
やfloat
など)を出力する際に使用します。
例えば、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を省略するために使われます。どちらを使用するかは、出力したい数値の形式やコンテキストによって決まります。
<参照>