【MQL5】HistoryOrderSelect関数について

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

HistoryOrderSelect関数の働き・役割

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

HistoryOrderSelect関数の引数について

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

書式

bool HistoryOrderSelect(
  ulong ticket  // 注文チケット
);

引数の詳細

ticket

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

HistoryOrderSelect関数の戻り値について

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

HistoryOrderSelect関数を使う際の注意点


HistoryOrderSelect関数は、MQL5プログラムで参照できる注文のリストをクリアし、成功した場合は1つの注文を複製します。

取引履歴の注文を「ツールボックス」バーの「取引」タブに表示される待機注文と混同しないように注意が必要です。
取り消されたまたはトランザクションにつながった注文のリストは、クライアント端末の「ツールボックス」バーの「履歴」タブで確認できます。HistorySelect関数で選択された約定を一つずつ参照する必要がある場合には、HistoryOrderGetTicket関数が使用されるべきです。

注文、約定、およびポジションの違いについて

注文、約定、およびポジションは、それぞれ異なる概念です。以下にその違いを詳しく解説します。

注文

注文は、取引を開始するためのリクエストです。トレーダーが特定の価格で資産を買う、または売る意思を表明するものです。注文が市場に出されると、取引が成立するまで待機します。

約定

約定は、注文が実際に市場で執行されることを指します。例えば、買い注文が売り手と一致した場合、その注文は約定となります。つまり、約定は注文が実際に取引された結果です。

ポジション

ポジションは、1つ以上の約定の結果として保持される資産の総量です。例えば、複数の買い注文が約定された場合、それらの約定が集まって形成されるものがポジションです。ポジションは、トレーダーが市場で保有している全ての資産の状況を示します。

これらの概念を混同しないようにすることが重要です。注文は取引のリクエスト、約定はそのリクエストが市場で実行された結果、ポジションはその実行結果の合計として理解してください。

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

// OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出されます
void OnStart()
{
    // 例として、特定の注文チケット番号を指定します
    ulong ticket = 12345678;

    // HistoryOrderSelect関数を使用して注文を選択します
    if (HistoryOrderSelect(ticket))
    {
        // 選択が成功した場合の処理を記述します
        Print("注文が選択されました: ", ticket);
    }
    else
    {
        // 選択が失敗した場合のエラー処理を記述します
        Print("注文の選択に失敗しました。チケット番号: ", ticket);

        // GetLastError関数を使用してエラーコードを取得し、表示します
        int error_code = GetLastError();
        Print("エラーコード: ", error_code);
    }
}

このサンプルコードでは、指定した注文チケットをHistoryOrderSelect関数を使用して選択し、その後に選択された注文の詳細情報にアクセスするための処理を行っています。エラーが発生した場合には、エラーコードを取得して表示する処理も含まれています。

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

OnStart関数

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

ulong ticket

ticketは、特定の注文を一意(1つしか存在しない)に識別するための注文チケット番号を格納する変数です。

ulong ticket = 12345678;

HistoryOrderSelect関数

HistoryOrderSelect関数は、指定した注文チケットに基づいて取引履歴内の注文を選択します。成功するとtrueが返され、失敗するとfalseが返されます。

if (HistoryOrderSelect(ticket))

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

Print関数

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

Print("注文が選択されました: ", ticket);

このコードでは、選択された注文チケット番号をエキスパートログに出力します。

else文

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

else
{
    Print("注文の選択に失敗しました。チケット番号: ", ticket);

    // GetLastError関数を使用してエラーコードを取得し、表示します
    int error_code = GetLastError();
    Print("エラーコード: ", error_code);
}

このelse文では、注文の選択に失敗した場合にエラーメッセージとエラーコードをエキスパートログに出力します。

GetLastError関数

GetLastError関数は、最後に発生したエラーのコードを取得します。この関数を使用してエラーの原因を調査し、適切なエラー処理を行うことができます。

int error_code = GetLastError();

このコードでは、最後に発生したエラーコードがerror_code変数に格納されます。

これらの要素を理解することで、サンプルコードの構造や動作を把握しやすくなります。

