【MQL5】HistoryDealSelect関数について

MQL5リファレンス
スポンサーリンク

HistoryDealSelect関数の働き・役割

HistoryDealSelect関数は、約定履歴内の特定の約定を選択するために使用されます。この関数を使用することで、指定された約定チケットに基づいて履歴内の約定を選び出し、詳細な情報にアクセスできるようになります。
関数が成功するとtrueが返され、失敗するとfalseが返されます。エラーの詳細についてはGetLastError関数を使用して確認できます。

HistoryDealSelect関数の引数について

HistoryDealSelect関数引数は以下の通りです。

bool HistoryDealSelect(
  ulong ticket  // 約定チケット
);

引数の詳細

ticket

約定チケットを指定します。これは、履歴内の特定の約定を一意(1つしか存在しない)に識別するための番号です。

HistoryDealSelect関数の戻り値について

HistoryDealSelect関数は、指定された約定チケットに基づいて約定を選択し、成功した場合はtrueを返します。選択に失敗した場合はfalseを返します。エラーが発生した場合の詳細な情報は、GetLastError関数を使用して取得できます。

HistoryDealSelect関数を使う際の注意点

注文、約定、およびポジションは混同しないように注意が必要です。約定は注文の実行結果であり、ポジションは1つ以上の約定の結果の概要を示します。
HistoryDealSelect関数は、MQL5プログラムで参照できる約定のリストをクリアし、成功した場合は1つの約定を複製します。

約定履歴を順に参照する場合には、HistorySelect関数で選択された約定を一つずつ参照する必要があります。その際にはHistoryDealGetTicket関数を使用するべきです。

HistorySelect関数とHistoryDealSelect関数の違いについて

HistorySelect関数HistoryDealSelect関数は、共に取引履歴を操作するために使用されますが、それぞれの目的と機能には違いがあります。

HistorySelect関数

  • 目的: 指定した期間の取引履歴を選択します。
  • 引数:
    • from_date: 開始日(日時型)。
    • to_date: 終了日(日時型)。
  • 機能: 指定された期間に行われたすべての取引(注文、約定、ポジション)を選択します。選択された取引は、その後の関数呼び出しで参照できます。HistoryDealsTotal関数HistoryDealGetTicket関数HistoryOrderSelect関数などが代表的な後続関数です。
  • 戻り値: 成功した場合はtrue、失敗した場合はfalseを返します。

HistoryDealSelect関数

  • 目的: 特定の約定を選択します。
  • 引数:
    • ticket: 約定チケット(一意な識別子)。
  • 機能: 指定された約定チケットに基づいて、履歴内の特定の約定を選択します。選択された約定は、関数の成功後に詳細情報を取得するために使用できます。
  • 戻り値: 成功した場合はtrue、失敗した場合はfalseを返します。

違いのまとめ

  • 適用範囲:
  • 使用目的:

HistoryDealSelect関数を使ったサンプルコード

// OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出されます
void OnStart()
{
    // 例として、過去7日間の取引履歴を選択します
    datetime from_date = TimeCurrent() - PERIOD_D1 * 7;
    datetime to_date = TimeCurrent();
    
    // HistorySelect関数を使用して過去7日間の取引履歴を選択します
    if (HistorySelect(from_date, to_date))
    {
        // 選択された約定の総数を取得します
        int deals_total = HistoryDealsTotal();
        
        // 選択された約定をループで処理します
        for (int i = 0; i < deals_total; i++)
        {
            // HistoryDealGetTicket関数を使用して約定チケットを取得します
            ulong ticket = HistoryDealGetTicket(i);
            
            // 取得した約定チケットを使用して約定を選択します
            if (HistoryDealSelect(ticket))
            {
                // 約定シンボルを取得します
                string deal_symbol = HistoryDealGetString(ticket,DEAL_SYMBOL);
                
                // 特定のシンボルに基づいてフィルタリングします
                if (deal_symbol == "EURUSD")
                {
                    // 約定の詳細情報を処理します
                    double deal_price = HistoryDealGetDouble(ticket,DEAL_PRICE);
                    Print("EURUSDの約定チケット: ", ticket, " 価格: ", deal_price);
                }
            }
        }
    }
    else
    {
        Print("取引履歴の選択に失敗しました。");
    }
}

