一括決済のスクリプト その2 | メタトレーダー4でプログラムを作ってみよう

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

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

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

初期設定等はないので、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です。

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

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