メタトレーダー4でプログラムを作ってみよう -20ページ目

メタトレーダー4でプログラムを作ってみよう

無料のトレードソフトであるメタトレーダー4のプログラムを作るコツをアップします。初心者がインジケーターとEAのプログラムを作成できるのを目指します。

一括決済のスクリプトをもう少し改造してみます。

今回はマジックナンバーを指定して、特定のEAのみのポジションを決済するようにしてみます。

まずは、最初の部分に以下を追加してください。

#property show_inputs

extern int magic=0;


次に、start に以下を追加してください。

if(OrderMagicNumber()!=magic) continue;



#property show_inputs

は、パラメーターの入力画面を開くようにする設定です。

スクリプトでは通常はパラメーターの入力画面が出ませんので、

入力したい場合はこれを設定しておく必要があります。


extern int magic=0;

で、マジックナンバーの変数を設定します。

初期値を 0 にしていますが、決まっているナンバーがあれば、

それを入れておくのもいいかもしれません。


if(OrderMagicNumber()!=magic) continue;

これで、保有ポジションのマジックナンバーと設定したナンバーを比べて、

違っていれば次の保有ポジションを調べます。

合っている場合は、それ以下の処理でポジションを決済します。


てな感じで、色々設定できます。




 
それでは、一括決済のスクリプトを少し改良します。

start 
に以下を追加してください。

if(OrderSymbol()!=Symbol()) continue;




追加挿入する位置は、上の通りです。

これは何をやっているかというと、

セットしたチャートの通貨ペアと、保有しているポジションの通貨ペアを比べ、

通貨ペアが異なっていればそれ以下の処理をスキップします。


この処理を行うことにより、通貨ペア別に処理をすることができます。

例えば、EURUSD のポジションと USDJPY のポジションがあり、

EURUSD のポジションだけ決済したい場合は、

修正したスクリプトを EURUSD のチャートにセットすれば、

EURUSD のポジションのみを決済してくれます。

このようにして、ポジションの選別を行い処理することができます。

自分の使いやすいように改良していきましょう。




   
それでは、一括決済のスクリプトの続きをプログラムしていきます。

初期設定等はないので、start からやっていきます。

以下を追加してください。

for(int i=OrdersTotal()-1;i>=0;i--)
{
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) continue;
   if(OrderType()==OP_BUY)
   {
      OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
   }
   if(OrderType()==OP_SELL)
   {
      OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
   }
}




最初に保有ポジションの数を数えて、for文で繰り返し処理の設定をしています。

保有ポジションのインデックスは 0 から始まりますので、個数から1をひきます。

そして、大きい方からインデックスを設定して、数を減らしていきます。

これには理由があり、小さい方から始めるとうまくいかない場合があります。

小さい方から決済していくと、0番を決済した後、次は1番を処理するという流れになります。

保有ポジションの数が多い場合、連続で処理していくのですが、

メタトレーダー内部の保有ポジションの処理が終わっていくと、

0番が処理された時、1番だったものが0番になります。

なので、0番の処理が終わって、1番に取り掛かろうとした時に、

その1番は元々2番のポジションで、

元々1番だったものは処理されずに残ってしまうことがあります。


このようなことを避けるために、数の大きい方から処理します。


次に、保有ポジションかどうかチェックします。


そして、買いか売りかをチェックし、それぞれに応じて決済の処理を行います。

このようにして、一括決済を行うことができます。


入力が終わったら、コンパイルしてみてください。

ナビゲーターの Script の欄に表示されていればOKです。

今回は、とにかくポジションを決済するプログラムにしています。

条件わけ等は次回以降にやっていきます。