if を使用したインジケーターの作成 その3 | メタトレーダー4でプログラムを作ってみよう

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

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

前回までで色分けの設定はできたのですが、

変数を使用してソースコードの見栄えを少しすっきりしましょう。

前回のはこれです。



今回は以下のように修正してください。

int limit=Bars-counted_bars-1;
for(int i=0; i<limit; i++)
{
   ExtMapBuffer4[i]=iMACD(NULL,0,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_MAIN,i);
   ExtMapBuffer3[i]=iMACD(NULL,0,FastEMA,SlowEMA,Signal,PRICE_CLOSE,MODE_SIGNAL,i);

   double value = ExtMapBuffer4[i]-ExtMapBuffer3[i];
  
   if(value>=0)
   {
      ExtMapBuffer1[i]=value;
   }
   else
   {
      ExtMapBuffer2[i]=value;
   }  
}  



ExtMapBuffer4[i]-ExtMapBuffer3[i] と計算しているところが3か所あるので、

それを変数に入れるようにして、変数を使うように変更しています。

かなり見た目がすっきりしました。

ついでに以下の文を付け足します。

ExtMapBuffer1[i]=0;
ExtMapBuffer2[i]=0;




なぜこのようなことをするかというと、

もしバッファ1に何か値が入っていた時、

次のティックで value の値がマイナスになると、バッファ2の処理になります。

この時、バッファ1には何の処理も行われないので値が入ったままになっていて、

Gold と Silver の両方のヒストグラムが描写されることになります。


その状態は良くないので、判断の前に一旦両方に0を代入しておけば、

どちらの処理の状態になっても悩むことはありません。

こちらのようにプログラムすることもできます。



この場合は、条件わけの後の処理でバッファ1とバッファ2のどちらも値を変更しています。

このように、同じ処理をやるのに異なる書き方があります。

どの書き方が好みかは個人個人で違うと思いますので、

色々やりながら自分にわかりやすい書き方を見つけてくださいね。☆-( ^-゚)v