楼主: 邢不行
32092 148

[源码分享] 【量化小讲堂-Python、Pandas系列17】简易波动指标(EMV)策略在A股的实证   [推广有奖]

院士

5%

还不是VIP/贵宾

-

威望
1
论坛币
26743 个
通用积分
135.0908
学术水平
485 点
热心指数
505 点
信用等级
456 点
经验
44525 点
帖子
547
精华
26
在线时间
1111 小时
注册时间
2010-4-30
最后登录
2024-4-1

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
引言:
本系列帖子“量化小讲堂”,通过实际案例教初学者使用python、pandas进行金融数据处理,希望能对大家有帮助。

【必读文章】:
《10年400倍策略分享-附视频逐行讲解代码》

【所有系列文章汇总】:https://bbs.pinggu.org/thread-3950124-1-1.html

【python量化课程】想要快速、系统的学习量化知识,可以参与我与论坛合作开设的课程:
《python量化投资入门》,我会亲自授课,随问随答。参与课程还可以免费加入我的小密圈,我每天会在圈中分享量化的所见所思,圈子介绍点击此处

微信:xbx_laoshi,量化交流Q群(快满):438143420,有问题欢迎交流。

文中用到的A股数据可在www.yucezhe.com下载,这里可以下载到所有股票、从上市日起的交易数据、财务数据、分钟数据、分笔数据、逐笔数据等。




【量化小讲堂-Python、Pandas系列17】简易波动指标(EMV)策略在A股的实证

上一期量化小讲堂向大家介绍了布林带策略在A股的实证效果(https://bbs.pinggu.org/thread-4901403-1-1.html)。本期将以简易波动指标(EMV)策略为例,实证检验一下EMV策略在A股的实际效果。

---策略简介---

简易波动指标(EMV),是为数不多的考虑价量关系的技术指标。它是根据成交量和人气的变化,构成一个完整的股价系统循环。该指标指示投资者在人气聚集且成交热络的时候买进股票,并且在成交量逐渐展现无力时,卖出股票。具体来说,当股价下跌时,由于买方萎靡退缩,致使成交量逐渐的减少,EMV数值也因而尾随下降,直到股价下跌至某一个合理支撑区,捡便宜货的买单促使成交量再度活跃,EMV 数值于是作相对反应向上攀升。所以EMV 指标的上升下降意味着市场的强弱变化,可以以此作为择时的判断依据。
1.PNG

本文采用的EMV策略的具体规则为:

第一步:计算EM指标的值\[EM=(\frac{H_i+L_i}{2}-\frac{H_{i-1}+L_{i-1}}{2})*(H_i-L_i)/VOL_i\]其中,$H_i,L_i,VOL_i$分别是第i日股票的最高价、最低价和成交量。

第二步:计算EMV = EM的n日简单移动平均

第三步:计算MAEMV = EMV的m日简单移动平均

第四步:当EMV大于MAEMV时,买入,信号为1;当EMV小于MAEMV时,卖出,信号为-1。


【python量化课程】想要快速、系统的学习量化知识,可以参与我与论坛合作开设的课程:《python量化投资入门》,我会亲自授课,随问随答。参与课程还可以免费加入我的小密圈,我每天会在圈中分享量化的所见所思,圈子介绍点击此处。)

---实战---


为了检验EMV策略在A股的实际效果,本文将该策略在所有A股都运行一遍。由于策略用不同的参数回测结果也不一样,因此对每只股票回测时都遍历一遍参数,选择使超额收益率最大的参数作为该股票的最优参数。具体步骤如下:


一、遍历数据文件夹中所有股票文件的文件名,得到股票代码列表

用python提取股票历史数据文件夹下每个股票对应的文件名(即股票代码)并存放到一个列表里,这样就得到了所有A股的代码列表。

接着遍历股票代码的列表,读取每只股票的历史数据。


二、计算股票的后复权价格

在读取某只股票的历史数据后,为了回测结果的可靠性,本文重新计算了复权后的开盘价、收盘价、最高价和最低价,后面计算指标值和涨跌幅都以复权后的数据为基础。有些上市不久的股票由于时间太短可能不具有代表性,因此本文在运行策略之前会先判断该股票上市至今的交易天数,剔除掉上市不到1年半的股票。


三、遍历参数进行回测

