
今回はポジション計算のところです。
新しいことが色々出てきます。^^
//ポジション計算
int buypos=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic01)
{
if(OrderType()==OP_BUY) buypos++;
}
}
まず最初に、変数を一つ宣言します。
ポジションの数は整数なので、int で宣言し、初期値として 0 を入れておきます。
次に、for文で繰り返しの処理をします。
ここで新しい関数 OrdersTotal() が出てきます。
OrdersTotal() は現時点での保有ポジションの数を調べる関数です。
ポジションがなければ 0 で、ポジションがあればその数がわかります。
これは全てのポジションの数なので、
EAで建てたポジションも裁量で建てたポジションも区別しません。
とにかく口座のポジションの数を調べる時に使います。

次の、OrderSelect はポジションを選択する関数です。
ポジションに対して何かアクションを起こしたい時は、
まずはどのポジションに対してアクションを起こすのか、
ポジションを指定しなければなりません。
メタトレーダーのポジションには番号が付いています。
古い順に 0 から1,2と番号が増えていきます。
i が 0 から始まり OrdersTotal() の数だけ増えていきます。
OrderSelect(i,SELECT_BY_POS,MODE_TRADES) は、
約定しているポジションを選択する関数で、
ポジションの選択が成功すると、true が返り、
ポジションの選択が失敗すると、false が返ります。
ポジションの選択が失敗するのは、ポジションがない時です。

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
は、ポジションがない時に、break しなさいということです。
break は、for文の繰り返し処理をやめる関数です。
for文の途中で break が実行されると、
for文の処理が残っていても無視して終了します。

ちょっと長くなってきたので残りは次回にします。
しかし、ごちゃごちゃしてきました。
注文に関する関数は数多くあります。
大変だと思いますが、覚えておかないといけないことも沢山あります。
焦らずに少しずつ覚えていきましょう。


【送料無料】FXメタトレーダーで儲けるしろふくろうのスーパー投資術 |












