亲爱的朋友们,我建议在这里创建一个MT版本的档案。有时,在更新时可能会发生意想不到的错误,你必须回滚到以前的版本...
我现在需要建立2007年。你有吗?请分享它。
这里有一个人,他收藏了很多东西。但在我的印象中,他的带有MT版本档案链接的帖子有时会被删除,这样进度就不会被拖慢。))
新版MetaTrader 5 build 2007:经济日历,MQL5-程序作为一种服务
Andrey Khatimlianskii, 2019.03.15 23:03
我搬到了另一个谷歌账户。这里 有新的链接。
如果你需要其他建设,请说出来,有很多。
他们删除旧版本是正确的。
你需要正确地编写程序。不要忽视警告。初始化变量,尽可能不使用全局变量。避免在代码中出现潜在的不安全片段。
我 在严格模式下的数万行代码中 没有一个警告。我的代码库项目中,有一半的项目即使没有严格的警告,也有警告,尽管其中甚至没有一千多个字符串。然后你开始抱怨 "在旧版本中一切正常,在新版本中却停止工作"......
这是火星车计划吗?你能用这么多行来描述什么?
这里有一个人正在建立一个收藏。但在我的记忆中,他的带有MT版档案链接的帖子有时会被删除,这样才不会拖累进度。))
谢谢你。下载了它。
该链接杀死了我在这里的链接。
开发者建议只从经过验证的来源下载。
如果你想冒我的风险,就给我打电话。
你应该在门户或档案中保持工作稳定,并有意识地升级到测试构建。
我现在在华盛顿,可能有2007年的建设。
我没有在测试构建中更新。但现在我将保存)))。
他们删除旧版本是正确的。
你必须正确地编写程序。不要忽视警告。初始化变量,尽可能不使用全局变量。避免在代码中出现潜在的不安全片段。
我有几万行的代码,在严格模式下完全没有警告。我的代码库中有一半的假人在没有严格的情况下也会出现警告,尽管它们甚至不包含一千多条字符串。然后你开始抱怨 "在旧版本中一切正常,在新版本中却停止工作"......
乔治,阅读我在该主题中的最后一个帖子。我已经找到了问题的根源。这不在我的代码中。
谢谢你。已下载。
我不更新到测试的。但现在我将保存)))。
乔治,阅读我在该主题中的最后一个帖子。我找到了问题的根源。这不在我的代码中。
我读了。
问题的根源在于,开发商和你对待这种情况的态度略有不同。粗略的说,他们 "互相不理解"。 这就是为什么我坚持认为代码必须总是非常简单和清晰,排除任何可能存在歧义的地方。
我记得,在MT5刚刚起步的时候--我很惊讶,人们使用没有初始化的变量,认为它们会包含零。
人们不禁想起了一个笑话。
匹诺曹给了匹诺曹三个苹果。他吃了两个。还剩下多少个苹果?
程序员N1:
- 你不知道有多少。没有人知道他以前有多少个苹果!
道理:清除初始变量。
程序员N2
- 不清楚有多少人。也许在马尔维纳赠送苹果的时候,皮埃罗也在吃苹果?
道理:不要使用全局变量。
程序员N3
- 不知道有多少。它没有说匹诺曹正好吃了苹果,它说他吃了两个,但不清楚他吃了什么。 此外,鉴于 "匹诺曹 "这个名字没有下降--匹诺曹和皮诺曹是不同的变量。
道理:注意你的句法
谢谢你。已下载。
我不更新到测试的。但现在我将保存)))。
乔治,阅读我在该主题中的最后一个帖子。我找到了问题的根源。我的代码中没有这一条。
而问题的来源是 "没有阅读文档",而不是新的构建。所以你说这不是你的代码,是在狡辩。
1:
Sergey Tabolin, 2019.06.16 00:17
我找到了这种愤怒的原因。
事情是这样的。
//--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) TesterStop(); if(period_HMA7C == 0 && move_stop) TesterStop(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) TesterStop(); if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0) TesterStop(); if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0) TesterStop(); if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700)) TesterStop(); check_init = true; } //*/
事实证明,在TesterStop()之后,OnTester()在新版本中也被启动,尽管它不应该被启动。
自然,没有准备数据,这就是我们得到的结果。
它是MT2085的错。
2:
然后我将再次 "尝试"。然后,如果你的尝试不成功,那么又是MQ的错?
我不记得了,但我认为有一个特殊的功能,可以跳过 "坏 "通行证。而就在你想尝试的时候,开发者并不建议使用--再次--如果我没记错的话。
但在我的信息中最重要的是--在把责任推给开发者之前,你必须首先阅读文档,在论坛上询问解决方案,然后,只有在真正发现错误的情况下,才写一份带有最小代码的错误报告来重现它。这将是严重的,但除此之外...
而问题的来源是 "没有阅读文档",而不是新的构建。所以你说代码不是你的,这是在撒谎。
1:
2:
然后你又继续 "尝试"...然后如果你的尝试不成功,那么又是MQ的错?
我不记得了,但我认为有一个特殊的功能,可以跳过 "坏 "通行证。而就在你想尝试的时候,开发者并不建议使用--再次--如果我的记忆没有错的话。
但在我的信息中最重要的是--在你把责任推给开发者之前,你应该首先阅读文档,在论坛上询问解决方案,然后才是,而且只有在真正发现错误的情况下--写一份错误报告,用最少的代码重现它。这将是严重的,但除此之外...
Artyom,问题出在新的建设中!
告诉我,在这里,你写的代码是没有错误的。它在很长一段时间内都有效。而突然间,在新的MT发布后,它崩溃了,出现了一堆错误。这是谁的错?考虑到许多人都知道,文件并不总是能跟上创新的步伐,就更应该如此。
因此,我的代码没有错误地工作。
我用了这个。
用什么来代替INIT_PARAMETERS_INCORRECT?找到了解决方案)))
谢尔盖-塔波林, 2019.04.24 08:48
在该主题中找到了我自己问题的答案。
事实证明这很简单。将无效参数的检查从OnInit()移到OnTick()就可以了。
bool check_init = false; // флаг проверки входных параметров .......... //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) ExpertRemove(); if(period_HMA7C == 0 && move_stop) ExpertRemove(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) ExpertRemove(); check_init = true; } //*/ //+------------------------------------------------------------------+
检查了!它是有效的。遗传学不会失败))))
现在,在出现问题后,我又增加了几行。
bool check_init = false; // флаг проверки входных параметров bool tester_stop = true; // флаг проверки выхода по TesterStop ............. void OnTick() { //--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) TesterStop(); if(period_HMA7C == 0 && move_stop) TesterStop(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) TesterStop(); if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0) TesterStop(); if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0) TesterStop(); if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700)) { Print("Результат в OnTester() должен быть -99999999999.99"); TesterStop(); } check_init = true; tester_stop = false; } //*/ ......... }
Вызов TesterStop() считается нормальным завершением тестирования, и поэтому будет вызвана функция OnTester() с отдачей тестеру стратегий всей накопленной торговой статистики и значения критерия оптимизации.
根据推理,应该是立即执行转移,而不执行其他的代码。对吗?
事实上,TesterStop()根本就没有停止测试。
double OnTester() { if(tester_stop) return(-99999999999.99); double equity_dd_percent = TesterStatistics(STAT_EQUITY_DDREL_PERCENT); if(equity_dd_percent > 0.0) { equity_dd_percent = 100.0 / equity_dd_percent; } else equity_dd_percent = 1.0; double param = 0.0; double profit = TesterStatistics(STAT_PROFIT); double stability = 0.0; int balance_arr_size = ArraySize(balance_arr) - 1; int alpha_size = balance_arr_size - 1; int beta_size = alpha_size - 1; double trade2time = ratioTrades2Time(TesterStatistics(STAT_TRADES)); double max_balance = balance_arr[0]; //+------------------- if(balance_arr[balance_arr_size-1] - balance_arr[0] == 0.0) return(-99999999999.88); //+-------------------
我输入了一个 "无效 "的参数,得到了这个结果。
LL 0 11:30:20.816 Core 1 2016.10.01 00:00:00 Советник получил MAGIC = 153128312914612747. QN 0 11:30:20.816 Core 1 2016.10.03 00:00:00 Результат в OnTester() должен быть -99999999999.99 NJ 3 11:30:20.816 Core 1 TesterStop() called on 0% of testing interval CD 0 11:30:20.816 Core 1 final balance 10000.00 USD QF 0 11:30:20.816 Core 1 OnTester result -99999999999.88
所以这是一个错误!而这正是MQ的错误。
我认为TesterStop()和ExpertRemove() 如果不能立即将控制权传递给OnTester(),应该返回true。它将允许以某种方式作出反应,例如,像这样。
bool tester_stop = false; // флаг проверки выхода по TesterStop ....... void OnTick() { //--- пропустить бесполезные проходы оптимизации if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(недопустимый параметр) tester_stop = TesterStop(); ........ } double OnTester() { if(tester_stop) return(-99999999999.99);
在这种情况下,我们可以准确地得到逻辑上预期的结果,而不是手舞足蹈地预见理论上可能因停止测试而发生的所有错误。
Artyom,问题出在新的建设中!
告诉我,在这里,你写的代码是没有错误的。它在很长一段时间内都有效。而突然间,在新的MT发布后,它崩溃了,出现了一堆错误。这是谁的错?考虑到许多人都知道,文件并不总是能跟上创新的步伐,就更应该如此。
因此,我的代码没有错误地工作。
我用的是这个。
现在,在遇到一些问题后,我又增加了几行。
聪明的是,转移应该是立即进行的,而不执行其余的代码。对吗?
但事实上,TesterStop()根本就没有停止测试。
我输入了一个 "无效 "的参数,得到了这个结果。
所以这是一个错误!而这正是MQ的错误。
我认为TesterStop()和ExpertRemove() 如果不能立即将控制权传递给OnTester(),应该返回true。在这种情况下,将有可能以某种方式作出反应,例如像这样。
在这种情况下,将有可能准确地得到逻辑上预期的结果,而不是手舞足蹈地预见理论上可能因停止测试而发生的所有错误。
你所有的计算和测试都不应该给我看,也不应该带着一定的讽刺和刺激,而是干脆利落地在"错误、bug、问题"主题中展示。当然,除非你想被听到并得到答案。
ZS.而且最好忘掉 "bug"、"fault"、"用手鼓跳舞 "和其他bug报告中的 "shitcodes "这样的词--所有的人,你不是没有错误。而那些 "精神病 "的言论看起来并不严肃,也没有什么建设性。
如果你有这种感觉,我很抱歉。当然,有刺激性,但当问题突然出现时,怎么可能没有刺激性呢?和讽刺...- 我对那些我认为是明显的漏洞感到困惑。))
至于有关的主题,在我看来,问题很容易在那里 "迷失"。所以我认为一个有具体问题的新话题更有效?或者说不是吗?
在任何情况下,你作为一个版主,如果你自己确信存在一些问题,就可以相当程度上引起开发者的注意 ))
我将尝试在那里添加一个问题...
亲爱的朋友们,我建议在这里创建一个MT版本的档案。有时,在更新时可能会发生意想不到的错误,你必须回滚到以前的版本...
我现在需要建立2007年。你有吗?请分享一下吧。