Tick更新を待たずに定期的にEA を呼び出す。

コメントで質問があったので、書き留めておきます。

#include 
#import "user32.dll"
int RegisterWindowMessageA(string lpString);
#import

int start()
{
   if (!IsDllsAllowed()) {
      Alert("ERROR: [Allow DLL imports] NOT Checked.");
      return (0);
   }
   int hwnd = WindowHandle(Symbol(), Period());
   int MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message");

   while(!IsStopped()){
      PostMessageA(hwnd,MT4InternalMsg,2,1);
      Sleep(1000);
   }
   return(0);
}

こんなscript をチャートに貼り付けておくと、そのチャートで動くEA は1秒毎に Tickが更新されたと勘違いして実行されます。



…でも、わざわざscript で1秒毎に呼び出すようにしなくても、EA自身を1秒毎にループさせても良いですよね..。

int init()
{
   start();
   return(0);
}
  
int start()
{
   while(!IsStopped()){
      Comment(TimeToStr(TimeLocal(),TIME_SECONDS)+"\n\n"+
      TimeToStr(TimeCurrent(),TIME_SECONDS)+"\n\n"+
      DoubleToStr(Bid,Digits)+"\n\n"+
      DoubleToStr(MarketInfo(Symbol(),MODE_BID),Digits)
     );
      Sleep(1000);
      //RefreshRates();
   }
   return(0);
}

↑このような無限ループEAを作成しても、1秒毎に実行を実現できます。
ただ、このようなループEAでは、Bid と MarketInfo(Symbol(),MODE_BID) が異なるので注意してください。このままでは、Bid は最新の値に更新されません。最新の Bid が必要な時は、MarketInfo(Symbol(),MODE_BID) を使うか、RefreshRates();を実行してください。




閑話休題

明日こそ、ピボットを何とかしなくてわ...><;