プログラムで保有ポジション数を取得するには、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関数を使っていきましょう。