功能性睡眠替代品 - 页 2

 
paulepanke:

对这样的语句要小心,运行sleep()总是有逻辑上的理由,在Tester甚至在指标中。

我没有说没有使用sleep()的逻辑理由,有很多,我说没有理由期望sleep()在策略测试器中起 作用。 它在策略测试器图表 运行的指标中起作用吗,我不知道,也许它是。它在策略测试器中运行的EA中起作用吗,据我所知,不起作用。
 
RaptorUK:
看看TimeSeconds()给你什么,然后想想TimeCurrent()给你什么。.你需要哪一个,为什么?


西蒙,

intTimeSeconds( datetime time)

返回指定时间 内从分钟开始经过的秒数。

datetimeTimeCurrent( )
返回最后已知的服务器时间(最新报价的输入时间),即从1970年1月1日00:00起经过的秒数。


"你需要哪一个,为什么?"- 西蒙

我会同时使用两个e'm,因为它们是相辅相成的。- 内森

TimeSeconds(datetime time)需要在其大括号内放置一个变量。然后将TimeCurrent()放在这些大括号内,这就为我提供了可行的解决方案。我曾经这样做过,但不明白为什么返回的时间值会出现跳动和停顿(由于缺乏有效的刻度)。

你对此有什么看法?


谢谢你。

 
WHRoeder:

  1. 在你返回之前,没有创建任何类型 的ticks,它创建了下一个,并调用你的start()。如果你计算了5分钟并返回,那么下次调用时的成交量(tick数)将是+1。在实时图表中,如果你计算了5分钟,那么你将错过5分钟的点数,而在M1上将形成几个新的柱子。

威廉。

谢谢你对这个问题的阐述。

我对 "2. "的解释是,当一个tick被创建时,返回函数被调用。接下来,在调用return(0)函数后直接调用Start()函数,再次触发程序的执行。对2.这部分的解释是否正确?


"如果你计算5分钟",我怎么能确定EA会计算5分钟 (即使EA计算了5分钟,我也不相信这能保证会产生一个点。勾股的概率会增加)?


抱歉,我在阅读方面有困难。

"如果你计算了5分钟并返回,那么下一次调用时的成交量(tick数)将是+1。在实时图表中,如果你计算5分钟,那么你将错过5分钟的刻度线,而在M1上将形成几个新的柱子。"


非常感谢您的回答。

 
RaptorUK:
我没有说没有使用sleep()的逻辑理由,有很多,我说没有理由期望sleep()在策略测试器中起作用。 它在策略测试器图表 运行的指标中是否起作用,我不知道,也许它起作用。它在策略测试器中运行的EA中起作用吗,据我所知,不起作用。

西蒙。

"可以让在策略测试器中 运行的EA暂停吗? 是的,可以。"

你能不能就你在测试器中用来 "暂停 "EA的这个方法表达你的想法?


谢谢你

 
  1. EA从start()返回给测试者。测试人员创建下一个tick并调用start()。如果EA没有返回,就没有下一个tick。start()需要多长时间才能返回并不重要。当它返回的时候,下一个tick就会被创建。
  2. 在测试器中,你不能在EA中暂停或睡眠。你可以在EA从开始返回后以编程方式 按下暂停按钮来暂停测试器。
 

威廉。

那么,在EA中,一个新刻度线会调用start()函数,是吗?

我的问题是,"除了新刻度线,你知道有什么其他方式可以调用start()函数吗?可能有一个一致的重复性动作来替代对Start()的调用?"

(我在想,有没有一种方法可以持续跟踪不依赖于刻度的秒数)


"......下一个tick是在它出现时创建的。"

我相信你想写的是,"在创建一个新的tick时,Start()被执行";)


所以,你说在测试器中,EA不能暂停或睡眠,是吗?


我会查看你提供的链接,但同时,你能不能解释一下在被测试的EA从开始返回后,"按下暂停按钮,暂停测试器 "的方法?

当在测试器中运行时,这种方法是否可以模拟EA在真实账户上 "实时 "暂停一段决定性时间的表现?


我知道测试器有局限性,必须使用 "变通方法 "来模拟 "实时 "性能。


非常感谢威廉。


另外,你是否介意我直接称呼你为威尔?这将为我节省每条信息的时间。你的电话。

我喜欢你的EA拥有的一个功能,这就是:"我想在周末(周五收市)前关闭所有订单 ,以防止市场在周末出现缺口时,通过SL来防止损失。"

(高兴地拍手。)哈哈哈!;)通过在你的EA中添加这一功能,你减少了不必要的损失,但这与我目前试图做的不同。目前,我正试图持续跟踪秒数,而不需要用刻度来更新秒数。我希望有一种不同的方法来更新Start()函数,明白吗?


谢谢你

 
WhooDoo22:

