错误、漏洞、问题 - 页 1989 1...198219831984198519861987198819891990199119921993199419951996...3184 新评论 fxsaber 2017.09.05 08:12 #19881 测试器的性能高度依赖于贸易服务器。测试仪设置。网罗美元,只启用Core1。专家顾问#include <TesterBenchmark.mqh> // https://www.mql5.com/ru/code/18804 input int Interval = 60; input int AmountLastDeals = 5; input double Lots = 1; double CorrectLot( const double Lot ) { static const double StepVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP); static const double MaxVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX); static const double MinVol = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN); const double Vol = StepVol * (int)(Lot / StepVol + 0.5); return((Vol < MinVol) ? MinVol : ((Vol > MaxVol) ? MaxVol : Vol)); } void OnTick() { if (!PositionGetTicket(0)) { if (HistorySelect(0, TimeCurrent())) { const int Total = HistoryDealsTotal() - 1; double SumProfit = 0; double SumLots = 0; for (int i = Total, Count = 0; (i >= 0) && (Count < AmountLastDeals); i--) { const ulong Ticket = HistoryDealGetTicket(i); if ((ENUM_DEAL_ENTRY)HistoryDealGetInteger(Ticket, DEAL_ENTRY) == DEAL_ENTRY_OUT) { SumProfit += HistoryDealGetDouble(Ticket, DEAL_PROFIT) * (AmountLastDeals - Count); SumLots += HistoryDealGetDouble(Ticket, DEAL_VOLUME) * (AmountLastDeals - Count); Count++; } } SumLots /= (AmountLastDeals * (1 + AmountLastDeals)) >> 1; MqlTradeRequest Request = {0}; Request.action = TRADE_ACTION_DEAL; Request.symbol = _Symbol; Request.type = ((Total >= 0) && ((ENUM_DEAL_TYPE)HistoryDealGetInteger(HistoryDealGetTicket(Total), DEAL_TYPE) == DEAL_TYPE_SELL)) ? ORDER_TYPE_SELL : ORDER_TYPE_BUY;; Request.volume = (SumProfit >= 0) ? Lots : CorrectLot(SumLots); Request.price = SymbolInfoDouble(Request.symbol, (Request.type == ORDER_TYPE_BUY) ? SYMBOL_ASK : SYMBOL_BID); // MqlTradeCheckResult CheckResult; // if (OrderCheck(Request, CheckResult)) { MqlTradeResult Result; const bool AntiWarning = OrderSend(Request, Result); } } } else if (TimeCurrent() - PositionGetInteger(POSITION_TIME) >= Interval) { MqlTradeRequest Request = {0}; MqlTradeResult Result; Request.action = TRADE_ACTION_DEAL; Request.position = PositionGetInteger(POSITION_TICKET); Request.symbol = PositionGetString(POSITION_SYMBOL); Request.type = (ENUM_ORDER_TYPE)(1 - PositionGetInteger(POSITION_TYPE)); Request.volume = PositionGetDouble(POSITION_VOLUME); Request.price = PositionGetDouble(POSITION_PRICE_CURRENT); const bool AntiWarning = OrderSend(Request, Result); } }FIBOGroup-MT5服务器 上的结果------ OnTesterInit i = 0 Pass = 0 OnTester = 7.994 s.: Count = 15925124, 1992134.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 1 Pass = 1 OnTester = 7.831 s.: Count = 15925124, 2033600.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 2 Pass = 2 OnTester = 7.811 s.: Count = 15925124, 2038807.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 3 Pass = 3 OnTester = 7.825 s.: Count = 15925124, 2035159.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 4 Pass = 4 OnTester = 7.831 s.: Count = 15925124, 2033600.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 5 Pass = 5 OnTester = 7.832 s.: Count = 15925124, 2033340.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 iMin = 2 Results[iMin] = 7.811 s. iMax = 0 Results[iMax] = 7.994 s. Amount = 6 Mean = 7.854 s. - 90.11% OnTesterDeinit ------ Interval = 52.296 s., Count = 0, 0.0 unit/secMetaQuotes-Demo 的结果OnTesterInit i = 0 Pass = 0 OnTester = 1.497 s.: Count = 2456073, 1640663.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 1 Pass = 1 OnTester = 1.494 s.: Count = 2456073, 1643957.8 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 2 Pass = 2 OnTester = 1.496 s.: Count = 2456073, 1641760.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 3 Pass = 3 OnTester = 1.493 s.: Count = 2456073, 1645058.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 4 Pass = 4 OnTester = 1.499 s.: Count = 2456073, 1638474.3 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 i = 5 Pass = 5 OnTester = 1.498 s.: Count = 2456073, 1639568.1 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1653 iMin = 3 Results[iMin] = 1.493 s. iMax = 4 Results[iMax] = 1.499 s. Amount = 6 Mean = 1.496 s. - 49.11% OnTesterDeinit ------ Interval = 18.279 s., Count = 0, 0.0 unit/secFIBOGroup-MT5服务器 上的ticks总量是15925124,测试仪的性能是2038807.3单位/秒。MetaQuotes-Demo 有2456073点,测试器性能1645058.9单位/秒。也就是说,在第二台服务器上,测试者的性能下降了20%。但是,测试人员不应该依赖贸易服务器!因为他们的工作是由他们自己完成的。可重复使用,没有任何问题。 Alexey Viktorov 2017.09.05 08:16 #19882 Alexey Kozitsyn: 这并没有什么帮助:)好吧,不需要猜测,我们只需要SD的答案。这样的拐杖无论如何是不应该被接受的!很奇怪。我在发帖前已经探究了大约10分钟,所以我定期通过切换图表周期 和将指标参数中的true改为false来继续探究。我不觉得有什么问题。当然是拐杖,这就是为什么我说这是一个临时解决方案。 Vitaly Muzichenko 2017.09.05 08:22 #19883 Alexey Kozitsyn: 没用的:)好吧,为什么猜测,我们需要从SD得到答案。这样的拐杖无论如何都不应该被接受!它的工作没有任何问题。当然,先定义输出缓冲区,然后再定义颜色缓冲区 是有意义的,这就是现在所做的。 [删除] 2017.09.05 08:23 #19884 Vitaly Muzichenko:它的工作没有任何问题。当然,先定义输出缓冲区,然后再定义颜色缓冲区是有意义的,现在就是这样做的。 维塔利,请先找到问题的根源。当设置开启时,一切工作正常。当设置被禁用时,问题开始出现。 [删除] 2017.09.05 08:28 #19885 Alexey Viktorov: 你的版本更稳定,甚至几乎总是能正确工作(如果你不切换TF的话)。但如果你把它换掉,然后再换回来...这又是一个混乱的局面。 Evgeny Chernyshev 2017.09.05 08:32 #19886 fxsaber: (string)NormalizeDouble(0.99872, 5) - 非常长的结果。没有错误,有些十进制的数字不能准确地用双数表示 下面的代码给出了一个正常的结果DoubleToString(0.99872, 5) fxsaber 2017.09.05 08:33 #19887 Evgeny Chernyshev:没有错误,一些十进制符号的数字不能准确地用双数表示 下面的代码给你一个正常的结果 DoubleToString(0.99872, 5)明白了,谢谢! Alexey Viktorov 2017.09.05 08:38 #19888 Alexey Kozitsyn: 维塔利,请先找到问题的根源。当设置开启时,一切工作正常。该问题在关闭设置时开始出现。阿列克谢,我很抱歉,我错过了另一个更正。 //if(inpUseArrows) // Если отображать нужно // { SetPlotParametersArrow(0,0,bufArrowUp,false,"test up",EMPTY,clrLime,233,10); SetPlotParametersArrow(1,1,bufArrowDn,false,"test dn",EMPTY,clrRed,234,-10); // } 在那个帖子中也做了更正,用红色标记。 [删除] 2017.09.05 08:45 #19889 Alexey Viktorov:阿列克谢,对不起,我错过了另一个更正。在那个帖子中也做了更正,用红色标记。这就是问题的关键!原来你只是把它关掉了,所有图形系列下的所有数组都被使用。但重点恰恰是让用户能够在必要时禁用一些图形系列。如果有必要的话--打开它! Alexey Viktorov 2017.09.05 08:53 #19890 Alexey Kozitsyn:这就是它的意义所在!所以,你只要把它关掉,所有图形系列的所有数组都被使用。但重点恰恰是让用户在必要时可以选择禁用部分图表系列。如果有必要的话--把它打开!好吧,图形系列的数量是在代码的开头定义的,当你切换TF时,它不会改变。我担心在mql5中它是无敌的。然而,还有一个技巧可以用来排除数据窗口 中的图形系列的显示 PlotIndexSetString(plotIndex, PLOT_LABEL, NULL);它在mql4中工作。我必须检查它在mql5中是如何工作的,我还没有测试过它。不...It does not work in mql5.它在mql5中工作。 PlotIndexSetInteger(0, PLOT_SHOW_DATA, true); PlotIndexSetInteger(1, PLOT_SHOW_DATA, true); if(!inpUseArrows) // Если отображать не нужно { PlotIndexSetInteger(0, PLOT_SHOW_DATA, false); PlotIndexSetInteger(1, PLOT_SHOW_DATA, false); } 1...198219831984198519861987198819891990199119921993199419951996...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
测试器的性能高度依赖于贸易服务器。
测试仪设置。
网罗美元,只启用Core1。
专家顾问
FIBOGroup-MT5服务器 上的结果
MetaQuotes-Demo 的结果
FIBOGroup-MT5服务器 上的ticks总量是15925124,测试仪的性能是2038807.3单位/秒。MetaQuotes-Demo 有2456073点,测试器性能1645058.9单位/秒。也就是说,在第二台服务器上,测试者的性能下降了20%。但是,测试人员不应该依赖贸易服务器!因为他们的工作是由他们自己完成的。
可重复使用,没有任何问题。
这并没有什么帮助:)好吧,不需要猜测,我们只需要SD的答案。这样的拐杖无论如何是不应该被接受的!
很奇怪。我在发帖前已经探究了大约10分钟,所以我定期通过切换图表周期 和将指标参数中的true改为false来继续探究。我不觉得有什么问题。当然是拐杖,这就是为什么我说这是一个临时解决方案。
没用的:)好吧,为什么猜测,我们需要从SD得到答案。这样的拐杖无论如何都不应该被接受!
它的工作没有任何问题。当然,先定义输出缓冲区,然后再定义颜色缓冲区 是有意义的,这就是现在所做的。
它的工作没有任何问题。当然,先定义输出缓冲区,然后再定义颜色缓冲区是有意义的,现在就是这样做的。
(string)NormalizeDouble(0.99872, 5) - 非常长的结果。
没有错误,有些十进制的数字不能准确地用双数表示
下面的代码给出了一个正常的结果
DoubleToString(0.99872, 5)
没有错误,一些十进制符号的数字不能准确地用双数表示
下面的代码给你一个正常的结果
DoubleToString(0.99872, 5)
明白了,谢谢!
维塔利,请先找到问题的根源。当设置开启时,一切工作正常。该问题在关闭设置时开始出现。
阿列克谢,我很抱歉,我错过了另一个更正。
在那个帖子中也做了更正,用红色标记。
阿列克谢,对不起,我错过了另一个更正。
在那个帖子中也做了更正,用红色标记。
这就是问题的关键!原来你只是把它关掉了,所有图形系列下的所有数组都被使用。但重点恰恰是让用户能够在必要时禁用一些图形系列。如果有必要的话--打开它!
这就是它的意义所在!所以,你只要把它关掉,所有图形系列的所有数组都被使用。但重点恰恰是让用户在必要时可以选择禁用部分图表系列。如果有必要的话--把它打开!
好吧,图形系列的数量是在代码的开头定义的,当你切换TF时,它不会改变。
我担心在mql5中它是无敌的。
然而,还有一个技巧可以用来排除数据窗口 中的图形系列的显示
PlotIndexSetString(plotIndex, PLOT_LABEL, NULL);
它在mql4中工作。我必须检查它在mql5中是如何工作的,我还没有测试过它。
不...It does not work in mql5.它在mql5中工作。