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%的年回报.这个收益率已经能够打败巴菲特了!!!.

pythonencoding etf-8_Python 量化分析ETF指数基金投资相关推荐

  1. Python 量化分析ETF指数基金投资

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

  2. 基于Python的指数基金量化投资-为什么量化指数基金投资

    上一次写了基于Python的指数基金量化投资-股票数据源baostock 这次来说一下为什么要量化指数基金投资. 进行指数基金投资我们需要清楚几个关键点:该投资哪些指数品种,为什么投资这些品种.这些品 ...

  3. etf基金代码大全_纳斯达克指数ETF基金汇总

    纳斯达克(NASDAQ,National Association of Securities Dealers Automated Quotations)又称纳指.美国科技指数,是美国全国证券交易商协会 ...

  4. 个股与指数行情走势对比分析 !股票量化分析工具QTYX-V2.5.2

    前言 股票分析过程中往往会同时查看一只股票多个周期的行情走势,比如日线和周线结合观察,60分钟和日线结合观察,也会同时查看一个板块中多个股票的行情走势. 还有一种场景也非常关键--把个股行情与对应指数 ...

  5. 【金融量化】ETF基金是什么?有什么特点?

    1 含义 ETF(交易型开放式指数基金)是以某一选定的指数所包含的成分证券或商品为投资对象,依据构成指数的证券或商品的种类和比例,采取完全复制或抽样复制,进行被动投资的指数基金.ETF不但具有传统指数 ...

  6. python 基金量化分析_写了一个基金投资管理分析的 python 工具箱

    0 赞同来自: 发车了? 2020-03-15 09:26 0 条评论 0 赞同来自: 支持下 2020-03-15 09:27 0 条评论 0 赞同来自: 场内etf有么老铁,多谢了 2020-03 ...

  7. garch预测 python_【2019年度合辑】手把手教你用Python做股票量化分析

    引言 不知不觉,2019年已接近尾声,Python金融量化公众号也有一年零两个月.公众号自设立以来,专注于分享Python在金融量化领域的应用,发布了四十余篇原创文章,超过两万人关注.这一路走来,有过 ...

  8. matlab统计所有股票分析,MATLAB金融算法分析实战:基于机器学习的股票量化分析...

    MATLAB金融算法分析实战:基于机器学习的股票量化分析 作者:吴婷;余胜威 编著 出版日期:2017年07月 文件大小:32.24M 支持设备: ¥50.00在线试读 适用客户端: 言商书局 iPa ...

  9. 【基本面的量化分析与投资的回报可能 - 上篇】

    基本面的量化分析与投资的回报 - 上篇 基本面分析 公司的基本面分析和打分 代码及分析 - 基础数据 代码及分析 - 股票行情 总结 参考资料 下篇 基本面分析 百度上给出的定义:基本分析法是从影响证 ...

最新文章

  1. 如何批量转移大量的邮件?
  2. Java 动态语言
  3. python一千行入门代码-Python – 一次从文件中读取1000行
  4. java高分面试指南:java单例模式双重检查
  5. 使用vue-cli脚手架搭建简单项目框架
  6. 各数据库连接配置与maven依赖安装
  7. glibc库详解及与POSIX,system V这些库之间关系的说明
  8. 【报告分享】2019中国社交电商白皮书.pdf
  9. 如何让Div层悬浮在Flash Object对象之上(转载)
  10. 如何在Axure使用iconfont图标库里的图标
  11. android ndk官网下载地址,android ndk下载
  12. 初次创建andriod项目出现的问题
  13. DVD刻录机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. 微信开发者平台切换企微账号与企业微信小程序模式
  15. STM32MP157-Linux音频应用编程-语音转文字项目
  16. 搭建自己的电影网站 2 (安装MacCMS10)
  17. qq登录界面句柄_注册QQ飞车日服账号
  18. 微信公众号文字该如何排版?
  19. 数学中的Sin和Cos是什么意思?(转)
  20. 设置漂亮的eclipse主题(Theme)风格

热门文章

  1. 【观察】“专精特新”数智化国产替代,为何首选用友U9cloud?
  2. 使用Eclipse搭建STM32嵌入式开发环境
  3. zookeeper之watcher
  4. Java实现龟兔赛跑
  5. Palm 与 webOS 之死
  6. 好斗or炒作?甲骨文“撕咬”过的那些对手 - 爱上英语题库系统|郭雄飞
  7. 机器学习之深度学习 二分类、多分类、多标签分类、多任务分类
  8. 电脑无法显示WLAN图标,无法联网,只有飞行模式
  9. 修改内存卡里linux系统文件怎么恢复,EMMC转SD卡做成内存卡恢复数据教程
  10. 铁路一线工人春运备战实录:深夜里的“钢铁工匠”