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

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