多因子选股的策略实现(附:源码)
经过前两篇文章,我们把多因子选股策略三大步骤:因子的选取,检验,冗余因子剔除等介绍了一遍,接下来这一篇将利用已经得到的结论,完成最后一步,策略的实现。
我们根据前两篇文章的内容,我们选取以下因子来构建策略: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万美元
一个量化策略师的自白(好文强烈推荐)
网格交易法,一个不容易亏钱的投资策略(附源码)
市面上经典的量化交易策略都在这里了!(源码)
多因子选股的策略实现(附:源码)相关推荐
- 掘金量化 | 短周期量价策略(附源码)
可能不少朋友都有阅读过国泰君安<基于短周期价量特征的多因子选股体系>这篇研报,对其内多达191个量价因子印象深刻.该研报是在2017年中旬发布的,时至今日已过去四年时光,为此大家可能会好奇 ...
- matlab 突破交易策略,Matlab量化交易策略之 横盘突破策略(附源码)
策略名称:横盘突破策略策略说明: 日内交易策略,收盘平仓: 横盘突破在过去30根K线的高低点围绕中轴上下0.5%的范围内波动时: 上轨=过去30根K线的最高价: 下轨=过去30根K线的最低价: 当价格 ...
- Matlab自适应均线_Matlab量化交易策略之 均线打分策略(附源码)
策略思路: 对两条均线的20组参数循环,满足金叉分数+1 当分数大于12分时,多头入场, 当有仓位时,分数小于8分,则平仓出场 回测曲线(由Auto-Trader提供回测报告) 均线打分.png (7 ...
- 多因子系列(二):基于机器学习选股策略(附源码)
在第一篇中,我们实现了一个简单单因子的策略模型,但是在实际中,我们是远远不会满足于一个因子甚至几个因子的. 市场上目前挖掘出来的因子成千上万个,如何有效筛选出比较好的几个因子构建一个选股模型呢? 手动 ...
- 股票日回易略(附源码
原 股票日内回转交易策略(附源码) 什么是日内交易? 日内交易(Day Trade)是一种交易模式.主要是指持仓时间短,不留过夜持仓的交易方式.日内交易捕捉入市后能够马上脱离入市成本的交易机会,入 ...
- 多因子选股Alpha策略
一.策略原理 根据著名的Fama三因子模型,可以用Beta.市值.估值来预测股票的回报率.该模型通过实证研究发现,通常小盘价值股票的业绩表现是最优的.这可能是由于小盘股相对大盘股更不容易受到投资者关注 ...
- 经典日内策略——空中花园(附源码)
空中花园属于期货日内突破策略,是一个相对"粗暴"的策略. 一般来说,如果开盘突破就入场,出错率较高.而这一策略增加了额外的条件,也就是开盘时要大幅高开或者低开,形成一个空窗,然 ...
- python量化策略源码_【Python量化投资】趋向系统指标策略 ADX、DMI指标用于股票池(附源码)...
原标题:[Python量化投资]趋向系统指标策略 ADX.DMI指标用于股票池(附源码) [什么是ADX] ADX(average directional indicator) 平均趋向指数,常用的趋 ...
- python编程选股_随笔吧量化投资选股的python程序实践(附源码)
量化投资选股的python程序实践(附源码) 首先选取沪深股票市场,本人比较关注的12只股票: 000002 万科A,600566 济川药业,300051 三五互联,002039 黔源电力,60087 ...
最新文章
- 快速整理excel_3小时整理了33个excel动图技巧,能快速提高工作效率,收藏备用吧...
- input placeholder样式
- VC++ 利用PDB和dump文件定位问题并进行调试
- 定位相关论文-A Novel Pedestrian Dead Reckoning Algorithm for Multi-Mode Recognition Based on Smartphones
- Spring: (一) -- 春雨润物之 核心IOC
- div+css布局必了解的列表元素ul ol li dl dt dd详解
- python win10 arm_windows10 arm版下载-windows10arm镜像64位中文版 - 极光下载站
- 平台卖家要不要做独立站?
- UVA10227 POJ2419 ZOJ1900 Forests【并查集+set】
- python电脑下载教程-电脑64位怎么下载python
- 处理数字音乐文件用计算机软件,工具软件商标注册属于第几类?
- 双系统移动硬盘备份方案:macOS Catalina 10.15.5, Win10
- QT从字体名获取字库文件路径(从宋体获取到simsun.ttc)
- solidworks钣金件设计术语creo/ug适用
- LabVIEW程序测试
- Unity3D开发游戏坦克大战
- 工欲善其事,必先利其器篇-高效实现右滑退出功能
- 第九章:CSDN记忆
- 2014c语言二级考试题,2014年3月计算机二级C语言真题及答案
- 【求职】格灵深瞳 Java 方向面经