指定したチャートの再描画を行います。
ChartRedraw
関数書式
void ChartRedraw(
long chart_id = 0 // チャートID
);
- 引数
引数名 | 初期値 | I/O | 詳細 |
chart_id | - | IN | チャートID。 0指定は現在のチャートを意味します。 |
- 戻り値
なし
- その他
これは通常オブジェクトプロパティを変更した後に使用します。
ChartRedraw()関数がカスタムインジケータから呼ばれた場合、
チャートはOnCalculate()関数の計算が終了した後に再描画します。
なぜならカスタムインジケータは共通のターミナルスレッドで実行されるからです。
- サンプルソース
void OnChartEvent(const int id,
const long& lparam,
const double& dparam,
const string& sparam)
{
if(id == CHARTEVENT_CHART_CHANGE)
{
int pos = WindowBarsPerChart() - WindowFirstVisibleBar();
datetime time1 = Time[0];
if(pos >= 0){
time1 = time1 + (PeriodSeconds()*(pos+1));
}
else{
pos = pos * -1;
time1 = Time[pos-1];
}
for(int obj = ObjectsTotal() - 1; obj >= 0; obj--)
{
string obj_name = ObjectName(obj);
if(StringFind(ObjectGetString(0, obj_name, OBJPROP_TEXT), "*", 0) >= 0)
{
long prev_time1 = ObjectGetInteger(0, obj_name, OBJPROP_TIME1);
long prev_time2 = ObjectGetInteger(0, obj_name, OBJPROP_TIME2);
long left_time = prev_time1 - prev_time2;
ObjectSetInteger(0, obj_name, OBJPROP_TIME, 0, time1);
ObjectSetInteger(0, obj_name, OBJPROP_TIME, 1, time1 - left_time);
}
}
ChartRedraw();
}
}