【MQL5】PositionGetDouble関数について

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

PositionGetDouble関数の働き・役割について

PositionGetDouble関数は、現在開いているポジションに関する数値型、そのうちのdouble型に関連する情報を取得するために使用されます。

PositionGetDouble関数を使って、例えばポジションの利益や損失、価格、スワップなどの詳細な数値データを得ることができます。

PositionGetDouble関数を用いる事によって、トレーディング戦略の分析や決定を行う際に重要な情報を取得する事ができます

PositionGetDouble関数の引数について

PositionGetDouble関数は複数の書式を持つオーバーロード関数です。

PositionGetDouble関数には2つの書式があります。

オーバーロード関数については↓の記事をご参照ください

PositionGetDouble関数の第1書式について

PositionGetDouble関数第1書式の引数構成は以下の通りです

double  PositionGetDouble(
  ENUM_POSITION_PROPERTY_DOUBLE  property_id      // プロパティ識別子
  );

PositionGetDouble関数引数は一つだけです。

prop_id: 取得したい注文プロパティの種類を指定する、データ型ENUM_POSITION_PROPERTY_DOUBLE列挙型の値です。

ENUM_POSITION_PROPERTY_DOUBLEの詳細については後程解説します。

enum列挙型についての詳細は↓の記事をご参照ください

PositionGetDouble関数第1書式の戻り値について

PositionGetDouble関数第1書式の戻り値は、ENUM_POSITION_PROPERTY_DOUBLE型で要求されたプロパティ値をdouble型の数値で直接返します。

プロパティが存在し、取得できる場合はその値が返されます。

存在しないプロパティを要求した場合や、何らかの理由で情報が取得できなかった場合は通常「0」が返されます。

PositionGetDouble関数第2書式の引数について

PositionGetDouble関数第2書式の引数は以下の通りです。

bool  PositionGetDouble(
  ENUM_POSITION_PROPERTY_DOUBLE  property_id,     // プロパティ識別子
  double&                        double_var      // プロパティ値を受け取る
  );

prop_id: 第1引数は、取得したいポジションの具体的なプロパティを指定するための識別子です。

データ型の書式は第1書式と同じENUM_POSITION_PROPERTY_DOUBLE型です。

double_var: 第2引数は、取得したプロパティ値を格納するための変数参照渡しで指定します。

参照渡しについての詳細は↓の記事をご参照ください

PositionGetDouble関数第2書式の戻り値について

処理が成功した場合にtrueを、失敗した場合にfalseを返します。成功の場合、double_varに指定したプロパティの値が格納されます。

PositionGetDouble関数を使う際の注意点

PositionGetDouble関数を使うには、事前にPositionGetTicket関数PositionSelect関数PositionSelectByTicket関数などを使う事によって、PositionGetDouble関数が処理を行うポジション番号を指定する必要があります。

注文とポジションの違い

また、大前提としてMetaTrader 5MT5)には注文とポジションという概念がある点に注意が必要です。

  • 注文とは、取引を開始するためのリクエストです。これは、MQL5の公式リファレンスでの日本語訳では「未決注文(待機注文)」いう訳があてられており、実際に取引が行われる前の段階を指します。
  • ポジションとは、実際に取引が行われた後の結果です。つまり、買いまたは売りの注文が実行された後に持つ取引のことを指します。
  • そしてPositionGetDouble関数はこのポジションに対して処理を行う関数である、という事を押さえておきましょう

MetaTrader 5MT5)の「ツールボックス」の「取引」タブで見られるのはポジションの情報なので、これを待機注文と混同しないようにしましょう。

ポジションのネッティング計算

  • ネッティングとは、同じシンボルに対する複数の取引を一つのポジションに統合する計算方法です。ネッティングシステムにおいては、各シンボルにつき1つのポジションのみを保有することができます。

ネッティングシステムについては↓の記事リンクをご参照ください

複数ポジションの保有(ヘッジングシステム)

  • 一方で、ヘッジングシステムを使用している場合は、各シンボルに対して複数のポジションを同時に保有することが可能です。

