经过前两篇文章,我们把多因子选股策略三大步骤:因子的选取,检验,冗余因子剔除等介绍了一遍,接下来这一篇将利用已经得到的结论,完成最后一步,策略的实现。

我们根据前两篇文章的内容,我们选取以下因子来构建策略:TAGRT,ROEANNUAL,SHTLIABTOTLIABRT,PB

其因子的有效性图如下,股票池为“IT指数”成分股。

策略构建:

基本思路:我们按照一定排列规则,将所有股票排序,并选取排名最前或最后的股票,买入,每月换仓一次。

排列规则:

由上面几张图可以看出,四种因子都具有正向性(因子值越大,股票收益越大),我们的想法是将这四种因子加和,值越大的,说明股票预期收益越高。当然,我们需要先将数据标准化

我们有两种加和方案:

1.等权值加和,我们用K表示每个因子权值,V表示每个因子的值。

即:SCORE=KV1+KV2+…KVN

2.非等权加和,我们用K表示每个因子权值,V表示每个因子的值。

即:SCORE=K1V1+K2V2+…KNVN

我们根据每种因子的收益波动率(数据来源于《多因子选股之有效因子》),确定每种因子权值。

如下表:

回测参数声明:

时间:2018-01-01至2018-08-01

调仓频率:1月

基准指数:IT指数(SZSE.399239)

股票池:IT指数(SZSE.399239)成分股

滑点:0.0001

手续费:0.0001

以下是两种方案的回测对比

第一种加和方案

第二种加和方案

总结:

我们基于17年的历史数据,选出了四种因子来构建多因子策略,在排序规则中,我们分别讨论了两种方案,并分别测试。可以看出,每种方案都跑赢了基准,这说明我们的因子是有效的。方案二的收益率大于方案一的,说明加入波动率因素,会使股票的选取更加“准确”,更容易选出具有超额收益的股票,但这要牺牲一定的收益稳定性。

附:多因子选股的策略实现源码

# coding=utf-8
from __future__ import print_function, absolute_import, unicode_literals
from gm.api import *
from sklearn import preprocessing'''
策略思路:
我们按照一定排列规则,将所有股票排序,并选取排名最前或最后的股票,买入,每月换仓一次。
回测数据:SZSE.399239的成份股
回测时间:2018-01-01 08:00:00到2018-08-01 16:00:00
'''def init(context):# 每月第一个交易日的09:40 定时执行algo任务schedule(schedule_func=algo, date_rule='1m', time_rule='09:40:00')def algo(context):# 获取上一个交易日的日期last_day = get_previous_trading_date(exchange='SHSE', date=context.now)# 获取沪深300成份股context.stock300 = get_history_constituents(index='SZSE.399239', start_date=last_day,end_date=last_day)[0]['constituents'].keys()# 获取当天有交易的股票not_suspended = get_history_instruments(symbols=context.stock300, start_date=last_day, end_date=last_day)not_suspended = [item['symbol'] for item in not_suspended if not item['is_suspended']]fin = get_fundamentals(table='deriv_finance_indicator', symbols=not_suspended, start_date=last_day, end_date=last_day,fields='TAGRT,ROEANNUAL,SHTLIABTOTLIABRT', df=True)fin['PB'] = get_fundamentals(table='trading_derivative_indicator', symbols=not_suspended, start_date=last_day,end_date=last_day,fields='PB', df=True)['PB']fin.index=fin.symboldel fin['symbol'],fin['pub_date'],fin['end_date']fin=fin.fillna(0)data=preprocessing.scale(fin)score=[]for i in data:#score.append(5.96*i[0]+3.36*i[1]+5.03*i[2]+3*i[3])score.append(sum(i))fin['score'] =scorefin=fin.sort_values(by = 'score',axis = 0,ascending = True)symbols_pool=list(fin.tail(10).index)print(symbols_pool)order_close_all()# 获取股票的权重percent = 1 / len(symbols_pool)# 买在标的池中的股票for symbol in symbols_pool:order_target_percent(symbol=symbol, percent=percent, order_type=OrderType_Market,position_side=PositionSide_Long)print(symbol, '以市价单调多仓到仓位', percent)if __name__ == '__main__':'''strategy_id策略ID,由系统生成filename文件名,请与本文件名保持一致mode实时模式:MODE_LIVE回测模式:MODE_BACKTESTtoken绑定计算机的ID,可在系统设置-密钥管理中生成backtest_start_time回测开始时间backtest_end_time回测结束时间backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POSTbacktest_initial_cash回测初始资金backtest_commission_ratio回测佣金比例backtest_slippage_ratio回测滑点比例'''run(strategy_id='73bb5bf2-a536-11e8-bd52-9cd21ef04ea9',filename='多因子策略.py',mode=MODE_BACKTEST,token='c395247a76e8a5caeee699d668d6f550213bc418',backtest_start_time='2018-01-01 08:00:00',backtest_end_time='2018-08-01 16:00:00',backtest_adjust=ADJUST_PREV,backtest_initial_cash=10000000,backtest_commission_ratio=0.0001,backtest_slippage_ratio=0.0001)

来源:掘金量化      作者:宋瑞笛

推荐阅读:

学习Python量化有哪些书籍?这里有一份书单送给你

