Python 量化分析ETF指数基金.

标签(空格分隔): python 量化 ETF tushare pandas


文章目录

  • Python 量化分析ETF指数基金.
    • 数据获取
    • 数据分析

在喜马拉雅上听到一个炒股高手说过一个简单的指数基金的操作方法. 设置一条均线,该均线可以是20日线,30日线,60日线.当基金价格向上穿越该线时买入,在基金价格向下跌破该线时卖出. 如此操作,一年可以获取20%左右的回报,而且风险很小. 作为一个长期的股市老韭菜,想通过编程验证一下该方法是否靠谱. 下面选择ETF指数基金510500来测试一下.顺便熟悉一下python 的pandas的操作方法.

数据获取

采用tushare来获取数据.

import pandas as pd
import numpy as np
import tushare as ts
import seaborn
from matplotlib import pyplot as plt
import talib
plt.style.use('seaborn')
%matplotlib inline
with open('token.txt') as f:token = f.readline()
ts.set_token(token)

tushare的最新版本,tushare pro需要注册用户,并设置token来连接. 通过pro.fund_daily来获取510500从2015年到现在的所有数据,返回的结果是一个pandas dataframe.

pro = ts.pro_api()
df = pro.fund_daily(ts_code='510500.SH', start_date='20150101', end_date='20191010')

数据分析

使用df.head()查看以下数据头,输出如下:

print(df.shape[0],df.shape[1]) #计算行数和列数
1000 11

tushare似乎一次最多只能获取1000条数据。如果想获取更长的数据,就需要多次调用pro.fund_daily然后再进行dataframe的合并。另外取出来的数据的时间是倒序的。数据信息量挺多,包含了开盘价,收盘价,最高价,最低价,成交量等数据.

etf500 = df.sort_values(by='trade_date')
etf500['trade_date'] = pd.to_datetime(etf500['trade_date'],format='%Y%m%d')
etf500.head()

按照时间排序,并把’trade_date’转为日期格式.

将trade_date 设置为索引.

etf500.set_index('trade_date',inplace=True)
etf500.head()


通过dataframe的describe()方法,大概了解一下数据.

etf500.describe()


从输出结果中看到,etf500的最高涨跌幅度为+/-8%左右.那对我们是一个好消息,至少没有涨停和跌停导致无法交易的时候.

print(etf500['close'].min(),etf500['close'].idxmin())
4.297 2018-10-18 00:00:00

获取一下最低收盘价的价格和日期.

print(etf500['close'].min(),etf500['close'].idxmin())
8.167 2015-11-25 00:00:00

获取一下最高收盘价的价格和日期,大家还记得2015年大牛市,大家爆炒中小盘股的情形吧 .

etf500[etf500['amount'].idxmin():etf500['amount'].idxmin()]


获取一下成交量最低的情况.这个应该是2016年1月"股灾3.0"时期的熔断股灾,成交量只有2000多万.

closed = etf500[['close']]
closed.plot()


获取收盘价,并画出图形.

closed['MA2'] = talib.SMA(closed.close,timeperiod=2)
closed['MA20']=talib.SMA(closed.close,timeperiod=20)

增加两列,分别是用talib计算2日和20日均线.

closed.plot(figsize=(20,5))
plt.title("STOCK:510500", weight='bold');

closed['pct_chg']=closed.close.pct_change()

pct_chang()计算出每天变化的百分比.

closed['pct_chg'].plot(figsize=(30,5))


每日收益变化曲线.

closed.loc[np.abs(closed['pct_chg']) >0.065 ] #算出收益率变化最大的几天


看看涨跌最大的几天,估计这些日子在老韭菜的心里是刻骨铭心的.

fig,axes = plt.subplots(1,2,figsize=(15,5))
axes[0].hist(closed['pct_chg'].dropna(),color='g',bins=50)
axes[1].hist(closed['close'].dropna())


看看收益率和收盘价的柱状图. 收益率基本在0%的位置成正态分布.

closed['log_ret'] = np.log(closed.close/closed.close.shift(1)) #计算对数收益率
closed['log_ret'].plot(figsize=(30,5),color='r') #输出对数收益率

cumulative_rets = closed.log_ret.cumsum().values #对数收益率进行累计求和,可以计算出从开始到每个时间点的收益率
plt.figure(figsize=(30, 5))
plt.plot(cumulative_rets)

diff_ma2_ma20 = closed.MA2-closed.MA20
closed['hold'] = np.where(closed.MA2 >closed.MA20,closed.MA2,None) #这里把赋值为None,下面画图好看一点
closed[['MA2','MA20','hold']].plot(figsize=(30,5))
plt.title("STOCK:510500", weight='bold'); #红色的线表示持股的时间


图中红色部分就是2日平均线高于20日均线的时间.

stragy_ret = np.where(closed.hold >0,closed.log_ret, 0)
stragy_ret= stragy_ret.cumsum()
plt.figure(figsize=(30, 5))
plt.plot(stragy_ret)
plt.plot(cumulative_rets)


我们的策略是当2日均线站上20均线后持有.跌破20日均线后卖出.上图就是使用我们的策略和一开始就持有的收益的对比.

print("strage= {},hold ={}".format(np.exp(stragy_ret[-1]),np.exp(cumulative_rets[-1])))
strage= 2.7722754256654154,hold =0.8373846153846146

