【MQL4テクニック】保有しているポジション数を取得する方法まとめ。コピペで動くサンプルコード多数あり

MQL4テクニック

EAを運用する際に、現在の保有しているポジション数を取得出来たらとても便利です。

例えば最大ポジション数を制限したり、注文と決済を1サイクルとする複数ポジションを持たないEAを作ることができたりします。

それでは紹介していきます。

保留中の指値を含め、全てのポジション数を取得する

保留中の指値を含めた全てのポジション数を取得するには、OrdersTotal関数を使用します。

int OrdersTotal();

このOrdersTotal()関数を使用して、様々なポジション数を取得することが出来ます。

約定済みのポジション数を取得する

保留中の指値を除いた、約定済みのポジション数を返す関数です。

int OpendOrderTotal(){

   int count = 0;
   for(int i = OrdersTotal() - 1; i >= 0; i--){
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() == OP_BUY || OrderType() == OP_SELL){
         count++;
      }
   }
   return count;
}

OrdersTotal()関数の個数分ループを回して、約定済みの注文の場合にポジション数を加算していきます。

約定済みかどうかはオーダータイプがOP_BUY,OP_SELLのどちらかの場合で判断します。

これを応用すると、買い,売りそれぞれのポジション数を取得することも可能です。

あなたのやりたいことがきっと見つかる!
MQL4テクニック 逆引き集 はこちら

特定のEAが注文したポジション数を取得する

マジックナンバーを使用したEA毎のポジション数を返す関数です。

下のコードではマジックナンバーを『123』に設定しているEAのポジション数になります。

int magicNumber = 123;

int EAOrderTotal(){

   int count = 0;
   for(int i = OrdersTotal() - 1; i >= 0; i--){
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderMagicNumber() == magicNumber){
         count++;
      }
   }
   return count;
}

OrderMagicNumber()関数で、ポジションのマジックナンバーを取得できます。

取得したマジックナンバーと任意のマジックナンバーを比較して、ポジション数を加算していきます。

特定の通貨ペアに限定したポジション数を取得する

特定の通貨ペアで注文が行われたポジション数を返す関数です。

下のコードでは『USDJPY』だけのポジション数になります。

string symbolName = "USDJPY";

int CurenryOrderTotal(){

   int count = 0;
   for(int i = OrdersTotal() - 1; i >= 0; i--){
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == symbolName){
         count++;
      }
   }
   return count;
}

OrderSymbol()関数で、注文した通貨ペア名が取得できます。

取得した通貨ペア名と任意の通貨ペア名を比較して、ポジション数を加算していきます。

POINT

こちらの記事で悩みが解決されない場合は、
MQL4 User Community に参加してお気軽にご質問ください。

MQL4初心者の方や開発に行き詰った方の悩みを、 様々なソフトウェアやツールを開発してきた経験豊富なエンジニアたちが解決いたします。