HistoryDealGetDouble関数の働き・役割
HistoryDealGetDouble関数は、特定の約定に関連するプロパティを取得するために使用されます。この関数は、指定された約定チケットとプロパティ識別子に基づいて、約定プロパティの値を返します。返されるプロパティの値はdouble型である必要があります。
HistoryDealGetDouble関数は2つのバージョンがあり、1つは即座にプロパティ値を返し、もう1つは関数の成功に応じて真偽値を返し、プロパティの値を参照渡しで変数に格納します。
HistoryDealGetDouble関数の引数について
HistoryDealGetDouble関数には2つのバージョンがあり、それぞれ引数の構成が異なります。
バージョン1
- ticket_number
- property_id
- 種類: ENUM_DEAL_PROPERTY_DOUBLE型
- 説明: 約定プロパティ識別子を指定します。指定された識別子に対応するプロパティの値が取得されます。
double HistoryDealGetDouble(
ulong ticket_number, // 約定チケット
ENUM_DEAL_PROPERTY_DOUBLE property_id // 約定プロパティ識別子
);
バージョン2
- ticket_number
- property_id
- 種類: ENUM_DEAL_PROPERTY_DOUBLE型
- 説明: 約定プロパティ識別子を指定します。指定された識別子に対応するプロパティの値が取得されます。
- double_var
bool HistoryDealGetDouble(
ulong ticket_number, // 約定チケット
ENUM_DEAL_PROPERTY_DOUBLE property_id, // 約定プロパティ識別子
double& double_var // プロパティ値を受け取る変数
);
ENUM_DEAL_PROPERTY_DOUBLEについて
ENUM_DEAL_PROPERTY_DOUBLEは、約定の特定のプロパティを識別するための列挙型です。これらのプロパティはすべてdouble型であり、約定に関する様々な情報を取得するために使用されます。
DEAL_VOLUME
DEAL_VOLUMEは、約定量を示すプロパティ識別子です。この識別子を使用することで、特定の約定における取引量を取得することができます。取引量は、取引されたロット数を示し、通常はdouble型の値で表されます。
DEAL_PRICE
DEAL_PRICEは、約定値を示すプロパティ識別子です。この識別子を使用することで、特定の約定における取引価格を取得することができます。取引価格は、約定が成立した際の価格を示し、通常はdouble型の値で表されます。
DEAL_COMMISSION
DEAL_COMMISSIONは、約定手数料を示すプロパティ識別子です。この識別子を使用することで、特定の約定に対して発生した手数料の金額を取得することができます。手数料は、取引の実行に対してブローカーが課す費用を示し、通常はdouble型の値で表されます。
DEAL_SWAP
DEAL_SWAPは、累積スワップを示すプロパティ識別子です。この識別子を使用することで、特定の約定に対して発生したスワップポイントの合計を取得することができます。スワップポイントは、ポジションを翌日に持ち越した際に発生する金利の差額を示し、通常はdouble型の値で表されます。
DEAL_PROFIT
DEAL_PROFITは、約定の利益を示すプロパティ識別子です。この識別子を使用することで、特定の約定に対して得られた利益の金額を取得することができます。利益は、取引によって得られた収益を示し、通常はdouble型の値で表されます。
DEAL_FEE
DEAL_FEEは、約定直後に請求される約定料金を示すプロパティ識別子です。この識別子を使用することで、特定の約定に対して発生する取引料金の金額を取得することができます。約定料金は、取引が実行された際にブローカーが課す費用を示し、通常はdouble型の値で表されます。
DEAL_SL
DEAL_SLは、決済逆指値レベルを示すプロパティ識別子です。この識別子を使用することで、特定の約定における決済逆指値のレベルを取得することができます。
エントリおよびリバースの約定においては、ポジションが開かれたまたは反転された元の注文の決済逆指値を使用し、エグジットの約定ではポジション決済時の決済逆指値を使用します。この値は通常double型で表されます。
DEAL_TP
DEAL_TPは、決済指値レベルを示すプロパティ識別子です。この識別子を使用することで、特定の約定における決済指値のレベルを取得することができます。
エントリおよびリバースの約定においては、ポジションが開かれたまたは反転された元の注文の決済指値を使用し、エグジットの約定ではポジション決済時の決済指値を使用します。
この値は通常double型で表されます。
HistoryDealGetDouble関数の戻り値について
HistoryDealGetDouble関数の戻り値は、関数のバージョンによって異なります。
バージョン1
バージョン1では、指定された約定プロパティの値を直接返します。返される値はdouble型です。例えば、約定の価格や手数料といったプロパティの値が返されます。
バージョン2
バージョン2では、関数の実行が成功したかどうかを示すbool型の値を返します。成功した場合、リクエストされたプロパティの値が参照渡しされたdouble型の変数に格納されます。
戻り値がtrueの場合、指定されたプロパティの値が変数に格納されます。
戻り値がfalseの場合、プロパティの取得が失敗したことを示します。
HistoryDealGetDouble関数を使う際の注意点
HistoryDealGetDouble関数を使用する際には、いくつかの重要な点に注意する必要があります。
まず、注文、約定、ポジションの違いを理解することが重要です。約定は注文の実行結果であり、ポジションは一つ以上の約定の結果をまとめたものです。この違いを誤解すると、正しいプロパティの取得ができない可能性があります。
次に、property_idとして指定するプロパティ識別子は、ENUM_DEAL_PROPERTY_DOUBLE型の値でなければなりません。誤った識別子を指定すると、関数は正しい値を返しません。
また、HistoryDealGetDouble関数を使用する前に、HistorySelect関数を使用して必要な約定データを選択しておく必要があります。HistorySelect関数を呼び出していない場合、期待するデータを取得できないことがあります。
最後に、バージョン2の関数を使用する場合、関数がfalseを返す可能性があるため、必ず戻り値を確認し、取得が成功したかどうかを判断する必要があります。falseが返された場合、double_varには有効な値が格納されません。
HistoryDealGetDouble関数を使ったサンプルコード
// スクリプトの開始時に自動的に呼び出されるOnStart関数
void OnStart()
{
// 約定チケット番号を指定するための変数
ulong ticket_number = 123456; // 例として任意のチケット番号を使用
// 取得するプロパティの識別子として、約定の価格を指定
ENUM_DEAL_PROPERTY_DOUBLE property_id = DEAL_PRICE;
// プロパティ値を受け取るための変数
double deal_price;
// 直接プロパティ値を取得するバージョン1の使用例
double price = HistoryDealGetDouble(ticket_number, property_id);
Print("約定の価格: ", price);
// 関数の実行が成功したかどうかを示すバージョン2の使用例
bool result = HistoryDealGetDouble(ticket_number, property_id, deal_price);
// 関数が成功した場合、約定の価格を出力する
if(result)
{
Print("バージョン2で取得した約定の価格: ", deal_price);
}
else
{
Print("約定のプロパティの取得に失敗しました");
}
}
サンプルコードに使われた関数や文法要素の簡単な解説
OnStart関数
OnStart関数は、スクリプトが開始されたときに最初に実行される関数です。MQL5でスクリプトを作成する際に必ず定義されるエントリーポイントです。
ticket_number変数
ticket_number変数は、約定チケット番号を格納するためのulong型の変数です。約定チケットは、特定の約定を一意(1つしか存在しない)に識別するための番号です。この例では、任意の値123456を使用しています。
property_id変数
property_id変数は、約定プロパティの識別子を格納するためのENUM_DEAL_PROPERTY_DOUBLE型の変数です。ENUM_DEAL_PROPERTY_DOUBLEは列挙型であり、以下のようなプロパティ識別子を含みます。
- DEAL_VOLUME: 約定量
- DEAL_PRICE: 約定値
- DEAL_COMMISSION: 約定手数料
- DEAL_SWAP: 累積スワップ
- DEAL_PROFIT: 約定の利益
- DEAL_FEE: 約定料金
- DEAL_SL: 決済逆指値レベル
- DEAL_TP: 決済指値レベル
この例では、DEAL_PRICEを使用しています。
deal_price変数
deal_price変数は、約定プロパティの値を受け取るためのdouble型の変数です。バージョン2のHistoryDealGetDouble関数を使用する際に、プロパティの値をこの変数に格納します。
HistoryDealGetDouble関数(バージョン1)
HistoryDealGetDouble関数のバージョン1は、約定チケット番号とプロパティ識別子を引数として取り、指定されたプロパティの値を直接返します。この関数は、約定の特定のプロパティ値を取得するために使用されます。戻り値はdouble型です。
double price = HistoryDealGetDouble(ticket_number, property_id);
Print("約定の価格: ", price);
HistoryDealGetDouble関数(バージョン2)
HistoryDealGetDouble関数のバージョン2は、約定チケット番号、プロパティ識別子、およびプロパティ値を受け取るための変数を引数として取ります。この関数は、関数の実行が成功したかどうかを示すbool型の値を返します。成功した場合、プロパティの値が参照渡しで変数に格納されます。
bool result = HistoryDealGetDouble(ticket_number, property_id, deal_price);
関数の実行が成功した場合はtrueを返し、取得した値をdeal_price変数に格納します。失敗した場合はfalseを返します。
Print関数
Print関数は、指定されたメッセージをエキスパートログに出力するために使用されます。デバッグや情報の確認に役立ちます。
Print("約定の価格: ", price);
if文
if文は、条件分岐を行うための制御構文です。この例では、HistoryDealGetDouble関数の実行結果に応じてメッセージを出力しています。
if(result)
{
Print("バージョン2で取得した約定の価格: ", deal_price);
}
else
{
Print("約定のプロパティの取得に失敗しました");
}