就是一下使用策略的收益和一开始就持有的收益.使用策略的收益是270%, 而一开始就买入持有到今天只有83%的市值了.

closed.close[-1]/closed.close[0]
0.8373846153846153

确定一下计算结果是否正确?可见如果从2015年9月1日买入510500,并持有到2019年10月,是亏本.

year_ret = np.exp(stragy_ret[-1]/4)
year_ret
1.290354657748639#每年的回报是29%,相当牛逼了?

如果采用均线穿越的方法,能够实现29%的年回报.这个收益率已经能够打败巴菲特了!!!.

Python 量化分析ETF指数基金投资相关推荐

  1. pythonencoding etf-8_Python 量化分析ETF指数基金投资

    Python 量化分析ETF指数基金. 标签(空格分隔): python 量化 ETF tushare pandas 文章目录 Python 量化分析ETF指数基金. 数据获取 数据分析 在喜马拉雅上 ...

  2. python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据

    python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...

  3. Python量化分析之K线模式识别

    Python量化分析中,基于TA-Lib 的K线的指标分析 转自 https://www.ricequant.com/community/topic/2393 函数名:CDL2CROWS 名称:Two ...

  4. python 量化分析 入门_【合辑·收藏】Python量化从入门到精通

    原标题:[合辑·收藏]Python量化从入门到精通 引言 自2018年9月27日发第一篇推文以来,公众号"Python金融量化"专注于分享Python在金融量化领域的实战应用,坚持 ...

  5. 基金反买,别墅靠海?每年买倒数前十基金,能赚这么多?Python量化分析告诉你答案【附代码】-邢不行

     引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助 这是邢不行第 83 期量化小讲堂的分享 作者 | ...

  6. python量化分析前景_Python3 量化分析笔记从小白到破产-学习路线规划

    文:蓝兔子读难NOTES 图: 配图 来源于网络 Python3 量化分析从小白到破产 学习路线规划 编码:0002 上一次我们安装了 jupyter notebook 作为我们的开发环境,但是我们在 ...

  7. Python 量化分析——基本面选股模型

    摘要 利用Python进行量化分析,AkShare获取股票基本面财务数据.进行基本面数据分析,pe市盈率.ps市销率.pb市净率.总市值等数理统计,以及图表展示.基于莫伦卡选股模型进行编码,对A股30 ...

  8. python量化分析岗位_量化金融有哪些职位可以选择?

    机会成本 之前写了自己如何从自动化领域转行到金融领域,后台很多朋友私信问自己的背景适不适合转行做量化,或者是如果想做量化需要做什么准备,虽然简单的回答了一些,但是由于平时工作和学习实在太忙,难免相对简 ...

  9. python 量化分析 入门_量化入门-小白到菜鸟的学习路线

    小白到菜鸟的入门学习路线,不要盲目以为多看策略就能学会,要注意学习方法. 本文的主要目的 很多新人面对多如牛毛的策略不知从何下手,在很多较难的帖子下面留言一些最基础的问题.小白不知道该先学什么,后学什 ...

最新文章

  1. “本机号码一键登录”是如何实现?
  2. tlias 教学过程_2020年Java生存现状!建议程序员了解一下!
  3. 左斜杠和右斜杠有什么区别_「斜杠云」SEO推广和SEO优化有什么区别?
  4. 海岸鸿蒙2018年标准物质,海岸鸿蒙——20年权威的标准物质研制单位
  5. 计算机java培训总结,java培训总结范文
  6. html整合vue elementui,vue2.0结合Element-ui实战案例
  7. 离线部署 CDH 6.2 及使用 CDH 部署 Hadoop3 大数据平台集群服务
  8. QString 字符编码
  9. I - Defeat the Enemy UVALive - 7146 二分 + 贪心
  10. 6 VPP源码分析 (VPP中的多线程)
  11. 【渝粤教育】国家开放大学2018年秋季 2409T中国古代文学(B)(1) 参考试题
  12. 中文路径读取乱码,json乱码
  13. Nero Burning ROM 11.0.10500附序列号
  14. 北航计算机考研录取多少人,北航计算机考研近三年报考录取情况
  15. 华东理工某ACMer总结
  16. 计算机进入bios,如何进入bios(电脑进入BIOS的两种实用方法)
  17. 笔记本计算机的连接无线网络连接,笔记本电脑连接wifi的方法步骤
  18. 【CRM】ReferenceError: XXX is not defined at eval(eval at RunHandlerInternal)
  19. SpringBoot:Sa-Token的具体介绍与使用
  20. 数值积分公式及龙贝格(Romberg)算法实现matlab

热门文章

  1. Requests 与 BeautifulSoup 模块
  2. 软件是什么,什么是软件
  3. ImageLoader加载图片与文字
  4. 我的世界服务器加载材质包时显示缺少参数,【1.4.7~1.16】Sphax PureBDCraft [16x~512x]五边形材质包|3D支持|mod材质扩展...
  5. 倒计时效果 2020-11-24
  6. 电脑pc端ABBYY FineReader OCR 2021免费图片文字识别软件
  7. golang实现微信公众号发送代金券及获取代金券的功能
  8. 搭建FISCO BCOS区块链平台
  9. 社区疫情防控平台需求工程--项目启动篇
  10. windows的dockerDesktopService在360杀毒后,无法启动的问题,