PositionGetString関数の働き・役割について
PositionGetString関数は、開いているポジションに関する文字列型の情報を取得するために使用されます。
PositionGetString関数は、ポジションのシンボル名やコメントなど、数値ではなくテキストとして表される情報を取得したい場合に使用します。
PositionGetString関数の引数について
PositionGetString関数は複数の書式を持つオーバーロード関数です。
PositionGetString関数には2つの書式があります。
※オーバーロード関数については↓の記事をご参照ください
PositionGetString関数第1書式について
PositionGetString関数第1書式の引数構成は以下の通りです
string PositionGetString(
ENUM_POSITION_PROPERTY_STRING property_id // プロパティ識別子
);
PositionGetString関数第1書式の引数は一つだけです。
prop_id: 取得したい注文プロパティの種類を指定する、データ型がENUM_POSITION_PROPERTY_STRING列挙型の値です。
ENUM_POSITION_PROPERTY_STRINGの詳細については後程解説します。
※enum列挙型についての詳細は↓の記事をご参照ください
PositionGetString関数第1書式の戻り値について
PositionGetString関数第1書式の戻り値は、ENUM_POSITION_PROPERTY_STRING型で要求されたプロパティ値をstring型の値で直接返します。
プロパティが存在し、取得できる場合はその値が返されます。
存在しないプロパティを要求した場合や、何らかの理由で情報が取得できなかった場合は通常「0」が返されます。
PositionGetString関数第2書式について
PositionGetString関数第2書式の引数構成は以下の通りです。
bool PositionGetString(
ENUM_POSITION_PROPERTY_STRING property_id, // プロパティ識別子
string& string_var // プロパティ値を受け取る
);
prop_id: 第1引数は、取得したいポジションの具体的なプロパティを指定するための識別子です。
データ型の書式は第1書式と同じENUM_POSITION_PROPERTY_STRING型です。
string_var: 第2引数は、取得したプロパティ値を格納するための変数を参照渡しで指定します。
※参照渡しについての詳細は↓の記事をご参照ください
PositionGetString関数第2書式の戻り値について
処理が成功した場合にtrue
を、失敗した場合にfalse
を返します。成功の場合、string_var
に指定したプロパティの値が格納されます。
PositionGetString関数を使う際の注意点
PositionGetString関数を使うには、事前にPositionGetTicket関数やPositionSelect関数、PositionSelectByTicket関数などを使う事によって、PositionGetString関数が処理を行うポジション番号を指定する必要があります。
注文とポジションの違い
また、大前提としてMetaTrader 5(MT5)には注文とポジションという概念がある点に注意が必要です。
- 注文とは、取引を開始するためのリクエストです。これは、MQL5の公式リファレンスでの日本語訳では「未決注文(待機注文)」いう訳があてられており、実際に取引が行われる前の段階を指します。
- ポジションとは、実際に取引が行われた後の結果です。つまり、買いまたは売りの注文が実行された後に持つ取引のことを指します。
- そしてPositionGetString関数はこのポジションに対して処理を行う関数である、という事を押さえておきましょう。
※MetaTrader 5(MT5)の「ツールボックス」の「取引」タブで見られるのはポジションの情報なので、これを待機注文と混同しないようにしましょう。
ポジションのネッティング計算
- ネッティングとは、同じシンボルに対する複数の取引を一つのポジションに統合する計算方法です。ネッティングシステムにおいては、各シンボルにつき1つのポジションのみを保有することができます。
※ネッティングシステムについては↓の記事リンクをご参照ください
複数ポジションの保有(ヘッジングシステム)
- 一方で、ヘッジングシステムを使用している場合は、各シンボルに対して複数のポジションを同時に保有することが可能です。
※ヘッジングシステムについては↓の記事リンクをご参照ください
ENUM_POSITION_PROPERTY_STRINGについて
ENUM_POSITION_PROPERTY_STRINGは、MQL5でトレーディングのプログラムを作るときに、ポジションに関するテキスト情報を取得するために使われる識別子の集まりです。
ENUM_POSITION_PROPERTY_STRINGの識別子一覧は以下の通りです。
POSITION_SYMBOL
POSITION_SYMBOLはどの通貨ペアや商品に関するポジションなのかを示します。例えば、”EURUSD”や”XAUUSD”などのテキストが含まれます。
POSITION_COMMENT
POSITION_COMMENTは、そのポジションを開いたときにトレーダーやプログラムが付けた特別なメモや備考です。例えば、なぜそのトレードを開始したのかの理由を簡単な文で表すことができます。
POSITION_EXTERNAL_ID
POSITION_EXTERNAL_IDは、外部のトレーディングシステムから持ってきた特定のIDを意味します。例えばブローカーや他のプラットフォームから割り当てられた一意のIDなどが該当します。
PositionGetString関数を使ったサンプルコード
下記は、PositionGetString関数を使用して特定のポジションに関するテキスト情報を取得し表示するサンプルコードです。
このコードは、特定のシンボルに関連するポジションが存在する場合、そのポジションのシンボル名、コメント、外部識別子を取得し、それらをターミナルのログに出力する方法を示しています。
//+------------------------------------------------------------------+
//| トレードイベントハンドラー |
//+------------------------------------------------------------------+
void OnTrade()
{
// 現在選択しているシンボルにポジションが存在するかチェック
if(PositionSelect(_Symbol))
{
// ポジションのシンボル名を取得
string symbol = PositionGetString(POSITION_SYMBOL);
// 取得したシンボル名を表示
Print("ポジションのシンボル名: ", symbol);
// ポジションのコメントを取得
string comment = PositionGetString(POSITION_COMMENT);
// 取得したコメントを表示
Print("ポジションのコメント: ", comment);
// ポジションの外部識別子を取得
string external_id = PositionGetString(POSITION_EXTERNAL_ID);
// 取得した外部識別子を表示
Print("ポジションの外部識別子: ", external_id);
}
else
{
// エラー処理
Print("ポジションが選択されていません。エラーコード: ", GetLastError());
}
}
//--- 関数の終了
<参照>