【MQL4関数】OrdersTotal関数の使い方!保有ポジション数の取得のやり方

【中級編】MQLプログラムの読み方・書き方
朝日奈りさ
朝日奈りさ

プログラムで保有ポジション数を取得するには、OrdersTotal関数を使うよ!

OrdersTotal関数とは

自動売買でトレードするとき、保有ポジション数をチェックしたいですよね!

そのときに OrdersTotal関数を使いましょう。

 

OrdersTotal関数とは、保有ポジションの数を返します。

例えば、ポジション数が2つなら、OrdersTotal関数は2を返します。

 

返り値は保有ポジション数で、引数は何も必要ありません。

返り値は int型なので、基本的な書き方は以下の通りです。

int positionNum = OrdersTotal();

 

上記のプログラムを書くことで、positionNum に保有ポジション数が代入されます。

 

OrdersTotal関数の使用方法と注意点

OrdersTotal関数は、保有ポジション数を返します。

そのため、ポジションの情報をチェックするための for文でよく使われます。

具体的には以下の通りです。

//保有ポジションをチェック

for(int i = OrdersTotal() - 1; i >= 0; i--){
    //ここにポジションビの情報を1つ1つチェックするためのプログラムを書く

}

 

ここでのポイントは OrdersTotal関数ではなく、「i–」の部分です。

for文を「i++」で書くこともできるのですが、「i++」だとエラーが起こる可能性があります。

「i++」で書いた例がこちらです。

//エラーが起こる可能性がある例

for(int i = 0; i <= OrdersTotal()-1; i++){
    //ここにポジションの情報を1つ1つチェックするためのプログラムを書く

}

 

なぜエラーが起こる可能性があるのかというと、for文の中で配列を使っている場合、存在しない配列を参照してしまうからです。

例えば、hairetsu[3] という配列を使っている場合、for文なので hairetsu[i] と書いていると思います。

そのとき、i は「0→1→2」という順に変化します。

そして、for文が途中の「0→1」の段階でポジションが決済された場合を考えます。

ポジションが決済された場合、「2」で参照されるはずだった hairetsu[2] が存在しないものになっているので、エラーが出ます。

そのため、「2→1→0」の順番で参照したほうが、エラーが出ないので、トラブルがなくなるでしょう。

 

配列をマスターしていない方は、こちらの記事が参考になります。

 

まとめ

OrdersTotal関数は、EAでとてもよく使う関数です。

自動売買がポジションを決済するときに使うなど、使用場面はたくさんあります。

そのため、ほとんどのEAで使われています。

注意点は、配列と組み合わせて使う場合、存在しない配列を参照してしまうことがあることです。

for文の順番をしっかりと考えて、OrdersTotal関数を使っていきましょう。