HistoryDealGetInteger関数の働き・役割

HistoryDealGetInteger関数は、特定の約定に関連するプロパティを取得するために使用されます。
この関数は、指定された約定チケットとプロパティ識別子に基づいて、約定プロパティの値を返します。取得されるプロパティの値はdateTime型またはint型である必要があります。HistoryDealGetInteger関数には2つのバージョンがあります。
1つは直接プロパティ値を返すバージョンで、もう1つのバージョンは関数の成功に応じて真偽値を返し、プロパティの値を参照渡しで変数に格納します。
HistoryDealGetInteger関数の引数について

HistoryDealGetInteger関数には2つのバージョンがあり、それぞれ引数の構成が異なります。
バージョン1
- ticket_number
- 種類: ulong型
- 説明: 取引チケットを指定します。このチケット番号に基づいて、取得する約定プロパティが決定されます。
※取引チケットの取得には、HistorySelect関数、HistoryDealsTotal関数、HistoryDealGetTicket関数等を組み合わせて取得するのが一般的です。
- property_id
- 種類: ENUM_DEAL_PROPERTY_INTEGER型
- 説明: 約定プロパティ識別子を指定します。指定された識別子に対応するプロパティの値が取得されます。
long HistoryDealGetInteger(
ulong ticket_number, // 取引チケット
ENUM_DEAL_PROPERTY_INTEGER property_id // 約定プロパティ識別子
);
バージョン2
- ticket_number
- property_id
- 種類: ENUM_DEAL_PROPERTY_INTEGER型
- 説明: 約定プロパティ識別子を指定します。指定された識別子に対応するプロパティの値が取得されます。
- long_var
bool HistoryDealGetInteger(
ulong ticket_number, // 取引チケット
ENUM_DEAL_PROPERTY_INTEGER property_id, // 約定プロパティ識別子
long& long_var // プロパティ値を受け取る変数
);
ENUM_DEAL_PROPERTY_INTEGERについて

ENUM_DEAL_PROPERTY_INTEGERは、約定に関連する特定のプロパティを識別するための列挙型です。これらのプロパティはすべてlong型またはdateTime型であり、約定に関する詳細な情報を取得するために使用されます。
DEAL_TICKET
DEAL_TICKETは、取引チケットを示すプロパティ識別子です。この識別子を使用することで、各取引に割り当てられる固有の番号を取得することができます。取引チケットは、特定の取引を一意に識別するために使用されます。
DEAL_ORDERが取得する約定の注文番号とは異なり、DEAL_TICKETは実際の取引自体を識別します。注文番号は注文自体を識別するものであり、取引チケットはその注文が実行された結果としての取引を識別するものです。
DEAL_ORDER
DEAL_ORDERは、約定の注文番号を示すプロパティ識別子です。
この識別子を使用することで、特定の約定がどの注文に関連しているかを識別するための注文番号を取得することができます。
DEAL_TICKETが取引チケットを取得するのに対して、DEAL_ORDERは注文自体を識別します。取引チケットは実際の取引を一意に識別するための番号であり、約定が実行された後に付与されます。一方、注文番号はその注文が出された時点で付与され、注文の特定に使用されます。したがって、DEAL_ORDERは約定の元となった注文の情報を提供します。
DEAL_TIME
DEAL_TIMEは、約定時刻を示すプロパティ識別子です。この識別子を使用することで、特定の約定が実行された日時を取得することができます。取得される値はdateTime型であり、約定が発生した正確な時刻を示します。
DEAL_TIME_MSC
DEAL_TIME_MSCは、約定実行時刻を示すプロパティ識別子です。この識別子を使用することで、特定の約定が実行された時刻を1970年1月1日からの経過ミリ秒(1/1000秒)数で取得することができます。取得される値はlong型です。
DEAL_TIME_MSCは、DEAL_TIMEと同様に約定の実行時刻を示しますが、ミリ秒単位での精度を持ちます。これにより、非常に短い時間間隔での取引を分析する際に、より正確な時刻情報を取得することができます。DEAL_TIMEが標準的な日時形式で時刻を提供するのに対して、DEAL_TIME_MSCは高精度な時間情報を提供します。
DEAL_TYPE
DEAL_TYPEは、約定の種類を示すプロパティ識別子です。この識別子を使用することで、特定の約定がどのような種類の取引であるかを取得することができます。取得される値はENUM_DEAL_TYPE型であり、例えば以下のような種類があります。
- DEAL_TYPE_BUY: 買い注文
- DEAL_TYPE_SELL: 売り注文
- DEAL_TYPE_BALANCE: バランス操作(例えば、入金や出金)
- DEAL_TYPE_CREDIT: クレジット操作
DEAL_TYPEを使用することで、約定がどのような取引であるかを識別し、それに応じた処理を行うことができます。これは、取引履歴の分析や取引戦略の評価などに役立ちます。
DEAL_ENTRY

