如果技术指标工作非常慢,并且我希望将其包含在EA中(使用iCustom()
),那么是否有一些"包装"可以根据特定指标输入将指标结果缓存到文件中吗?
这样,下次我使用相同的参数集进行回测时,我可以获得更好的速度,因为"包装"可以从文件中读取结果,而不是重新计算指标的结果。
答案 0 :(得分:2)
我听说一些开发人员为满足他们的需求而这样做是为了加快回测,但据我所知,目前还没有公开的解决方案。 如果我必须解决这个问题,我会创建一个包含两个字段的类(日期时间和指示符值,或指标的N个缓冲区),以及一个类似于CArrayObj.mqh的集合类,但可以选择应用二进制搜索,或者开始从特定索引中寻找元素,而不是从数组的最开始。
答案 1 :(得分:0)
在MT4的早期,这并不像现在这么残酷。
这意味着,“预缓存”值对磁盘没有任何好处。
全部,是 ALL,自定义指标,正在MetaTrader4终端中使用(无论是直接在GUI中,还是间接地,通过模板或通过iCustom()
来电调用;在策略测试程序中通过.tpl
+ iCustom()
)所有这些分享单个线程......
因此 - 从 tester.tpl
模板中删除所有确实所有非核心指标,并将其保存为“空白”,以避免此类任何部分非核心处理。
接下来,尽可能重新设计自定义指标,以避免任何CPU操作和操作。 MEM分配,这是不必要的。
我记得一个带有确实深度卷积的Custom Indicatore设计,可以重新设计,以便只保留一个带有必要更新的三角形稀疏矩阵,这提高了指标处理的速度超过10,000 x ,所以代码修订就是这样。
所以,而是运行一个单独的MetaTrader4终端,仅用于BackTesting,而不是因为在CustomIndicator-solo-Thread的共享使用中的交通堵塞拥塞下由于数据处理的不可压缩性而需要等待很多小时没有任何时间安排可以改善。
进入Devil区域后,通常会将StrategyTester MT4的PRIO旋转到O / S工具中的“RealTime PRIO”。
甚至可以将这个MT4进程“锁定”到某个CPU核心上,并使用相邻的CPU核心AFFINITY设置所有其他进程,这样这两个不同的进程组就不会跳转到其他组的CPU核心。 很难,但如果将性能挤到最前沿,这是必须的。