通常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
にほんブログ村 |
お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。