PositionsTotal()関数について

取引関数

スポンサーリンク
スポンサーリンク

機能

PositionsTotal()関数は未決済ポジションの数を返す関数です。

<書式>

int  PositionsTotal();

引数

引数はありません。

引数についてはコチラのリンクをご覧ください。

戻り値

現在所有しているポジション数を返します。

戻り値についてはコチラを下記の記事をご覧ください。

備考

ポジションの『ネッティング』計算時(ACCOUNT_MARGIN_MODE_RETAIL_NETTINGとACCOUNT_MARGIN_MODE_EXCHANGE)各シンボルにつき常に一つのポジションのみ(1つ以上の取引の結果である)保有することができます。ポジションと『ツールボックス』パネルの『取引』タブに表示される有効な未決注文と混同しないようにしてください。

ポジションに制限がない場合(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING)各シンボルごとに同時に複数のポジションを保有することができます。

MQL5リファレンス

MT5では、ポジション管理にネッティングシステムヘッジングシステムという2つのシステムを(一応)設けています。

どちらのシステムを採用しているかはブローカーによって異なります。

(一応)と書いているのは、現在はほとんどのブローカーはヘッジングシステムを採用しており、ネッティングシステムは死滅状態に近いからです((+_+))

ネッティングシステムにおいては、一つの通貨ペアにつき、一つのポジションしか持つことができません。

ヘッジングシステムにおいては、同一通貨ペアで複数のポジションを所持することが可能です。メタトレーダー4利用者にはお馴染みのシステムですね。

※詳しくは↓の記事をご覧ください。

なので、PositionsTotal()関数もヘッジングシステムにおいて利用されることが前提の関数となっています。

MQL5では、MQL4においてOrder~という接頭辞の関数を使っていた諸々の処理が、

有効化していないポジションについての操作→Order~関数

注文が成立した結果についての操作→Deal~関数

すでに有効化しているポジションについての操作→Position~関数

と切り分けられています。

<関連リンク↓>

例えばMQL4では、有効化したポジション数のチェックはOrdersTotal関数を使うのが一般的ですが、MQL5においてそれはPositionsTotal()関数が担います。

OrdersTotal関数は待機注文の数のチェックに使ったりします。

こちらの記事でOrdersTotal関数を利用して待機注文を削除する工程を書いていますので、よろしければご覧ください。↓

<待機注文に関する関連リンク↓>

サンプルコード

以下のサンプルコードはTerminal>Common>ディレクトリのFilesフォルダにあるSignal.txtというテキストファイルがあることを前提としたものです。


#include <Trade\Trade.mqh>
//ファイルのインクルード

CTrade trade;
//クラスオブジェクトの宣言

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
      double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
      //チャートの値の取得と正規化
      
      int ExternalFile=FileOpen("Signal.txt",
      FILE_READ|FILE_ANSI|FILE_COMMON,
      '|',
      CP_ACP);
      //テキストファイルを開き、ファイルハンドルを取得
      
      string BuySignal=FileReadString(ExternalFile);
      //Terminal>Common>Filesフォルダにあるテキストを読み取る
      
      FileClose(ExternalFile);//ファイルを閉じる
      
      if(PositionsTotal()==0 && BuySignal=="BUY IT NOW")//読み取った中に"BUY IT NOW"があれば
      {
         trade.Buy(0.1,NULL,Ask,0,Ask+100*_Point,NULL);//買い注文
         
      }//if(PositionsTotal()==0 && BuySignal=="BUY IT NOW")
      
      Comment("BuySignal",BuySignal,"PositionsTotal:",PositionsTotal());//コメント表示
   
  }
//+------------------------------------------------------------------+

他にもPositionsTotal関数の使い方に参考となる記事↓

for文で未決済ポジション内を一番古いポジションからチェック

OnTick関数については↓をご覧ください↓

FileRreadString関数については↓をご覧ください。

Normalizedouble関数については↓をご覧ください

FileOpen関数については↓をご覧ください

FileClose関数については↓をご覧ください。

コメント

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