OrderGetString関数の役割・働き
OrderGetString関数は、特定のオーダーに関するテキスト情報を取得するために使用される関数です。たとえば、オーダーのコメントや通貨ペアの名前など、数値ではなく文字列として扱われる情報を得ることができます
OrderGetString関数の引数について
OrderGetString関数は複数の書式を持つオーバーロード関数です。
OrderGetString関数には2つの書式があります。
※オーバーロード関数については↓の記事をご参照ください
OrderGetString関数第1書式の引数構成について
OrderGetString関数第1書式の引数構成は以下の通りです。
string OrderGetString(
ENUM_ORDER_PROPERTY_STRING property_id // プロパティ識別子
);
OrderGetString関数第1書式の引数は一つだけです。
prop_id: 取得したい注文プロパティの種類を指定する、データ型がENUM_ORDER_PROPERTY_STRING列挙型の値です。
ENUM_ORDER_PROPERTY_STRINGの詳細については後程解説します。
※enum列挙型についての詳細は↓の記事をご参照ください
OrderGetString関数第1書式の戻り値について
OrderGetString関数第1書式の戻り値は、ENUM_ORDER_PROPERTY_STRING型で要求されたプロパティ値をstring型の値で直接返します。
プロパティが存在し、取得できる場合はその値が返されます。
存在しないプロパティを要求した場合や、何らかの理由で情報が取得できなかった場合は通常「0」が返されます。
OrderGetString関数第2書式の引数構成について
OrderGetString関数第2書式の引数構成は以下の通りです。
bool OrderGetString(
ENUM_ORDER_PROPERTY_STRING property_id, // プロパティ識別子
string& string_var // プロパティ値を受け取る
);
prop_id: 第1引数は、取得したいポジションの具体的なプロパティを指定するための識別子です。
データ型の書式は第1書式と同じENUM_POSITION_PROPERTY_STRING型です。
string_var: 第2引数は、取得したプロパティ値を格納するための変数を参照渡しで指定します。
※参照渡しについての詳細は↓の記事をご参照ください
OrderGetString関数第2書式の戻り値について
処理が成功した場合にtrue
を、失敗した場合にfalse
を返します。成功の場合、string_var
に指定したプロパティの値が格納されます。
OrderGetString関数を使う際の注意点
OrderGetString関数を使うには、事前にOrderGetTicket関数やOrderSelect関数などを使う事によって、OrderGetString関数が処理を行うオーダー番号を指定する必要があります。
注文とポジションの違い
また、大前提としてMetaTrader 5(MT5)には注文とポジションという概念がある点に注意が必要です。
- 注文とは、取引を開始するためのリクエストです。これは、MQL5の公式リファレンスでの日本語訳では「未決注文(待機注文)」いう訳があてられており、実際に取引が行われる前の段階を指します。
- ポジションとは、実際に取引が行われた後の結果です。つまり、買いまたは売りの注文が実行された後に持つ取引のことを指します。
- そしてOrderGetString関数は注文(オーダー)に対して処理を行う関数である、という事を押さえておきましょう。
※MetaTrader 5(MT5)の「ツールボックス」の「取引」タブで見られるのはポジションの情報なので、これを待機注文と混同しないようにしましょう。
ポジションのネッティング計算
- ネッティングとは、同じシンボルに対する複数の取引を一つのポジションに統合する計算方法です。ネッティングシステムにおいては、各シンボルにつき1つのポジションのみを保有することができます。
※ネッティングシステムについては↓の記事リンクをご参照ください
複数ポジションの保有(ヘッジングシステム)
- 一方で、ヘッジングシステムを使用している場合は、各シンボルに対して複数のポジションを同時に保有することが可能です。
※ヘッジングシステムについては↓の記事リンクをご参照ください
ENUM_ORDER_PROPERTY_STRINGについて
ENUM_ORDER_PROPERTY_STRINGは、MQL5でトレーディングのプログラムを作るときに、「注文(=オーダー)」に関するテキスト情報を取得するために使われる識別子の集まりです。
ENUM_ORDER_PROPERTY_STRINGの識別子一覧は以下の通りです。
ORDER_SYMBOL
ORDER_SYMBOLはどの通貨ペアや商品に関する「注文(=オーダー)」なのかを示します。例えば、”EURUSD”や”XAUUSD”などのテキストが含まれます。
ORDER_COMMENT
ORDER_COMMENTは、その「注文(=オーダー)」に対して、トレーダーやプログラムが付けた特別なメモや備考です。例えば、なぜその注文を発注したのかの理由を簡単な文で表すことができます。
OrderGetString関数を使ったサンプルコード
以下のサンプルコードは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を省略するために使われます。どちらを使用するかは、出力したい数値の形式やコンテキストによって決まります。
<参照>