このサンプルコードでは、指定した約定チケットをHistoryDealSelect関数を使用して選択し、その後に選択された約定の詳細情報(価格、量、シンボル)を取得して表示しています。エラーが発生した場合には、エラーコードを取得して表示する処理も含まれています。

サンプルコードに使われた関数や文法要素の簡単な解説

OnStart関数

OnStart関数は、スクリプトの実行が開始されたときに自動的に呼び出される関数です。この関数内に必要な処理を記述します。

datetime from_date, to_date

from_dateとto_dateは、取引履歴を選択する期間を示すための変数です。from_dateは履歴の開始日、to_dateは履歴の終了日を示します。

datetime from_date = TimeCurrent() - PERIOD_D1 * 7;
datetime to_date = TimeCurrent();

上記のコードでは、from_dateは現在の日時から過去7日分を引いた日時を示し、to_dateは現在の日時を示します。

HistorySelect関数

HistorySelect関数は、指定した期間内の取引履歴を選択するために使用されます。from_dateは履歴の開始日、to_dateは履歴の終了日を示します。成功するとtrueが返され、失敗するとfalseが返されます。

if (HistorySelect(from_date, to_date))

このif文では、HistorySelect関数がtrueを返した場合にのみ、次のコードブロックが実行されます。

HistoryDealsTotal関数

HistoryDealsTotal関数は、選択された取引履歴の約定の総数を取得します。この関数は、選択された取引履歴に含まれる約定の数を返します。

int deals_total = HistoryDealsTotal();

このコードでは、deals_total変数に選択された約定の総数が格納されます。

for文

for文は、特定の回数だけ繰り返し処理を行うための制御構造です。選択された約定の総数に基づいてループを実行し、各約定を処理します。

for (int i = 0; i < deals_total; i++)

このfor文では、iが0からdeals_total未満の間、ループが繰り返されます。

HistoryDealGetTicket関数

HistoryDealGetTicket関数は、選択された取引履歴から特定の約定チケットを取得します。引数として、約定のインデックス(通し番号)を指定します。

ulong ticket = HistoryDealGetTicket(i);

このコードでは、約定のインデックスiに基づいて、特定の約定チケットがticket変数に格納されます。

HistoryDealSelect関数

HistoryDealSelect関数は、指定した約定チケットに基づいて約定を選択します。成功するとtrueが返され、失敗するとfalseが返されます。

if (HistoryDealSelect(ticket))

このif文では、HistoryDealSelect関数がtrueを返した場合にのみ、次のコードブロックが実行されます。

HistoryDealGetString関数

HistoryDealGetString関数は、選択された約定の文字列型プロパティを取得します。ここでは約定シンボルを取得するために使用されています。プロパティの識別子としてDEAL_SYMBOLを指定します。

string deal_symbol = HistoryDealGetString(ticket, DEAL_SYMBOL);

このコードでは、約定シンボルがdeal_symbol変数に格納されます。

if文によるフィルタリング

取得した約定シンボルが特定のシンボル(ここではEURUSD)と一致するかを確認します。

if (deal_symbol == "EURUSD")

このif文では、deal_symbolが”EURUSD”と一致する場合にのみ、次のコードブロックが実行されます。

HistoryDealGetDouble関数

HistoryDealGetDouble関数は、選択された約定の数値型プロパティを取得します。ここでは約定価格を取得するために使用されています。プロパティの識別子としてDEAL_PRICEを指定します。

double deal_price = HistoryDealGetDouble(ticket, DEAL_PRICE);

このコードでは、約定価格がdeal_price変数に格納されます。

Print関数

Print関数は、メッセージや変数の値をエキスパートログに出力します。デバッグや情報の確認に使用されます。

Print("EURUSDの約定チケット: ", ticket, " 価格: ", deal_price);

このコードでは、約定チケット番号と価格がエキスパートログに出力されます。

else文

else文は、if文の条件が偽である場合に実行されるコードブロックを指定します。例えば、HistorySelect関数がfalseを返した場合にエラーメッセージを出力するelse文があります。

else
{
    Print("取引履歴の選択に失敗しました。");
}