接着就是计算EMV指标并给出每天的信号了,在计算EMV和MAEMV时本文用到参数范围分别是n取16到26,间隔为2,m取20到25,间隔为1。即遍历该范围内的所有参数组合,每一参数组都会输出对应的每天的信号,根据买卖信号,可以得到每天的仓位,进而可以得到资金曲线及相关的回测指标(相关内容可参考量化小讲堂https://bbs.pinggu.org/thread-4745852-1-1.html)。在得到所有参数的回测结果后,根据超额收益率大小进行排序,选择使超额收益最大的参数作为该股票的最优参数,并将相应数据存入csv文件。


最后,在遍历完所有A股后,我们可以得到每只股票在最优参数组下使用EMV策略的回测结果,并和股票的年化收益及最大回撤做了一下对比。


本文希望通过对EMV策略的实际操作,向大家介绍pandas的以下几个功能的运用:

1. 移动标准差函数rolling_std()函数的用法

2. 时间序列超前滞后函数shift()函数的用法

3. 空值填充函数fillna()函数的用法


下面上具体的程序。


---程序---


要运行EMV策略,需要所有A股的历史交易数据,在www.yucezhe.com可以下载到所有股票历史至今的数据。如下图所示,每一行是每一天的数据:

3.png


数据有以下的字段:
【code】股票的代码,上证股票以sh开头,深证股票以sz开头
【date】交易日期
【open】开盘价
【high】最高价
【low】最低价
【close】收盘价
【change】涨跌幅,复权之后的真实涨跌幅,保证准确
【volume】成交量
【money】成交额
【traded_market_value】流通市值
【market_value】总市值
【turnover】换手率,成交量/流通股本
【adjust_price】后复权价,复权开始时间为股票上市日,精确到小数点后10位
【report_date】最近一期财务报告实际发布的日期
【report_type】最近一期财务报告的类型,3-31对应一季报,6-30对应半年报,9-30对应三季报,12-31对应年报
【PE_TTM】最近12个月市盈率,股价 / 最近12个月归属母公司的每股收益TTM
【PS_TTM】最近12个月市销率, 股价 / 最近12个月每股营业收入
【PC_TTM】最近12个月市现率, 股价 / 最近12个月每股经营现金流
【PB】市净率,股价 / 最近期财报每股净资产

下面是代码的截图,代码里面有详细的注释,有问题可以留言,附件中有程序的源码,回复即可下载。
4.png
5.png
6.png
7.png
8.png
9.png

这是最后回测结果的部分截图:
10.png

运行该策略的一共有2607只股票,其中,策略年化收益大于股票本身年化收益的有1950只个股,占比大概为74.8%,而年化收益除以最大回撤绝对值能超过股票本身的有2304只个股,大概占88.4%,总的来说EMV策略的效果还不错。大家有其他一些技术指标也可以尝试一下,看看效果如何,只需要将第一部分信号产生方式改成自己的策略逻辑就可以了。

【python量化课程】想要快速、系统的学习量化知识,可以参与我与论坛合作开设的课程:《python量化投资入门》,我会亲自授课,随问随答。参与课程还可以免费加入我的小密圈,我每天会在圈中分享量化的所见所思,圈子介绍点击此处。)





---之后要讲的内容---


关于《量化小讲堂》之后想看的内容,或者相关问题,可以加我微信xbx_laoshi、Q群(快满):438143420沟通。



附件中是Python程序文件,免费,回复可见,觉得文章内容有帮助的话,顶贴是最好的鼓励!



本帖隐藏的内容

EMV2.zip (172.86 KB)



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python pandas 量化小讲堂 panda EMV 学习者 文章 财务 领域 如何

EMV.rar

2.7 KB

本附件包括:

  • EMV2.py

已有 5 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xddlovejiao1314 + 100 + 100 + 5 + 5 + 5 精彩帖子
accumulation + 100 + 1 + 1 + 1 精彩帖子
wwqqer + 100 + 5 + 5 + 5 精彩帖子
Captain-CUI + 100 奖励积极上传好的资料
fantuanxiaot + 100 + 100 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 500  论坛币 + 200  学术水平 + 16  热心指数 + 16  信用等级 + 16   查看全部评分

本帖被以下文库推荐

不管去哪里 只要在路上
沙发
moving2014 发表于 2016-12-24 17:41:12 来自手机 |只看作者 |坛友微信交流群
邢不行 发表于 2016-12-23 12:17
引言:
本系列帖子“量化小讲堂”,通过实际的案例让大家知道如何使用Python、pandas进行金融数据处理。帖 ...
学习!!!

使用道具

藤椅
Captain-CUI 学生认证  发表于 2016-12-24 18:53:11 |只看作者 |坛友微信交流群
学习!!!

使用道具

板凳
zwzhai 发表于 2016-12-24 22:19:12 |只看作者 |坛友微信交流群
very good

使用道具

报纸
iid_garch 发表于 2016-12-24 23:12:39 来自手机 |只看作者 |坛友微信交流群
邢不行 发表于 2016-12-23 12:17
引言:
本系列帖子“量化小讲堂”,通过实际的案例让大家知道如何使用Python、pandas进行金融数据处理。帖 ...
支持

使用道具

地板
我爱说德语 发表于 2016-12-25 02:45:59 来自手机 |只看作者 |坛友微信交流群
邢不行 发表于 2016-12-23 12:17
引言:
本系列帖子“量化小讲堂”,通过实际的案例让大家知道如何使用Python、pandas进行金融数据处理。帖 ...
啦啦啦啦啦(≧▽≦)学习了

使用道具

7
jch1995 发表于 2016-12-25 09:19:16 来自手机 |只看作者 |坛友微信交流群
邢不行 发表于 2016-12-23 12:17
引言:
本系列帖子“量化小讲堂”,通过实际的案例让大家知道如何使用Python、pandas进行金融数据处理。帖 ...
外行人提一个问题,可视化怎么解决

使用道具

8
franky_sas 发表于 2016-12-25 10:43:10 |只看作者 |坛友微信交流群

使用道具

9
kaviyang 发表于 2016-12-25 13:16:43 |只看作者 |坛友微信交流群
[victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory][victory]

使用道具

10
sey816 发表于 2016-12-25 18:54:53 |只看作者 |坛友微信交流群
谢谢分享。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-19 18:25