转载自
基于数据挖掘框架下的策略公式生成器 - Kulolo的文章 - 知乎
https://zhuanlan.zhihu.com/p/711602814
普通CTA策略或者择时策略的决策过程,本来就可以简化为一颗颗决策树…….
而研发CTA策略的过程,本质上也就是寻找/建立一颗颗决策树的过程。
算法原理:
设立目标函数:夏普率/收益风险比/收益率/复合算法
思想:用数据挖掘的手段,替代人工迭代CTA的过程。
前期准备:1,算子公式池,穷举自己或他人的交易经验,将各类价量指标的公式跟使用方式列出来,数量越多,可行解的空间越大,挖掘效果也越好。
2,设定公式组合框架,其实就是如何从这边算子公式中,组合成完整的交易流程。这里也是跟据交易者的个人交易经验来设定,本文只以最简单的‘与或非’组合为例。
原理:运用改进过的Gplearn框架,将公式算子简化到(-1,0,1)状态,通过遗传规划算法让其随机组合、遗传、编译、迭代,遗传算法的适应度为如收益风险比之类的。
开仓变量准备:
技术指标-ROC、RSI、MACD、CCI、EMA、WR、KDJ、MOM、CMO、DMA、SAR、OBV、
DMI、ABO、ADX、TRIX、CMF、MFI、Stochastic Oscillator……..
通道-布林通道、海龟通道、开盘区间、肯特纳通道、斐波那契通道、ADX通道、伍尔夫通道………
变量用法:
>、<、>阈值、<阈值、突破上轨、突破下轨………….
逻辑判断:
与、或、非、是/否
状态:
空仓/持仓、亏损/盈利、持仓周期数、入场价
止盈止损:
盈利/亏损x%、盈利/亏损x*ATR、价格低于/高于y周期最高/最低价、价格高于/低于形态点位
仓位管理:
价值等权、ATR等权、波动率等权
公式组合框架设计
如,算法生成公式demo1:
and(open_signal_keltner_100, and(open_signal_CCI_100,open_signal_bias_250))
vol_amount_atr
or(or(close_signal_bias_150, close_signal_v_factor_150),stop_signal_3%)
公式解读:
开多条件:clsoe上穿 keltner上轨 且 CCI>100 且 bias>5%
开空条件:clsoe下穿keltner下轨 且 CCI<-100 且 bias<-5%
开仓量:value*0.01/ATR
平多条件:bias<-5% or close< v_factor_up
平空条件:bias>5% or close> v_factor_dm
止损条件:开仓价亏损3%
止盈条件:无
依此类推:
Demo2:
and(or(and(open_signal_boll_second_200, open_signal_boll_dul_150), open_signal_boll_250), not(and(open_signal_mfi_percent_250, open_signal_macd_200)));
vol_amount_bod;
or(or(close_signal_p_score_250,and(yes(close_signal_high_mean_250), close_signal_v_factor_250)) ,stop_signal_2atr);
Demo3:
or(not(or(yes(open_signal_bias_150), open_signal_resistance_200)), and(open_signal_boll_wma_250, open_signal_ma_slope_200));
vol_amount_bod;
or(and(not(close_signal_single_ema_150), yes(close_signal_single_t3_250)), stop_signal_open10);
发布于 2024-07-29 18:18・IP 属地广东
数据挖掘
量化交易与策略
赞同 167 条评论
分享
喜欢收藏申请转载
写下你的评论...
7 条评论
默认
最新
持元
这和决策树有什么区别吗,不能把这个流程优化到决策树上面吗
22 小时前 · 中国香港
回复喜欢
Kulolo
作者
没区别,一些CTA策略就是可以简化成决策树,决策树可以通过算法批量迭代来生成,那同样的,CTA策略也可以
20 小时前 · 广东
回复喜欢
恐龙宝宝
体量大了之后不能单纯用-1-0-1的方法决定持仓,很多时候都是动态的
07-30 · 上海
回复喜欢
Kulolo
作者
是的,简单的CTA用(-1,0,1)作为各个公式的信号进行组合可以,复杂CTA策略结构这些是不够的
07-30 · 广东
回复喜欢
秋叶予
我做过类似的研究,似乎难点还是怎么进行仓位管理
07-30 · 安徽
回复喜欢
唐士翔
大佬,不太懂遗传算法gplearn怎么实现开仓条件量平仓条件的筛选和组合
07-29 · 北京
回复喜欢
Kulolo
作者
最简单的做法,就是先让这些条件简化到(-1,0,1)状态里,这样子Gplearn进行组合的时候就能够从(-1,0,1)这些状态里得到交易信号了;复杂的做法,需要对Gplearn算法本身进行大量改进,这个工程量就很大了