说明

上次提到了基于传统的趋势法构建一组基础信号的方法,并做了简单的交易测算。本次计划对方法和测算做一下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左右。所以我突然在想,过去或许有更多人想研究量化,但是如果不考虑模型,到这一步就止步了:做了额外的劳动,但是不输不赢,感觉是白费劲啊

当然叠加上模型之后,盈亏比一定会大幅改善(减少订单量,提高成功率),所以即使是这种情况,也是可以盈利的。

python模拟砍价ai python模拟交易_算法

S600_L2400_SCA10_LCA1_CO240

既然考虑手续费之后会大幅拉低盈利,那么在“多”与“精”之前,我们可以看看选则更好的交易周期。之前的LK3(长线K3)包含了很多中性空间(只要LK3>0),所以我们进行微调,增加长线信心的阈值为1。

可以看到,即使扣除了交易成本,我们仍然可以达到1.25的盈亏比(体量比上面略有减少,净利1200左右),年化11%(这种策略同时减少了资金占用,所以反而可以提高年化利率)。

考虑上模型增益,年化20%应该是可以达到的。

可以看出来,信号发生的机制只要进行合理的调整(人类逻辑容易理解的变化),就能进入盈利空间。之后就是找到一个合适的基准:既具有基础的赢率,同时又有足够的体量。模型有时候需要更多的候选订单,但是当信号集产生更多订单时又会拉低基础赢率,所以要找到一个(大约)合适的中间点。

python模拟砍价ai python模拟交易_python_02

S600_L2400_SCA5_LCA0_CO240

当尝试降低SK3(短线信心)时,产生了更多的订单,但不出意外,这些订单的质量更差,在考虑了交易成本之后甚至会亏损。

python模拟砍价ai python模拟交易_算法_03

S600_L2400_SCA5_LCA1_CO240

即使增加LK3的约束,也仅仅是挽回败局。

python模拟砍价ai python模拟交易_开发语言_04


总体上来说,认为必然盈利的推断过程如下:

  • 1 找到一个稳定信号源(长期、稳定的有益信号)
  • 2 这个信号源产生的原始信号对可以使得天然盈亏比 > 1.3
  • 3 通过模型,可以进一步增强盈亏比,达到1.6~2之间。

模型可以进一步增强效果的推论如下:

  • 1 假设通过信号源参数就可以直接改善信号源质量(已证明)
  • 2 上述过程相当于使用简单维度建模来提升模型效果
  • 3 简单维度属于低阶模型,即使使用LR这样的线性模型,也容易构造高维度模型
  • 4 高维度模型比低纬度模型(或规则)可以高出一个量级的效果(经验)
  • 5 净增益提升约是原来的两倍少一点

还有一种更高阶的组合方法,可以几乎无损的增加投资的效益(有点像倍频)。

其依据是:

  • 1 选择的优质交易数量较少,占据的资金使用周期也较短
  • 2 可以找到至少一种,或者若干种(对冲子)交易,其周期与某种交易恰好互补
  • 3 这样即使单种策略的年化低于20%,而两者相加,仍然可以使资金的年化>20%。

2 在Step2计算什么

按之前的规划,Step2会输出买卖信号

python模拟砍价ai python模拟交易_开发语言_05


具体来说,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

这几天正好在跌,我就看看这个信号

python模拟砍价ai python模拟交易_数据_06


买入的质量虽然不咋地,但是卖出的时机还是很优秀,避过今天的大跌。

python模拟砍价ai python模拟交易_python模拟砍价ai_07


之前1-31逃的慢了点,但还是对的

python模拟砍价ai python模拟交易_数据_08

这两张图体现了LK的作用,如果没有LK的限制,那么就会在3-6~3-9这段时间内买入(因为SK达到10,两次)

python模拟砍价ai python模拟交易_python_09