量化投资在近些年来成为了金融行业中的一个热点,在做量化之前需要先获取到市场的行情数据,今天来介绍一个python接口tushare,通过该接口可以获取到大量的金融数据,涵盖了股票,基本面数据,宏观经济数据等,并且在不断的更新中。
**1.安装教程**
将tushare作为python的一个三方库,提前pip在环境之中,之后通过如下代码导入:
import tushare as ts
需要注意的的是,在首次使用时需要设置token
ts.set_token('your token')
token在tushare主页中的个人中心可以查看。
在获取股票日线行情时用到的接口是:
ts.pro.daily()
参数说明:
ts_code:股票代码,str类型,同时支持多个股票提取,用逗号隔开
trade_date:交易日期,str类型,YYYYMMDD
start_date: 获取数据的起始日期,str类型,YYYYMMDD
end_data:获取数据的终止日期,str类型,YYYYMMDD
接下来分享一下自己封装的一个通过该接口获取股票数据的函数:
class TushareDownloader:
"""Provides methods for retrieving daily stock data from
Tushare Finance API
Attributes
----------
start_date : str
start date of the data (modified from config.py)
end_date : str
end date of the data (modified from config.py)
ticker_list : list
a list of stock tickers (modified from config.py)
Methods
-------
fetch_data()
Fetches data from tushare API"""
def __init__(self, start_date: str, end_date: str, ticker_list: dict):
self.start_date = start_date
self.end_date = end_date
self.ticker_list = ticker_list
def fetch_date(self) -> pd.DataFrame:
"""Fetches data from Tushare API
Parameters
----------
Returns
-------
`pd.DataFrame`
7 columns: A date, open, high, low, close, volume and tick symbol
for the specified stock ticker
"""
# Download and save the data in a pandas DataFrame:
data_df = pd.DataFrame()
for code in self.ticker_list:
temp_df = pro.daily(ts_code=code, start_date=self.start_date, end_date=self.end_date)
temp_df['tic'] = self.ticker_list[code]
data_df = data_df.append(temp_df)
data_df = data_df.drop(['ts_code', 'pre_close', 'change', 'pct_chg', 'amount'], axis=1)
data_df = data_df[['trade_date', 'open', 'high', 'low', 'close', 'vol', 'tic']]
data_df.columns = ['date', 'open', 'high', 'low', 'close', 'volume', 'tic']
data_df['date'] = pd.to_datetime(data_df['date'])
data_df['day'] = data_df['date'].dt.dayofweek
# convert date to standard string format, easy to filter
data_df['date'] = data_df.date.apply(lambda x: x.strftime("%Y-%m-%d"))
data_df = data_df.dropna()
data_df = data_df.reset_index(drop=True)
print("Shape of DataFrame: ", data_df.shape)
# print("Display DataFrame: ", data_df.head())
data_df = data_df.sort_values(by=['date', 'tic']).reset_index(drop=True)
return data_df
后续的使用过程中会继续分享一些关于tushare使用的报告。