このelse文では、取引履歴の選択に失敗した場合にエラーメッセージが出力されます。

補足:HistoryDealSelect関数を使用するための約定チケットを取得する方法

HistoryDealSelect関数を使用するためには引数に約定チケットを記述する必要があります。
約定チケットを取得する一般的かつ実用的な方法はいくつかあります。以下にその代表的な手法を紹介します。

1. HistorySelect関数を使用して過去の約定を取得する

まず、HistorySelect関数を使用して特定の期間内の取引履歴を選択し、その中から約定チケットを取得します。これは過去の取引データを解析する際に一般的な方法です。

サンプルコード

// OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出されます
void OnStart()
{
    // 例として、過去7日間の取引履歴を選択します
    datetime from_date = TimeCurrent() - PERIOD_D1 * 7;
    datetime to_date = TimeCurrent();
    
    // HistorySelect関数を使用して過去7日間の取引履歴を選択します
    if (HistorySelect(from_date, to_date))
    {
        // 選択された約定の総数を取得します
        int deals_total = HistoryDealsTotal();
        
        // 選択された約定をループで処理します
        for (int i = 0; i < deals_total; i++)
        {
            // HistoryDealGetTicket関数を使用して約定チケットを取得します
            ulong ticket = HistoryDealGetTicket(i);
            
            // 取得した約定チケットを使用して約定を選択します
            if (HistoryDealSelect(ticket))
            {
                // 約定の詳細情報を処理します
                double deal_price = HistoryDealGetDouble(ticket,DEAL_PRICE);
                Print("約定チケット: ", ticket, " 価格: ", deal_price);
            }
        }
    }
    else
    {
        Print("取引履歴の選択に失敗しました。");
    }
}

2. 最新の約定を取得する

最新の約定をリアルタイムで取得したい場合、OnTickイベントを利用して、最新の取引が発生するたびにその約定チケットを取得する方法があります。

サンプルコード

// OnTick関数は新しいティックデータが到着するたびに自動的に呼び出されます
void OnTick()
{
    // 例として、直近の約定チケットを取得するための処理を記述します
    ulong last_ticket = HistoryDealGetTicket(HistoryDealsTotal() - 1);
    
    // 取得した約定チケットを使用して約定を選択します
    if (HistoryDealSelect(last_ticket))
    {
        // 約定の詳細情報を処理します
        double deal_price = HistoryDealGetDouble(last_ticket,DEAL_PRICE);
        Print("最新の約定チケット: ", last_ticket, " 価格: ", deal_price);
    }
}

3. 特定の条件に基づいて約定をフィルタリングする

特定の条件(例えば、特定のシンボルや取引タイプ)に基づいて約定をフィルタリングし、その条件を満たす約定チケットを取得する方法もあります。

サンプルコード

// OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出されます
void OnStart()
{
    // 例として、過去7日間の取引履歴を選択します
    datetime from_date = TimeCurrent() - PERIOD_D1 * 7;
    datetime to_date = TimeCurrent();
    
    // HistorySelect関数を使用して過去7日間の取引履歴を選択します
    if (HistorySelect(from_date, to_date))
    {
        // 選択された約定の総数を取得します
        int deals_total = HistoryDealsTotal();
        
        // 選択された約定をループで処理します
        for (int i = 0; i < deals_total; i++)
        {
            // HistoryDealGetTicket関数を使用して約定チケットを取得します
            ulong ticket = HistoryDealGetTicket(i);
            
            // 取得した約定チケットを使用して約定を選択します
            if (HistoryDealSelect(ticket))
            {
                // 約定シンボルを取得します
                string deal_symbol = HistoryDealGetString(ticket,DEAL_SYMBOL);
                
                // 特定のシンボルに基づいてフィルタリングします
                if (deal_symbol == "EURUSD")
                {
                    // 約定の詳細情報を処理します
                    double deal_price = HistoryDealGetDouble(ticket,DEAL_PRICE);
                    Print("EURUSDの約定チケット: ", ticket, " 価格: ", deal_price);
                }
            }
        }
    }
    else
    {
        Print("取引履歴の選択に失敗しました。");
    }
}
タイトルとURLをコピーしました