一、Tushare简介
Tushare是一个财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。
目前Tushare有免费版本与Pro版本两个版本,免费版本的数据没有Pro版本齐全,而且Pro版数据更稳定质量更好。
非常感谢tushare后面的团队,本着免费开源的思想促进整个互联网的进步,数据时代的来临也就意味着数据本身的价值会在后续的分析和挖掘中体现出来。
个人觉得tushare是一个非常高质量的数据源,如果作为学习的话tushare是非常好的。
最后附上:Tushar的注册链接
二、利用Excel生成双均线策略
1、获取数据
利用tushare可以很方便的获取数据。
>>> import tushare as ts >>> df = ts.get_hist_data("510050","2018-01-01") >>> df = df.sort_values("date") #原数据2017-01-01排在最后面,所以重新排序 >>> df.to_csv("data.csv")
然后打开data.csv文件,可以看到数据已经保存成功了。
2、加工数据
去掉其他数据,只留下close价格,并且用average函数算出ma5,ma20的价格。
所有的ETF行情是三位小数的,所以这里我们也保留三位小数。
3、写策略
=IF(C21>D21,10000,-10000) #持仓情况 =ABS(E23-E22)*B23*0.00015 #手续费
4、展示数据(2017年01.01-08.31数据)
通过EXCEL的折线进行展示,只需要选定date、cumpnl两列数据,然后点击“插入——图表”就可以了。
对应的K线图:
5、展示数据(2018年01.01-10.08数据)
相应的K线展示:
从8月1日开始持续亏损
相应的K线图:
三、python双均线
1.代码
import pandas as pd import tushare as ts data = ts.get_hist_data("510050",start="2017-01-01",end="2017-09-08") data = data.sort_values("date") df = pd.DataFrame() df['close'] = data['close'] df['change'] = df['close']- df['close'].shift(1) df['ma5'] = df['close'].rolling(window=5,center=False).mean() df['ma20'] = df['close'].rolling(window=20,center=False).mean() df = df.dropna() #将带有Na的去掉,返回一个新的对像 df['pos'] = 0 df['pos'][df['ma5']>=df['ma20']] = 10000 df['pos'][df['ma5']<df['ma20']] = -10000
到这一步的时候,出现如下错误:
A value is trying to be set on a copy of a slice from a DataFrame
不管它,只要能看到效果就行。
df['pnl'] = df['change']*df['pos'] #盈亏 df['fee'] = 0 df['fee'][df['pos']!= df['pos'].shift(1)] = df['close']*20000*0.0003 df['netpnl'] = df['pnl'] - df['fee'] #净盈亏 df['cumpnl'] = df['netpnl'].cumsum() df['cumpnl'].plot()
2、效果展示
这里出现了未来函数,这里当天的仓位是基于当天的收盘后均线的比较结果计算出来的。
只需要在第一个代码块最后一行加入以下代码:
df['pos'] = df['pos'].shift(1).fillna(0)
就可以得到正确的结果:
原载:蜗牛博客
网址:http://www.snailtoday.com