简单回测框架开发

本文介绍了如何开发一个简单的股票回测框架,包括上下文数据存储、获取历史数据、基础下单函数以及四种常用下单函数的实现。内容涵盖tushare接口的使用、交易日历的处理、历史行情获取及下单异常处理等关键步骤。
摘要由CSDN通过智能技术生成

一、上下文数据存储

  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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值