2017年3月15日水曜日

[MT4プログラミング]強制的にTickイベントを発生させるスクリプト

需要があるかどうかはわかりませんが、インジケータなどで、Tickにかかわらず強制的に処理をさせたいという事があるかもしれません。

通常OnCalculate関数は、Tick更新時にのみコールされますが、WindowsのMT4であれば、スクリプトを使用して強制的にWindowMessageを送信することで、Tickイベントを発生させることが可能です。

EAであれば、OnTimer関数など別のやり方がありますが、スクリプトにしておくと、どんなEAやインジケータでも強制的に更新させることが可能という利点があります。

チャート上に何か出てくるようなスクリプトじゃないので、画像はありません。
定時に動作するようなEAでTick更新がなかったがため、ポジションがクローズされないなどの不具合がありそうなやつに有効かも?

//------------------------------------------------------------------
// 強制的に1秒ごとにTickを発生させる
#property copyright "Copyright 2015,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict
#property strict

//------------------------------------------------------------------
// メッセージ送信API
#import "user32.dll"
int PostMessageA(int handle,  uint Msg, uint wParam,  uint lParam );
#import

#define CHART_CMD_UPDATE_DATA 33324
#define WM_COMMAND 0x0111
//------------------------------------------------------------------
// スクリプト本体
void OnStart()
{
   if( !IsDllsAllowed() )
   {
      MessageBox("DLL使用が許可されていません");
      return ;
   }
   
   int handle = WindowHandle(Symbol(), Period());
   while(!IsStopped())
   {
      if( IsConnected() )
      {
         //1秒毎にメッセージを送信する。
         PostMessageA(handle, WM_COMMAND, CHART_CMD_UPDATE_DATA, 1);
      }
      Sleep(1000);
   }
}




「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。