DEAL_ENTRYは、約定エントリーを示すプロパティ識別子です。この識別子を使用することで、特定の約定がどのようなエントリータイプで行われたかを取得することができます。取得される値はENUM_DEAL_ENTRY型であり、以下のようなエントリータイプがあります。
ENUM_DEAL_ENTRY列挙型
DEAL_ENTRY_IN:
- DEAL_ENTRY_IN: エントリーイン(新規注文)
DEAL_ENTRY_OUT
- DEAL_ENTRY_OUT: エントリーアウト(既存ポジションの決済)
DEAL_ENTRY_INOUT
- DEAL_ENTRY_INOUT: リバース(既存ポジションを反転して新たなポジションを開始)
DEAL_ENTRYを使用することで、約定がどのようなエントリータイプで行われたかを識別し、それに基づいて取引の詳細を分析することができます。これにより、取引戦略のパフォーマンス評価や、取引履歴の詳細な解析が可能になります。
DEAL_MAGIC
DEAL_MAGICは、約定のマジックナンバーを示すプロパティ識別子です。この識別子を使用することで、特定の約定に関連付けられたマジックナンバーを取得することができます。取得される値はlong型です。
マジックナンバーとは、エキスパートアドバイザー(EA)が発行する一意(1つしか存在しない)の識別番号です。この番号を使用することで、異なるEAや取引システムが発行した注文や約定を区別することができます。
DEAL_MAGICを使用することで、特定の約定がどのEAや取引システムによって実行されたのかを確認することができます。これにより、取引の管理や分析をより効率的に行うことが可能になります。
DEAL_REASON
DEAL_REASONは、約定実行のソースまたは理由を示すプロパティ識別子です。この識別子を使用することで、特定の約定がどのような理由やソースで実行されたかを取得することができます。取得される値はENUM_DEAL_REASON型であり、以下のような理由やソースがあります。
- DEAL_REASON_CLIENT: クライアントによる手動取引
- DEAL_REASON_MOBILE: モバイル端末からの取引
- DEAL_REASON_WEB: Webプラットフォームからの取引
- DEAL_REASON_EXPERT: エキスパートアドバイザー(EA)による取引
- DEAL_REASON_SL: ストップロスによる取引
- DEAL_REASON_TP: テイクプロフィットによる取引
- DEAL_REASON_SO: 強制決済(ストップアウト)による取引
DEAL_REASONを使用することで、約定がどのような状況やソースで実行されたかを識別し、それに基づいて取引履歴を詳細に分析することができます。これにより、取引戦略の評価や改善に役立てることができます。
※ENUM_DEAL_REASONについての詳細は↓の記事をご参照ください。
DEAL_POSITION_ID
DEAL_POSITION_IDは、約定の開始、変更や変化が起きたポジションのポジション識別子を示すプロパティ識別子です。この識別子を使用することで、特定の約定がどのポジションに関連しているかを識別することができます。取得される値はlong型です。
ポジション識別子とは、すべての新しくオープンしたポジションに割り当てられる一意(1つしか存在しない)の番号であり、ポジションのライフタイム(存在する期間)を通じて一貫して使用されます。この識別子は、ポジションを開く、変更する、または決済するために使用される各注文や約定に対して指定されます。
DEAL_TICKETが取得する情報とは異なり、DEAL_POSITION_IDはポジション全体を識別するために使用されます。DEAL_TICKETは各取引を一意に識別するための番号であり、注文が実行された結果としての取引を示します。一方、DEAL_POSITION_IDはポジション全体を追跡するために使用され、関連するすべての注文や約定を特定するのに役立ちます。
ポジション識別子を使用することで、特定のポジションに関連するすべての注文や約定を検索し、追跡することができます。ネッティングシステム(全ての取引が一つのポジションにまとめられ、同一銘柄で複数のポジションを持つことができない取引システム)では、ポジションが反転された場合でもPOSITION_IDENTIFIERは変更されませんが、POSITION_TICKETはその反転につながった注文のチケットに置き換えられます。このように、DEAL_POSITION_IDはポジションの管理と追跡において非常に重要な役割を果たします。ポジション識別子を利用することで、取引履歴やパフォーマンスの詳細な分析が可能になります。
HistoryDealGetInteger関数の戻り値について

HistoryDealGetInteger関数の戻り値は、関数のバージョンによって異なります。
バージョン1
このバージョンでは、指定された約定プロパティの値を直接返します。戻り値はlong型です。例えば、約定の実行時刻や取引タイプなどのプロパティの値が取得されます。
バージョン2
このバージョンでは、関数の実行が成功したかどうかを示すbool型の値を返します。成功した場合、リクエストされたプロパティの値が参照渡しされたlong型の変数に格納されます。戻り値がtrueの場合、指定されたプロパティの値が変数に格納されます。戻り値がfalseの場合、プロパティの取得が失敗したことを示します。
HistoryDealGetInteger関数を使う際の注意点

