【MQL5】HistoryOrderGetDouble関数について

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

HistoryOrderGetDouble関数の働き・役割

HistoryOrderGetDouble関数は、取引履歴から特定の注文プロパティを取得するために使用されます。この関数は、指定された注文チケットとプロパティ識別子に基づいて、注文のプロパティ値を取得します。このプロパティ値はdouble型である必要があります。

HistoryOrderGetDouble関数には、2つのバージョンがあります。

1つ目のバージョンは、プロパティ値を直接返します。これは、プロパティ値が即座に必要な場合に便利です。

2つ目のバージョンは、関数の実行結果に応じてtrueまたはfalseを返します。関数が成功した場合、プロパティ値は参照渡しされた変数に格納されます。このバージョンは、関数の実行結果を確認しながらプロパティ値を取得する場合に使用されます。

HistoryOrderGetDouble関数の引数について

HistoryOrderGetDouble関数引数構成は以下の通りです。この関数は複数の書式を持つオーバーロード関数です。

書式1

double HistoryOrderGetDouble(
   ulong ticket_number,           // チケット
   ENUM_ORDER_PROPERTY_DOUBLE property_id // プロパティ識別子
);ENUM_ORDER_PROPERTY_DOUBLE

ticket_numberは注文チケットを示します。これは、取引履歴から特定の注文を識別するために使用されます。

property_idは注文プロパティの識別子です。これは、ENUM_ORDER_PROPERTY_DOUBLE列挙のいずれかの値を使用します。この識別子により、取得したい注文プロパティが特定されます。

書式2

bool HistoryOrderGetDouble(
   ulong ticket_number,           // チケット
   ENUM_ORDER_PROPERTY_DOUBLE property_id, // プロパティ識別子
   double& double_var             // プロパティ値を受け取る
);

ticket_numberとproperty_idは書式1と同様です。

double_varは、プロパティ値を受け取るための変数です。この変数には、関数の実行が成功した場合に、指定されたプロパティの値が参照渡しで格納されます。

HistoryOrderGetDouble関数の戻り値について

HistoryOrderGetDouble関数は、指定された注文プロパティの値を返します。

書式1の戻り値

指定されたプロパティの値をdouble型で直接返します。

書式2の戻り値

関数の実行が成功した場合にtrueを返し、プロパティ値は参照渡しされた変数に格納されます。失敗した場合はfalseを返します。

ENUM_ORDER_PROPERTY_DOUBLEについて

ENUM_ORDER_PROPERTY_DOUBLEとは、注文プロパティの識別子を定義する列挙型です。この識別子を使用して、HistoryOrderGetDouble関数で取得したい注文プロパティを指定します。プロパティはすべてdouble型です

ORDER_VOLUME_INITIAL

ORDER_VOLUME_INITIALは、注文の初期ボリュームを示す識別子です。このプロパティを使用して、注文が発注されたときの最初の取引量を取得します。値はdouble型で返されます。初期ボリュームは、注文が最初に作成された際に指定された数量を表します。

ORDER_VOLUME_CURRENT

ORDER_VOLUME_CURRENTは、注文の現在のボリュームを示す識別子です。このプロパティを使用して、現在の取引量を取得します。値はdouble型で返されます。現在のボリュームは、部分的に約定された注文や変更された注文の場合に、その時点での最新の数量を表します。

ORDER_SL

ORDER_SLは、決済逆指値を示す識別子です。このプロパティを使用して、注文に設定された逆指値(ストップロス)価格を取得します。値はdouble型で返されます。逆指値は、損失を限定するために設定される価格で、注文がこの価格に達した場合に自動的に決済されます。

ORDER_TP

ORDER_TPは、決済指値を示す識別子です。このプロパティを使用して、注文に設定された指値(テイクプロフィット)価格を取得します。値はdouble型で返されます。指値は、利益を確定するために設定される価格で、注文がこの価格に達した場合に自動的に決済されます。

ORDER_PRICE_CURRENT

ORDER_PRICE_CURRENTは、注文シンボルの現在の価格を示す識別子です。このプロパティを使用して、注文シンボルの最新の市場価格を取得します。値はdouble型で返されます。現在の価格は、市場の動向を把握するために重要です。

ORDER_PRICE_STOPLIMIT

ORDER_PRICE_STOPLIMITは、ストップリミット注文の指値注文価格を示す識別子です。このプロパティを使用して、ストップリミット注文の指値価格を取得します。値はdouble型で返されます。ストップリミット注文は、特定の価格に達した後に指値注文を出すために使用されます。

HistoryOrderGetDouble関数を使う際の注意点

