さて、注文し続けるのを止めるために「決済されるまでは次の注文を入れない」というルールを追加しようと思います。
決済前のポジションを保有しているかどうかは、OrdersTotal()で判断できます。
ただし、OrdersTotal()はポジションの数を調べるもので、他のプログラムで注文したものまでカウントしてしまいます。
そのため、本プログラムで注文したポジションだけを調べるためにマジックNoを利用します。
前回記載した注文内容に、マジックNo("12345")を追記します。
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+25*Point,Bid-35*Point,NULL,12345,0,Aqua);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-25*Point,Ask+35*Point,NULL,12345,0,DeepPink);
これで、注文したポジションに"12345"のマジックNoが付与され、後で識別することができるようになります。
次に現在保有中のポジションを調べます。
保有中のポジションは、トレードプールと呼ばれる場所に保持されていますので、次の手順で保有ポジションのマジックNoを調べます。
1.トレードプールのポジション数を調べます
2.OrderSelect()を使いトレードプールからポジションの情報を順番に取り出します。
3.ポジションの情報を取り出したら、OrderMagicNumber()でマジックNoを確認します。
4.マジックNoが"12345"ならば、注文せずに終わります。
次回、上記手順をプログラミングしてみます。
本ブログは、MetaTrader を利用して、EA プログラムを自作紹介するサイトです。
決して儲かるシステムを紹介するものではありませんのであしからず・・・ もし、記事中に嘘偽りを発見された方、ご連絡頂けると幸いです。 なお、過去に作成した EA プログラムの作り方はこちらになります。 Loop_Entry : 同じ指値エントリーを繰り返し実行するプログラムです。 estTurn : 高値(安値)で反対売買を実行するプログラムです。 |
2010年4月2日金曜日
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