MQL4 ボタンを作る

MT4のチャートには注文・決済用のパネルが最初から付いていますが、MQL4を使えば自分でボタンを作ることもできます。

この記事では「ボタンを表示する → 見た目と位置を整える → クリックを受け取る」の3ステップで、EA(エキスパートアドバイザ)にボタンを付ける方法を解説します。

[PR]


簡単なButtonを作成

まずは簡単なボタンを表示させて、クリックを受け取れるところまで作ってみます。

Buttonを表示

最初にボタンを1つ表示させてみましょう。

ボタンは ObjectCreate() で作り、オブジェクトの種類に OBJ_BUTTON を指定します。MetaEditorでEA(エキスパートアドバイザ)を新規作成し、以下のコードを書きます。

OnDeinit() で ObjectDelete() を呼んでおくと、EAをチャートから外したときにボタンも一緒に消えます。

コンパイルしてチャートにセットすると、ボタンが表示されました。

ボタンの位置はチャートの時間・価格ではなくピクセルで指定します。そのため、ObjectCreate() の時間(time1)と価格(price1)は0のままで大丈夫です。

Buttonの名前、配色、位置

次に、ボタンに表示する文字や色、位置、大きさを設定します。

数値・色・true/falseは ObjectSetInteger()、文字列は ObjectSetString() で設定します。

ボタンの色や位置を細かく設定できました。

設定した項目の意味は以下のとおりです。

プロパティ 設定値 意味
OBJPROP_COLOR clrBlue 文字の色
OBJPROP_TEXT "Button" ボタンに表示する文字
OBJPROP_FONT "Arial" フォント
OBJPROP_FONTSIZE 12 文字の大きさ
OBJPROP_CORNER CORNER_LEFT_UPPER 位置の基準にするチャートの角(左上)
OBJPROP_XDISTANCE 200 基準の角からの横の距離(ピクセル)
OBJPROP_YDISTANCE 100 基準の角からの縦の距離(ピクセル)
OBJPROP_XSIZE 100 ボタンの幅(ピクセル)
OBJPROP_YSIZE 32 ボタンの高さ(ピクセル)
OBJPROP_BGCOLOR clrAqua ボタンの背景色
OBJPROP_BORDER_COLOR clrBlue ボタンの枠線の色
OBJPROP_STATE false 押された状態か(false=押されていない)
OBJPROP_BACK false チャートの背面に描くか(false=前面)
OBJPROP_SELECTABLE false マウスで選択・移動できるようにするか
OBJPROP_SELECTED false 選択された状態にするか
OBJPROP_HIDDEN true オブジェクトの一覧に名前を表示しない
OBJPROP_ZORDER 0 クリックを受け取る優先順位

Buttonクリック

続いて、ボタンがクリックされたときの処理(イベント処理)を作ります。

クリックは OnChartEvent() で受け取ります。EAとインジケーターで使える関数で、引数は次の4つです。

ボタンなどのオブジェクトがクリックされると、id に CHARTEVENT_OBJECT_CLICK が、sparam にクリックされたオブジェクトの名前が入ります。

そこで、id が CHARTEVENT_OBJECT_CLICK かどうかを判定し、さらに sparam がボタンの名前と一致するかをif文で確認します。

ボタンをクリックするたびに状態(true/false)が切り替わり、クリックを受け取れていることがログで確認できます。

まとめたコード

ここまでのコードをまとめると、以下のとおりです。

補足:知っておきたいポイント

細かい注意点をまとめておきます。

  • ボタンは押すたびに状態が切り替わります。 OBJPROP_STATE がtrue(押された)とfalse(戻った)で交互に変わるため、1回目のクリックでへこみ、2回目で元に戻ります。
  • 押したらすぐ元に戻るボタンにしたい場合は、クリック時の処理の最後で状態をfalseに戻し、ChartRedraw() で再描画します(下のコード)。
  • ObjectGetInteger() の戻り値はlong型です。 bool型の変数で受け取るため、(bool) を付けて型を明示しています。
  • OBJPROP_HIDDEN をtrueにしても、ボタンは消えません。 オブジェクトの一覧に名前が出なくなるだけです。

 

References:
MQL4 ObjectCreate
MQL4 OBJ_BUTTON
MQL4 ObjectSetInteger
MQL4 ObjectGetInteger
MQL4 Object Properties
MQL4 OnChartEvent(Event Handling Functions)
MQL4 Types of Chart Events

 

シェアする

  • このエントリーをはてなブックマークに追加

フォローする