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

 
7bit:

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

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


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


7 我从来没有使用过dll导入,所以请你解释一下。

+ 你必须在Meta Trader Client的文件夹中包含dll文件吗?

+ 我们怎样才能从MT客户端启用这个EA?

只是请给我们一些Meta Trader中DLL导入的例子

 
spidermagos:


7 我从来没有使用过dll导入,所以能不能请你解释一下以下内容。

+ 你必须在Meta Trader Client的文件夹中包含dll文件吗?

+ 我们怎样才能从MT客户端启用这个EA?

请给我们一些Meta Trader中DLL导入的例子。

我很抱歉地告诉你,除非你学会阅读 超过140个字符的文字 的技巧,否则你完全不可能利用它(甚至不可能理解它可以用于什么目的)。

作为一个开始,你可以尝试从你刚才在最后一个帖子中引用的文字中提取意思。你会发现我把它描述成一个脚本,而不是一个EA,此外,你会非常惊讶地发现我写的是不需要安装任何dlls,你甚至可以找到我解释如何使用它的那部分文字。

 
7bit:

我很抱歉地告诉你,除非你学会阅读 超过140个字符的文字 的技巧,否则你将完全不可能利用它(甚至不可能理解它可以用于什么目的)。

作为一个开始,你可以试着从你刚才在上一篇帖子中引用的文字中提取出意思。你会发现我把它描述成一个脚本,而不是一个EA,此外,你会惊讶地发现我写的是不需要安装任何dlls,你甚至可以找到我解释如何使用它的那部分文字。

我钦佩你的傲慢和你的英语技能,可能还有你的编码例子。

但解决一个问题而不提供解决方案,只是在回避问题。

7位与其质疑我的阅读能力和技术,不如你写出整个程序,证明你的自我。而不是哲理!

你是否知道如何做一个实时的时钟,一秒一秒的,这就是问题所在,这个时钟应该在图表中吗?

 

你可以简单地添加2和2。

使用7bit的代码来生成假的刻度线,并结合我发布的代码,你就拥有了所有你需要的东西。

另外,7bit似乎是参与这个论坛的顶级程序员之一......

//z

 

spidermagos:

我很佩服你的傲慢

谢谢你。


spidermagos:

你为什么不把整个程序写出来,证明你自己,而不是去讲哲学呢?

这个脚本是完整的,可以独立工作,完全在我给出的规格范围内。

我把它作为一个建议发布,以解决指标不允许使用像sleep()这样的阻塞调用的问题,而且也不存在其他从指标本身生成定时器事件的方法。整个时钟问题的这个确切的 问题在这个线程中被立即提到,我只解决了这个问题,其他的都没有解决。它可以 作为一个完全独立的问题来处理,我的脚本是一个通用的(完全独立的)解决方案,也可以应用于许多类似的场景,我甚至还为一个不同的使用情况举了一个例子。

如果你想写代码,那么你必须学会问题分解 的技巧,你还必须能够立即识别出一个解决方案,以及一个部分解决方案,只要你碰巧遇到一个。

 
//< This is EA : Compile and run in folder "/experts" >
 
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
static int iRunTime            ;
 
while  ( ! IsStopped () )
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
           iRunTime   = GetTickCount () - iTimeStamp                ;
           Sleep      ( iClockPeriod    - iRunTime                ) ;
       }
}
//</This is EA : Compile and run in folder "/experts" > 

//< This is Indicator : Compile and run in folder "/experts/indicators" >
#property  indicator_chart_window
 
int start()
{
static int iClockPeriod = 1000 ;
 
static int iTimeStamp          ;
  
  
if     ( ( GetTickCount () - iTimeStamp ) < iClockPeriod )   return ;
       {
           iTimeStamp = GetTickCount ()                             ;
           Comment    ( TimeToStr ( TimeLocal () , TIME_SECONDS ) ) ;
  
 
       }
}
//</This is Indicator : Compile and run in folder "/experts/indicators" > 

在不同的图表中运行这些程序。

 
Ais:

在不同的图表中运行这些程序。


Ais;7bit是正确的,这将不会起作用!启动功能 是逐个tick的。

需要导入dll来解决这个问题。...

即从指标中调用脚本

 
7bit:

谢谢你。


这个脚本是完整的,可以独立工作,完全在我给出的规格范围内。

我把它作为一个建议发布,以解决指标不允许使用像sleep()这样的阻塞调用的问题,而且也不存在其他方法来从指标本身产生定时器事件。整个时钟问题的这个确切的 问题在这个线程中被立即提到了,我只解决了这个问题,其他的都没有解决。它可以 作为一个完全独立的问题来处理,我的脚本是一个通用的(完全独立的)解决方案,也可以应用于许多类似的场景,我甚至还为一个不同的使用情况举了一个例子。

如果你想写代码,那么你必须学会问题分解的技巧,你还必须能够立即识别出一个解决方案,以及一个部分解决方案,只要你碰巧遇到一个解决方案。



7bit - 你如何从一个指标中调用一个脚本?

你能举个例子吗?

 
spidermagos:

我的理解是,Start()函数是逐点工作的。

有没有一种方法可以使用计算机时钟的实时数据并每秒更新?不是逐点更新,而是每秒钟更新?

如果有,请给我一些帮助。

谢谢

嗨,你可以使用一个单独的tick sender应用程序,而不是一个脚本(有几个免费的;谷歌 "mt4 tick sender"),让它每200ms左右产生tick。然后确保你的电脑时钟经常同步,并使用TimeLocal() + hour_difference_between_yourtimezone_and_servertimezone * 3600 而不是TimeCurrent(),因为对于生成的tick,你 "只 "强制执行Start(),TimeCurrent()将不会自我更新,除非tick来自你的经纪人。这对指标和EA都有效。有趣的是,有几个经纪商的服务器不同步,他们滞后几秒,但只有时间戳,不幸的是没有价格,不同的蜡烛,M1有时完全不同,当有动力 时,笑了。
 

首先把你在start中的逻辑放到一个函数中。

接下来在init()中做一个带有sleep的while循环,然后从那里调用该函数。 记住睡眠的单位是毫秒。

这将使你能够控制时间,而不是等待价格变化。

只要你的程序逻辑没有问题,它就能完美地工作。唯一的问题是你不能在回测器 中运行它。先用Start()做测试,然后切换到init()。