ChartRedraw

指定したチャートの再描画を行います。

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

Twitterでフォローしよう

おすすめの記事