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); } //+----------------------------------------------------------------------------+ |