チャートの再描画を実行 ChartRedraw 関数

関数

チャート操作関数

ChartRedraw 関数

この関数は、指定したチャートを強制的に再描画します。通常、オブジェクトのプロパティが変更された後に使用されます。

この関数がインジケータから呼び出されると、インジケータは共通のターミナルスレッドで実行されるため、OnCalculate関数の計算が終了した後にのみチャートが再描画されます。

WindowRedraw関数でも同様の処理を行なうことができます。

データ型と構成・戻り値

void ChartRedraw(①);

戻り値は無し。

引数 [1]

ChartRedraw関数は 1個の引数で構成されます。


引数名データ型単位初期値説明
chart_idlong0対象とするチャートID。
0は現在のチャートを表します。
※初期値があるものは省略可能です。省略した場合、初期値が設定されます。

使用例 

ChartRedraw関数による画像の更新

ChartRedraw関数を使って指定した画像を入れ替えます。使用する画像は次の 5枚のビットマップ画像です。

これらの画像を「右クリック」→「名前を付けて画像を保存…」してください。画像の保存先は、使用しているMT4のメニューのファイルから「データフォルダを開く」のフォルダの「MQL4」→「Images」フォルダの中に入れてください。

保存ファイル名は次のコードをそのまま使うのであれば「clock1.bmp」「clock2.bmp」「clock3.bmp」「clock4.bmp」「clock5.bmp」から変えないでください。

コード

// ChartRedraw関数による画像の更新
#property strict
void OnInit() {

   int xpixcel = (int)(ChartGetInteger(0,CHART_WIDTH_IN_PIXELS));               // チャートX軸幅
   int ypixcel = (int)(ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS));              // チャートY軸幅
  
   ObjectCreate(0,"clock",OBJ_BITMAP_LABEL,0,0,0);                              // BMP画像を設定
   ObjectSet("clock",OBJPROP_XDISTANCE,xpixcel/2-46);                           // X軸位置設定
   ObjectSet("clock",OBJPROP_YDISTANCE,ypixcel/2-54);                           // Y軸位置設定   
   ObjectSetInteger(0,"clock",OBJPROP_XSIZE,93);                                // 画像X軸サイズ
   ObjectSetInteger(0,"clock",OBJPROP_YSIZE,108);                               // 画像Y軸サイズ
   
   int Count=1;
   while(true) {
      for(int i=1;i<6;i++) {
         ObjectSetString(0,"clock",OBJPROP_BMPFILE,0,"clock"+(string)i+".bmp"); // 画像の呼出
         ChartRedraw();
         Sleep(200);
      }
      Count++;
      if(Count>5) {
         break;
      }
   }
}
void OnDeinit(const int reason) {
   ObjectsDeleteAll();
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

コードの9行目の「X軸位置設定」の引数「xpixcel/2-46」は画像が真ん中に来るように調整した計算です。「46」は画像のX軸の大きさが「93」ピクセルなので、それを半分にした値です。コードの10行目の「Y軸位置設定」も同様です。

結果

コードの18行目に ChartRedraw関数があるので、削除するかコメント化して有る時と無い時の違いを確認してみてください。

タイトルとURLをコピーしました