ChartRedraw関数の働き・役割
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/51525d0efec97fd52a1572371d1b9ceb-1024x585.webp)
ChartRedraw関数は、チャートウィンドウを強制的に再描画するために使用されます。通常、チャートは自動的に更新されますが、オブジェクトを追加したり、変更したりした後に即座に反映させたい場合にこの関数を使用します。これにより、ユーザーは最新の状態を確認することができます。
ChartRedraw関数の引数について
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/af3ba1685984b3aefabecc7b2dccdd1c-1024x585.webp)
ChartRedraw関数は引数を取らずに呼び出されます。
void ChartRedraw();
ChartRedraw関数の戻り値について
ChartRedraw関数は戻り値を持たないvoid型の関数です。単にチャートを再描画するだけで、何も返しません。
ChartRedraw関数を使う際の注意点
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/d08d4a9042feed359458d0346adc599c-1024x585.webp)
ChartRedraw関数を多用すると、パフォーマンスに影響を与える可能性があります。特に複雑なチャートや多数のオブジェクトがある場合には、再描画に時間がかかることがあります。そのため、必要な場合にのみ使用するようにしましょう。また、頻繁に呼び出す必要がある場合は、効率的なコーディングが求められます。
ChartRedraw関数を使ったサンプルコード
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/4ac4a2eec74e175518ce906fa95b3123-1024x585.webp)
以下は、ChartRedraw関数を使用してチャートを再描画する例です。この例では、ボタンをクリックした後にチャートを再描画しています。
//+------------------------------------------------------------------+
//| エキスパート初期化に使用される関数 |
//+------------------------------------------------------------------+
int OnInit()
{
// ボタンを作成するコード
ObjectCreate(0, "Button", OBJ_BUTTON, 0, 0, 0);
ObjectSetInteger(0, "Button", OBJPROP_XSIZE, 100);
ObjectSetInteger(0, "Button", OBJPROP_YSIZE, 50);
ObjectSetString(0, "Button", OBJPROP_TEXT, "Click Me");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| チャートイベントを処理する関数 |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
// ボタンクリックイベントをチェックする
if (id == CHARTEVENT_OBJECT_CLICK && sparam == "Button")
{
// ボタンがクリックされたときの処理
Print("Button was clicked!");
// チャートを強制的に再描画する
ChartRedraw();
}
}
サンプルコードに使われた関数や文法要素の簡単な解説
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/9e3c110db839656c8e54cb5ab523262b-1024x585.webp)
OnInit関数
OnInit関数は、エキスパートアドバイザーが初期化される際に自動的に呼び出される関数です。この関数内で、ボタンオブジェクトを作成し、そのプロパティを設定しています。
ObjectCreate関数について
最初の引数は、チャートの識別子です。0を指定すると、現在アクティブなチャートにオブジェクトを作成します。
二番目の引数は、オブジェクトの名前です。この場合、Buttonという名前のボタンを作成します。
三番目の引数は、オブジェクトの種類を指定します。OBJ_BUTTONはボタンオブジェクトを意味します。
四番目の引数は、サブウィンドウの番号です。0はメインチャートウィンドウを示します。
五番目と六番目の引数は、それぞれオブジェクトの時間座標と価格座標を指定しますが、ボタンオブジェクトでは無視されます。
ObjectSetInteger関数について
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/121b57cbeaeefe1217c8a366ac0b7de1-1024x585.webp)
ObjectSetInteger関数はボタンのプロパティを整数値で設定します。この場合、OBJPROP_XSIZEEでボタンの幅を100に設定し、OBJPROP_YSIZEでボタンの高さを50に設定します。
ObjectSetString関数について
ボタンのプロパティを文字列値で設定します。ここではOBJPROP_TEXTでボタンのテキストをClick Meに設定しています。
OnChartEvent関数
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/42cc8fb9421ea7690e5d0897e61a3e8e-1024x585.webp)
OnChartEvent関数は、チャート上で発生するイベントを処理するために使用される関数です。この例では、ボタンがクリックされたときのイベントを処理しています。
if文の条件について
idがCHARTEVENT_OBJECT_CLICKの場合、クリックイベントが発生したことを示します。
sparamがButtonの場合、クリックされたオブジェクトの名前がButtonであることを確認します。
これにより、この条件文はButtonという名前のボタンがクリックされた場合にのみ真となります。
Print関数について
Print関数は指定したメッセージをエキスパートログに出力します。この例では、ボタンがクリックされたことをログに出力しています。
ChartRedraw関数について
ChartRedraw関数はチャートウィンドウを強制的に再描画します。この例では、ボタンがクリックされた後にチャートを再描画しています。
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/06/dca7e992ad0df8edd1b5db8dee9bdc2c-1024x585.webp)