股市回测程序
1.基于真实历史数据、真实交易规则 2.功能均以函数给出且注释 3.可将自己的策略写入查看效果
import numpy as np
from numpy.lib.function_base import vectorize
import pandas as pd
import matplotlib.pyplot as plt
from pandas.core.indexes import datetimes
from pandas.core.indexes.base import Index
import tushare as ts
import datetime
from dateutil.parser import parse
from numba import cuda
#ts.set_token('c6a0826859d3f3e6c2bf5fe8d556137617ba7a7f22ff76049166c019')
CASH=1000000,
START_DATE=20180101
END_DATE=20211224
# 下载数据
#pro = ts.pro_api()
#df = pro.daily(ts_code='603518.SH', start_date='20110101', end_date='20211224')
#df.to_csv("603518.SH.csv")#保存股票日线数据
#trade_cal = pro.trade_cal()
#trade_cal.to_csv("trade_cal.csv")#保存交易开盘数据
trade_cal = pd.read_csv("trade_cal.csv")
class Context:
def __init__(self,cash,start_date,end_date):
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)]['cal_date'].values
self.dt=None
class G:
def __init__(self):
self.p1=None
self.p2=None
self.security=None
g=G()
context= Context(CASH,START_DATE,END_DATE)
print (context.date_range)
def set_benchmark(secturity):
context.benchmark=secturity
#获取一定时间段内历史数据
def attribute_daterange_history(secturity,start_date,end_date,fields=('open','close','high','low','vol')):
try:
f=open(secturity+'.csv','r')
df=pd.read_csv(f,index_col='trade_date').loc[end_date:start_date,:]
except FileNotFoundError