ta4j2
上期讲了我在造一个类似ta4j的轮子,这次讲讲造轮子过程中的一些体会。
关于回调的使用场景
在我的实现中,回调是贯穿始终的,我之前使用这种模式的次数不多,稍微总结一下。
- 粗粒度的K线可以由细粒度的K线回调触发更新,非常方便回测实现。
- 指标可以由K线或者其他指标的回调触发更新,保证数据的实时更新。
- 当K线触发完所有指标的更新后,会触发Rule的回调,进行Rule的判断。
- 规则判断后如果为True,可触发规则结果的回调,比如发消息、更新趋势、信号等。
多依赖指标的回调问题
某些指标的计算依赖多个其他指标的计算结果,于是更新这个指标的回调就有了路径问题,比如MACD。
可以看看PairIndicatorSeries这个源码,构造时会进行指标的回调血缘分析。
多依赖指标的回调,并不需要人为设定,根据分析结果可自动选择最佳的触发时机(最近的共同父节点)。
指标重用问题
如果两个指标都使用了某一条K线的MA(20)作为构成的一部分,那么这个MA(20)是可以共用的。
这样可以极大的减少计算量和内存开销,最典型的就是取K线的Close,极为常用。
指标在某一时刻无论重复计算多少次,其结果都是一样的。当然重复计算我们也想尽量避免,
在回调中提供了一个sequence,可以辅助去重。
指标的构造和相同功能节点的自动复用,目前这块设计是有问题的,还需要重构打磨。
规则重用问题
上面提到的指标是可以复用的,但规则绝对不可以,在Manager中有是否使用过的检查。
Rule在某一时刻重复判断,其结果可能是不一样的,比如翻转规则、连续N次等。
举几个复杂规则的例子,有同时判断2条指标的规则,比如快慢指标的上穿判断;
还有由两个规则叠加起来组成的规则集,比如逻辑与运算。规则比指标要略微复杂一点。
订单与仓位
订单的止盈止损也是个复杂问题,比如简单的止盈止损、追踪止盈止损等。
在波动幅度较大的标的物上,追踪止盈止损并不能起到很好的效果,需要谨慎使用。
控制盈利率与仓位比重是相对合理的做法,这样才能相对安全的达到收益最大化。
在回测中,经常有人会为了收益最大化而过度调节止盈止损,基本上都是过拟合效果。
最后
ta4j的话题就到此为止了,我个人认为简单的量化交易策略是不可能挣钱的,
但是通过程序化的方式,做个辅助交易助手还是非常现实可行的。