PositionGetInteger関数の役割・働き
PositionGetInteger関数は、既に開いている取引ポジションの、特定の整数型プロパティ情報を取得するために使用される関数です。
現在のポジションに関する詳細な情報、例えばポジション番号やマジックナンバーなどを取得する事ができます。
PositionGetInteger関数の引数について
PositionGetInteger関数は複数の書式を持つオーバーロード関数です。
PositionGetInteger関数には2つの書式があります。
※オーバーロード関数については↓の記事をご参照ください
PositionGetInteger関数の第1書式について
PositionGetInteger関数第1書式の引数構成は以下の通りです
long PositionGetInteger(
ENUM_POSITION_PROPERTY_INTEGER property_id // プロパティ識別子
);
PositionGetInteger関数第1書式における引数の説明
PositionGetInteger関数第1書式の引数は1つだけです。
prop_id: 取得したい注文プロパティの種類を指定する、データ型がENUM_POSITION_PROPERTY_INTEGER列挙型の値です。
ENUM_POSITION_PROPERTY_INTEGERの詳細については後程解説します。
※enum列挙型についての詳細は↓の記事をご参照ください
PositionGetInteger関数第1書式の戻り値について
PositionGetInteger関数第1書式の戻り値は、ENUM_POSITION_PROPERTY_INTEGER型で要求されたプロパティ値をlong型の数値で直接返します。
プロパティが存在し、取得できる場合はその値が返されます。
存在しないプロパティを要求した場合や、何らかの理由で情報が取得できなかった場合は通常「0」が返されます。
PositionGetInteger関数の第2書式について
PositionGetInteger関数第2書式の引数構成は以下の通りです
bool PositionGetInteger(
ENUM_POSITION_PROPERTY_INTEGER property_id, // プロパティ識別子
long& long_var // プロパティ値を受け取る
);
PositionGetInteger関数第2書式の引数構成について
prop_id: 第1引数は、取得したいポジションの具体的なプロパティを指定するための識別子です。
データ型の書式は第1書式と同じENUM_POSITION_PROPERTY_INTEGER型です。
long_var: 第2引数は、取得したプロパティ値を格納するための変数を参照渡しで指定します。
※参照渡しについての詳細は↓の記事をご参照ください
PositionGetInteger関数の処理が成功すれば、第2引数には指定されたプロパティの値が格納されます。
PositionGetInteger関数第2書式の戻り値について
処理が成功した場合にtrue
を、失敗した場合にfalse
を返します。成功の場合、long_var
に指定したプロパティの値が格納されます。
PositionGetInteger関数を使う際の注意点
PositionGetInteger関数を使うには、事前にPositionGetTicket関数やPositionSelect関数、PositionSelectByTicket関数などを使う事によって、PositionGetInteger関数が処理を行うポジション番号を指定する必要があります。
注文とポジションの違い
また、大前提としてMetaTrader 5(MT5)には注文とポジションという概念がある点に注意が必要です。
- 注文とは、取引を開始するためのリクエストです。これは、MQL5の公式リファレンスでの日本語訳では「未決注文(待機注文)」いう訳があてられており、実際に取引が行われる前の段階を指します。
- ポジションとは、実際に取引が行われた後の結果です。つまり、買いまたは売りの注文が実行された後に持つ取引のことを指します。
- そしてPositionGetInteger関数はこのポジションに対して処理を行う関数である、という事を押さえておきましょう
※MetaTrader 5(MT5)の「ツールボックス」の「取引」タブで見られるのはポジションの情報なので、これを待機注文と混同しないようにしましょう。
ポジションのネッティング計算
- ネッティングとは、同じシンボルに対する複数の取引を一つのポジションに統合する計算方法です。ネッティングシステムにおいては、各シンボルにつき1つのポジションのみを保有することができます。
※ネッティングシステムについては↓の記事リンクをご参照ください
複数ポジションの保有(ヘッジングシステム)
- 一方で、ヘッジングシステムを使用している場合は、各シンボルに対して複数のポジションを同時に保有することが可能です。
※ヘッジングシステムについては↓の記事リンクをご参照ください
ENUM_POSITION_PROPERTY_INTEGERについて
ENUM_POSITION_PROPERTY_INTEGERは、保有中のポジションに関する様々な情報を整数値で取得するための一連の識別子を提供します。以下はその識別子の説明です。
POSITION_TICKET
各ポジションには固有のポジション番号が割り当てられており、このポジション番号を使って特定のポジションを区別することができます。
POSITION_TICKETはこのポジション番号を取得する識別子です。
ポジションが開始されたときの注文チケット(=オーダー番号)とポジション番号は通常は一致しますが、サーバー上で何らかの操作が行われた結果として変更される場合もあります。
POSITION_TIME
POSITION_TIMEはポジションが開始された日時を示します。
POSITION_TIME_MSC
POSITION_TIME_MSC:はポジションが開始された正確な時刻をミリ秒で示します。この数値は1970年1月1日からの経過ミリ秒数です。
※ミリ秒は、1秒の1000分の1に相当する時間の単位です。
1ミリ秒は、0.001秒と表されます。コンピュータの処理速度やスポーツのタイム測定など、極めて短い時間を測る場合に使われます。
POSITION_TIME_UPDATE
POSITION_TIME_UPDATEは ポジションに変更が加えられた最後の時刻を示します。
POSITION_TIME_UPDATE_MSC
POSITION_TIME_UPDATE_MSCはポジションに変更が加えられた最後の時刻をミリ秒で示します。この数値は1970年1月1日からの経過ミリ秒数です。
POSITION_TYPE
POSITION_TYPEはポジションの種類を示し、買いか売りかを区別します。
データ型はENUM_POSITION_TYPEで定義されています
POSITION_TYPE_BUY
POSITION_TYPE_BUYはポジションタイプが「買い」ポジションであることを示しています
POSITION_TYPE_SELL
POSITION_TYPE_SELLはポジションタイプが「売り」ポジションであることを示しています
POSITION_MAGIC
POSITION_MAGICはEAやスクリプトによって割り当てられるポジションの「マジックナンバー」を返します。
マジックナンバーにより、複数のEAが同じアカウントで取引する場合に、どのEAがそのポジションを開いたのかを区別することができます。
※マジックナンバーの詳細について↓の記事リンクをご参照ください
POSITION_IDENTIFIER
POSITION_IDENTIFIERはポジションごとに割り当てられる一意(=他に同じものがない)の識別番号を返します、この識別番号はポジションが開かれてから閉じられるまで変わることはありません。
POSITION_TICKETが異なる取引(例えば一部決済や追加の取引)によって変更されたとしても、POSITION_IDENTIFIERは同じままです。
この識別番号は、そのポジションに関連する全ての注文や約定(取引の実行結果)を追跡するために使用されます。
つまり、POSITION_IDENTIFIERを使用することで、ある特定のポジションに対して行われた全ての操作(例えば、ポジションオープン、ポジション内容の修正、ポジションクローズなど)を特定できるということです。
簡単に言えば、POSITION_IDENTIFIERは、保有しているポジションを特定するための「名札」のようなものです。
あるポジションに対してどのような注文が行われたのか、またはそのポジションにどのような約定が関連しているのかを知りたいときに、この「名札」を使って照会することができるわけです。
POSITION_REASON
POSITION_REASONはポジションを開いた理由を示します。例えば、ユーザー自身による手動での取引か、EAによる自動取引か、などの情報が含まれます。
データ型はENUM_POSITION_REASONで定義されています。
ENUM_POSITION_REASONについて
ENUM_POSITION_REASONの各識別子は以下の通りです。
- POSITION_REASON_CLIENT: この識別子は、パソコンのデスクトップ版MT5を使って手動で取引を行い、その結果ポジションが開かれたことを意味します。
- POSITION_REASON_MOBILE: この識別子は、スマートフォンやタブレットなどのモバイルデバイスを使用してMT5アプリから取引を行い、その結果ポジションが開かれたことを示します。
- POSITION_REASON_WEB: この識別子は、ウェブブラウザを通じて取引を行った場合に、その結果としてポジションが開かれたことを示します。
- POSITION_REASON_EXPERT: この識別子は、自動取引プログラムであるエキスパートアドバイザーやスクリプトを使用して注文が出され、その結果ポジションが開かれたことを示します。自動化されたトレーディング戦略によって行われた取引に関連しています。
PositionGetInteger関数を使ったサンプルコード
以下のサンプルコードは、PositionGetInteger関数を利用して、特定のポジションに関する情報を取得して表示するためのものです。
//+------------------------------------------------------------------+
//| トレードイベントが発生したときに呼び出される関数です。 |
//+------------------------------------------------------------------+
void OnTrade()
{
//--- 現在選択しているシンボル(通貨ペア)にポジションが存在するかどうかをチェックします。
if(PositionSelect(_Symbol))
{
//--- 存在する場合、そのポジションの一意の識別子(ID)を取得します。
ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER);
//--- 取得したポジションIDを表示します。
Print(_Symbol," position #",position_ID);
//--- ポジションが形成された正確な時刻(ミリ秒単位)を取得します。
long create_time_msc=PositionGetInteger(POSITION_TIME_MSC);
//--- ポジションが形成された時刻をミリ秒から変換して表示します。
PrintFormat("Position #%d POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID,
create_time_msc,TimeToString(create_time_msc/1000));
//--- ポジションが最後に変更された時刻(秒単位)を取得します。
long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE);
//--- 最終変更時刻を秒から変換して表示します。
PrintFormat("Position #%d POSITION_TIME_UPDATE = %i64 seconds => %s",
position_ID,update_time_sec,TimeToString(update_time_sec));
//--- ポジションが最後に変更された時刻(ミリ秒単位)を取得します。
long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC);
//--- 最終変更時刻をミリ秒から変換して表示します。
PrintFormat("Position #%d POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s",
position_ID,update_time_msc,TimeToString(update_time_msc/1000));
}
//--- 関数の終了
}
<参照>
————————————————————————————–
※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる
をメインコンテンツとして展開しています。