ヘッジングシステムについては↓の記事リンクをご参照ください

ENUM_POSITION_PROPERTY_DOUBLEについて

ENUM_POSITION_PROPERTY_DOUBLEは、特定のポジション情報をダdouble型の数値として取得するための識別子を集めたものです。各識別子の一覧は以下の通りです。

POSITION_VOLUME

POSITION_VOLUMEはポジションのボリューム、すなわちポジションが占める取引量を示し、どれだけの「量」の取引が行われているかを表します。

POSITION_PRICE_OPEN

POSITION_PRICE_OPENはポジションのオープン価格、すなわちポジションを開始した時の市場価格を意味します。

POSITION_SL

POSITION_SLはストップロスの価格設定、すなわちポジションに対する損失限定レベルを設定します。つまり、損失がこのレベルに達したら、ポジションが自動的に閉じられる価格です。

POSITION_TP

POSITION_TPはテイクプロフィットの価格設定、すなわち利益を確定するための価格レベルを返します。この価格に達したらポジションが自動的に閉じられます。

データ型: double型

POSITION_PRICE_CURRENT

POSITION_PRICE_CURRENTはポジションの現在の市場価格。これはリアルタイムの市場価格で、現在のポジションの価値を反映します。

データ型: double型

POSITION_PRICE_CURRENTとPOSITION_PRICE_OPENの違い

POSITION_PRICE_OPENはトレーダーがポジションを開始した時の市場価格を指します。つまり、トレードが実行されたときの初期価格で、この価格で取引が開かれた(購入または販売された)ことを意味します。

一方でPOSITION_PRICE_CURRENTは現在の市場価格を表し、リアルタイムで変動する価格です。この価格は常に変動しており、現在の市場環境を反映しています。

POSITION_SWAP

POSITION_SWAPは保有ポジションのスワップを返します。

スワップとは、異なる国の通貨ペアを取引する際に発生する、2国間の金利差に基づく利息のようなものです。

例えば、金利が高い国の通貨を買い、金利が低い国の通貨を売ると、トレーダーは金利差に相当する金額を受け取ることがあります。

スワップについての詳細は↓の記事をご参照ください

POSITION_PROFIT

POSITION_PROFITは現在のポジションの利益、すなわちポジションが現在どれだけの利益または損失を出しているかを数値で示します。

PositionGetDouble関数を利用したサンプルコード

以下は、PositionGetDouble関数を利用して、特定のポジションに関する数値型の情報を取得して表示するMQL5のサンプルコードです。

このコードは、特定のシンボルに関連するポジションが存在する場合、そのポジションのオープン価格、現在価格、利益、スワップを取得し、それらをターミナルのログに出力します。

//+------------------------------------------------------------------+
//| トレードイベントが発生したときに呼び出される関数です。                         |
//+------------------------------------------------------------------+
void OnTrade()
 {
  //--- 現在選択しているシンボル(通貨ペア)にポジションが存在するかどうかをチェックします。
  if(PositionSelect(_Symbol))
    {
      //--- ポジションのオープン価格を取得します。
      double open_price = PositionGetDouble(POSITION_PRICE_OPEN);
      //--- オープン価格を表示します。
      Print(_Symbol, " position open price: ", open_price);
      
      //--- ポジションの現在価格を取得します。
      double current_price = PositionGetDouble(POSITION_PRICE_CURRENT);
      //--- 現在価格を表示します。
      Print(_Symbol, " position current price: ", current_price);

      //--- ポジションの利益を取得します。
      double profit = PositionGetDouble(POSITION_PROFIT);
      //--- 利益を表示します。
      Print(_Symbol, " position profit: ", profit);

      //--- ポジションのスワップを取得します。
      double swap = PositionGetDouble(POSITION_SWAP);
      //--- スワップを表示します。
      Print(_Symbol, " position swap: ", swap);
    }
  //--- 関数の終了
 }

<参照>

PositionGetInteger関数について

PositionGetString関数について

PositionSelect関数について

PositionSelectByTicket関数について

PositionGetTicket関数について

PositionGetSymbol関数について

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