ChartRedraw 関数
この関数は、指定したチャートを強制的に再描画します。通常、オブジェクトのプロパティが変更された後に使用されます。
この関数がインジケータから呼び出されると、インジケータは共通のターミナルスレッドで実行されるため、OnCalculate関数の計算が終了した後にのみチャートが再描画されます。
WindowRedraw関数でも同様の処理を行なうことができます。
データ型と構成・戻り値
void ChartRedraw(①);
戻り値は無し。
引数 [1]
ChartRedraw関数は 1個の引数で構成されます。
番 号 | 引数名 | データ型 | 単位 | 初期値 | 説明 |
---|---|---|---|---|---|
① | chart_id | long | - | 0 | 対象とするチャート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関数があるので、削除するかコメント化して有る時と無い時の違いを確認してみてください。