【MQL4テクニック】インジケータから「自動売買」ボタンを切り替える方法

MQL4テクニック

今回はインジケータやEAからMT4の「自動売買ボタン」を切り替える方法をご紹介いたします。

↑の自動売買ボタンは、MT4全体で動作をしているEAの「取引を許可する」ボタンになります。

つまり、これから紹介するプログラムを参考にすることで、特定の条件下で全てのEAの取引を停止するようなことも実現可能です。

実際のコード

#include <WinUser32.mqh>

int OnInit(){
   int hwnd = GetParent(GetParent(GetParent(WindowHandle(Symbol(), Period()))));
   if(hwnd == 0) return false;
   PostMessageW(hwnd, WM_COMMAND, 33020, 0);
   return(INIT_SUCCEEDED);
}

忘れずに #include を行って下さい。

自動売買ボタンの状態を切り替える関数

引数がtrue→有効(押下状態)、false→無効(非押下状態)

bool ToggleExpert(bool enable){

   int hwnd = GetParent(GetParent(GetParent(WindowHandle(Symbol(), Period()))));
   if(hwnd == 0) return false;
   
   bool isExpert = IsExpertEnabled();
   if (enable && !isExpert) PostMessageW(hwnd, WM_COMMAND, 33020, 0);
   if (!enable && isExpert) PostMessageW(hwnd, WM_COMMAND, 33020, 0);
   return true;
}

注意事項

自動売買のボタンはあくまでも「EAからの取引を許可する/しない」の切り替えであり、EAの動作が完全に停止をしているわけではありません。

特定の処理が行わていない限り、無効状態でもEAは全ての処理を行っています。
※注文試行の際にエラーが発生し、注文が完了しないだけ

そのため、EAが動作しているのにも関わらず、注文が行なわれないことによる動作不良を引き起こす可能性が御座います。

ご利用の際にはご注意ください。

POINT

こちらの記事で悩みが解決されない場合は、
MQL4 User Community に参加してお気軽にご質問ください。

MQL4初心者の方や開発に行き詰った方の悩みを、 様々なソフトウェアやツールを開発してきた経験豊富なエンジニアたちが解決いたします。