ObjectGetInteger関数の働き・役割
ObjectGetInteger関数は、指定されたチャートオブジェクト(チャート上に描画される図形やテキストなどの要素)の整数型のプロパティ値を取得するための関数です。
ここで言う「プロパティ」とは、オブジェクトの色、スタイル、位置などの設定可能な属性のことです。
ObjectGetInteger関数を使用することで、これらのプロパティを動的に(プログラム実行中に)取得することができます。グラフィカルオブジェクトのプロパティの取得や設定に使われる関数の一つです。
ObjectGetInteger関数の引数について
ObjectGetInteger関数の引数構成は以下の通りです。この関数は複数の書式を持つオーバーロード関数です。
※オーバーロード関数についての詳細は↓の記事をご参照ください。
書式1
long ObjectGetInteger(
long chart_id, // チャートの識別子
string name, // オブジェクトの名前
ENUM_OBJECT_PROPERTY_INTEGER prop_id, // プロパティの識別子
int prop_modifier=0 // プロパティの修飾子、必要に応じて
);
chart_idはチャートの識別子で、0を指定すると現在のチャートを意味します。
0以外の値としては、特定のチャートのIDを使用して他のチャートを指定することができます。
例えば、ChartOpen関数で新しいチャートを開いた場合、その返り値としてチャートIDが得られます。このIDを使用して特定のチャートを指定することができます。
nameはオブジェクトの名前です。
prop_idはプロパティの識別子で、ENUM_OBJECT_PROPERTY_INTEGERの値の中から指定します。
ENUM_OBJECT_PROPERTY_INTEGERは、MQL5で使用されるオブジェクトの整数型プロパティを定義するenum列挙型です。これにより、チャート上のオブジェクトに関連する様々なプロパティを統一的に管理し、設定や取得を行うことができます。プロパティは色、スタイル、位置、サイズなど多岐にわたり、オブジェクトの表示方法や動作を詳細に制御するために使用されます。
※ENUM_OBJECT_PROPERTY_INTEGERの識別子についての詳細は↓の記事をご参照ください。
prop_modifierはプロパティの修飾子で、デフォルトでは0です。FibonacciツールやAndrew’s Pitchforkなどでレベルを指定する場合に使用されます。
修飾子とは?
「修飾子」とは、プロパティの設定や取得をより具体的に制御するための追加情報を提供するものです。MQL5における修飾子は、FibonacciツールやAndrew’s Pitchforkなどの複雑なオブジェクトで特定のレベルやポイントを指定する際に使用されます。これにより、プロパティがオブジェクト全体に対してではなく、特定の部分に適用されるようになります。
書式2
bool ObjectGetInteger(
long chart_id, // チャートの識別子
string name, // オブジェクトの名前
ENUM_OBJECT_PROPERTY_INTEGER prop_id, // プロパティの識別子
int prop_modifier, // プロパティの修飾子
long& long_var // プロパティ値を受け取る
);
chart_id、name、prop_id、prop_modifierは書式1と同様です。
long_varは、プロパティ値を受け取るための変数です。この変数に、指定されたプロパティの値が格納されます。
書式1では戻り値として受け取っていた値が、書式2ではこのlong_varにて参照渡しで受け取る事になります。
※参照渡しについての詳細は↓の記事をご参照ください。
ObjectGetInteger関数の戻り値について
ObjectGetInteger関数は、指定されたオブジェクトプロパティの整数型の値を返します。ObjectGetInteger関数には2つのバリアント(異なる形式)があり、異なる方法で値を返します。
バリアントとは、同じ名前の関数が異なる引数リストを持つことを指し、これをオーバーロードと呼びます。
書式1:プロパティ値を直接返します。、オブジェクトの色プロパティを取得する場合、その色の値がlong型で直接返されます。
書式2:成功した場合はtrueを返し、失敗した場合はfalseを返します。書式2では、プロパティ値はlong_varに格納されます。
ObjectGetInteger関数を使う際の注意点
ObjectGetInteger関数を使用する際には、以下の点に注意する必要があります。
- プロパティ値が正しい形式であることを確認する必要があります。不正な形式のプロパティ値を取得しようとすると、予期しない結果になることがあります。
- この関数は同期呼び出しを使用するため、多数のオブジェクトを扱う場合には時間がかかる可能性があります。
※同期呼び出しとは、関数が実行される際に、全てのコマンドが順次実行され、関数が完了するまで他の処理がブロックされることを意味します。このため、処理が終わるのを待つ必要があり、大量のオブジェクトを処理する際には時間がかかる可能性があります。
ObjectGetInteger関数を使ったサンプルコード
以下は、ObjectGetInteger関数を使用してチャートオブジェクトの色プロパティを取得するサンプルコードです。
// スクリプトの開始関数
void OnStart()
{
// チャートIDとオブジェクト名を定義
long chart_id = 0; // 現在のチャート
string obj_name = "MyVerticalLine";
// 垂直線オブジェクトを作成
if(!ObjectCreate(chart_id, obj_name, OBJ_VLINE, 0, TimeCurrent(), 0))
{
Print("オブジェクトの作成に失敗しました");
return;
}
// 垂直線の色を設定
ObjectSetInteger(chart_id, obj_name, OBJPROP_COLOR, clrRed);
// オブジェクトの色プロパティを取得する方法1(書式1)
long color_value = ObjectGetInteger(chart_id, obj_name, OBJPROP_COLOR);
// 結果をエキスパートログに出力
PrintFormat("オブジェクト '%s' の色は %d です(書式1)", obj_name, color_value);
// オブジェクトの色プロパティを取得する方法2(書式2)
long color_value_ref;
bool result = ObjectGetInteger(chart_id, obj_name, OBJPROP_COLOR, 0, color_value_ref);
if(result)
{
// 成功した場合の処理
PrintFormat("オブジェクト '%s' の色は %d です(書式2)", obj_name, color_value_ref);
}
else
{
// 失敗した場合の処理
PrintFormat("オブジェクト '%s' の色の取得に失敗しました(書式2)", obj_name);
}
}
サンプルコードに使われた関数や文法要素の簡単な解説
OnStart関数
OnStart関数は、スクリプトが実行されると自動的に呼び出される関数です。この関数内にプロパティ取得の処理を記述しています。
ObjectCreate関数
ObjectCreate関数は、指定されたタイプのオブジェクトをチャート上に作成するための関数です。この例では、垂直線(OBJ_VLINE)オブジェクトを作成しています。
「!」の意味
if文内の「!」は論理否定演算子です。!ObjectCreate
は、ObjectCreate関数がfalseを返した場合(オブジェクトの作成に失敗した場合)に条件がtrueとなります。この場合、エラーメッセージを表示し、処理を終了します。
ObjectSetInteger関数
ObjectSetInteger関数は、オブジェクトのプロパティを設定するための関数です。この例では、垂直線の色を赤に設定しています。
ObjectGetInteger関数
ObjectGetInteger関数は、指定されたチャートオブジェクトの整数型プロパティを取得するための関数です。
PrintFormat関数
PrintFormat関数は、フォーマット指定子を使用して文字列を整形し、エキスパートログに出力する関数です。ここでは、取得したプロパティ値を確認するために使用しています。
フォーマット指定子「%d」
%dは、整数値を表示するために使用されます。PrintFormat関数内で使用され、取得した整数値を表示します。
フォーマット指定子「%s」
%sは、文字列を表示するために使用されます。この例では、オブジェクトの名前を表示するために使用されています。
コメント