MT4でチャート上に「ボタン」を作成したい場合があります。
「ボタンが押されたら、~処理を実行する」みたいな使い方が想定されますね。

ボタンを自作できたら、便利だな~
今回は、ボタンを作成する方法をご紹介します。
ボタンを作成するメリット
MT4では、元々用意されているトレードパネル(発注ボタン)があります。
それを使って、売り買いの発注が可能です。

では、何故、わざわざボタンを自作して発注処理をするのか?
それは、ボタン1つで同時に色々できることがあるからです。
例えば、
・ロスカット(STOP)を設定できる
・利確(T/P)を設定できる
・ロットサイズを設定できる
・複数の処理を一括処理できる
・マジックナンバーを設定できる
・コメントを設定できる
などでしょうか。
発注時の「チャートをキャプチャする」なんていうのも良いかも知れません。
それぞれは、自分で個別に設定・処理できるので、面倒じゃなければ必要ないかも知れませんが、中には、MQLコードでしか設定できないものもあります。
・マジックナンバーを設定できる
・コメントを設定できる
特に、マジックナンバーは、EAには必須です。
どのEAによるオーダーかを識別するのが、マジックナンバーです。
複数EAを稼働してる場合、オーダーを識別できないと対象ではないオーダーに対して処理を実行してしまったりと不都合が発生するためです。
ボタンを作成する理由は、色々あると思いますが「処理を自動化できる」のが、大きなメリットになります。
ボタンは、オブジェクト
オブジェクトは、チャートに描画できる「ライン」や「図形」のようなものを指します。
部品みたいな感じでしょうか。
そのオブジェクトの一つとして「ボタン」を作成できます。
他にも、「ラベル」「ライン」「矢印」などもオブジェクトとして作成できます。
オブジェクトを作成する「ObjectCreate」
では、実際どうやって作るのか?
MQL4では、オブジェクトを作成するための「ObjectCreate」関数が用意されています。
ObjectCreate
オブジェクトを作成します。
bool ObjectCreate(
long chart_id, // 表示するチャートID
string object_name, // オブジェクトを識別する名前
ENUM_OBJECT object_type, // オブジェクトの種類
int sub_window, // 表示するサブウィンドウNo
datetime time1, // 時間指定がある場合に設定(垂直線など)
double price1, // 価格指定がある場合に設定(水平線など)
...
datetime timeN=0, // 時間指定(複数)がある場合に設定(トレンドラインなど)
double priceN=0 // 価格指定(複数)がある場合に設定(トレンドラインなど)
);
ObjectSetInteger
オブジェクトのプロパティ値を設定します。
bool ObjectSetInteger(
long chart_id, // 表示するチャートID
string object_name, // オブジェクトを識別する名前
int prop_id, // プロパティの種類
long prop_value // プロパティの設定値
);
ObjectSetString
オブジェクトの文字に関するプロパティ値を設定します。
bool ObjectSetString(
long chart_id, // 表示するチャートID
string object_name, // オブジェクトを識別する名前
int prop_id, // プロパティの種類
string prop_value // プロパティの設定値
);
ボタンを作成するコード
それでは、実際にボタンを作成してみましょう。
コード例)
//現在のチャートにボタンを作成
ObjectCreate(0,"BUYbtn",OBJ_BUTTON,0,0,0);
//文字色
ObjectSetInteger(0,"BUYbtn",OBJPROP_COLOR,clrWhite);
//背景色
ObjectSetInteger(0,"BUYbtn",OBJPROP_BGCOLOR,clrRed);
//ボタンの位置指定
ObjectSetInteger(0,"BUYbtn",OBJPROP_CORNER,CORNER_LEFT_UPPER); //左上を基準にする
ObjectSetInteger(0,"BUYbtn",OBJPROP_XDISTANCE,5); //左上からの横位置(座標)
ObjectSetInteger(0,"BUYbtn",OBJPROP_YDISTANCE,30); //左上からの縦位置(座標)
//ボタンのサイズを指定
ObjectSetInteger(0,"BUYbtn",OBJPROP_XSIZE,55); //横幅
ObjectSetInteger(0,"BUYbtn",OBJPROP_YSIZE,30); //縦幅
//フォント
ObjectSetString(0,"BUYbtn",OBJPROP_FONT,"MS ゴシック"); //フォント
ObjectSetInteger(0,"BUYbtn",OBJPROP_FONTSIZE,9); //フォントサイズ
//テキスト
ObjectSetString(0,"BUYbtn",OBJPROP_TEXT,"▲BUY "); //ボタンに表示する文字
あくまで一例ですので、自分の好みに合わせて、設定値は変更して下さい。
上記のコードを実行すると、こんなボタンが左上あたりに表示されます。

これでボタンの作成が出来ました!!
ただし、このボタンを押しても何も反応しません。
ボタンを押したときの動作は、別途プログラミングしてあげる必要があるからです。
これは、また次回に説明します。