Top Page



3回目は、メイン処理です。

(1)int start() 関数
  これは価格が更新される度に呼び出される関数です。
  つまり、インジケーター描画のメインの処理になります。
  このプログラムではインジケーターの計算範囲を求める処理とインジーターを計算する2つの処理があります。

  ①インジケーターの計算範囲を求める処理
    int limit = Bars - IndicatorCounted();
   プログラムのコメントにあるとおりです。
   「start() 関数」は、価格が更新される度に呼び出されます。
   その度に全てのローソク足の処理をやるのは、処理の重複になります。
   イメージとしては、
   最初に呼び出されたときに全てのローソク足を計算して、
   2回目以降は更新された、つまり最新のローソク足のみ計算するというイメージだと思います。
   (つまり、2回目以降は"limit"には"1"が設定されるイメージ)

  ②インジケーターの計算処理 「for文」
   プログラムの勉強はしているという前提なので「for文」の書式説明はしません。
   このfor文は limitまで、つまり計算する範囲のインジケーターの処理を行うというものです。
   上に記述したことを繰り返しますが、
   最初に呼び出されたときに全てのローソク足を計算して、
   2回目以降は更新された、つまり最新のローソク足のみ計算するというイメージだと思います。
   (つまり、2回目以降は"limit"には"1"が設定されるイメージ)

  ③インジケーターの計算処理 「値の設定」 
     Buffer1[i] = (Close[i]);
   上記の処理を説明します。
   Buffer1[i]というのは、インジケーターの配列です。
   Close[i]というのは、ローソク足の終値の値です。
   ここで配列のインデックスに"i"が設定されています。
   インデックスの"0"にあたるのが、一番最新のローソク足です。
   つまり、MT4のチャート上の一番右端のローソク足のことです。
   上記のイメージで言うと2回目以降は"limit"に"1"が設定されるので、
   常に一番右端のローソク足の処理のみが行われるということになります。
   プログラム的なイメージでいうと、
     Buffer1[0] = (Close[0]);
   という感じになると思います。
   一番右端のインジケーターの値に、一番右端のローソク足の終値が設定されるということです。
   チャートが動いている時間帯の場合はローソク足はリアルタイムで動いているので、
   事実上、現在値が一番右端のローソク足の終値になるといってよいと思います。




◎以下、プログラム
//+----------------------------------------------------------------------------+
//| メイン処理関数 |
//+----------------------------------------------------------------------------+
//価格が更新される度に呼び出される関数
int start()
{
    //インジケーターの計算範囲を求める
    //Bars変数は、チャートに表示されているロウソク足の数
    //IndecatorCounted()関数は、計算済みのロウソク足の数を求める
    //次の計算式で、limit変数には、計算していないロウソク足の本数が設定される
    int limit = Bars - IndicatorCounted();

    //インジケーターの計算
    //ロウソクの終値の線を描画する
    for(int i=0; i<limit; i++)
    {
        Buffer1[i] = (Close[i]);
    }

    return(0);
}

//+----------------------------------------------------------------------------+