一、上下文数据存储
tushare发生了重大改版,不再直接提供免费服务。需要用户注册获取token,并获取足够积分才能使用sdk调用接口。
1、获取股票交易日信息保存到csv文件
没有找到csv文件时:获取股票交易日信息并导出到csv文件。
如果有找到csv文件,则直接读取数据。
注意:新版tushare需要先设置token和初始化pro接口。
import numpy as np import pandas as pd import matplotlib.pyplot as plt import tushare as ts # 财经数据包 """ 获取所有股票交易日信息,保存在csv文件中 """ # 设置token ts.set_token('2cfd07xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx9077e1') # 初始化pro接口 pro = ts.pro_api() try: trade_cal = pd.read_csv("trade_cal.csv") """ print(trade_cal) Unnamed: 0 exchange cal_date is_open 0 0 SSE 19901219 1 1 1 SSE 19901220 1 2 2 SSE 19901221 1 """ except: # 获取交易日历数据 trade_cal = pro.trade_cal() # 输出到csv文件中 trade_cal.to_csv("trade_cal.csv")
2、定制股票信息类
注意:日期格式变为了纯数字,cal_date是日期信息,is_open列是判断是否开市的信息。
class Context: def __init__(self, cash, start_date, end_date): """ 股票信息 :param cash: 现金 :param start_date: 量化策略开始时间 :param end_date: 量化策略结束时间 :param positions: 持仓股票和对应的数量 :param benchmark: 参考股票 :param date_range: 开始-结束之间的所有交易日 :param dt: 当前日期 (循环时当前日期会发生变化) """ self.cash = cash self.start_date = start_date self.end_date = end_date self.positions = {} # 持仓信息 self.benchmark = None self.date_range = trade_cal[ (trade_cal["is_open"] == 1) & \ (trade_cal["cal_date"] >= start_date) & \ (trade_cal["cal_date"] <= end_date) ]
3、使用context查看交易日历信息
context = Context(10000, 20160101, 20170101) print(context.date_range) """ Unnamed: 0 exchange cal_date is_open 9147 9147 SSE 20160104 1 9148 9148 SSE 20160105 1 9149 9149 SSE 20160106 1 9150 9150 SSE 20160107 1 9151 9151 SSE 20160108 1 ... ... ... ... ... 9504 9504 SSE 20161226 1 9505 9505 SSE 20161227 1 9506 9506 SSE 20161228 1 9507 9507 SSE 20161229 1 9508 9508 SSE 20161230 1 """
二、获取历史数据
前面可以看到trade_cal获取的的日期数据都默认解析为了数字,并不方便使用,将content类修改如下:
CASH = 100000 START_DATE = '20160101' END_DATE = '20170101' cl