オブジェクトで四角形を描く

sitemap
世界最強のFXキャッシュバックサイト
オブジェクトの表示位置を指定する
公開日:2018/09/23
少し間が空いてしまいましたが、今回もオブジェクトについて書いていきます。

前回の記事「オブジェクトで四角形を描いて装飾をする」と、

前々回の記事「オブジェクトでスプレッドをチャートに表示させる」で、

オブジェクトで文字や四角形などを表示させてきました。

今回もオブジェクトを使って、四角形を表示させていきますが、オブジェクトの表示位置を指定した場所に表示させるようにしていきます。

以下から作成過程を説明していきます。
ソースコードの説明
まず、前回までと同じように横幅200px、高さ200pxの四角形をオブジェクトで作成します。

今回は、左上、左下、右上、右下にそれぞれ四角形のオブジェクトを表示させます。

表示位置のチェックだけをしたいので、表示させる場所をそれぞれ指定して同じ形の四角形を4つ作成します。

では、早速、コードを書いていきます。

■オブジェクトの処理

今回は、4つの四角形をオブジェクトで作っていくので、それぞれにオブジェクト名とオブジェクトのIDを指定していきます。

①string obj_name_l_u = "left_upper";
②string obj_name_l_l = "left_lower";
③string obj_name_r_u = "right_upper";
④string obj_name_r_l = "right_lower";
⑤int    chart_id01 = 0;
⑥int    chart_id02 = 0;
⑦int    chart_id03 = 0;
⑧int    chart_id04 = 0;

①string obj_name_l_u = "left_upper";
左上に表示させるオブジェクト名を「left_upper」と指定。

②string obj_name_l_l = "left_lower";
左下に表示させるオブジェクト名を「left_lower」と指定。

③string obj_name_r_u = "right_upper";
右上に表示させるオブジェクト名をright_upper」と指定。

④string obj_name_r_l = "right_lower";
右下に表示させるオブジェクト名を「right_lower」と指定。

⑤int chart_id01 = 0;
左上に表示させるオブジェクトIDの変数名を「chart_id01」と指定して、メインウインドウに表示するために「0」を代入。

⑥int chart_id02 = 0;
左下に表示させるオブジェクトIDの変数名を「chart_id02」と指定して、メインウインドウに表示するために「0」を代入。

⑦int chart_id03 = 0;
右上に表示させるオブジェクトIDの変数名を「chart_id03」と指定して、メインウインドウに表示するために「0」を代入。

⑧int chart_id04 = 0;
右下に表示させるオブジェクトIDの変数名を「chart_id04」と指定して、メインウインドウに表示するために「0」を代入。

次に、オブジェクトの作成をしていきます。

①ObjectsDeleteAll();

②ObjectCreate(chart_id01,obj_name_l_u,OBJ_RECTANGLE_LABEL,0,0,0);
③ObjectCreate(chart_id02,obj_name_l_l,OBJ_RECTANGLE_LABEL,0,0,0);
④ObjectCreate(chart_id03,obj_name_r_u,OBJ_RECTANGLE_LABEL,0,0,0);
⑤ObjectCreate(chart_id04,obj_name_r_l,OBJ_RECTANGLE_LABEL,0,0,0);

①ObjectsDeleteAll();

表示されているオブジェクトがあった場合、被ってしまうことがあるので、表示されているオブジェクトをすべて削除します。

②ObjectCreate(chart_id01,obj_name_l_u,OBJ_RECTANGLE_LABEL,0,0,0);
左上の四角形のオブジェクトID「chart_id01」、オブジェクト名「obj_name_l_u」、オブジェクトの種類「長方形」、表示させるウインドウの番号を「0(チャートウインドウ)」、オブジェクトのアンカーポイントを「0,0,0」に設定。

③ObjectCreate(chart_id02,obj_name_l_l,OBJ_RECTANGLE_LABEL,0,0,0);
左下の四角形のオブジェクトID「chart_id02」、オブジェクト名「obj_name_l_l」、オブジェクトの種類「長方形」、表示させるウインドウの番号を「0(チャートウインドウ)」、オブジェクトのアンカーポイントを「0,0,0」に設定。

