ChartSetDouble関数の働き・役割
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/07/c58673694a3340f2a1c99a6767b88304.png)
ChartSetDouble関数は、指定されたチャートのプロパティ(属性や設定項目)に値を設定するために使用されます。設定されるプロパティはdouble型でなければなりません。
この関数は非同期関数です。非同期関数とは、結果を待たずに次の処理を続行できる関数のことで、コマンドはチャートメッセージキュー(処理待ちの命令リスト)に追加され、以前の全てのコマンドの処理後に実行されます。
これにより、チャートのプロパティを動的(プログラムの実行中)に変更することが可能です。
ChartSetDouble関数の引数について
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/07/1ee7c7904d6ac3c202b0af30f83e3e26.png)
ChartSetDouble関数の引数構成は以下の通りです。
bool ChartSetDouble(
long chart_id, // チャートの識別子
ENUM_CHART_PROPERTY_DOUBLE prop_id, // プロパティ識別子
double value // 値
);
- chart_id: チャートの識別子(0は現在のチャートを意味します)。特定のチャートを指定する場合は、そのチャートの識別子を使用します。
- prop_id: チャートプロパティ識別子。ENUM_CHART_PROPERTY_DOUBLEの値の1つを指定します。プロパティとは、チャートの特定の設定項目や属性のことです。読み込み専用のプロパティは指定できません。
※ENUM_CHART_PROPERTY_DOUBLEについての詳細は↓の記事をご参照ください。
- value: 設定するプロパティ値。値はdouble型でなければなりません。
ChartSetDouble関数の戻り値について
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/07/c1568768398df72fd77cf373f70ff836-1024x585.webp)
ChartSetDouble関数は、コマンドがチャートメッセージキューに正常に追加された場合はtrueを返します。そうでない場合はfalseを返します。
ChartSetDouble関数を使う際の注意点
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/07/cb6fc5150bb8f000b1a7c73dd20e257e-1024x585.webp)
ChartSetDouble関数を使用する際には、いくつかの重要な注意点があります。
- プロパティは、チャートメッセージキューから適切なコマンドが処理された後にのみ変更されます。プロパティがすぐに反映されるわけではないため、変更が反映されるまでのタイムラグがあることを理解しておく必要があります。
- 複数のチャートプロパティを一度に変更する場合は、対応する関数(ChartSetString関数、ChartSetDouble関数、ChartSetInteger関数)を1つのコードブロックで実行してからChartRedraw関数を一回呼び出すことが推奨されます。これにより、チャートの再描画が一度に行われ、効率的です。
- コマンドの実行結果を確認するためには、ChartGetInteger関数、ChartGetDouble関数、ChartGetString関数などの同期関数を使用して指定されたチャートプロパティをリクエストします。
※同期関数とは、結果が返されるまで処理を待つ関数のことです。これらの関数は、実行結果を待つ必要があります。
ChartSetDouble関数を使ったサンプルコード
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/07/10792a60ac9d543236650f8e802dcd15-1024x585.webp)
以下は、ChartSetDouble関数を使用して現在のチャートの右境界線からのゼロバーインデントのサイズを設定し、チャートを再描画するサンプルコードです。
// スクリプトが実行されたときに自動的に呼び出される関数
void OnStart()
{
// 現在アクティブなチャートID
long chart_id = 0;
// 右境界線からのゼロバーインデントのサイズを設定する(20.0は20%を意味する)
bool result = ChartSetDouble(chart_id, CHART_SHIFT_SIZE, 20.0);
// 設定が成功したかどうかをエキスパートログに出力
if(result)
{
Print("右境界線からのゼロバーインデントのサイズが設定されました。");
}
else
{
// エラーが発生した場合のエラーコードを取得して表示
int error_code = GetLastError();
Print("右境界線からのゼロバーインデントのサイズの設定に失敗しました。エラーコード: ", error_code);
}
// チャートを再描画して変更を適用
ChartRedraw(chart_id);
}
サンプルコードに使われた関数や文法要素の簡単な解説
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/07/df899b82502e40dc15706c8e2d7d782f-1024x585.webp)
- OnStart関数:
- スクリプトが実行されたときに自動的に呼び出されます。この関数内で、必要な初期化や処理を行います。
- ChartSetDouble関数:
- 指定されたチャートのプロパティにdouble型の値を設定します。このサンプルでは、現在アクティブなチャート(IDが0)を指定しています。
- CHART_SHIFT_SIZE:
- この識別子は、右境界線からのゼロバーインデントのサイズを指定します。右境界線からのゼロバーインデントのサイズとは、チャートの右端からゼロバー(最新バー)までのスペースのことを指します。これを設定することで、チャートの見やすさを調整することができます。例えば、20%と設定すると、チャートの右端から20%の位置にゼロバーが配置されます。
![](https://mqlinvestmentlab.com/wp-content/uploads/2024/07/9f7f7ce4f8db3584a505c6962ba3de04.png)
- Print関数:
- メッセージをエキスパートログに出力します。このサンプルでは、設定の成功または失敗をログに表示しています。
- GetLastError関数:
- 最後に発生したエラーコードを取得します。設定が失敗した場合に、エラーの詳細を確認するために使用します。
- ChartRedraw関数:
- チャートを再描画して変更を適用します。複数のプロパティを変更した後、一度だけこの関数を呼び出すことで、効率的にチャートの表示を更新することができます。
このサンプルコードでは、ChartSetDouble関数を使用してチャートの右境界線からのゼロバーインデントのサイズを設定し、その結果を確認しています。設定の成功または失敗をエキスパートログに出力し、最後にChartRedraw関数を呼び出して変更を適用しています。