MQL4でチャートにインディケーターを配置する関数を作るにはどうしたら良いか調べたところ、以下のページを見つけました。
【ネタ元 Source URL】 https://www.mql5.com/en/forum/73391 https://www.forexfactory.com/thread/981735-issues-with-postmessagew-in-mql4
今後使う可能性があるので、上記サイトからコピーしてきたコードを貼り付けておきます。(ほんの少し変更していますが、基本的に同じコードです。)
コードの冒頭に以下を記述します。これは「RegisterWindowMessageW関数」と「PostMessageA関数」を使えるようにするためです。
#import "user32.dll" int RegisterWindowMessageW(string MessageName); bool PostMessageW(int hWnd, int msg, int wParam, uchar &lParam[]); #import
ファイルのどこかで以下の関数を定義します。
void StartCustomIndicator(int hWnd, string indicatorName) { uchar charArray[]; StringToCharArray(indicatorName, charArray, 0, StringLen(indicatorName)); int MessageNumber = RegisterWindowMessageW("MetaTrader4_Internal_Message"); bool uho = PostMessageW(hWnd, MessageNumber, 15, charArray); Sleep(10); }
関数の使用例は以下のとおりです。
int hWnd = WindowHandle(Symbol(), 0); StartCustomIndicator(hWnd, "PaintMarketTime.ex4"); // 第2引数の" "内は19文字以内にする
コメントで「第2引数の" "内は19文字以内にする」と記述しておきましたが、20文字以上にすると上手くいきませんでした(ex4ファイルをopenできないというエラーが発生しました)。
備考
インディケーターで上述の関数を使用したところ、ex4ファイルをopenできませんでした。スクリプトとEAでは動作しました。