python适合数据分析类的工作是众所周知的,那么金融数据是其中重要的一个部分,国内这样提供免费的金融数据的API并不是很多,可能是我孤陋寡闻,有更好的选择还请各位大神多多指教~~
Tushare简单的介绍:Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。当然,如果您习惯了用Excel或者关系型数据库做分析,您也可以通过Tushare的数据存储功能,将数据全部保存到本地后进行分析。应一些用户的请求,从0.2.5版本开始,Tushare同时兼容Python 2.x和Python 3.x,对部分代码进行了重构,并优化了一些算法,确保数据获取的高效和稳定。
tushare website: http://tushare.org/
废话少说,进入正题
OS: Win10 x64
python version: 3.6
IDE: PyCharm
tushare version: 1.2.4
下面是我简单的开发的python程序,通过tushare来获取股票的历史价格数据(包括日期,日开盘价,日最高价,日最低价,日收盘价,日成交量,日成交额),并保存为csv文件。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import datetime
import time
from random import random
import dateutil
import pandas as pd
import tushare
def getdata(code, index, start_date, end_date):
"""obtain history price of stock"""
# format date
start = dateutil.parser.parse(start_date)
end = dateutil.parser.parse(end_date)
# obtain data by year
total = pd.DataFrame()
flag = True
while flag:
delta = datetime.timedelta(days=365)
end = start + delta
# Max end_date is today
if end > datetime.datetime.today():
end = datetime.datetime.today()
flag = False
# transfer datetime to string
start_str = datetime.datetime.strftime(start, '%Y-%m-%d')
end_str = datetime.datetime.strftime(end, '%Y-%m-%d')
print(start_str, end_str)
try:
result = tushare.get_h_data(code=code, index=index, start=start_str, end=end_str)
print(result[:1])
total = result.append(total)
except:
print("Getting data error")
total.to_csv(filename, mode='w')
finally:
# wait for [10,15)s
sec = round(random() * 5 + 10, 1)
print("waiting for %0.1f s" % sec)
time.sleep(sec)
start = end + datetime.timedelta(days=1)
return total
def getstartdate(code):
"""obtain establish date of stock"""
df = tushare.get_stock_basics()
date = df.ix[code]['timeToMarket'] # 上市日期YYYYMMDD
return date
if __name__ == '__main__':
"""arguments:
code
start date
end date
index
filename
"""
# stock code
code = '000016'
# start date
start_date = '20030101'
# end date
end_date = '20180808'
# 如果是大盘指数index=True,我这里获取上证50指数历史数据,所以index=True
index = True
#如果是具体股票代码index=False
# index = False
# file name & path to save
filename = "D:\\MyCode\\data\\" + code + ".csv"
# get data
resultDF = getdata(code, index, start_date, end_date)
# save data to csv
resultDF.to_csv(filename, mode='w')
获取数据完成后,保存的csv文件格式如下图:
然后可以利用获取的数据进行分析。。。