借助akshare数据源,通过numpy.where函数进行量化回测。
import akshare as ak
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
from datetime import timedelta
import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
%matplotlib inline
end =datetime.now().strftime('%Y-%m-%d')
start = (datetime.now()-timedelta(days=10000)).strftime('%Y-%m-%d')
stock = '603719'
data = ak.stock_zh_a_hist(symbol=stock, period="daily", start_date="19900301", end_date='20230218', adjust="")
data['日期'] = pd.to_datetime(data['日期'], format='%Y-%m-%d')
data.rename(columns= {'日期':'date','开盘':'open','最高':'high','最低':'low','收盘':'close','成交量':'volume'},inplace=True)
data.set_index('date',inplace=True)
plt.figure(figsize=(16,9))
data['close'].plot()
plt.grid()
plt.show()
import matplotlib.pyplot as plt
%matplotlib inline
initial_cash = 100000.00
trading_signal['stock'] = trading_signal['order']*trading_signal['price']
trading_signal['cash'] = initial_cash-(trading_signal['order'].diff()*trading_signal['price']).cumsum()
trading_signal['total'] = trading_signal['stock'] + trading_signal['cash']+trading_signal['cost']
#trading_signal.fillna(0,inplace=True)
plt.figure(figsize=(16,9))
plt.plot(trading_signal['total'],label='total asset')
plt.plot(trading_signal['order'].cumsum()*trading_signal['price'],'--',
label='stock value')
#plt.xticks([0,120,240])
plt.grid()
plt.legend(loc='best')
plt.show()