【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のどちらかの場合で判断します。
これを応用すると、買い,売りそれぞれのポジション数を取得することも可能です。
特定の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()
関数で、注文した通貨ペア名が取得できます。
取得した通貨ペア名と任意の通貨ペア名を比較して、ポジション数を加算していきます。