2015年12月28日月曜日

[MQL超入門] その006 とりあえずやってみよう!簡単インジケータ作成2

http://mt4program.blogspot.jp/2015/12/mql-005.html

前回からの続きです。
価格チャートだけ表示するインジケータの枠だけ作成されました。

ここから、プログラムを書くことで、いろんなチャートを描くことができます。

早速やってみましょう。

前回の記事で作成したHeikinインジケータの下の部分に注目です。
OnCalculateと書いてある部分があります。そこに赤字の部分を入力して実行してみてください。

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   for( int i = rates_total - 1; i >= 0; i = i - 1 )
   {
      Label1Buffer[i] = (high[i] + low[i]) / 2;
   }
   
//--- return value of prev_calculated for next call
   return(rates_total - 1);
  }
//+------------------------------------------------------------------+

前回と違い、今回は赤い線がチャートに表示されていると思います。

・図006.01 高値安値の中間を描画する。

初めての(?)インジケータ作成成功です。
高値安値の中間値を線でつなぐインジケータが完成しました。

修正箇所は4行ほどですが、インジケータ作成に大切な要素が含まれています。
一つずつ説明したいと思います。

■繰り返し制御文 for
   for( int i = rates_total - 1; i >= 0; i = i - 1 )
   {
      Label1Buffer[i] = (high[i] + low[i]) / 2;
   }

ある一定回数、同じ処理を行うときに使用します。

for( 初期化条件; 繰り返し条件; 再初期化式)
{
   繰り返し行う処理
}

といった形になっています。
・初期化条件 [ int i = rates_total -1 ]
 変数宣言と、初期化を行います。
 今回は、[i]という名前の変数を宣言したのち、[rates_total-1]の値に初期化しました。

・繰り返し条件 [ i >= 0 ]
 変数[i]の中身が0より大きい間、繰り返しを行います。

・再初期化式  [ i = i - 1 ]
 再初期化式は、一回の処理が終わるたびに呼び出される処理です。
 今回は、一回の処理が呼び出し終わるたびに、iの値を一つ減らします。

for文の下に{ } で囲われた部分があります。これをブロックと呼びます。for文の下の {}で囲われた部分を条件に従って繰り返し実行します。
図で書くと、このような流れになります。

 ・図006.02 繰り返し制御文 for の処理の流れ

ほとんどのインジケータでは、for文を使用します。


■配列操作
      Label1Buffer[i] = (high[i] + low[i]) / 2;

[ ] で閉じた中にiと指定されて、計算式が書かれています。
この[]で数字を指定して、中身を見たり書いたりできる変数のことを配列と呼びます。

この配列もインジケータ作成時にはとても重要です。

配列は、変数の箱が、たくさん横に並んだ物と考えてください。

上記の式では、
Label1Bufferのi番目の箱に、highとlowのi番目の箱の内容を足して2で割った物を入れています。

 ・図006.03 配列操作

インジケータでは、この配列操作と、繰り返し制御文を使いながら様々なチャートを描画します。

次回は、変数についてもう少し掘り下げたいと思います。

今まで説明を省略していましたが、int i; って書いてある、[int]ってなに?というあたりを予定しています。

また、今年のブログ更新は、これが最後です。皆様、よいお年を^^

次の回へ


ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