現在のチャートがアクティブかどうか判定する。
先日の「(続々)複数のチャートの時間足を一括変更するスクリプト。」で公開した Accela2 ですが、バグが見つかったので修正版をこちらに置きました。
Ctrl+1〜9 でチャートの時間足を一括変更する際に、非アクティブなMT4 にも作用してしまうバグを修正しました。(Special thanks to kyojee)
さて、今日は、現在のチャートがアクティブかどうか判定する方法を紹介します。1つの MT4 内に複数のチャートが開かれている状態で、どのチャートがアクティブになっているのか?は、目で見ればすぐに分かりますが、インジケータ内で自チャートがアクティブかどうかを判定するには、以下のようにするのが楽かなと思います。
公式フォーラムでの質問に回答したサンプルですが、必要な人はどうぞ。
#property indicator_chart_window #import "user32.dll" int GetParent(int hWnd); int SendMessageA(int hWnd,int Msg,int wParam,int lParam); #import #define WM_MDIGETACTIVE 0x0229 int start() { int Parent = GetParent(GetParent(WindowHandle(Symbol(),Period()))); int MyWND = GetParent(WindowHandle(Symbol(),Period())); int ActiveMDI = SendMessageA(Parent, WM_MDIGETACTIVE, 0, 0); if(ActiveMDI == MyWND ){ Comment("Active"); }else{ Comment(""); } return(0); }