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 5(MT5)には注文とポジションという概念がある点に注意が必要です。
- 注文とは、取引を開始するためのリクエストです。これは、MQL5の公式リファレンスでの日本語訳では「未決注文(待機注文)」いう訳があてられており、実際に取引が行われる前の段階を指します。
- ポジションとは、実際に取引が行われた後の結果です。つまり、買いまたは売りの注文が実行された後に持つ取引のことを指します。
- そしてPositionGetDouble関数はこのポジションに対して処理を行う関数である、という事を押さえておきましょう
※MetaTrader 5(MT5)の「ツールボックス」の「取引」タブで見られるのはポジションの情報なので、これを待機注文と混同しないようにしましょう。
ポジションのネッティング計算
- ネッティングとは、同じシンボルに対する複数の取引を一つのポジションに統合する計算方法です。ネッティングシステムにおいては、各シンボルにつき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はテイクプロフィットの価格設定、すなわち利益を確定するための価格レベルを返します。この価格に達したらポジションが自動的に閉じられます。
POSITION_PRICE_CURRENT
POSITION_PRICE_CURRENTはポジションの現在の市場価格。これはリアルタイムの市場価格で、現在のポジションの価値を反映します。
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);
}
//--- 関数の終了
}
<参照>