補足1:HistoryDealSelect関数とHistoryOrderSelect関数の違いについて

HistoryDealSelect関数HistoryOrderSelect関数は、取引履歴の中から特定の情報を選択するために使用されますが、それぞれ異なる対象を扱います。以下にその違いを説明します。

HistoryDealSelect関数

  • 目的: 取引履歴の中から特定の約定(トレード)を選択します。
  • 引数:
  • ticket: 約定チケット(約定を一意に識別する番号)。
  • 戻り値: 成功した場合はtrue、失敗した場合はfalse。
  • 使用場面: 約定の詳細情報(価格、量、シンボルなど)にアクセスしたい場合に使用されます。

HistoryOrderSelect関数

  • 目的: 取引履歴の中から特定の注文を選択します。
  • 引数:
  • ticket: 注文チケット(注文を一意に識別する番号)。
  • 戻り値: 成功した場合はtrue、失敗した場合はfalse。
  • 使用場面: 注文の詳細情報(注文価格、数量、注文タイプなど)にアクセスしたい場合に使用されます。

違いのまとめ

  1. 対象:
  1. 用途:
  1. 取引の段階:
  • 約定は注文が実行された結果です。
  • 注文は取引の指示であり、約定の前段階にあたります。

これにより、HistoryDealSelect関数は約定に関連する情報を取得する際に、HistoryOrderSelect関数は注文に関連する情報を取得する際に使用されます。それぞれの関数は、取引履歴の異なる側面に焦点を当てているため、用途に応じて適切な関数を選択する必要があります。

補足2:HistoryOrderSelect関数を使用するための注文チケットを取得する方法

HistoryOrderSelect関数を使用するためには、引数に注文チケットを記述する必要があります。

注文チケットを取得する一般的かつ実用的な方法はいくつかあります。以下にその代表的な手法を紹介します。

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 orders_total = HistoryOrdersTotal();

        // 選択された注文をループで処理します
        for (int i = 0; i < orders_total; i++)
        {
            // HistoryOrderGetTicket関数を使用して注文チケットを取得します
            ulong ticket = HistoryOrderGetTicket(i);

            // 取得した注文チケットを使用して注文を選択します
            if (HistoryOrderSelect(ticket))
            {
                // 選択が成功した場合の処理を記述します
                Print("注文が選択されました: ", ticket);
            }
        }
    }
    else
    {
        Print("取引履歴の選択に失敗しました。");
    }
}

2. 最新の注文を取得する

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

サンプルコード

// OnTick関数は新しいティックデータが到着するたびに自動的に呼び出されます
void OnTick()
{
    // 例として、直近の注文チケットを取得するための処理を記述します
    ulong last_ticket = HistoryOrdersTotal() > 0 ? HistoryOrderGetTicket(OrdersHistoryTotal() - 1) : 0;

    if (last_ticket > 0)
    {
        // 取得した注文チケットを使用して注文を選択します
        if (HistoryOrderSelect(last_ticket))
        {
            // 選択が成功した場合の処理を記述します
            Print("最新の注文チケット: ", last_ticket);
        }
    }
}

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 orders_total = HistoryOrdersTotal();

        // 選択された注文をループで処理します
        for (int i = 0; i < orders_total; i++)
        {
            // HistoryOrderGetTicket関数を使用して注文チケットを取得します
            ulong ticket = HistoryOrderGetTicket(i);

            // 取得した注文チケットを使用して注文を選択します
            if (HistoryOrderSelect(ticket))
            {
                // 注文シンボルを取得します
                string order_symbol = OrderGetString(ORDER_SYMBOL);

                // 特定のシンボルに基づいてフィルタリングします
                if (order_symbol == "EURUSD")
                {
                    // 選択が成功した場合の処理を記述します
                    Print("EURUSDの注文チケット: ", ticket);
                }
            }
        }
    }
    else
    {
        Print("取引履歴の選択に失敗しました。");
    }
}

これらの方法を使用することで、特定の目的や条件に応じてHistoryOrderSelect関数を利用するための注文チケットを効率的に取得することができます。

タイトルとURLをコピーしました