【MQL4】注文パネル作成中に発生した背景色とボタン動作の問題、解決までの道のり
本日、MQL4で注文パネルを実装する際、二つの大きな課題に直面し、その解決に奮闘しました。備忘録として、その原因と解決策をここに記録します。
■ 発生した問題 1:背景色が反映されていなかった
現象: 注文パネルの背景に色をつけようとしたが、指定した色が全く反映されず、チャートの背景色が透けて見えてしまっていましたた。
これだと、ローソク足が邪魔して文字が見えませんよね。。
当初の推測: 背景色を設定するプロパティの指定ミスか、色の定義が誤っているのではないか。
OBJ_LABEL
の性質 にありました。OBJ_LABEL
は主にテキスト表示を目的としたオブジェクトであり、背景色を設定しても、その色が適用されるのはテキストの背後など、ごく限られた領域のみでした。広範囲を塗りつぶす用途には適していなかったのです。そのため、テキストが設定されていないか、非常に小さい場合は、背景色がほとんど表示されず、チャートの背景がそのまま見えていました。
解決策: 広範囲を確実に塗りつぶすことができる OBJ_RECTANGLE_LABEL
オブジェクトを背景として採用しました。 OBJ_RECTANGLE_LABEL
は、OBJPROP_FILL
プロパティを true
に設定することで、その矩形領域全体を色で塗りつぶすことができます。
また、他のUI要素よりも「奥」(低いZオーダー)に配置することで、パネル全体の背景として機能させることができました。

ここでひとまずパネルの背景色の問題は解決!!
■ 発生した問題 2:注文ボタンが動作しなかった
現象: 背景色の問題を解決した後、Buy/Sellなどの注文ボタンをクリックしても全く反応せず、注文が実行されない状態だった。
当初の推測: EAの自動売買許可設定が不足しているか、OnChartEvent
関数でのボタンクリックイベントの処理ロジックに誤りがあるのではないか。
真の原因(2段階での特定):
-
クリックイベントの「横取り」: エキスパートタブのログを確認したところ、ボタンをクリックした際に、意図せず 背景パネル(
OrderPanel_UI_PanelBG
)がクリックされた というログが記録されていました。これは、ユーザーがボタンをクリックしているにもかかわらず、その下にある背景パネルがクリックイベントを「横取り」してしまっていたことを示していました。背景パネルのOBJPROP_SELECTABLE
(選択可能性) やOBJPROP_CHART_EVENT
(チャートイベント発生の有無) の設定、およびZオーダーの関連が疑われました。 -
MQL4ビルドバージョンによるプロパティの非互換性: クリックイベント横取りへの対策として、背景パネルに
OBJPROP_CHART_EVENT, false
を設定しようとしましたが、これにより「
'OBJPROP_CHART_EVENT' - undeclared identifier
」というコンパイルエラーが発生しました。これは、使用していたMT4のビルドバージョンが古く、このプロパティがサポートされていなかったためと言われましたが、最近MT4を入れなおしたのでそんなはずは有りません。
また、Zオーダーの設定(背景ZORDER=1、ボタンZORDER=0)が、一部の環境で正しく機能していない可能性も浮上しました(Zオーダーは数値が小さいほど奥に描画されるため、本来はボタンが手前にあるはず)。
解決策:
-
背景パネルのクリックイベント無効化: 古いMT4バージョンに対応するため、
OBJPROP_CHART_EVENT
の設定行は削除しました。代わりに、背景パネルのOBJPROP_SELECTABLE
をfalse
に設定することで、背景パネルがクリックイベントの対象にならないようにしました。 -
Zオーダーの再調整: ボタンやエディットボックスといったインタラクティブなUI要素のZオーダーを、背景パネルのZオーダー(1)よりも明確に大きい値(例: 10)に設定しました。これにより、UI要素が背景パネルの「手前」に確実に描画され、クリックイベントを正しく拾えるようになりました。
■ 最終的に解決!
上記の一連の修正により、注文パネルは意図した通りの美しい背景色で表示され、すべての注文ボタンも正常に機能するようになりました!
今回の経験から、MQL4でグラフィカルなUIを構築する際には、以下の点に注意することが非常に重要だと学びました。
- オブジェクトタイプの適切な選択: 各オブジェクトが持つ本来の目的と機能(例:
OBJ_LABEL
vsOBJ_RECTANGLE_LABEL
)を理解すること。 - Zオーダーの管理: オブジェクトの重なり順を意識し、意図した通りにクリックイベントが伝わるようにZオーダーを適切に設定すること。
- プロパティの互換性: 使用しているMT4のビルドバージョンによって、利用できるプロパティに違いがあることを認識し、エラーが出た場合は互換性も疑うこと。
- デバッグログの活用:
Print
関数などを使ってエキスパートタブにログを出力し、イベントの発生状況やオブジェクト名などを具体的に確認すること。
長い道のりでしたが、最終的に理想的な注文パネルが完成し、大きな達成感を得ることができました。
MQL4開発でAIアシスタントの力を借りてみた話
今回の注文パネル開発では、MQL4のプログラミングに関する専門知識を持つAIアシスタントに大変助けられました。

今回、私が利用いたAIはグーグルのAi Geminiです。
私が直面した技術的な問題や疑問に対して、的確なアドバイスと修正案を提案してくれるだけでなく、エラーの原因特定やデバッグ、さらには分かりやすい解説まで行ってくれました。
特に、今回の背景色やボタンの動作不良といった、一見すると原因が分かりにくい問題も、AIアシスタントとの対話を通じて、わずか数時間で解決に導くことができました。
プログラミング初心者の方にとって、MQL4のような専門的な言語は敷居が高く感じるかもしれませんが、このようなAIアシスタントのサポートがあれば、これまで一人では難しかった開発も、効率的かつ楽しく進めることができるかも知れません。
もしMQL4開発で壁にぶつかったら、AIアシスタントに相談してみるのも非常に有効な手段だと、今回身をもって体験しました。
航したAIにサービスを活用する事で、プログラミング初心者向けしでも、インジケーターやEA作成するこのは十分可能です✨✨