这主要是一个理论问题(但总是欢迎示例代码)。
真正的问题是:如何正确编写 EA 的“框架”来测试来自多个自定义指标的多个场景?
我(忙)构建 EA 的方式不是非常专注于一种策略,而是会尝试“测试”多种策略并“挑选”最合适的一种。
所以我创建了一些自定义指标,它们都返回一个“状态数据”数组。
例如我有以下指标:
- 交叉移动平均线指标,当平均线被交叉时给出一个信号,以及当前位置从 MA 移动的百分比。
- 布林带指标,返回波段之间的“空间”,并在波段开始“挤压”时发出信号。
- 多时间框架“方向/趋势”指标(是向上或向下移动的某个时间框架)。如果时间框架方向发生变化,它将返回当前方向并发出信号。
- ADX 指标,用于检查“小规模”运动和选择最佳买入/卖出点。
我可以写一个巨大的场景,但我认为它可以做得更好。因为如果,假设所有时间框架都在下降(下降趋势),你可以有一个特殊的场景来处理大量的下降运动。但是,如果没有当前的趋势,那么不同的情景将最适合。
所以,我觉得最好制作多个场景(仍然在 1 个 EA 中)。首先收集所有自定义指标数据,然后每个场景使用该数据来计算其内容。然后它会返回一个“分数”并挑选出最好的分数。
但是我怎样才能以最好的“概述”方式布局代码呢?
我应该为每个场景创建一个类并给他们一个带有数据的手动“打勾”吗?只是将它们分成多个文件和#include
它们?
或者也许是事件驱动的?创建的类只是继续运行、计算和设置某些指标事件的侦听器并以自己的方式进行(那太棒了)
任何想法都非常受欢迎!
更新2016-01-11,12:00
我现在没有时间创建 UML .. 但我现在执行以下操作 ->
Order
(Order
是单例,只是执行订单请求)Indicator
(每个指标扩展的基类)Strategy
(每个策略扩展的基类)IndicatorFetcher
(保存所有指标,在每个刻度上运行)StrategyRunner
(保存所有策略,在每个刻度上运行,之后IndicatorFetcher
)
每个Strategy
实例都可以访问IndicatorFetcher
(持有包含所有指标数据的概览,并使用Order
单例执行交易)。