目前,我正试图持续跟踪时间的秒数,而不需要用刻度来更新秒数。我希望有一种不同的方法来更新Start()函数,明白吗?

我怀疑你想做的是一个有缺陷的解决方案,因为缺乏理解。 如果价格在30秒内没有变化,你为什么需要知道从一秒到下一秒的时间? 当价格变化时,你会得到一个刻度。

澄清一下WHRoeder 所说的,所有的ticks都是在策略测试器开始调用/执行它们之前创建的,它们被保存在一个.fxt文件中。fxt文件,ST调用第一个tick,这反过来导致start()被执行,下一个tick不会被调用/使用,直到start()执行完毕,理解这一点非常重要。只有当start()执行完毕,下一个tick才会被使用,这样EA才能再次调用start()。 当ST全速运行时,start()的运行速度控制着ST的速度,所以一个非常简单的start()函数会让ST运行得非常快,一个复杂的start()函数会导致ST运行得更慢。

在现场/演示的情况下,如果start()函数非常复杂,需要很长的时间来运行,也许是几十分之一秒,有可能在start()函数完成之前,下一个tick就到了,在这种情况下,tick将被错过,不会导致start()被调用......这种情况不可能发生在ST。

 
WhooDoo22:

西蒙。

"可以让在策略测试器中运行的EA暂停吗? 是的,可以。"

你能不能就你在测试器中用来 "暂停 "EA的这个方法表达你的想法?

当然可以,这不是很优雅,所以我不建议任何人使用它。 我使用了一个GlobalVariable,通过脚本设置和取消设置,当ST中的EA看到GlobalVariable被设置时,它将坐在一个循环中,不断检查GlobalVariable是否被取消设置,当脚本取消设置GlobalVariable时,EA退出循环,它的start()函数 可以终止。
 
WhooDoo22:

"你需要哪一个,为什么?"- 西蒙

我想把e'm这两个词放在一起使用,因为它们是相辅相成的。- 内森

TimeSeconds(datetime time)需要在其大括号内放置一个变量。TimeCurrent()被放在这些大括号内,这给我提供了可行的解决方案。我曾经这样做过,但不明白为什么返回的时间值会出现跳过和暂停的情况(由于缺乏有效的刻度线/刻度)。

假设你有2个事件,这些事件相隔10秒,那么对于这2个事件,TimeSeconds(datetime time) 返回的值会有什么区别
 
RaptorUK:

我怀疑你所做的是由于缺乏理解而导致的有缺陷的解决方案。 如果价格在30秒内没有变化,为什么你需要知道从一秒到下一秒的时间呢? 当价格变化时,你会得到一个刻度。

澄清一下WHRoeder 所说的,所有的ticks都是在策略测试器开始调用/执行它们之前创建的,它们被保存在一个.fxt文件中。fxt文件,ST调用第一个tick,这反过来导致start()被执行,下一个tick不会被调用/使用,直到start()执行完毕,理解这一点非常重要。只有当start()执行完毕,下一个tick才会被使用,这样EA才能再次调用start()。 当ST全速运行时,start()的运行速度控制着ST的速度,所以一个非常简单的start()函数会让ST运行得非常快,一个复杂的start()函数会导致ST运行得更慢。

在现场/演示的情况下,如果start()函数非常复杂,需要很长的时间来运行,也许是几十分之一秒,有可能在start()函数完成之前,下一个tick就到了,在这种情况下,tick将被错过,不会导致start()被调用......这在ST上不可能发生。

西蒙。

我怀疑你想做的是一个有缺陷的解决方案,因为缺乏理解。 如果价格在30秒内没有变化,你为什么需要知道从一秒到下一秒的时间? 当价格变化时,你会得到一个tick。

我承认我确实缺乏理解,这就是为什么我在MQL4论坛上讨论这个话题。我希望在价格变化时保存价格(我明白如何做到这一点)。此外,我也明白如何在一个实时/模拟图表上使用Sleep(),每秒钟持续保存价格。我的目标是。我希望持续追踪秒数(不根据创建的点位追踪秒数),最多不超过一分钟,然后将追踪的秒数重置为零。我明白为什么我希望完成这个目标。原因是,我需要在测试器中测试一个EA,在测试时不能使用Sleep()。该怎么做对吗?收集选择。

那就详细说说吧。)

给EA编码一个定时器(可用于测试器)。这个定时器从0-30开始计数,或从30-0开始计数。当这个时间在向上/向下计数时,我有一个单独的矢量跟踪价格行动(一个非常大的矢量)。

我的条件是这样的。

如果价格走 x个点(在0-30或30-0秒内),作出决定。

如果价格没有 上涨x点(0-30或30-0秒内),ArrayInitialize()。


你对这个西蒙怎么说?


谢谢你。