错误、漏洞、问题 - 页 437 1...430431432433434435436437438439440441442443444...3184 新评论 Victor Kirillin 2011.06.28 19:45 #4361 voix_kas:算是熟能生巧吧。欢迎提出批评。既然可能是要当专家,那么。 bool SetSymbols(string); и:CSymbolList slMain; int OnInit() { if(!slMain.SetSymbols(inWorkSymbols)) return(-1); for (int i = 0; i < slMain.GetSymbolCount(); i++) Print(slMain.GetSymbolName(i)); //--- ok return(0); } [删除] 2011.06.28 21:07 #4362 MetaDriver: 我敢打赌,这是有保证的。至少我一直指望着它,而且问题从未出现过。我明白了,无论如何,这是一个敏感的时刻。UncleVic这倒是真的。但在我看来,这是多余的。#include <CSymbolList.mqh> input int inTimeToRescan = 3600; // Интервал времени для принудительного пересканирования рабочих инструментов, в секундах input string inWorkSymbols = "USDCHF; GBPUSD; EURUSD; USDJPY; USDCAD; AUDUSD; EURGBP; EURAUD; EURCHF; EURJPY; GBPJPY; GBPCHF"; // Рабочие инструменты CSymbolList slMain; int OnInit() { slMain.SetSymbols(inWorkSymbols); return 0; } void OnTick() { static long LastScan = 0; if (!slMain.GetSymbolCount() || ((long)TimeCurrent() - LastScan >= inTimeToRescan)) { Comment("Идентификация рабочих инструментов..."); slMain.SetSymbols(inWorkSymbols); LastScan = (long)TimeCurrent(); return; } static string Information; Information = TimeToString(TimeCurrent(), TIME_DATE|TIME_SECONDS); for (int i = 0; i < slMain.GetSymbolCount(); i++) { if (!SymbolSelect(slMain.GetSymbolName(i), true) || !SymbolIsSynchronized(slMain.GetSymbolName(i))) continue; // StringConcatenate(Information, Information, "\n", slMain.GetSymbolName(i)); } Comment(Information); }正如你所看到的,如果在OnTick的最后一个周期中的工具有错误,将不会有迭代。 Victor Kirillin 2011.06.29 06:50 #4363 voix_kas:我明白了,无论如何,这是一个敏感的时刻。UncleVic这倒是真的。但在我看来,这是多余的。正如你所看到的,如果在最后一个周期的工具中有一个错误,在OnTick中就不会有一个迭代。我不坚持。只是,检查执行的结果是正确的事情。 [删除] 2011.06.29 07:00 #4364 uncleVic:我不是在催促它。仅仅检查执行的结果是正确的事情。 我明白了,总之,谢谢你的建议。 Yedelkin 2011.06.30 18:23 #4365 我发现了这个技巧。如果我运行这个脚本,它会 "挂起"。void OnStart() { Print("Start ",TimeLocal()); Sleep(-1000*2764799); Print("Finish ",TimeLocal()); } 但是,如果同样的三行(代码)首先插入专家顾问的OnInit()函数中,并在测试模式 下启动该EA,结果如下。NS 0 Core 2 14:23:49 2011.01.03 00:00:00 Ye00-01-2Event5.mq5 OnInit: терминал (470), разрешение на торговлю (true), TERMINAL_MAXBARS=10000000, компилятор (470) PD 0 Core 2 14:23:49 2011.01.03 00:00:00 Start 2011.01.03 00:00:00 NP 0 Core 2 14:24:18 2011.01.20 17:02:48 Finish 2011.01.20 17:02:48 II 0 Core 2 14:24:18 2011.01.20 17:02:48 MisFunciones.mqh FileInit: Поиск bin-файла Y.bin 首先,代码以某种方式在测试模式下工作。 第二,(更重要的是),最初几天的测试历史会丢失。因此,在上面的例子中,测试是在2011.01.03开始的(从前两行可以看出),但是测试人员在代码处理后立即向前跳了17天(在这种情况下,这是第2-3行),测试继续进行,没有考虑到这17天。 Renat Fatkhullin 2011.06.30 18:32 #4366 你刚刚发现了一个算术溢出,在 Sleep(-1000*2764799); 导致等待时间为17.5天。 Andrey Dik 2011.06.30 18:42 #4367 Renat: 你刚刚在 中发现了一个算术溢出,并且已经等待了17.5天。 是的,而且它在测试器中工作,因为它忽略了睡眠。 Yedelkin 2011.06.30 18:48 #4368 Renat: 你已经微不足道地发现了一个算术溢出,在 因此,你需要等待17.5天。 我不是在争论 "捕获的溢出 "问题,因为我不知道 :)问题是,这种情况应该由编译器或测试人员通过输出关键错误(或以其他方式)来抑制。不是每个人都会在没有终端警告的情况下对他们的程序如何工作一丝不苟。 问题还表现在,代码被放在OnInit()第一行(即在下载任何历史数据之前)--但由于某些原因,前17.5天的数据被丢失了。 Документация по MQL5: Программы MQL5 / Ошибки выполнения www.mql5.com Программы MQL5 / Ошибки выполнения - Документация по MQL5 Yedelkin 2011.06.30 18:50 #4369 joo: 是的,而且它在测试器中起作用,因为睡眠在其中被忽略了。 你这么肯定Sleep() 被忽略了吗?- 看一下第2行和第3行之间的终端时间差。 Andrey Dik 2011.06.30 18:56 #4370 Yedelkin: 你这么肯定Sleep()被忽略了吗?- 看看第2行和第3行之间终端时间的差异。 也许仅仅是代码中存在 "睡眠"(与没有 "睡眠"相比)就会在某种程度上影响总的执行时间,但 "睡眠 "在测试器中不被计算的事实是肯定的。 1...430431432433434435436437438439440441442443444...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
算是熟能生巧吧。欢迎提出批评。
既然可能是要当专家,那么。
и:
我敢打赌,这是有保证的。至少我一直指望着它,而且问题从未出现过。
我明白了,无论如何,这是一个敏感的时刻。
UncleVic
这倒是真的。但在我看来,这是多余的。
正如你所看到的,如果在OnTick的最后一个周期中的工具有错误,将不会有迭代。
我明白了,无论如何,这是一个敏感的时刻。
UncleVic
这倒是真的。但在我看来,这是多余的。
正如你所看到的,如果在最后一个周期的工具中有一个错误,在OnTick中就不会有一个迭代。
我不坚持。只是,检查执行的结果是正确的事情。
我不是在催促它。仅仅检查执行的结果是正确的事情。
我发现了这个技巧。如果我运行这个脚本,它会 "挂起"。
但是,如果同样的三行(代码)首先插入专家顾问的OnInit()函数中,并在测试模式 下启动该EA,结果如下。
首先,代码以某种方式在测试模式下工作。
第二,(更重要的是),最初几天的测试历史会丢失。因此,在上面的例子中,测试是在2011.01.03开始的(从前两行可以看出),但是测试人员在代码处理后立即向前跳了17天(在这种情况下,这是第2-3行),测试继续进行,没有考虑到这17天。
导致等待时间为17.5天。
你刚刚在 中发现了一个算术溢出,并且已经等待了17.5天。
你已经微不足道地发现了一个算术溢出,在
因此,你需要等待17.5天。
我不是在争论 "捕获的溢出 "问题,因为我不知道 :)问题是,这种情况应该由编译器或测试人员通过输出关键错误(或以其他方式)来抑制。不是每个人都会在没有终端警告的情况下对他们的程序如何工作一丝不苟。
问题还表现在,代码被放在OnInit()第一行(即在下载任何历史数据之前)--但由于某些原因,前17.5天的数据被丢失了。
是的,而且它在测试器中起作用,因为睡眠在其中被忽略了。
你这么肯定Sleep()被忽略了吗?- 看看第2行和第3行之间终端时间的差异。