量化交易领域最重要的10本参考书推荐!

配对交易—这个股票策略曾年赚5000万美元

一个量化策略师的自白(好文强烈推荐)

网格交易法,一个不容易亏钱的投资策略(附源码)

市面上经典的量化交易策略都在这里了!(源码)

多因子选股的策略实现(附:源码)相关推荐

  1. 掘金量化 | 短周期量价策略(附源码)

    可能不少朋友都有阅读过国泰君安<基于短周期价量特征的多因子选股体系>这篇研报,对其内多达191个量价因子印象深刻.该研报是在2017年中旬发布的,时至今日已过去四年时光,为此大家可能会好奇 ...

  2. matlab 突破交易策略,Matlab量化交易策略之 横盘突破策略(附源码)

    策略名称:横盘突破策略策略说明: 日内交易策略,收盘平仓: 横盘突破在过去30根K线的高低点围绕中轴上下0.5%的范围内波动时: 上轨=过去30根K线的最高价: 下轨=过去30根K线的最低价: 当价格 ...

  3. Matlab自适应均线_Matlab量化交易策略之 均线打分策略(附源码)

    策略思路: 对两条均线的20组参数循环,满足金叉分数+1 当分数大于12分时,多头入场, 当有仓位时,分数小于8分,则平仓出场 回测曲线(由Auto-Trader提供回测报告) 均线打分.png (7 ...

  4. 多因子系列(二):基于机器学习选股策略(附源码)

    在第一篇中,我们实现了一个简单单因子的策略模型,但是在实际中,我们是远远不会满足于一个因子甚至几个因子的. 市场上目前挖掘出来的因子成千上万个,如何有效筛选出比较好的几个因子构建一个选股模型呢? 手动 ...

  5. 股票日回易略(附源码

    原 股票日内回转交易策略(附源码) 什么是日内交易? ​ 日内交易(Day Trade)是一种交易模式.主要是指持仓时间短,不留过夜持仓的交易方式.日内交易捕捉入市后能够马上脱离入市成本的交易机会,入 ...

  6. 多因子选股Alpha策略

    一.策略原理 根据著名的Fama三因子模型,可以用Beta.市值.估值来预测股票的回报率.该模型通过实证研究发现,通常小盘价值股票的业绩表现是最优的.这可能是由于小盘股相对大盘股更不容易受到投资者关注 ...

  7. 经典日内策略——空中花园(附源码)

    空中花园属于期货日内突破策略,是一个相对"粗暴"的策略.   一般来说,如果开盘突破就入场,出错率较高.而这一策略增加了额外的条件,也就是开盘时要大幅高开或者低开,形成一个空窗,然 ...

  8. python量化策略源码_【Python量化投资】趋向系统指标策略 ADX、DMI指标用于股票池(附源码)...

    原标题:[Python量化投资]趋向系统指标策略 ADX.DMI指标用于股票池(附源码) [什么是ADX] ADX(average directional indicator) 平均趋向指数,常用的趋 ...

  9. python编程选股_随笔吧量化投资选股的python程序实践(附源码)

    量化投资选股的python程序实践(附源码) 首先选取沪深股票市场,本人比较关注的12只股票: 000002 万科A,600566 济川药业,300051 三五互联,002039 黔源电力,60087 ...

最新文章

  1. 快速整理excel_3小时整理了33个excel动图技巧,能快速提高工作效率,收藏备用吧...
  2. input placeholder样式
  3. VC++ 利用PDB和dump文件定位问题并进行调试
  4. 定位相关论文-A Novel Pedestrian Dead Reckoning Algorithm for Multi-Mode Recognition Based on Smartphones
  5. Spring: (一) -- 春雨润物之 核心IOC
  6. div+css布局必了解的列表元素ul ol li dl dt dd详解
  7. python win10 arm_windows10 arm版下载-windows10arm镜像64位中文版 - 极光下载站
  8. 平台卖家要不要做独立站?
  9. UVA10227 POJ2419 ZOJ1900 Forests【并查集+set】
  10. python电脑下载教程-电脑64位怎么下载python
  11. 处理数字音乐文件用计算机软件,工具软件商标注册属于第几类?
  12. 双系统移动硬盘备份方案:macOS Catalina 10.15.5, Win10
  13. QT从字体名获取字库文件路径(从宋体获取到simsun.ttc)
  14. solidworks钣金件设计术语creo/ug适用
  15. LabVIEW程序测试
  16. Unity3D开发游戏坦克大战
  17. 工欲善其事,必先利其器篇-高效实现右滑退出功能
  18. 第九章:CSDN记忆
  19. 2014c语言二级考试题,2014年3月计算机二级C语言真题及答案
  20. 【求职】格灵深瞳 Java 方向面经

热门文章

  1. mysql服务器及卸载
  2. Rundeck 部署
  3. 使用Mathematica绘制笛卡尔叶形线图形(Folium of Descartes)
  4. 四川大学2021年考研专业目录
  5. Centos7安装libsodium教程
  6. Python分布式任务处理
  7. U盘/移动硬盘拔出提示被占用情况的处理办法
  8. 搞事情,采访IPFS Fund 周欢
  9. 2021 美图CV算法一面面经
  10. CodeForces700E Cool Slogans