单因子策略进阶版 本篇延续(第三期:单因子策略入门版),介绍如何使用优矿平台编写策略代码,以股息率作为择股条件,自动筛选出股息率前十名的股... 

您所在的位置:网站首页 中证500权重股前十名 单因子策略进阶版 本篇延续(第三期:单因子策略入门版),介绍如何使用优矿平台编写策略代码,以股息率作为择股条件,自动筛选出股息率前十名的股... 

单因子策略进阶版 本篇延续(第三期:单因子策略入门版),介绍如何使用优矿平台编写策略代码,以股息率作为择股条件,自动筛选出股息率前十名的股... 

2024-07-14 06:51:27| 来源: 网络整理| 查看: 265

来源:雪球App,作者: 爱喝豆汁的投资者,(https://xueqiu.com/2680567071/130470562)

本篇延续(第三期:单因子策略入门版),介绍如何使用优矿平台编写策略代码,以股息率作为择股条件,自动筛选出股息率前十名的股票构建投资组合,并通过历史模拟回测的方式评估这个策略的表现。

本期重点讲解具体实现代码,手把手的教大家撰写单因子投资策略。

选股标准:

(1)沪深300成分股

(2)选出因子X数值(X=股息率)最高的n家(n=10)公司股票作为投资组合

回测方法:

(1)回测期间:BeginDate 至 EndDate(BeginDate = 2010年1月1日,EndDate = 2019年7月1日)

(2)调仓周期:每年调仓一次,调仓日为5月第1个交易日,这是由于中国A股上市公司每年4月30日之前发布上一年年报,财务数据会更新。考虑停牌、涨跌停对交易的影响。

(3)手续费:佣金、滑点总计交易费用为千分之1.3

(4)资金分配方法:等权

(5)比较基准:沪深300指数

注: 策略代码参考 王小川《Python与量化投资 从基础到实战》[1]

可以将该策略代码分为以下四步:

导入相关模块——获取调仓日——编写选股函数——策略执行

---------------------------

一、导入相关模块

Python编程语言可以使用import函数导入已经定义好的工具包,导入之后可以直接使用已经编写好的函数。我们逐行对代码进行解释,注意看代码左侧数字顺序:

1:精确除法division:导入division函数前,‘/’代表阶段除法,导入后‘/’代表精确除法,看图秒懂:

2、3:上述函数中,pandas、numpy是在量化投资策略撰写中最常用的两个包,用来处理和计算数据。

4、5:处理时间:datetime和parse是处理和解析时间格式的函数

6、7:CAL.PyCAL是优矿编写的金融分析工具,导入后可以直接使用相关分析工具,比如Calendar('China.SSE')用来调取交易日历,传入参数规则是‘国家.市场’,’China.SSE‘就是中国上海证券交易所。

二、获取调仓日

上述代码的目的是获取调仓日的日期,就是最后的t_date,这个调仓日是每年5月的第一个交易日。我们逐行对代码进行解释,对照代码左侧数字顺序:

2:优矿提供了丰富的数据获取接口,点击菜单的研究数据就可以找到对应的数据获取代码。DataAPI.TradeCAlGet是优矿提供的交易所交易日历。输入之后便可以获得下图的日历:

3、4:代码3是相当于excel的筛选功能,筛选出交易所开盘的交易日(isOpen==1),代码4是筛选出某个日期之后的交易日,输入之后得到下面的表格:

5~8:为了得到每年5月的第一个交易日的日期,作者采用三步走,首先摘取出每个交易日的月份和年份(5、6),接着使用去重的方法获取每月第一个交易日(7),最后筛选出5月(8)。其中,以下函数是我们第一次遇到:

apply+lambda: 逐行应用用户自定义的规则

drop_duplicates:去重,其中subset=['mon','year'] 是看见mon和year相同的都去掉;keep='first'是保留第一个,之后遇到重复的全去掉

mon.isin(['05']):筛选出mon这一列中有‘05‘的行

values:取表格里的数值

运行完成后,我们得到了一组每年5月第一个交易日的日期数据:

9:遍历每一个日期,将时间的字符串调整之后模板运行要求的时间格式。遍历使用for循环,格式调整使用strptime函数。

三、编写选股函数

这个函数实现的目标是:

输入:股票列表(universe),日期(date),因子(factor)

输出:因子数值前十名的股票列表

简单说,这个函数是一个在某一时间点的选股函数,输入时间点、备选股票、选择标准(因子),就可以得到按这个因子数值排序前十名的股票列表,当然也可调整成为前二十名,后二十名等等。下面我们逐行对代码进行解释:

 1:def是python中自定义函数的代码,括号中是需要输入的关键参数。

 2、3:是检验你输入的日期是否符合之后函数要求的时间格式,如果不符合格式,需要先使用parse函数解析使用者输入的时间元素,并调整成要求的时间格式。

 5:利用优矿因子值获取的代码,可以直接获取因子数值

 7:对因子数值按照降序进行排列,如图:

 9~11:取前十名股票的股票代码(secID),并转成列表格式,返回列表

df_factor.head(10)表示前10只,

df_factor.head(20)表示前20只

df_factor.tail(10)表示后10只

四、策略执行

优矿提供了一个策略执行模板,点击下面红圈内的+策略就可以调出这个模板,使用策略模板自动对编写的策略进行回测,并对运行结果可视化,可以节省大量时间,让投资者可以专注在策略研发上,下面我们对模板涉及代码进行讲解。

其中,部分代码含义模板中已经进行注释,容易理解的部分在此不再赘述。

 6:refresh_rate:是指执行策略指令的时间将,默认该指标等于1,代表每分钟运行一次,通常日频回测会选择此值。

 7:commission是对买入卖出的交易费用进行设定,也可以通过slippage函数对滑点进行设置,衡量冲击成本,费用的设定即可以设置为绝对金额,也可以设定为比例。

 8~10:设置账户:可以包含股票账户、期货账户等,capital_base是初始本金,初始本金太少,可能会导致策略运行异常,如剩余本金无法买足一手股票

 12:策略初始化,一般无需修改。

 第15开始是模板的最关键部分,也是需要投资者自己撰写的部分,即投资策略的运行规则,什么情况买入,什么情况卖出

 16:打开将要交易的股票账户,context函数是优矿模板中的函数,不能修改

 17~19:检查交易日是否是调仓日,如果不是调仓日,保持仓位不变,如果是调仓日,需要进行调仓。调仓是先要获得账户持仓情况(18),然后执行选股函数,得到符合条件的买入清单(19),买入清单中排除了停牌的股票

得到买入清单之后,只需要将原账户持仓调整成买入清单中的持仓就可以了,这需要先卖出原账户不符合条件的股票,买入新符合条件的股票并且重新调整股票权重。但是有一个问题需要注意,那就是原账户中停牌的股票无法卖出,也无法调整权重,下面的代码用来处理这一问题:

 21~26:如果原账户有股票,则需要考虑停牌问题,通过优矿数据接口获取停牌的股票清单(isOpen=‘0‘)

 27~32:计算停牌股票的市值。停牌股票无法卖出,所以在计算总持仓时要把停牌股持仓市值计算在内,剩余资金再买入清单上的股票。27~31:遍历加总计算所有停盘股的市值之和。32:用来计算去除停牌股市值后,剩余资金占总持仓占比,将这个值与买入清单各股权重相乘可以得到实际需买入股票权重。

 33~34:当账户空仓时,账户中没有停牌股票。

 35~38:先卖出原账户中不在买入清单中的股票,使用优矿account.order_to函数.

 39~42:如果买入清单有符合条件股票,则计算需买入的股票的实际权重,此案例中采用等权法,因此要除以股票个数,如果没有,就不需要买入。

 43~48:使用优矿account.order_pct_to(stk,weight)函数,将各股票仓位调整成买入清单要求的仓位权重。仔细观察这段代码,有人可能会提出疑问,这段代码是不是可以写成下面的代码:

答案是不可以,因为命令的执行是有顺序的,需要先调整原账户持仓股票权重,腾出资金,再买入股票清单上新股票。如果顺序相反,有可能出现由于原账户股票持仓比例过高,剩余资金不足以买够新股票的权重。

长吁一口气,点击运行,得到运行结果:

参考资料:[1]王小川等.Python与量化投资 从基础到实战 [M].北京:电子工业出版社,2018:207-211.

完整代码:

完整代码请复制链接下载:

链接:网页链接

提取码:a7yo

$上证指数(SH000001)$ $深证成指(SZ399001)$ $上证50(SH000016)$

-------------------------------------------

不求取悦他人,但求愉悦自己

想了解更多请关注公众号:爱喝豆汁的量化投资者

微信号: investorSean



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