Top Page

図形のインジケーターを表示する |
図形のインジケーターを表示します。 これは、応用するといろいろと使えそうな気がします。 今回は、陽線・陰線に対して上向き・下向きの矢印の表示を行います。 見てみましょう。 |
◎解説 [1]インジケーターの数 //インジケーターを1つ作成する(最大8個まで) #property indicator_buffers 2 上向き矢印と下向き矢印という2つの図形を使用しますので2つ設定します。 double Buffer1[]; double Buffer2[]; よって、配列も2つ用意します。 [2]初期処理 ここで注意しなければならないのは、「SetIndexArrow」で図形のフォントを設定していることです。 //図形の種類を設定する(上向き矢印) //WingDingsフォントを参照 SetIndexArrow(0,233); //図形の種類を設定する(下向き矢印) //WingDingsフォントを参照 SetIndexArrow(1,234); 「Wingdings フォント」というものを使用します。 わからなければ、「Wingdings フォント」というものを、ネットで調べてみてください。 ここで使用している"233"は「Wingdings フォント」で上向き矢印です。 同様に"234"は、下向き矢印です。 「Wingdings フォント」を参照して、違う図形も設定できます。 [3]メイン処理 ラインのインジケーターを表示するのと考え方は同じです。 ただ、矢印を描画する位置を上矢印なら安値(Low[i])の位置に、下矢印なら高値(High[i])の位置に表示するという処理になっています。 ◎以下、プログラム //+----------------------------------------------------------------------------+ //| インジ 1-5 図形のインジケーターを表示する | //+----------------------------------------------------------------------------+ //---------------- //プロパティの設定 //---------------- //インジケーターをチャートウィンドウに表示する #property indicator_chart_window //インジケーターを1つ作成する(最大8個まで) #property indicator_buffers 2 //-------------------- //グローバル変数の設定 //-------------------- //1つ目のインジケーター用の配列を定義する double Buffer1[]; double Buffer2[]; //+----------------------------------------------------------------------------+ //| 初期処理関数 | //+----------------------------------------------------------------------------+ //プログラム起動時に1回だけ呼び出される関数 int init() { //1つ目のインジケーターのスタイルを図形に設定する //注意しなければいけないのは、配列では1番目が0になるため //第1パラメーターは、1ではなく0になるということ SetIndexStyle(0, DRAW_ARROW, EMPTY, 1, Red); //図形の種類を設定する(上向き矢印) //WingDingsフォントを参照 SetIndexArrow(0,233); //2つ目のインジケーターのスタイルを図形に設定する //注意しなければいけないのは、配列では2番目が1になるため //第1パラメーターは、2ではなく1になるということ SetIndexStyle(1, DRAW_ARROW, EMPTY, 1, MediumSlateBlue); //図形の種類を設定する(下向き矢印) //WingDingsフォントを参照 SetIndexArrow(1,234); //1つ目のインジケーター配列に定義した Buffer1 を関連付ける //注意しなければいけないのは、配列では1番目が0になるため //第1パラメーターは、1ではなく0になるということ SetIndexBuffer(0,Buffer1); //2つ目のインジケーター配列に定義した Buffer2 を関連付ける //注意しなければいけないのは、配列では2番目が1になるため //第1パラメーターは、2ではなく1になるということ SetIndexBuffer(1,Buffer2); return(0); } //+----------------------------------------------------------------------------+ //| 終了処理関数 | //+----------------------------------------------------------------------------+ //プログラム終了時に呼び出される関数 //今回は特に処理なし int deinit() { return(0); } //+----------------------------------------------------------------------------+ //| メイン処理関数 | //+----------------------------------------------------------------------------+ //価格が更新される度に呼び出される関数 int start() { //インジケーターの計算範囲を求める //Bars変数は、チャートに表示されているローソクク足の数 //IndecatorCounted()関数は、計算済みのローソクク足の数を求める //次の計算式で、limit変数には、計算していないローソクク足の本数が設定される int limit = Bars - IndicatorCounted(); //インジケーターの計算 //ローソククの終値の線を描画する for(int i=0; i<limit; i++) { //インジ1クリア Buffer1[i] = EMPTY_VALUE; //インジ2クリア Buffer2[i] = EMPTY_VALUE; //ローソクク足の状態判定 if(Close[i] >= Open[i]) //終値-始値が0以上なら、上向き矢印を描画する { Buffer1[i] = Low[i]; } else //終値-始値が0未満なら、下向き矢印を描画する { Buffer2[i] = High[i]; } } return(0); } //+----------------------------------------------------------------------------+ |