オフラインチャートでEAを動かすには。/offlineチャートの活用編(7)

MT4 公式フォーラムによると、MT5 のクローズド・ベータテストが 9/9 から始まったようです。
そろそろMQL5 講座も再開せねば…と思いつつも、どうせ当分はMT4 のままでしょ? と心が揺れています。
個人的には、年内にベータか初期リリースされて、半年ぐらいブローカーも巻き込んだ動作テストして来年7月頃にはMT5 に移行かな?と予想しています。ブローカーにとっては、単にサーバソフトの入れ替えをするだけの手間なので、移行時には、「来月からMT5 になります。クライアントソフトをダウンロードしてね。」と素っ気無いメールで済ませるブローカーもあるんじゃないかなぁと邪推しています..。



さて、今日は、オフラインチャートでEA を動かす方法を考えます。
メタトレーダー4に10分足や2時間足を表示させにるには?」を参考に、2分足のチャートを作り、そこで EA を動かそうとしても、 実は EA 内の start() 関数が呼ばれません。(情報提供:Kiririさん
そこで、

呼ばれぬなら、自分で呼び出せ start()関数   (字余り

という方針で、Period_Converter_Opt.mq4 を改造します。



今回も、Windowsメッセージを利用した解決策を考えているのですが、そもそもWindowsメッセージって何?という人向けに超・簡単に説明しておきます。WindowsOSでは、Windows3.1時代からアプリケーションの制御にWindowsメッセージというモノが使われています。
模式的に示すと、

こんな感じで、「ウィンドウを閉じなさい」「ウィンドウを再描画しなさい」「ウィンドウサイズが変わりましたよ」「タイマー時刻を過ぎましたよ」「マウスが動きましたよ」「キーが押されましたよ」…というメッセージを大量に送受信することで、各ウィンドウが上手く協調して動作しています。
以前に公開した、バーチャル洗濯バサミは、この仕組みを活用して、「Home キーが押されましたよ」という嘘のメッセージをチャートウィンドウに送り続けています。

チャートウィンドウは、メッセージの送り主が、本当のキーボードなのか、偽の擬似キーボードなのか判断しないので、健気にバックスクロールすることになります。また、メッセージを使うからこそ、バックグラウンドで複数のウィンドウに対して並行して押すことが可能になっています。


本題の、オフラインチャートでEAが動かない問題に対しても、Period_Converter_Opt.mq4 から「EA動け」というメッセージを送りつければ動く...はずです。
まず、「EA動け」というメッセージのIDを知る為のRegisterWindowMessageA() という関数が使えるように、冒頭に3行追加します。

#property show_inputs

#include 
#import "user32.dll" // 以下3行追加
int RegisterWindowMessageA(string lpString);
#import

次に、

if (PostMessageA(hwnd,WM_COMMAND,CHART_CMD_UPDATE_DATA,0) == 0) {

という行を探し出して、

int MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message");
if (PostMessageA(hwnd,WM_COMMAND,CHART_CMD_UPDATE_DATA,0) == 0 ||
   (PostMessageA(hwnd,MT4InternalMsg,2,1) == 0)
) {

とします。
PostMessageA(hwnd,WM_COMMAND,CHART_CMD_UPDATE_DATA,0) は、インジケータ更新の為のメッセージ送信です。
PostMessageA(hwnd,MT4InternalMsg,2,1) というのが、EA のstart() 関数を呼び出す為に追加したメッセージ送信です。
この辺りの仕様はMetaTraderのバージョンアップによって変更される可能性があるので要注意です。


この手法でデモ口座の2分足で動かしてみたのが

上図です。ただのMACDサンプルEAなのに、なぜかスキャルピングEAとして利益を重ねています^^;
あるトレーダーさんによれば、他人と同じ時間足で勝負すると売買タイミングが重なって不利益になりやすい。それを回避する為には、他人と異なる時間足を使うしかない…と仰られていましたが、その効果が2分足にもあるのでしょうか・・笑
変則的な時間足では、バックテストが出来ず、フォワードテストのみでEA を評価することになりますが、他人と異なることをしてみたい・・・という人はぜひ挑戦してみてください。
改造版のダウンロードは、こちらからどうぞ。