MetaTrader 5策略测试器:缺陷,缺陷,改进建议 - 页 16

 
fxsaber:
如果这些是正确的公式


测试员对这些数字的计算方式非常不同。我在这些公式和测试器所显示的结果中有着惊人的差异(除了利润)。

我建议我们弄清楚这个问题的真相。困难在于MT5到底认为什么是有利可图的交易。

const double Profit = OrderProfit() + OrderCommission() + OrderSwap();

删除一个,或同时删除 两个,并进行比较。

或者在这里(如果上面没有帮助)删除"="

if (Profit >= 0)
 
Slava:

我们现在讨论的是什么?在测试/优化中禁用代理或允许角色使用?

如果有两个问题,我们也许应该讨论并解决这两个问题。还是不可能?

1.为什么在优化完成后会出现代理商的停用。

2.停止向测试器自动添加字符的原因是什么?

 
Artyom Trishkin:

删除一个,或同时删除 两个,并进行比较。

或者在这里(如果上面没有帮助)删除"="。

这就是MT5的运作方式

double ProfitPlus = 0;  // Профит неотрицательных закрытых позиций.
double ProfitMinus = 0; // Профит отрицательных закрытых позиций.

int AmountPlus = 0;  // Количество неотрицательных закрытых позиций.
int AmountMinus = 0; // Количество отрицательных закрытых позиций.

for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
  {
    const double Profit = OrderProfit()+ (OrderCommission() / 2) + OrderSwap();
    
    if (Profit >= 0)
    {
      ProfitPlus += Profit;
      AmountPlus++;
    }
    else
    {
      ProfitMinus += Profit;
      AmountMinus++;
    }      

    ProfitMinus += OrderCommission() / 2;
  }

const double PF = ProfitMinus ? -ProfitPlus / ProfitMinus : DBL_MAX; // Профит-фактор.
const double Profit = ProfitPlus + ProfitMinus;                      // Профит

也就是说,在MT5中,你可以关闭一个头寸 并获得损失(开仓前的余额小于关闭后的余额)。但在这种情况下,MT5测试仪(终端没有检查)会认为这个交易是盈利的。


例如,MT5_PF = 1.89,MT4_PF = 2.01。

 
fxsaber:
如果这些是正确的公式


测试员对这些数字的计算方式非常不同。我在这些公式和测试器所显示的结果中有着惊人的差异(除了利润)。

我提议把它说清楚。困难在于MT5认为什么是有利可图的交易。

为什么这里有一个const修改器?

const double Profit = OrderProfit() + OrderCommission() + OrderSwap();

当这个变量离开范围时,它可能会被重新初始化...我认为,不需要用 "const"。


如果我们删除OrderCommission() + OrderSwap() ?- 我们谈论的是交易的利润,而不是佣金?

SZZ:作为一种选择,测试者可以与余额一起工作,如果订单被关闭,余额已经改变,与旧的余额进行比较,一般来说,我不能猜测....,我没有找到来源,但有一篇文章https://www.mql5.com/ru/articles/4226,有同样的利润计算,但我还没有读过。

Пользовательский тестер стратегий на основе быстрых математических вычислений
Пользовательский тестер стратегий на основе быстрых математических вычислений
  • www.mql5.com
Тестер стратегий, предоставляемый MetaTrader 5, имеет мощный функционал для решения разнообразных задач. С его помощью можно тестировать как сложные стратегии торговли корзинами инструментов, так и одиночные стратегии с простыми правилами входов и выходов. Однако такой обширный функционал нам пригождается далеко не всегда. Часто нам просто...
 
Igor Makanu:

为什么这里有一个const修改器?

你需要在循环的所有迭代中计算 Profit 变量 ,尽管有可能当这个变量离开范围时,它将被重新初始化......。 我认为,你不需要const。

它将被重新创造。那里的一切都很正确。

如果我删除OrderCommission() + OrderSwap()怎么办?- 我们谈论的是交易的利润,而不是佣金?

以上是MT5的公式。这在计算剥头皮的TS的PF时造成了严重的扭曲。而且,怎么可能是PF取决于平台呢?它必须是毫不含糊的。

 
zevs1980:
这个问题在早期的构建分支中已经被我提出来了。它从未被修复过。找到了我的拐杖。我禁用了一些代理(在我的例子中是10个中的3个),并在0次迭代后启用它们,一切都很顺利。虽然有时,一些代理确实在这个过程中停止了,但很少,解决算法是一样的。

这是一个遗憾,但手动转向不是一个选项。我有自动优化功能

 
KENT3004:

如果有两个问题,也许这两个问题都应该被讨论和解决。还是说这是不可能的?

1.为什么代理人在优化后会被断开连接。

2.停止向测试器自动添加字符的原因是什么?

1.请看测试员的日志,都在那里。

2.它已经被修复了。但在你有一个带有修复功能的构建之前,你可以使用拖放(我们没有讨论为什么停止字符添加,我们讨论的是在这些条件下你仍然可以进行测试)

 
fxsaber:

我在每个自定义符号上交替地运行单次运行。从某一点上看,在测试器中不可能看到它们的路径,但它们仍然可以通过从市场观察中拖放来选择。然后过了一会儿,这也不行了:你既可以选择正常的符号,也可以只选择一个自定义符号。其他的是不可能的。下面的动画显示了这种情况。


转载并更正。谢谢你。
 
Slava:

1.请看测试员的日志,都在那里。

2.它已经被修复了。但在你有一个带有修复功能的构建之前,你可以使用拖放(我们没有讨论为什么停止字符添加,我们讨论的是在这些条件下你仍然可以进行测试)

谢谢你的及时性和有益的建议。我敢于 "报告 "一个微小但不方便的细节。启动/停止按钮覆盖了工具/测试器按钮,这使你做额外的动作。虽然不是很方便。
 
Edgar:
在遗传优化过程中,我使用了很多的参数。只要变体的数量变得如此之大,以至于在科学符号中显示出来(6.8768769e+21),优化就会在0代之后用一半的代理(8个中的4个)继续。在日志中没有提到这一点。优化本身运行良好,但在半负荷的情况下,时间是原来的两倍。

这种行为并不总是重现,这可能是它没有被纠正的原因。昨天我有,今天我没有。也许这也取决于EA的情况。我有它的框架。ex5的大小约为0.5 Mb。我有8Gb的内存。英特尔i7,4核心,8线程。离婚了。无监督的。