打开量化投资的黑箱-多因子选股篇-经管之家官网!

人大经济论坛-经管之家 收藏本站
您当前的位置> 考研考博>>

考研

>>

打开量化投资的黑箱-多因子选股篇

打开量化投资的黑箱-多因子选股篇

发布:datayes2015 | 分类:考研

关于本站

人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!

经管之家新媒体交易平台

提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

提供微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】

突然想做个系列,结合自己的学习路程让更多的量化爱好者有机会接触这条路。这一篇做的是多因子选股篇,结合具体策略来说,说的不好还请大家多多指正。前言选股思路来自于前些日子看的一本书《超级成长股》,全篇就讲 ...
扫码加入金融交流群


突然想做个系列,结合自己的学习路程让更多的量化爱好者有机会接触这条路。
这一篇做的是多因子选股篇,结合具体策略来说,说的不好还请大家多多指正。
前言
选股思路来自于前些日子看的一本书《超级成长股》,全篇就讲了两个因子:市销率跟市研率(市值跟研发费用)。
作为翻版小市值收益曲线还是可以的。
选用的是市销率+净利润增长率+营业收入增长率三个因子,先选出市销率最低的30只股票,然后用净利润增长率+营业收入进行等权打分,选出分最高的前十只股票,在优矿平台上实现。
策略部分
选用的语言是Python,这里导入的是3个包,numpy、pandas是python自带的,CAL是优矿自己集成的库
  1. import numpy as npimport pandas as pdfrom CAL.PyCAL import *
复制代码
每一个策略都要有确定回测的区间、相对的基准、股票池、初始资金、策略执行的频率以及佣金
  1. start = '2014-01-01'end = '2016-01-01' benchmark = 'HS300' # 基准为HS300指数universe = DynamicUniverse('HS300') # HS300动态股票池capital_base = 100000000refresh_rate = 5 commission = Commission(buycost=0.0003, sellcost=0.0003, unit='perValue') # 设置手续费
复制代码
导入上交所日历、定义三个因子
  1. # 日期处理cal = Calendar('China.SSE') # 导入上海证券交易所交易日历,Cal是优矿自己集成的包# 定义因子名称,市销率、净利润增长率、营业收入增长率factor_name = ['PS','NetProfitGrowRate','OperatingRevenueGrowRate']
复制代码相当于在券商开个户
  1. def initialize(account): # 初始化虚拟账户状态 pass
复制代码
策略逻辑部分:
def handle_data(account): # 每个交易日的买入卖出指令
设定股票池
  1. today = account.current_date # 当前交易日yesterday = cal.advanceDate(today, '-1B') # 前一个交易日,B: 工作日,M:月,W:周,Y:年 yesterday_str = yesterday.strftime('%Y%m%d') # 日期类型转化为字符串 valid_uni = DataAPI.IdxConsGet(ticker=u"399300",intoDate=yesterday_str,field=['consID'],pandas="1")['consID'].tolist() # 前一交易日HS300(399300)成分股列表 valid_uni = [s for s in account.universe if s in valid_uni]
复制代码提取市销率因子 ,这里调取了优矿的因子数据
  1. Factor_PS = DataAPI.MktStockFactorsOneDayGet(tradeDate=yesterday_str,secID=valid_uni,field=['secID','PS'],pandas="1") Factor_PS.set_index('secID',inplace=True)
复制代码按市销率,选市销率最小的30只股票
  1. sec_list = Factor_PS.sort('PS')[0:30].index.tolist()
复制代码提取市销率最小30只股票的净利润增长率和营业收入增长率数据
  1. Factor = DataAPI.MktStockFactorsOneDayGet(tradeDate=yesterday_str,secID=sec_list,field=['secID','NetProfitGrowRate','OperatingRevenueGrowRate'],pandas="1") Factor.set_index('secID',inplace=True)
复制代码
  1. #净利润增长率NetProfitGrowRate Factor_NetProfitGrowRate = Factor['NetProfitGrowRate'].dropna().to_dict() #dropna()跟to_dict() 是python pandas中的两个函数,在这里的意思是把值为空的剔除掉 signal_NetProfitGrowRate = standardize(winsorize(Factor_NetProfitGrowRate))# 因子处理:去极值、标准化,去掉极大极小值,让因子之间可加减
复制代码
# 营业收入增长率OperatingRevenueGrowRate,处理方法同上
  1. Factor_OperatingRevenueGrowRate = Factor['OperatingRevenueGrowRate'].dropna().to_dict() signal_OperatingRevenueGrowRate = standardize(winsorize(Factor_OperatingRevenueGrowRate))
复制代码
  1. # 按净利润增长率和营业收入增长率等权打分 Total_Score = pd.DataFrame(index=Factor.index, columns=['NetProfitGrowRate','OperatingRevenueGrowRate'], data=0) Total_Score['NetProfitGrowRate'][signal_NetProfitGrowRate.keys()] = signal_NetProfitGrowRate.values() Total_Score['OperatingRevenueGrowRate'][signal_OperatingRevenueGrowRate.keys()] = signal_OperatingRevenueGrowRate.values() Total_Score['total_score'] = np.dot(Total_Score, np.array([0.5, 0.5]))# 综合两个因子的大小,等权求和评分
复制代码
买入列表
buylist = Total_Score.sort('total_score').tail(10).index.tolist() # 选出评分最高的10只股票
  1. buylist = {s: 0 for s in buylist}
复制代码买入判断
for s in account.valid_secpos.keys():
  1. if s not in buylist: order_to(s, 0) each_buymoney= account.reference_portfolio_value / len(buylist) #将投资组合的价值平分为len(buylist)份,等份买 for s in buylist: if s in account.security_position: #如果待买入股票已经持有,则不进行买入,否者就需要计算买入的头寸并下单 continue amount= each_buymoney / account.reference_price[s] # account.reference_price 意思是获取可买入证券前一日收盘价 order(s, amount)
复制代码回测曲线:
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
本文关键词:

本文论坛网址:https://bbs.pinggu.org/thread-4942570-1-1.html

人气文章

1.凡人大经济论坛-经管之家转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。