HistoryOrderGetDouble関数を使用する際には、いくつかの重要な注意点があります。

  1. 取引履歴の注文と待機注文の混同
    取引履歴の注文は、「ツールボックス」バーの「履歴」タブに表示されます。これは、既に取引が完了した注文や取り消された注文のリストです。待機注文は「ツールボックス」バーの「取引」タブに表示されるため、これらを混同しないように注意が必要です。
  2. 適切な注文チケットの使用
    HistoryOrderGetDouble関数を使用する際には、正しい注文チケット番号を指定する必要があります。誤ったチケット番号を使用すると、期待した結果が得られない場合があります。
  3. プロパティ識別子の確認
    プロパティ識別子ENUM_ORDER_PROPERTY_DOUBLEの中から選択する必要があります。適切な識別子を使用しないと、関数はエラーを返すか、予期しない結果を返すことがあります。
  4. 戻り値の処理
    関数戻り値がfalseの場合、プロパティ値が取得できなかったことを示します。この場合、エラー処理を行う必要があります。特に、書式2のバージョンを使用する際には、関数の実行結果を確認することが重要です。
  5. 適切なデータ型の使用
    HistoryOrderGetDouble関数double型のプロパティ値を返します。返された値を適切に処理するために、double型変数を使用する必要があります。異なるデータ型を使用すると、データの整合性が損なわれる可能性があります。

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

// OnStart関数はスクリプトの実行が開始されたときに自動的に呼び出されます
void OnStart()
{
    // 履歴から注文を選択するために必要な初期設定
    // ここでは直近1か月間の取引履歴を選択します
    if(HistorySelect(TimeCurrent() - 30 * 24 * 60 * 60, TimeCurrent()))
    {
        // 取引履歴の総数を取得します
        int totalOrders = HistoryOrdersTotal();

        // 取引履歴を順番に処理するループ
        for(int i = 0; i < totalOrders; i++)
        {
            // 各取引の注文チケットを取得します
            ulong ticket = HistoryOrderGetTicket(i);
            
            // 注文を履歴から選択します
            if(HistoryOrderSelect(ticket))
            {
                // 注文の初期ボリュームを取得します
                double initialVolume = HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL);
                Print("注文チケット: ", ticket, " の初期ボリュームは: ", initialVolume);
                
                // 注文の現在のボリュームを取得します
                double currentVolume = HistoryOrderGetDouble(ticket, ORDER_VOLUME_CURRENT);
                Print("注文チケット: ", ticket, " の現在のボリュームは: ", currentVolume);
                
                // 注文の価格を取得します
                double priceOpen = HistoryOrderGetDouble(ticket, ORDER_PRICE_OPEN);
                Print("注文チケット: ", ticket, " のオープン価格は: ", priceOpen);
                
                // 注文の決済逆指値(ストップロス)を取得します
                double stopLoss = HistoryOrderGetDouble(ticket, ORDER_SL);
                Print("注文チケット: ", ticket, " のストップロスは: ", stopLoss);
                
                // 注文の決済指値(テイクプロフィット)を取得します
                double takeProfit = HistoryOrderGetDouble(ticket, ORDER_TP);
                Print("注文チケット: ", ticket, " のテイクプロフィットは: ", takeProfit);
                
                // 注文シンボルの現在の価格を取得します
                double currentPrice = HistoryOrderGetDouble(ticket, ORDER_PRICE_CURRENT);
                Print("注文チケット: ", ticket, " の現在の価格は: ", currentPrice);
                
                // ストップリミット注文の指値注文価格を取得します
                double stopLimitPrice = HistoryOrderGetDouble(ticket, ORDER_PRICE_STOPLIMIT);
                Print("注文チケット: ", ticket, " のストップリミット注文の価格は: ", stopLimitPrice);
            }
            else
            {
                // 注文の選択に失敗した場合のエラーメッセージ
                Print("注文チケット: ", ticket, " の選択に失敗しました。");
            }
        }
    }
    else
    {
        // 取引履歴の選択に失敗した場合のエラーメッセージ
        Print("取引履歴の選択に失敗しました。");
    }
}

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

  1. OnStart関数
    スクリプトが実行されたときに最初に呼び出される関数です。ここに主な処理内容を記述します。
  2. HistorySelect関数
    取引履歴の選択範囲を指定します。この例では、直近1か月間の取引履歴を選択しています。
   HistorySelect(TimeCurrent() - 30 * 24 * 60 * 60, TimeCurrent())

この部分では、TimeCurrent関数を使用して現在の時刻を取得し、それから30日分の秒数を引くことで直近1か月間の開始時刻を計算しています。

  • 30 * 24 * 60 * 60は、30日分の秒数を計算しています。
    • 30は30日間。
    • 24は1日の時間(24時間)。
    • 60は1時間の分数(60分)。
    • 60は1分の秒数(60秒)。
      これを掛け合わせることで、30日間の合計秒数を計算します。これを現在の時刻(TimeCurrent())から引くことで、直近1か月間の開始時刻が得られます。
  1. HistoryOrdersTotal関数
    選択された取引履歴の中で、注文の総数を取得します。
  2. HistoryOrderGetTicket関数
    指定されたインデックス(通し番号)の注文チケットを取得します。
  3. HistoryOrderSelect関数
    指定された注文チケットに基づいて注文を選択します。
  4. HistoryOrderGetDouble関数
    指定された注文チケットとプロパティ識別子に基づいて注文のプロパティ値を取得します。このサンプルコードでは、初期ボリューム、現在のボリューム、オープン価格、ストップロス、テイクプロフィット、現在の価格、ストップリミット注文の価格を取得しています。
  5. Print関数
    メッセージをエキスパートログに出力します。各プロパティの値を確認するために使用します。

このサンプルコードを実行することで、取引履歴に関する詳細な情報を取得し、各注文のプロパティ値をエキスパートログに出力することができます。

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