错误、漏洞、问题 - 页 2437 1...243024312432243324342435243624372438243924402441244224432444...3184 新评论 Slava 2019.04.18 07:44 #24361 Alexey Navoykov:那么OnTesterPass是在没有帧存在的情况下被调用的? 那么这是一个明显的错误。 这个事件意味着接收一个帧,而不是一个通道的结束。 所有帧应该在OnTesterDeinit事件被调用之前到达OnTesterPass。这是正常的健康逻辑。除非,我们再说一次,我们谈论的是一个被迫的测试中断。当至少有一个帧到达时,OnTesterPass被调用。它可能有一包框架。因此,OnTesterPass应该在一个循环中接受帧,而不是一次一帧。但如果 "在最后一次之后--从未",OnTesterPass就不会被调用。 优化在最后一个结果出现时停止。帧可能较晚到达,特别是在一帧中传递大量数据时,或在一次传递中同时传递几个帧时。因此,我们需要在优化结束后启动的OnTesterDeinit中安排对剩余帧的接收--也是在循环中。 这是一个正常的健康逻辑。 我一再举例说明,接收帧的情况正是在OnTesterDeinit,而不仅仅是在OnTesterPass。它是对不同类型的复杂框架的接收 fxsaber 2019.04.18 08:06 #24362 Slava:如果一次通过数个帧,则为 "不"。我试过一次,没有成功。只有一个FrameAdd 起作用。 Alexey Navoykov 2019.04.18 08:07 #24363 Slava:当最后一个结果到达时,优化工作就会停止。帧可能会较晚到达,特别是在一帧中传输了大量数据或一次传输了几个帧的情况下。因此,有必要在优化结束后启动的OnTesterDeinit中安排剩余帧的接收--也是在循环中。如果帧可以稍后到达,那么就不能保证它们也会在OnTesterDeinit中一次到达吗? 这意味着我们必须做一个等待循环,那么我们应该等待多长时间? 我之前认为情况是这样的:OnTesterPass只对那些在上一次OnTesterPass结束后到达的帧进行调用,但是如果在OnTesterPass进行时有一个新的帧到达,具体来说就是在最后一次调用FrameNext 后,在函数完成前,这个帧将被挂起,直到产生事件的新帧到达。这就是为什么需要OnTesterDeinit来接收这些休眠帧。 fxsaber 2019.04.18 08:09 #24364 Alexey Navoykov:如果帧可以晚一点到达,那么就不能保证它们在OnTesterDeinit中立即可用? 也就是说,你必须做一个等待周期? 那么你应该等待多长时间?我之前认为情况是这样的:OnTesterPass只对那些在上一次OnTesterPass结束后到达的帧进行调用,但如果在OnTesterPass进行时有新的帧到达,特别是在最后一次调用FrameNext后和函数完成前,这个帧会一直悬空,直到产生事件的新帧到达。这就是为什么需要OnTesterDeinit来拾取这些休眠的框架。FrameNext是一个哑巴的mqd文件读取,没有其他东西。FrameFirst 是FileSeek。 Slava 2019.04.18 11:01 #24365 fxsaber:试过一次,没有效果。只有一个FrameAdd起作用。我在这里展示了一个例子。 fxsaber 2019.04.18 11:06 #24366 Slava: 我在这里展示了一个例子。谢谢你。 PS FrameFirst在这里是多余的 关于交易、自动交易系统和策略测试的论坛 在时间安排上测试策略,并将结果自动替换给专家顾问 斯拉瓦, 2013.04.10 15:04 下面是一个例子。在OnTester中,专家顾问发送两个框架--交易的历史 和它正在进行的历史。在OnTesterDeinit中,它接收并处理所有的第一和第二类型的框架void OnTesterDeinit() { string name; ulong pass; long id; double value; int handle,i; BalanceInTime balance[]; MqlRates rates[]; //--- FrameFirst(); FrameFilter("",1); while(FrameNext(pass,name,id,value,balance)) { handle=FileOpen(name+"_"+string(id)+"_"+IntegerToString(pass,5,'0')+".txt",FILE_WRITE|FILE_CSV|FILE_ANSI); if(handle!=INVALID_HANDLE) { for(i=0; i<ArraySize(balance); i++) FileWrite(handle,balance[i].date,EnumToString(balance[i].entry),DoubleToString(balance[i].price,5),DoubleToString(balance[i].balance,2)); FileClose(handle); } } //--- FrameFirst(); FrameFilter("",2); while(FrameNext(pass,name,id,value,rates)) { handle=FileOpen(name+"_"+string(id)+"_"+IntegerToString(pass,5,'0')+".txt",FILE_WRITE|FILE_CSV|FILE_ANSI); if(handle!=INVALID_HANDLE) { for(i=0; i<ArraySize(rates); i++) FileWrite(handle,rates[i].time,DoubleToString(rates[i].open,5),DoubleToString(rates[i].high,5),DoubleToString(rates[i].low,5),DoubleToString(rates[i].close,5),string(rates[i].tick_volume)); FileClose(handle); } } //--- } Slava 2019.04.18 11:52 #24367 fxsaber: PS FrameFirst在这里是多余的。 不,不是多余的--纯粹是方法学上的。一个完整的代码块,没有任何默认值 这段代码是从更复杂的代码中扯出来的。传送了四种不同的框架类型。同时,我们也阅读了OnTesterPass。下面是 "精炼 "的代码。 fxsaber 2019.04.18 12:00 #24368 Slava:不,不是多余的--纯粹是方法学上的。一个完整的代码块,没有任何默认值这段代码是从更复杂的代码中扯出来的。传送了四种不同的框架类型。同时,我们也阅读了OnTesterPass。这里我们介绍一下 "精炼 "的代码。如果在FrameFilter 之前调用,关于FrameFirst总是多余的。 不建议通过一个以上的框架传输数据。 Slava 2019.04.18 12:11 #24369 fxsaber:如果在FrameFilter之前调用,关于FrameFirst总是多余的。 不建议通过一个以上的框架传递数据。1.是的,它可能是多余的。 2. 在OnTesterPass中读取一种类型的框架,在OnTesterDeinit中完成。其他框架在OnTesterDeinit中被读取。 这种发送和接收几种类型的帧的可能性使我们能够修复一些在测试器中难以重现的错误。只有在与某些参考值存在差异时,才会传送帧。 fxsaber 2019.04.18 12:11 #24370 Slava:你会打开opt-format吗? 1...243024312432243324342435243624372438243924402441244224432444...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
那么OnTesterPass是在没有帧存在的情况下被调用的? 那么这是一个明显的错误。 这个事件意味着接收一个帧,而不是一个通道的结束。
所有帧应该在OnTesterDeinit事件被调用之前到达OnTesterPass。这是正常的健康逻辑。除非,我们再说一次,我们谈论的是一个被迫的测试中断。
当至少有一个帧到达时,OnTesterPass被调用。它可能有一包框架。因此,OnTesterPass应该在一个循环中接受帧,而不是一次一帧。但如果 "在最后一次之后--从未",OnTesterPass就不会被调用。
优化在最后一个结果出现时停止。帧可能较晚到达,特别是在一帧中传递大量数据时,或在一次传递中同时传递几个帧时。因此,我们需要在优化结束后启动的OnTesterDeinit中安排对剩余帧的接收--也是在循环中。
这是一个正常的健康逻辑。
我一再举例说明,接收帧的情况正是在OnTesterDeinit,而不仅仅是在OnTesterPass。它是对不同类型的复杂框架的接收
如果一次通过数个帧,则为 "不"。
我试过一次,没有成功。只有一个FrameAdd 起作用。
当最后一个结果到达时,优化工作就会停止。帧可能会较晚到达,特别是在一帧中传输了大量数据或一次传输了几个帧的情况下。因此,有必要在优化结束后启动的OnTesterDeinit中安排剩余帧的接收--也是在循环中。
如果帧可以稍后到达,那么就不能保证它们也会在OnTesterDeinit中一次到达吗? 这意味着我们必须做一个等待循环,那么我们应该等待多长时间?
我之前认为情况是这样的:OnTesterPass只对那些在上一次OnTesterPass结束后到达的帧进行调用,但是如果在OnTesterPass进行时有一个新的帧到达,具体来说就是在最后一次调用FrameNext 后,在函数完成前,这个帧将被挂起,直到产生事件的新帧到达。这就是为什么需要OnTesterDeinit来接收这些休眠帧。
如果帧可以晚一点到达,那么就不能保证它们在OnTesterDeinit中立即可用? 也就是说,你必须做一个等待周期? 那么你应该等待多长时间?
我之前认为情况是这样的:OnTesterPass只对那些在上一次OnTesterPass结束后到达的帧进行调用,但如果在OnTesterPass进行时有新的帧到达,特别是在最后一次调用FrameNext后和函数完成前,这个帧会一直悬空,直到产生事件的新帧到达。这就是为什么需要OnTesterDeinit来拾取这些休眠的框架。
FrameNext是一个哑巴的mqd文件读取,没有其他东西。
FrameFirst 是FileSeek。试过一次,没有效果。只有一个FrameAdd起作用。
我在这里展示了一个例子。
谢谢你。
PS FrameFirst在这里是多余的
关于交易、自动交易系统和策略测试的论坛
在时间安排上测试策略,并将结果自动替换给专家顾问
斯拉瓦, 2013.04.10 15:04
下面是一个例子。在OnTester中,专家顾问发送两个框架--交易的历史 和它正在进行的历史。
在OnTesterDeinit中,它接收并处理所有的第一和第二类型的框架
PS FrameFirst在这里是多余的。
不,不是多余的--纯粹是方法学上的。一个完整的代码块,没有任何默认值
这段代码是从更复杂的代码中扯出来的。传送了四种不同的框架类型。同时,我们也阅读了OnTesterPass。下面是 "精炼 "的代码。
不,不是多余的--纯粹是方法学上的。一个完整的代码块,没有任何默认值
这段代码是从更复杂的代码中扯出来的。传送了四种不同的框架类型。同时,我们也阅读了OnTesterPass。这里我们介绍一下 "精炼 "的代码。
如果在FrameFilter 之前调用,关于FrameFirst总是多余的。
不建议通过一个以上的框架传输数据。
如果在FrameFilter之前调用,关于FrameFirst总是多余的。
不建议通过一个以上的框架传递数据。
1.是的,它可能是多余的。
2. 在OnTesterPass中读取一种类型的框架,在OnTesterDeinit中完成。其他框架在OnTesterDeinit中被读取。
这种发送和接收几种类型的帧的可能性使我们能够修复一些在测试器中难以重现的错误。只有在与某些参考值存在差异时,才会传送帧。
你会打开opt-format吗?