- 点赞、关注再看,养成良好习惯
- Life is short, U need Python
1. 前言
作为投资者,尤其是量化投资者,时常听到的一句话是“不要把鸡蛋放入同一个篮子中”,即所谓的分散投资策略。于是,从中可以看出分散投资可以降低投资风险,但是,投资者面对几千种各式各样的篮子,选择哪一个篮子,然后每个篮子该放多少个鸡蛋,大多数投资者仅仅凭自己的感觉或者一时冲动;另外,即使投资者选对篮子且鸡蛋数量也控制的很好,可是何时把手里的鸡蛋换成超额收益又是跟着感觉走。针对上述种种问题,量化投资破壳而出,专门解决上述问题的一种工具。
众所周知,金融数据是量化投资的基础和前提,投资者制定的量化投资策略都是建立在对金融数据分析的基础上。本文博主将带领大家尝试如何利用Python实现金融数据的获取。
据博主所知,目前在线编程量化投资平台众多,而且各种在线策略平台都支持Python语言(而且大多策略平台仅支持Python语言,且对应的Python课程资源以及策略案例众多,社区非常活跃),例如JoinQuant(聚宽量化交易平台)、BigQuant(点宽量化交易平台)、UQER(优矿量化交易平台)、WQ(万矿量化交易平台)等,这也是博主推出Python量化投资基础系列的原因。但是,本文不再涉及利用Python调取这些平台端口的金融数据(因为这些平台需要注册,且每天流量有限制,速度有点慢)。
2. 雅虎网
(1)官网:https://www.yahoo.com/
(2)安装 pandas-datareader
- 命令行窗口:pip install pandas-datareader(建议)
- 下载本地安装:https://pypi.org/project/pandas-datareader/
(3)读取数据
import pandas_datareader.data as pdr
# 读取标普500
sp500 = pdr.DataReader(name='^GSPC',data_source='yahoo',start='1/1/2020',end='2/26/2020)
# 查看数据前5行
sp500.head()
# 输出数据
sp500.to_csv('sp500.csv')
或者
import pandas_datareader.data as pdr
# 读取标普500
sp500 = pdr.get_data_yahoo('^GSPC',start='1/1/2020',end='20/2/2020')
# 查看数据前5行
sp500.head()
# 输出数据
sp500.to_csv('sp500.csv')
- 上证、深证标的
import pandas_datareader.data as pdr
# 读取浦发银行:600000(上证)
stock_600000 = pdr.get_data_yahoo('600000.ss','1/1/2015','20/8/2015')
stock_600000.head()
# 读取广发证券:000776(深证)
stock_000776 = pdr.get_data_yahoo('000776.sz','1/1/2015','20/8/2015')
stock_000776.head()
3. TuShare
TuShare是一个免费、开源的python财经数据接口包。
主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。
考虑到Python pandas包在金融量化分析中体现出的优势,TuShare返回的绝大部分的数据格式都是pandas DataFrame类型。
(1)官网:http://tushare.org/
(2)安装 tushare
- 命令行窗口:pip install tushare
- 下载本地安装:https://pypi.python.org/pypi/tushare/
(3)读取数据
import tushare as ts
# 读取中国平安(601318)数据
zgpa = ts.get_hist_data('601318', start='2019-01-01', end='2019-02-20')
# 查看数据前5行
zgpa.head()
# 输出数据
zgpa.to_csv('zgpa.csv')
或者
import tushare as ts
# 读取中国平安(601318)数据: ktype='D'/'W'/'M'(日/周/月); 默认日线数据
zgpa = ts.get_hist_data('601318', start='2019-01-01', end='2019-02-20', ktype='D')
# 查看数据前5行
zgpa.head()
# 输出数据
zgpa.to_csv('zgpa.csv')
- 注: "ts.get_hist_data"接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/document/2
import tushare as ts # 事先安装:pip install tushare
pro = ts.pro_api()
df_000776 = pro.daily(ts_code='000776.SZ', start_date='20161017', end_date='20181117') # 日线数据
df_000776 = pro.weekly(ts_code='000776.SZ', start_date='20161017', end_date='20181117') # 周线数据
df_000776 = pro.monthly(ts_code='000776.SZ', start_date='20161017', end_date='20181117') # 月线数据
df_000776.head()
4. BaoStock
(1)官网:http://baostock.com/baostock/index.php
(2)安装baostock
- 命令行窗口:pip install baostock
- 下载本地安装:https://pypi.python.org/pypi/baostock
(3)读取数据
import baostock as bs
# 无需注册,直接输入此行代码即可
lg = bs.login(user_id="anonymous", password="123456")
# 浦发银行数据(600000):frequency=’d'/'w'/'m'(日/周/月)
# 选取特征
fields = 'date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST'
rs = bs.query_history_k_data('sh.600000',fields,start_date='2019-01-01', end_date='2019-02-20', frequency="d")
# 获取数据
pfyh = rs.get_data()
# 查看数据前5行
pfyh.head()
# 输出数据
pfyh.to_csv('pfyh.csv')
- date(日期);code(代码);open(开盘价);high(最高价);high(最高价);low(最低价);close(收盘价);preclose(前收盘价);volume(成交量);amount(成交额);adjustflag(复权状态:1-后复权2-前复权3-不复权);turn(换手率);tradestatus(交易状态:1-正常0-停盘);pctChg(涨跌幅);peTTM(动态市盈率);pbMRQ(市净率);psTTM(市销率);pcfNcfTTM(市现率);isST(是否ST:1-是0-否)
- 写作不易,切勿白剽
- 博友们的点赞和关注就是对博主坚持写作的最大鼓励
- 持续更新,未完待续…
下一篇:量化投资基础(一)之 K线图策略