MT版本存档。

 

亲爱的朋友们,我建议在这里创建一个MT版本的档案。有时,在更新时可能会发生意想不到的错误,你必须回滚到以前的版本...

我现在需要建立2007年。你有吗?请分享一下吧。

 
Сергей Таболин:

亲爱的朋友们,我建议在这里创建一个MT版本的档案。有时,在更新时可能会发生意想不到的错误,你必须回滚到以前的版本...

我现在需要建立2007年。你有吗?请分享它。

这里有一个人,他收藏了很多东西。但在我的印象中,他的带有MT版本档案链接的帖子有时会被删除,这样进度就不会被拖慢。))

关于交易、自动交易系统和交易策略测试的论坛

新版MetaTrader 5 build 2007:经济日历,MQL5-程序作为一种服务

Andrey Khatimlianskii, 2019.03.15 23:03

我搬到了另一个谷歌账户。这里 有新的链接。

如果你需要其他建设,请说出来,有很多。

 


我的链接在这里被杀死了。

开发者建议只从经过验证的来源下载

如果你想在我的建筑中冒险,就给我打电话

你应该在门户或档案中保持工作稳定,并有意识地升级到测试构建。

你应该非常自觉地更新到最新的版本。

 
Fast235:

我的链接在这里被杀死了。

开发者建议只从经过验证的来源下载

如果你想在我的建筑中冒险,就给我打电话

你应该在门户或档案中保持工作稳定,并有意识地升级到测试构建。

你应该在便携式或存档中保持工作稳定,并在一般情况下注意对测试构建的更新。

他们删除旧版本是正确的。

你必须编写正常的程序。不要忽视警告。初始化变量,尽可能不使用全局变量。避免在代码中出现潜在的危险片段。

我有几万行代码 - 在严格模式下没有一个警告。我有一半的代码库项目即使没有严格的警告,也有警告,尽管它们甚至不包含数千行。然后你开始抱怨 "在旧版本中一切正常,在新版本中却停止工作"......

 
Georgiy Merts:

他们删除旧版本是正确的。

你需要正确地编写程序。不要忽视警告。初始化变量,尽可能不使用全局变量。避免在代码中出现潜在的不安全片段。

在严格模式下的数万行代码中 没有一个警告。我的代码库项目中,有一半的项目即使没有严格的警告,也有警告,尽管其中甚至没有一千多个字符串。然后你开始抱怨 "在旧版本中一切正常,在新版本中却停止工作"......

这是火星车计划吗?你能用这么多行来描述什么?

 
Sergey Basov:

这里有一个人正在建立一个收藏。但在我的记忆中,他的带有MT版档案链接的帖子有时会被删除,这样才不会拖累进度。))

谢谢你。下载了它。

快235

该链接杀死了我在这里的链接。

开发者建议只从经过验证的来源下载。

如果你想冒我的风险,就给我打电话

你应该在门户或档案中保持工作稳定,并有意识地升级到测试构建。

我现在在华盛顿,可能有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:

关于交易、自动交易系统和交易策略测试的论坛

我接下来应该做什么?

Sergey Tabolin, 2019.06.16 09:02

歉意。说明中只是说之后会调用OnTester()。(((

我也要在那里做检查。我将尝试用ExpertRemove()代替它...

然后我将再次 "尝试"。然后,如果你的尝试不成功,那么又是MQ的错?

我不记得了,但我认为有一个特殊的功能,可以跳过 "坏 "通行证。而就在你想尝试的时候,开发者并不建议使用--再次--如果我没记错的话。

但在我的信息中最重要的是--在把责任推给开发者之前,你必须首先阅读文档,在论坛上询问解决方案,然后,只有在真正发现错误的情况下,才写一份带有最小代码的错误报告来重现它。这将是严重的,但除此之外...

 
Artyom Trishkin:

而问题的来源是 "没有阅读文档",而不是新的构建。所以你说代码不是你的,这是在撒谎。

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 "这样的词--所有的人,你不是没有错误。而那些 "精神病 "的言论看起来并不严肃,也没有什么建设性。

 
Artyom Trishkin:

你所有的计算和测试都不应该给我看,也不应该带着一定的讽刺和刺激,而是干脆利落地在"bug,bug,问题"主题中展示。当然,除非你想被听到并得到答案。

如果你有这种感觉,我很抱歉。当然,有刺激性,但当问题突然出现时,怎么可能没有刺激性呢?和讽刺...- 我对那些我认为是明显的漏洞感到困惑。))

至于有关的主题,在我看来,问题很容易在那里 "迷失"。所以我认为一个有具体问题的新话题更有效?或者说不是吗?

在任何情况下,你作为一个版主,如果你自己确信存在一些问题,就可以相当程度上引起开发者的注意 ))

我将尝试在那里添加一个问题...