カスタムインジケータ定数

カスタムインジケータは便利な表示の為の多くの設定を持っています。
これらの設定は、 IndicatorSetDouble(), IndicatorSetInteger(), IndicatorSetString()関数を用いて、
対応するインジケータプロパティに割り当てます。

インジケータプロパティの定数はENUM_CUSTOMIND_PROPERTY_INTEGER列挙の値を使用します。

ENUM_CUSTOMIND_PROPERTY_INTEGER

ID詳細
INDICATOR_DIGITSintインジケータ描画の精度
INDICATOR_HEIGHTintインジケータウインドウの高さの固定値
(#property indicator_height)
INDICATOR_LEVELSintインジケータウインドウのレベルライン数
INDICATOR_LEVELCOLORcolorレベルラインの色
全てのレベルラインに適用されます
INDICATOR_LEVELSTYLEENUM_LINE_STYLEレベルラインのスタイル
全てのレベルラインに適用されます
INDICATOR_LEVELWIDTHintレベルラインの幅
全てのレベルラインに適用されます

ENUM_CUSTOMIND_PROPERTY_DOUBLE

ID詳細
INDICATOR_MINIMUMdoubleインジケータウインドウの最小値
INDICATOR_MAXIMUMdoubleインジケータウインドウの最大値
INDICATOR_LEVELVALUEdouble
modifiler引数にレベル番号を指定
レベルの値

以下は、iBands(), iEnvelopes(), iEnvelopesOnArray(), iFractals() で使用するインジケータライン定数です。

ENUM_CUSTOMIND_PROPERTY_STRING

ID詳細
INDICATOR_SHORTNAMEstringインジケータの短縮名
サブウインドウの左上に表示されます。
INDICATOR_LEVELTEXTstring
modifiler引数にレベル番号を指定
レベルの説明

// インジケータウインドウ設定
#property  indicator_separate_window          // インジケータをサブウインドウに表示

// インジケータ設定
#property  indicator_buffers   1              // インジケータバッファ:2つに設定
#property  indicator_color1    clrWhite       // インジケータ1の色:Green
#property  indicator_width1    2              // インジケータ1の太さ:2
#property  indicator_type1     DRAW_HISTOGRAM // インジケータ1の種類:ヒストグラム


double ExIndVol[100];                         // インジケータバッファ:ヒストグラム用

//+------------------------------------------------------------------+
//| 初期化                         
//|------------------------------------------------------------------|
void OnInit(){

    SetIndexBuffer(0,ExIndVol);              // ExIndVolをインジケータ1に登録    


    IndicatorSetInteger( INDICATOR_DIGITS     , 1 );           // 精度(小数点):小数点第1位に設定
    IndicatorSetInteger( INDICATOR_HEIGHT     , 200 );         // 価格スケールの高さ(pixel)

    IndicatorSetInteger( INDICATOR_LEVELS      , 2 );           // レベルラインの表示数:2
    IndicatorSetInteger( INDICATOR_LEVELCOLOR , clrYellow );   // レベルライン色:黄色
    IndicatorSetInteger( INDICATOR_LEVELSTYLE , STYLE_DOT );  // レベルラインスタイル;ドット
    IndicatorSetInteger( INDICATOR_LEVELWIDTH , 1 );           //レベルライン幅:1

    IndicatorSetDouble( INDICATOR_MINIMUM     , -1000  );       // サブウインドウスケールの最小値
    IndicatorSetDouble( INDICATOR_MAXIMUM     , 3500   );       // サブウインドウスケールの最大値
    IndicatorSetDouble( INDICATOR_LEVELVALUE  , 0, 1000   );   // レベルライン1の設定値:1000
    IndicatorSetDouble( INDICATOR_LEVELVALUE  , 1, 2000   );   // レベルライン2の設定値:2000

    IndicatorSetString( INDICATOR_SHORTNAME  , "サブウインドウ用インジケータ名" );
    IndicatorSetString( INDICATOR_LEVELTEXT  , 0, "レベル1" );  // レベルライン1の説明
    IndicatorSetString( INDICATOR_LEVELTEXT  , 1, "レベル2" );  // レベルライン2の説明    

}


//+------------------------------------------------------------------+
//| OnCalculate(tick受信)イベント                              |
//+------------------------------------------------------------------+
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[],  // Tick出来高
                const long&     volume[],       // Real出来高
                const int&      spread[])       // スプレッド
{
    int icount = 0;
    int icountend;
    
    icountend = rates_total -  prev_calculated;
    if ( icountend >= rates_total ) {
        icountend = rates_total - 1;
    }

    for( icount = 0; icount <= icountend ; icount++ ) {
        ExIndVol[icount]  = (double)tick_volume[icount];   // インジケータバッファに出来高を代入
    }

    return(rates_total);
}

Twitterでフォローしよう

おすすめの記事