サブウィンドウタイプのインジケータを作成すると、名前の横に現在値が表示されます。
結構邪魔なときがありますよね?
サブウィンドウ 名前横に現在値を表示しない方法です。
現在値ですが、SetIndexBufferで指定したバッファの数分だけ表示されます。
表示する値は各バッファの[0]の値です。
ただし、バッファ[0]の値がEMPTY_VALUEの場合、表示されないという特徴があります。これを利用して表示を消したいと思います。
公開しているDrawSimpleLineを使って試してみたいと思います。元のコードは過去記事をご覧ください。
http://mt4program.blogspot.com/2015/10/mt4drawsimpleline_8.html
プログラムの修正点は、各バッファのインデックス0の値は、EMPTY_VALUEにして、インデックスを一つずらしてバッファに設定してしまうことです。
(追記)プログラムがバグってただけでした^^;;;; すみません。
SetIndexShiftにて表示のシフトが必要です。
赤字の部分が修正点となります。
・バッファにインデックスを指定するときに+1する。
・インデックス0には必ずEMPTY_VALUEを設定している。
・ループ範囲を一つ少なくする。
・SetIndexShiftで表示をずらす
の4か所です。
ソースコードはこちらから
//------------------------------------------------------------------
// Draw Simple Line 値表示なし版
#property copyright "Copyright 2015, Daisuke"
#property link "http://mt4program.blogspot.jp/"
#property version "1.00"
#property strict
#property indicator_separate_window
//バッファーを指定する。
#property indicator_buffers 3
//プロット数を指定する。
#property indicator_plots 3
#property indicator_label1 "DIFF"
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_color1 clrGray
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
#property indicator_label2 "LINE1"
#property indicator_type2 DRAW_LINE
#property indicator_color2 clrAqua
#property indicator_style2 STYLE_SOLID
#property indicator_width2 1
#property indicator_label3 "LINE2"
#property indicator_type3 DRAW_LINE
#property indicator_color3 clrIndianRed
#property indicator_style3 STYLE_SOLID
#property indicator_width3 1
// 入力パラメータ 移動平均1期間
input int Ma1Period = 32;
// 入力パラメータ 移動平均2期間
input int Ma2Period = 256;
// 入力パラメータ 移動平均3期間
input int Ma3Period = 64;
// 入力パラメータ 移動平均4期間
input int Ma4Period = 128;
//入力パラメータ 移動平均種別
input ENUM_MA_METHOD MaMethod = MODE_SMA;
//入力パラメータ 適用価格
input ENUM_APPLIED_PRICE MaPrice = PRICE_CLOSE;
// バッファー
double diff1Buffer[];
double diff2Buffer[];
double diffBuffer[];
//------------------------------------------------------------------
//初期化
int OnInit()
{
// 短縮名を設定
string shortName = "DSL (";
shortName += IntegerToString(Ma1Period) + "-" + IntegerToString(Ma2Period) + ",";
shortName += IntegerToString(Ma3Period) + "-" + IntegerToString(Ma4Period) + ")";
IndicatorShortName(shortName);
SetIndexBuffer(0, diffBuffer);
SetIndexBuffer(1, diff1Buffer);
SetIndexBuffer(2, diff2Buffer);
SetIndexDrawBegin(0, Ma4Period);
SetIndexDrawBegin(1, Ma2Period);
SetIndexDrawBegin(2, Ma4Period);
SetIndexShift(0, 1);
SetIndexShift(1, 1);
SetIndexShift(2, 1);
return(INIT_SUCCEEDED);
}
//------------------------------------------------------------------
//計算イベント
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[], //ティック数(要素の更新回数)
const long &volume[], //実ボリューム(?)
const int &spread[]) //スプレット
{
for( int i = rates_total - prev_calculated - 1 ; i >= 0; i-- )
{
if( i >= rates_total - 1) continue;
diff1Buffer[i + 1] = NormalizeDouble(iMA(NULL, PERIOD_CURRENT, Ma1Period, 0, MaMethod, MaPrice, i) - iMA(NULL, PERIOD_CURRENT, Ma2Period, 0, MaMethod, MaPrice, i), 5);
diff2Buffer[i + 1] = NormalizeDouble(iMA(NULL, PERIOD_CURRENT, Ma3Period, 0, MaMethod, MaPrice, i) - iMA(NULL, PERIOD_CURRENT, Ma4Period, 0, MaMethod, MaPrice, i), 5);
diffBuffer[i + 1] = diff1Buffer[i + 1] - diff2Buffer[i + 1];
}
diff1Buffer[0] = EMPTY_VALUE;
diff2Buffer[0] = EMPTY_VALUE;
diffBuffer[0] = EMPTY_VALUE;
return(rates_total - 1);
}