④ObjectCreate(chart_id03,obj_name_r_u,OBJ_RECTANGLE_LABEL,0,0,0);
右上の四角形のオブジェクトID「chart_id03」、オブジェクト名「obj_name_u_u」、オブジェクトの種類「長方形」、表示させるウインドウの番号を「0(チャートウインドウ)」、オブジェクトのアンカーポイントを「0,0,0」に設定。

⑤ObjectCreate(chart_id04,obj_name_r_l,OBJ_RECTANGLE_LABEL,0,0,0);
右下の四角形のオブジェクトID「chart_id04」、オブジェクト名「obj_name_u_l」、オブジェクトの種類「長方形」、表示させるウインドウの番号を「0(チャートウインドウ)」、オブジェクトのアンカーポイントを「0,0,0」に設定。

次に、それぞれの四角形のプロパティと位置などを設定するコードを書いていきます。

■左上の四角形

①ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_CORNER, CORNER_LEFT_UPPER);
②ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_XDISTANCE, 30);
③ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_YDISTANCE, 30);
④ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_XSIZE, 200);
⑤ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_YSIZE, 200);

⑥ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_BGCOLOR, EMPTY_VALUE);
⑦ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_BACK, true);

⑧ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_BORDER_TYPE, BORDER_FLAT);
⑨ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_COLOR, clrWhite);
⑩ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_STYLE, STYLE_SOLID);
⑪ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_WIDTH, 5);

①ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_CORNER, CORNER_LEFT_UPPER);
オブジェクトの原点を画面左上の中心に指定。

②ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_XDISTANCE, 30);
設定した原点からのX軸の画面中央に向かっての距離を「30」に指定。

③ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_YDISTANCE, 30);
設定した原点からのY軸の画面中央に向かっての距離を「30」に指定。

④ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_XSIZE, 200);
オブジェクトの横幅を「200」に設定。

⑤ObjectSetInteger(chart_id01, obj_name_l_u, OBJPROP_YSIZE, 200);
オブジェクトの高さを「200」に設定。

⑥~⑪までの説明は省略します。詳しく知りたい方は、前回の記事「オブジェクトで四角形を描いて装飾をする」を参考にしてください。

■左下の四角形

①ObjectSetInteger(chart_id02, obj_name_l_l, OBJPROP_CORNER, CORNER_LEFT_LOWER);
②ObjectSetInteger(chart_id02, obj_name_l_l, OBJPROP_XDISTANCE, 30);
③ObjectSetInteger(chart_id02, obj_name_l_l, OBJPROP_YDISTANCE, 230);

以下省略

①ObjectSetInteger(chart_id02, obj_name_l_l, OBJPROP_CORNER, CORNER_LEFT_LOWER);
オブジェクトの原点を画面左下の中心に指定。

②ObjectSetInteger(chart_id02, obj_name_l_l, OBJPROP_XDISTANCE, 30);
設定した原点からのX軸の画面中央に向かっての距離を「30」に指定。

③ObjectSetInteger(chart_id02, obj_name_l_l, OBJPROP_YDISTANCE, 230);
設定した原点からのY軸の画面中央に向かっての距離を「230」に指定。

以下のコードはオブジェクトIDとオブジェクト名以外は、左上の四角形と同じになるので説明は省略します。

■右上の四角形

