HistorySelectByPosition関数の働き・役割
HistorySelectByPosition関数は、指定されたポジション識別子を有する取引や注文履歴を取得するために使用されます。
この関数を使用することで、特定のポジションに関連する取引と注文の履歴を取得し、それらの情報を基に様々な分析や処理を行うことが可能です。
ポジション識別子とは、全ての実行された注文と約定に設定される一意(1つしか存在しない)の識別子です。
この関数が成功すると、注文リストや約定リストにアクセスするための基盤が整います。これにより、注文リストや約定リストのサイズを取得したり、各リストの要素にアクセスすることが可能となります。
HistorySelectByPosition関数とHistorySelect関数との違い
HistorySelectByPosition関数とHistorySelect関数はどちらも取引や注文の履歴を取得するために使用されますが、その働きには明確な違いがあります。
HistorySelectByPosition関数は、指定されたポジション識別子を持つ取引や注文の履歴を取得するための関数です。
特定のポジションに関連する履歴を絞り込むために使用され、成功すると指定されたポジションに関連する注文リストや約定リストが作成されます。
一方、HistorySelect関数は、指定された期間内の全ての取引や注文の履歴を取得します。この関数は、ポジション識別子に基づかず、時間範囲に基づいて履歴を取得します。指定した開始時刻と終了時刻の間に実行された全ての取引や注文が対象となります。
要約すると、HistorySelectByPosition関数は特定のポジションに関連する履歴の取得に特化しているのに対し、HistorySelect関数は指定された時間範囲内の全ての取引や注文の履歴を取得するために使用されます。
HistorySelectByPosition関数の引数について
HistorySelectByPosition関数の引数構成は以下の通りです。
書式
bool HistorySelectByPosition(
long position_id // ポジション識別子
);
引数の詳細
- position_id
ポジション識別子を取得するためには、PositionGetTicket関数を使用します。この関数は、指定されたインデックス(通し番号)のポジションチケットを返します。例えば、以下のようにしてポジション識別子を取得することができます。
このようにして取得したポジション識別子をHistorySelectByPosition関数に渡すことで、そのポジションに関連する取引や注文の履歴を取得することができます。
long position_id = PositionGetTicket(0); // 最初のポジションの識別子を取得
HistorySelectByPosition関数の戻り値について
HistorySelectByPosition関数の戻り値は、関数の実行結果を示します。
- 成功: true
- 失敗: false
この関数がtrueを返す場合、指定されたポジション識別子を持つ取引や注文の履歴が正常に取得されたことを意味します。falseを返す場合は、指定されたポジション識別子に関連する履歴が見つからなかったか、何らかのエラーが発生したことを示します。
HistorySelectByPosition関数を使う際の注意点
HistorySelectByPosition関数を使用する際には、いくつかの重要な注意点があります。
- 待機注文との混同に注意
HistorySelectByPosition関数は、実行された取引や注文の履歴を取得するために使用されます。取引履歴の注文は「ツールボックス」バーの「取引」タブに表示される待機注文とは異なります。取り消された注文やトランザクションにつながった注文のリストは「ツールボックス」バーの「履歴」タブで確認する必要があります。 - 履歴リストのサイズ取得方法
この関数で取得された約定リストのサイズはHistoryDealsTotal関数で、注文リストのサイズはHistoryOrdersTotal関数で取得することができます。それぞれのリストの要素にアクセスするためには、HistoryOrderGetTicket関数やHistoryDealGetTicket関数を使用します。 - 履歴のリセットに注意
MQL5プログラムで使用可能な注文履歴のリストは、HistoryOrderSelect関数を使用した後にリセットされます。これは、チケットによる注文の検索が成功した場合、見つかった注文でリストが書き換えられることを意味します。同様に、取引履歴のリストもHistoryDealSelect関数を使用した後にリセットされます。 - ポジション識別子の有効性
指定したポジション識別子が正しいことを確認してください。無効なポジション識別子を指定すると、関数はfalseを返し、履歴が取得できません。ポジション識別子は、PositionGetTicket関数やPositionGetSymbol関数を使って正しく取得する必要があります。
HistorySelectByPosition関数を使ったサンプルコード
// スクリプトの実行が開始されたときに自動的に呼び出されるOnStart関数
void OnStart()
{
// ポジション識別子を取得
// PositionGetTicket関数を使用して最初のポジションの識別子を取得します
long position_id = PositionGetTicket(0);
// HistorySelectByPosition関数を使用して取引履歴と注文履歴を取得
// 取得に成功したかどうかの結果をチェック
if (HistorySelectByPosition(position_id))
{
// 履歴の取得に成功した場合の処理
Print("ポジション識別子: ", position_id, " に関連する取引履歴と注文履歴を取得しました。");
// 取得した取引履歴の件数を取得
int deals_total = HistoryDealsTotal();
Print("取得した取引履歴の件数: ", deals_total);
// 取得した注文履歴の件数を取得
int orders_total = HistoryOrdersTotal();
Print("取得した注文履歴の件数: ", orders_total);
// 取引履歴の詳細を出力
for (int i = 0; i < deals_total; i++)
{
// 取引チケット番号を取得
ulong deal_ticket = HistoryDealGetTicket(i);
// 取引チケット番号を出力
Print("取引チケット番号: ", deal_ticket);
}
// 注文履歴の詳細を出力
for (int i = 0; i < orders_total; i++)
{
// 注文チケット番号を取得
ulong order_ticket = HistoryOrderGetTicket(i);
// 注文チケット番号を出力
Print("注文チケット番号: ", order_ticket);
}
}
else
{
// 履歴の取得に失敗した場合の処理
Print("ポジション識別子: ", position_id, " に関連する取引履歴と注文履歴の取得に失敗しました。");
}
}
サンプルコードに使われた関数や文法要素の簡単な解説
このサンプルコードでは、スクリプトが実行されるときに最初に呼び出されるOnStart関数を使用しています。OnStart関数は、必要な初期化処理や他の関数の呼び出しを行うための関数です。
まず、ポジション識別子を格納するために、long型の変数position_idを宣言しています。次に、PositionGetTicket関数を使用して、インデックス0に対応する最初のポジションの識別子を取得し、position_idに格納します。
次に、if文を使用して、HistorySelectByPosition関数を呼び出します。この関数は、指定されたポジション識別子に関連する取引履歴や注文履歴を取得します。成功するとtrueを返し、失敗するとfalseを返します。
if文の条件が真(true)である場合、取引履歴と注文履歴の件数を取得し、それぞれをエキスパートログに出力します。Print関数は、指定されたメッセージをエキスパートログに出力するために使用されます。
HistoryDealsTotal関数を使用して取得した取引履歴の件数を確認し、HistoryOrdersTotal関数を使用して取得した注文履歴の件数を確認します。
for文を使用して、取引履歴と注文履歴の各要素にアクセスします。HistoryDealGetTicket関数は、指定されたインデックスの取引チケット番号を取得し、HistoryOrderGetTicket関数は、指定されたインデックスの注文チケット番号を取得します。
最後に、else文を使用して、HistorySelectByPosition関数が失敗した場合にエラーメッセージをエキスパートログに出力します。