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

 

在测试器中,限价订单在设置/修改勾选时不被检查是否接受。

正因为如此,当限价单以当前价格 下达时,它不会被执行,这不符合市场规则。


针对这种情况,测试器是否会有任何变化?

 

该测试器已经在12个流中运行了27个小时。这是一张奇怪的记忆图片。你可以看到,该应用程序并没有占用多少内存。


特别是代理商的地位比免费的还要高。



还有一个实例已经在1个线程中完成了工作。交换内存被分配。


关闭正在运行的实例。

马上就有26GB的空间释放出来。我认为线程在分配状态下持有内存?进程资源管理器就显示了这一点。每个实例都持有4GB(除了一个)。也就是说,有一个人已经退出了(应该是12个)。


问题是,即使没有使用私有内存,当交换文件满了之后,同样的Chrome就开始发誓说内存不足。同时,内存有一半空闲...


第二个问题是这样的。为什么在遗传优化过程中,线程会处于空闲状态,等待一个线程完成?通过预测计算和检测等待预期线程完成的不同结果来杀死它们,这有意义吗?或者尝试再次 "摇出 "一些参数,寻找其他解决方案?

PS。将特工置于禁用状态,然后再次激活--他们不再吃内存。但在我看来,磁盘缓存也会在启动时重新创建?
 

在资金短缺事件中,挂单的取消时间有一个错误。

有零时间(在截图中突出显示),而不是取消时间。

而且状态是放置而不是取消的。

 

现在来分析一下突出显示的这块的情况


你必须移动光标,记住弹出的日期,打开运行图,走到交易历史中需要的地方,双击表格中的相关行。


这些都可以通过双击上图中的点来代替吗?

 
fxsaber:

这些都可以通过双击上图中的点来代替吗?

我认为这很好,是一个非常需要的 "功能"--我支持它!!。

 

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

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

fxsaber, 2019.10.14 23:32

在MT5中,你可以关闭一个头寸 并获得损失(开仓前的余额小于关闭后的余额)。但同时MT5测试仪(终端未检查)会认为这个交易是盈利的。

我画了一个专家顾问来玩

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (!OrderSelect(0, SELECT_BY_POS))
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
  else if ((OrderProfit() > -OrderCommission()) &&
           (OrderProfit() < -OrderCommission() * 2) &&
           OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0))
    ExpertRemove();
}


在交易服务器上的策略测试器中运行它,那里有佣金(我在这个服务器上运行它:ForexTimeFXTM-Demo01)。

结果是在图片上。


在截图中,你可以看到有一个BUY头寸,关闭时完全亏损--初始余额已经减少。


而这正是左栏中强调的内容--专家顾问遭受了损失。

现在我们来看看第二栏中强调的内容。那里的一切都很好,有积极的数学预期和100%的盈利交易


因此,事实证明,专家顾问是亏损的,而指标看起来是盈利的。因此,PF的计算是有偏差的。


ZZY在一分钟内写了一个例子。我一直在想,如果用MQL5或SB来写,应该需要多长时间。谁不偷懒 - 试试吧。

 

在测试器中,"概览 "选项卡有一个非常方便的以前的操作列表,并有一个互动的过滤器。

在这个列表中,显示的是不带路径的EA名称。正因为如此,当有两个名字相同的EA,但在不同的文件夹中时,列表中不会显示(也无法过滤)哪个EA对应于哪个条目。


有没有可能在这个以前的行动列表中输出EA的名称和它们在专家文件夹中的路径?

我不使用指标,但可能对它们做同样的事是合理的。

 
测试员在计算交易数量时考虑到CloseBy交易的两边。因此,不正确的交易数量、数学期望值等。
 
EA
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

int OnInit()
{
  return(OrderCloseBy(OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0), OrderSend(_Symbol, OP_SELL, 
2, Bid, 0, 0, 0)));
}


该报告只调出了零。虽然交易正在进行中。


为什么=1也不清楚。它不存在于源代码中。

 
fxsaber:
EA


该报告只调出了零。虽然交易正在进行中。


为什么OnTester == 1也不清楚。它不存在于源代码中。

你确定它是在OnInit交易吗?那你打算如何用你的代码来使用GetLastError?还有一个问题。你确定函数参数 的计算顺序吗?