![カスタムインジケータ定数](https://celebpanda.com/wp/wp-content/uploads/2021/05/セレブパンダブログ用.jpg)
カスタムインジケータは便利な表示の為の多くの設定を持っています。
これらの設定は、 IndicatorSetDouble(), IndicatorSetInteger(), IndicatorSetString()関数を用いて、
対応するインジケータプロパティに割り当てます。
インジケータプロパティの定数はENUM_CUSTOMIND_PROPERTY_INTEGER列挙の値を使用します。
ENUM_CUSTOMIND_PROPERTY_INTEGER
ID | 型 | 詳細 |
---|---|---|
INDICATOR_DIGITS | int | インジケータ描画の精度 |
INDICATOR_HEIGHT | int | インジケータウインドウの高さの固定値 (#property indicator_height) |
INDICATOR_LEVELS | int | インジケータウインドウのレベルライン数 |
INDICATOR_LEVELCOLOR | color | レベルラインの色 全てのレベルラインに適用されます |
INDICATOR_LEVELSTYLE | ENUM_LINE_STYLE | レベルラインのスタイル 全てのレベルラインに適用されます |
INDICATOR_LEVELWIDTH | int | レベルラインの幅 全てのレベルラインに適用されます |
ENUM_CUSTOMIND_PROPERTY_DOUBLE
ID | 型 | 詳細 |
---|---|---|
INDICATOR_MINIMUM | double | インジケータウインドウの最小値 |
INDICATOR_MAXIMUM | double | インジケータウインドウの最大値 |
INDICATOR_LEVELVALUE | double modifiler引数にレベル番号を指定 | レベルの値 |
以下は、iBands(), iEnvelopes(), iEnvelopesOnArray(), iFractals() で使用するインジケータライン定数です。
ENUM_CUSTOMIND_PROPERTY_STRING
ID | 型 | 詳細 |
---|---|---|
INDICATOR_SHORTNAME | string | インジケータの短縮名 サブウインドウの左上に表示されます。 |
INDICATOR_LEVELTEXT | string 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);
}