まず、注文、約定、ポジションの違いを理解することが重要です。約定は注文の実行結果であり、ポジションは一つ以上の約定の結果をまとめたものです。この違いを誤解すると、正しいプロパティの取得ができない可能性があります。
次に、property_idとして指定するプロパティ識別子は、ENUM_DEAL_PROPERTY_INTEGER型の値でなければなりません。誤った識別子を指定すると、関数は正しい値を返しません。
また、HistoryDealGetInteger関数を使用する前に、HistorySelect関数を使用して必要な約定データを選択しておく必要があります。HistorySelect関数を呼び出していない場合、期待するデータを取得できないことがあります。
さらに、バージョン2の書式を使用する場合、関数がfalseを返す可能性があるため、必ず戻り値を確認し、取得が成功したかどうかを判断する必要があります。falseが返された場合、long_varには有効な値が格納されません。
最後に、取得するプロパティの値がdateTime型かint型であることを確認してください。これらの型以外のプロパティを取得しようとすると、エラーが発生する可能性があります。
HistoryDealGetInteger関数を使ったサンプルコード

// スクリプトの開始時に自動的に呼び出されるOnStart関数
void OnStart()
{
// 約定チケット番号を指定するための変数
ulong ticket_number = 123456; // 例として任意のチケット番号を使用
// 取得するプロパティの識別子として、約定の実行時刻を指定
ENUM_DEAL_PROPERTY_INTEGER property_id = DEAL_TIME;
// プロパティ値を受け取るための変数
long deal_time;
// 直接プロパティ値を取得するバージョン1の使用例
long time = HistoryDealGetInteger(ticket_number, property_id);
Print("約定の実行時刻: ", TimeToString(time));
// 関数の実行が成功したかどうかを示すバージョン2の使用例
bool result = HistoryDealGetInteger(ticket_number, property_id, deal_time);
// 関数が成功した場合、約定の実行時刻を出力する
if(result)
{
Print("バージョン2で取得した約定の実行時刻: ", TimeToString(deal_time));
}
else
{
Print("約定のプロパティの取得に失敗しました");
}
}
サンプルコードに使われた関数や文法要素の簡単な解説

OnStart関数
OnStart関数は、スクリプトが開始されたときに最初に実行される関数です。MQL5でスクリプトを作成する際に必ず定義されるエントリーポイントです。
ticket_number変数
ticket_number変数は、約定チケット番号を格納するためのulong型の変数です。約定チケットは、特定の約定を一意(1つしか存在しない)に識別するための番号です。この例では、任意の値123456を使用しています。
property_id変数
property_id変数は、約定プロパティの識別子を格納するためのENUM_DEAL_PROPERTY_INTEGER型の変数です。この例では、約定の実行時刻を指定しています。
deal_time変数
deal_time変数は、約定プロパティの値を受け取るためのlong型の変数です。バージョン2のHistoryDealGetInteger関数を使用する際に、プロパティの値をこの変数に格納します。
HistoryDealGetInteger関数(バージョン1)
HistoryDealGetInteger関数のバージョン1は、約定チケット番号とプロパティ識別子を引数として取り、指定されたプロパティの値を直接返します。この書式は、約定の特定のプロパティ値を取得するために使用されます。戻り値はlong型です。
HistoryDealGetInteger関数(バージョン2)
HistoryDealGetInteger関数のバージョン2は、約定チケット番号、プロパティ識別子、およびプロパティ値を受け取るための参照渡しの変数(値を直接返すのではなく、変数を通じて返す方法)を引数として取ります。この書式は、関数の実行が成功したかどうかを示すbool型の値を返します。
成功した場合、プロパティの値が参照渡しの変数に格納されます。
※参照渡しの変数はHistoryDealGetInteger関数の3番目の引数にあたります。
関数の実行が成功した場合はtrueを返し、取得した値をdeal_time変数に格納します。失敗した場合はfalseを返します。
Print関数
Print関数は、指定されたメッセージをエキスパートログに出力するために使用されます。デバッグや情報の確認に役立ちます。
if文
if文は、条件分岐を行うための制御構文です。この例では、HistoryDealGetInteger関数の実行結果に応じてメッセージを出力しています。result変数がtrueの場合は、取得した約定の実行時刻を出力し、falseの場合はエラーメッセージを出力します。
elseブロックは、if文の条件がfalseの場合に実行されるコードを示します。この例では、HistoryDealGetInteger関数がfalseを返した場合に、約定のプロパティの取得に失敗したことを示すメッセージを出力します。
