说明
上次提到了基于传统的趋势法构建一组基础信号的方法,并做了简单的交易测算。本次计划对方法和测算做一下Review,同时明确接下来基于ADBS(Step2)进行承接时需要计算的数据。
内容
1 方法回顾
传统的趋势方法(SMA-LMA)采用“短线上升且突破长线买入”,以及“长线下降且短线下穿长线卖出”的方式构成一对买卖信号。
在我的实测中,这种方法效果非常差(不是不好,是很差)。我分析下来,主要的原因在于我使用分钟数据,而书上似乎用的是天数据。长时隙的数据显然噪声会更少一些,可能这个是造成差异的主要原因。但无论如何,在尝试使用不同的周期进行搭配时,基于信号的交易结果仍然差异很大,我觉得这个是不能接受的(不稳定)。
于是我做了一版方案改进。
改进的方案仍然基于短期-长期趋势的变化,但是使用“拟合斜率”作为一个关键计算。
- 1 交易信号的买卖主要基于短周期
- 2 长线信号用于筛选上升或者非下降周期
计算:
- 1 根据周期筛选出收盘价的序列
- 2 拟合这个序列的斜率(K)
- 3 对斜率进行一阶差分(K2)
- 4 对一阶差分与0比较的布尔值进行周期10(n)的累加(K3)
- 5 K3 > n 是买进, K3 < 0 则卖出
- 6 长线K3 < 0 不交易
一句话归纳:依据短线的趋势买入和卖出,只要长线不反对。
S600_L2400_K3
短线的K3
10.0 15294
-10.0 13627
-2.0 9497
-1.0 9380
0.0 9369
1.0 9184
-3.0 8920
2.0 8784
-4.0 8377
3.0 7665
-5.0 6889
4.0 6489
-6.0 6116
5.0 5888
-7.0 5388
6.0 4813
9.0 4594
7.0 4583
8.0 4577
-8.0 4571
-9.0 4268
长线K3
0.0 58604
1.0 38034
-1.0 35347
-2.0 10308
2.0 9749
3.0 1926
-3.0 1598
-4.0 399
-5.0 260
4.0 160
-6.0 88
这些K3信号的分析非常关键, K3,我又称之为“冷静时间”。从噪声的角度上看,数据容易出现噪声,形象的可以理解为误报;单个的误报是常见的,连续的误报是少见的。所以统计若果若干个周期(冷静时间),当数据达到一定程度时,就不再认为是误报。如果从信心的角度看,也是类似的。单个的信号信心不足,频繁的发出信号时,信心就充足了。
短线的K3波动会更大,如果降低短线K3的冷静时间,那么订单的交易就会变多;同理,如果提高长线K3的冷静时间,那么订单就会变少。
基于上面的简单统计,我们可以在信号的参数条件与结果之间形成一种类似线性的效果,很容易理解。
以下是几种参数产生的结果。
S600_L2400_SCA10_LCA0_CO240
短周期采取600, 长周期采取2400, 短线K3采取10,长线K3采取0,冷却时间240(一个交易日)。
产生的订单数不算少,在不考虑交易成本的情况下盈亏比达到了1.3。考虑了交易成本后,基本就是1左右。所以我突然在想,过去或许有更多人想研究量化,但是如果不考虑模型,到这一步就止步了:做了额外的劳动,但是不输不赢,感觉是白费劲啊。
当然叠加上模型之后,盈亏比一定会大幅改善(减少订单量,提高成功率),所以即使是这种情况,也是可以盈利的。
S600_L2400_SCA10_LCA1_CO240
既然考虑手续费之后会大幅拉低盈利,那么在“多”与“精”之前,我们可以看看选则更好的交易周期。之前的LK3(长线K3)包含了很多中性空间(只要LK3>0),所以我们进行微调,增加长线信心的阈值为1。
可以看到,即使扣除了交易成本,我们仍然可以达到1.25的盈亏比(体量比上面略有减少,净利1200左右),年化11%(这种策略同时减少了资金占用,所以反而可以提高年化利率)。
考虑上模型增益,年化20%应该是可以达到的。
可以看出来,信号发生的机制只要进行合理的调整(人类逻辑容易理解的变化),就能进入盈利空间。之后就是找到一个合适的基准:既具有基础的赢率,同时又有足够的体量。模型有时候需要更多的候选订单,但是当信号集产生更多订单时又会拉低基础赢率,所以要找到一个(大约)合适的中间点。
S600_L2400_SCA5_LCA0_CO240
当尝试降低SK3(短线信心)时,产生了更多的订单,但不出意外,这些订单的质量更差,在考虑了交易成本之后甚至会亏损。
S600_L2400_SCA5_LCA1_CO240
即使增加LK3的约束,也仅仅是挽回败局。
总体上来说,认为必然盈利的推断过程如下:
- 1 找到一个稳定信号源(长期、稳定的有益信号)
- 2 这个信号源产生的原始信号对可以使得天然盈亏比 > 1.3
- 3 通过模型,可以进一步增强盈亏比,达到1.6~2之间。
模型可以进一步增强效果的推论如下:
- 1 假设通过信号源参数就可以直接改善信号源质量(已证明)
- 2 上述过程相当于使用简单维度建模来提升模型效果
- 3 简单维度属于低阶模型,即使使用LR这样的线性模型,也容易构造高维度模型
- 4 高维度模型比低纬度模型(或规则)可以高出一个量级的效果(经验)
- 5 净增益提升约是原来的两倍少一点
还有一种更高阶的组合方法,可以几乎无损的增加投资的效益(有点像倍频)。
其依据是:
- 1 选择的优质交易数量较少,占据的资金使用周期也较短
- 2 可以找到至少一种,或者若干种(对冲子)交易,其周期与某种交易恰好互补
- 3 这样即使单种策略的年化低于20%,而两者相加,仍然可以使资金的年化>20%。
2 在Step2计算什么
按之前的规划,Step2会输出买卖信号
具体来说,Step2要准备若干周期的K1,K2,K3,并且给出一些默认的买卖信号,这些可以在对参数进行进一步实验后给出。
所以分为两步走:
- 1 计算各周期的K1~K3
- 2 通过分析和测算,给出一组适应性最好的信号
在结构上,Step2至少会使用两个任务通道,以适应多个版本的迭代。
新的ABDS叫apifunc_database_model_ABD_MyQuantBase_Step2Signals
快速建立ABDS的过程:
- 1 拷贝config_base.py 并修改其中的配置
- 2 拷贝init_projects_base.py
- 3 初始化及测试:同步(git)项目后,执行容器挂载与初始化
- 4 在itables里设置项目监控表
Others
这几天正好在跌,我就看看这个信号
买入的质量虽然不咋地,但是卖出的时机还是很优秀,避过今天的大跌。
之前1-31逃的慢了点,但还是对的
这两张图体现了LK的作用,如果没有LK的限制,那么就会在3-6~3-9这段时间内买入(因为SK达到10,两次)