PLUS会员

《天蝎座0.6》BQ天梯NO.2策略源码讲解

由iquant创建,最终由iquant 被浏览 1110 用户

作者:woshisilvio

策略思路

Alpha因子构成--大部分因子的来源

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

选股思路

我们采用传统量化的选股思路,把条件选股转换成布尔型变量的因子

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

把人工合成的因子传入模型的训练特征,这是传统量化结合AI量化的设计思路。

策略逻辑就是将过去的经验比如选股逻辑转换成算法能识别到的特征,用来进行训练。 通过算法的训练让模型学会分类, 从样本中学习规律,选出短期内强势,拥有爆发力的股票 。追涨买入选股的基本条件为:

  1. 上市公司股票本身基本面不差,roa为正,pe为正
  2. 同时短周期内存在一定的趋势,股票的收益率排名靠前
  3. 资金流指标,主力资金当天显示正流入
  4. 短期很强势,近3个月内有过涨停的迹象。

本文对八类因子进行单因子测试,发现其中四类因子(流入类因子、流出类因子、主力净流入类因子、开盘主力净流入类因子)在选股上存在一定的实用性。

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

参考研报:华泰单因子测试之资金流向因子

特征因子列表

return_5/return_20#43: 5天的收益率/20天的收益率
rank_amount_5#45:最近5日的成交额排名
avg_turn_10#46:平均10天的换手率
market_cap_float_0<28000000000#47:流通市值<280亿
pe_ttm_0>0#48:ttm pe市盈率要大于0
pb_lf_0#49:市净率
sum(mf_net_pct_main_0>0.12,30)>11#50:统计30天内主力流入占比大于12%的天数
fs_roa_ttm_0>5#51:总资产报酬率roa要大于5
fs_cash_ratio_0#52:现金流量
close_0>ts_max(close_0,56)#53:当日收盘价破 56天最高价(创新高)
ta_sma_10_0/ta_sma_30_0#56:   10天的sma线/30天的sma线
ta_sar_0# 58:SAR抛物线指标
swing_volatility_10_0/swing_volatility_60_0 #59:   10天的波动率/60天的波动率
ta_cci_14_0 #60:CCI -14天的指标
rank_return_3  #61:   3天收益率的 排名
mf_net_amount_0>mf_net_amount_1  #62:  判断 当日的资金流入净额>昨日资金流入净额
mf_net_amount_xl_0>mean(mf_net_amount_xl_0, 30)# 64:当天的超大单流入净量>平均30天内的超大单流入净量(30天超大单MA线)
cond4= (close_0-close_1)/close_1 >0.05#  65:当天涨幅>5%
(close_0-close_30)/close_30>1.25#  66:30天内的涨幅大于125%
(close_0-close_5)/close_5>1.16#  67:5天内的涨幅>116%
list_days_0>365#  68:上市天数>365天
ta_bbands_middleband_28_0 #69:布林带28天均线
cond28=sum(price_limit_status_0==3,80)>5  #70:统计80天内 涨停板的次数大于5

特征过滤

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

通过平台的预计算因子,找到了三组指标群,选择他们的多头状态进行传入,同时选出五日均线多头状态。

cond2=ta_dma(close_0, 'long') 
cond7=ta_macd(close_0,'long') 
cond8=ta_ma(close_0,5, derive='long')

其次,我们希望找到的股票形态,最低价不能跌破20日均线。

cond3=low_0 > mean(close_0,20)

因为在股价加速上涨的趋势中,如果出现短期回调,一旦跌破了20日均线,后期反弹的力度就会很弱了,所以将20日MA线作为生命线。

cond3=low_0 > mean(close_0,20)
cond4= (close_0-close_1)/close_1 >0.04
cond5=close_0>open_0
cond6=st_status_0==0

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}CNN算法

选择CNN的原因,是因为在布尔型变量数据中,会发现CNN有更好的表现。 2层cnn神经网络{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

模拟实盘效果

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100} {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100} {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}主要代码

数据标注

数据标注{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

相比于传统直接标注收益率的方法,本次采用了一种特殊的标注方式。**标注中采用未来3天的最高价/未来1天开盘价来作为结算价格。**原因:有些股票的形态是长上影线加阳线实体,这种仙人指路形态的股票,用收盘价是没办法衡量当天上涨的最大弹性空间的。

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100} {w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

数据过滤

我找到资金流数据中关于大单流入净额的数据,筛选出当天流入>800w的股票数据

mf_net_amount_l>8000000 

过滤ST+股票池筛选

cond4 and cond6 and cond7 and cond8 #表示我们要缩小我们训练集的选股范围

#去除ST,同时找到当天均线多头,MACD多头状态,且涨幅大于4%的股票形态

模型调整

{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}{w:100}

滚动序列窗口中的滚动天数 有优化的空间,可以搜索最佳的参数配置。

主函数逻辑

详见视频讲解

优化思路

更换因子

替换掉已经失效的因子,或者拥挤度过高的因子

更换标注

尝试换一些过滤条件,比如近几日资金流入做一些反转类型的策略

更换选股条件

将平常选股的一些逻辑替换到我们的策略中

更换训练时间

将近1-2年的数据添加到我们的训练集,进行重新训练

讲解视频

https://www.bilibili.com/video/BV1Nq4y1b7wx/

策略源码

标签

策略源码Alpha因子
评论
  • 直接克隆的代码,回测效果完全不同 ![{w:100}](/wiki/api/attachments.redirect?id=ec4ea996-227b-4de5-b005-13c2523e0048)
  • 我也是
  • 作者把策略思路和源码都分享出来了,并且也提供 了优化思路。大家可以学习作者的开发策略思路,也可以在此基础上进行优化,进而开发出自己的策略。
  • 没看到源码呢。。
  • 牛逼