①ObjectSetInteger(chart_id03, obj_name_u_u, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
②ObjectSetInteger(chart_id03, obj_name_u_u, OBJPROP_XDISTANCE, 230);
③ObjectSetInteger(chart_id03, obj_name_u_u, OBJPROP_YDISTANCE, 30);

以下省略

①ObjectSetInteger(chart_id03, obj_name_u_u, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
オブジェクトの原点を画面右上の中心に指定。

②ObjectSetInteger(chart_id03, obj_name_u_u, OBJPROP_XDISTANCE, 230);
設定した原点からのX軸の画面中央に向かっての距離を「230」に指定。

③ObjectSetInteger(chart_id03, obj_name_u_u, OBJPROP_YDISTANCE, 30);
設定した原点からのY軸の画面中央に向かっての距離を「30」に指定。

以下のコードはオブジェクトIDとオブジェクト名以外は、左上の四角形と同じになるので説明は省略します。

■右下の四角形

①ObjectSetInteger(chart_id04, obj_name_u_l, OBJPROP_CORNER, CORNER_LEFT_LOWER);
②ObjectSetInteger(chart_id04, obj_name_u_l, OBJPROP_XDISTANCE, 230);
③ObjectSetInteger(chart_id04, obj_name_u_l, OBJPROP_YDISTANCE, 230);

以下省略

①ObjectSetInteger(chart_id04, obj_name_u_l, OBJPROP_CORNER, CORNER_LEFT_LOWER);
オブジェクトの原点を画面左下の中心に指定。

②ObjectSetInteger(chart_id04, obj_name_u_l, OBJPROP_XDISTANCE, 230);
設定した原点からのX軸の画面中央に向かっての距離を「230」に指定。

③ObjectSetInteger(chart_id04, obj_name_u_l, OBJPROP_YDISTANCE, 230);
設定した原点からのY軸の画面中央に向かっての距離を「230」に指定。

以下のコードはオブジェクトIDとオブジェクト名以外は、左上の四角形と同じになるので説明は省略します。

少し長くなりましたが、これで完成です。

それでは、コンパイルして実行してみます。

実行結果
インジゲーターを起動した瞬間のチャートです。

指定した位置に4つの四角形がちゃんと表示されました。
オブジェクトを4箇所に表示
4箇所にそれぞれ四角形を表示させましたが、位置については、以下のようなイメージで決められています。

■CORNER_LEFT_UPPER(左上)

チャートの左上角を基準として、そこから画面中央へ向かって、x座標(水平方向)とy座標(垂直方向)をピクセル単位で指定してオブジェクトの位置を決めます。

例:左上を基準に、x座標を30、y座標を30に指定したときの四角形(幅200、高さ200)の表示イメージ
左上

■CORNER_LEFT_LOWER(左下)

チャートの左下角を基準として、そこから画面中央へ向かって、x座標(水平方向)とy座標(垂直方向)をピクセル単位で指定してオブジェクトの位置を決めます。

例:左下を基準に、x座標を30、y座標を230に指定したときの四角形(幅200、高さ200)の表示イメージ
左下

■CORNER_RIGHT_UPPER(右上)

チャートの右上角を基準として、そこから画面中央へ向かって、x座標(水平方向)とy座標(垂直方向)をピクセル単位で指定してオブジェクトの位置を決めます。

例:左上を基準に、x座標を230、y座標を30に指定したときの四角形(幅200、高さ200)の表示イメージ
右上

■CORNER_RIGHT_LOWER(右下)

チャートの右下角を基準として、そこから画面中央へ向かって、x座標(水平方向)とy座標(垂直方向)をピクセル単位で指定してオブジェクトの位置を決めます。

例:左上を基準に、x座標を230、y座標を230に指定したときの四角形(幅200、高さ200)の表示イメージ
右下

このように、指定したい位置を四隅の基準点をを指定してから、x座標とy座標で決めることで、表示させたい位置を設定することができます。

注意点として、四角形は左角が基準となるため、四角形の左角の座標をxとyで指定する必要があります。
まとめ
いかがだったでしょうか?

今回は、オブジェクトを意図した位置に表示させるために設定をしていきました。

この設定ができることによって、オブジェクトがチャートと被らないようにしたり、トレードの邪魔にならないようにしたりして表示することができます。

また、複数のオブジェクトを見やすいように配置することもできます。

今後、オブジェクトを使った便利なインジゲーターをいろいと作成していく予定なので、興味がある方はお楽しみにしていてください。

それでは、また。
今回使用したMQL一覧
ObjectsDeleteAll()
ObjectCreate
・ObjectSetInteger
関連ページ
big_candlestick_judgment
スポンサードリンク
Twitter