MQL4实时时钟(逐秒)。 - 页 4

 

很好,但这不是实时解决方案,因为我们不能控制 非tick事件的响应时间。
在 "sleep() "的情况下,我们可以。

 

因此,如果我们把逐个滴答和陈旧的价格与睡眠结合起来,那么我们就可以有一个实时时钟了 :)

 

正如我所说的,如果这个解决方案在EA中实施,就不再需要TimeCurrent(),循环是由Sleep(Interval-Runtime)控制的(单位:ms)。

大部分的代码保持不变,不再需要redraw()了。另外,如果你需要提高代码的速度,你可以使用一些(啊,我错过了英文单词)带有旋转零点的数组来摆脱移位循环。

AFAIK这(或类似)是最好的解决方案,可以在纯MQL的指标中完成。当你使用DLL并在外部程序中导出 计算结果时,肯定存在更好的解决方案。

 
spidermagos:

因此,如果我们把逐个滴答和陈旧的价格与睡眠结合起来,那么我们就可以有一个实时时钟了 :)

是的,但睡眠在指标中是不可能的,这就是你的问题,从这个主题的开始。
 
zzuegg:
是的,但睡眠在指标中是不可能的,这就是你的问题,从这个话题的开始。

一个EA可以调用一个指标吗?
 
是的,但只能通过icustom来解决你的问题。
 
你可以在图表上附加一个脚本,每秒钟向图表发送一个假刻度。这就是我通常做的,以定期更新多对指标和EA。
 
7bit:
你可以在图表上附加一个脚本,每秒钟向图表发送一个假刻度。这就是我通常做的,以定期更新多对指标和EA。
你需要一个dll,还是没有dll也可以这样做?
 
zzuegg:
你需要一个dll,还是不需要就能做到?

它只是mql4中的几行(当然你需要DLL调用允许调用windows API,但你不需要安装任何东西)。

/**
* MT4/experts/scripts/ticks.mq4
* send a fake tick every 1000ms to the chart and
* all its indicators and EA until this script is removed.
*/

#property copyright "© Bernd Kreuss"

#import "user32.dll"
   int PostMessageA(int hWnd, int Msg, int wParam, int lParam);
   int RegisterWindowMessageA(string lpString);
#import

int start(){
   int hwnd = WindowHandle(Symbol(), Period());
   int msg = RegisterWindowMessageA("MetaTrader4_Internal_Message");
   while(!IsStopped()){
      PostMessageA(hwnd, msg, 2, 1);
      Sleep(1000);
   }
}

我把这个脚本放在我的收藏夹里,当我需要ticks时,我只需把它拖到图表上。


我还有一个没有循环的变体,它只发送一个刻度线,然后退出,并将其(one_tick.mq4)与热键ALT+T绑定,现在我只要按ALT-T就可以向活动图表发送一个刻度线。在周末进行实验时,我的一些stat-arb EAs需要这样做,以执行start()来触发他们的计算和绘制图表(我可以在图表上移动线条来改变间隔时间,然后我需要一个新的tick来更新他们的计算)。

 

很好,谢谢你的分享