使用tushare数据进行backtrader回测
????????tushare是很方便的數據獲取平臺,提供多種金融數據,近乎包含了普通金融數據庫中的所有數據,供一般學習研究使用足以。通過python接口,可以直接訪問數據,無需下載,十分便捷。本人也在學校課程中初次了解到了tushare,并注冊了tushare賬號ID:455337。
數據獲取
???????? 使用策略進行時,需要加數據到backtrader中,backer支持csv數據,默認為來自yahoofinance的數據,但最常用的還是使用自己的csv數據。這時使用tushare進行數據獲取就很方便了。
1.連接tushare接口:這里使用的是新版的tushare pro接口,注冊賬戶后可在個人主頁獲取token
import tushare as ts TOKEN = '****' pro = ts.pro_api(token=TOKEN)2.這里我已經進行了股票alpha的計算,令alpha最小的十只股票作為資產組合,將他們的股票代碼記錄到code中。
#讀取選股的結果 df=pd.read_csv('stock_alpha.csv') df.columns=['ts_code','name','alpha'] min_a=df.sort_values(by='alpha') min_a=min_a.iloc[:10,:] code=[] code=min_a['ts_code']#記錄alpha最小的10支股票代碼3.定義用tushare讀取數據的函數:使用pro.daily()獲取股票日數據
def ts_get_daily_stock(code,start_dt,end_dt):data = pro.daily(ts_code = code,start_date = start_dt,end_date=end_dt)data['trade_date'] = pd.to_datetime(data['trade_date'])data=data.sort_values(by = 'trade_date')data.index = data['trade_date']data = data[['ts_code', 'open', 'high', 'low', 'close', 'pre_close', 'change', 'pct_chg', 'vol', 'amount']]return data?4.簡單的循環獲取并保存數據
for i in range(len(code)):data=ts_get_daily_stock(code.iloc[i],'20190101','')#字段分別為股票代碼、開始日期、結束日期data.to_csv(code.iloc[i]+'.csv') cerebro = bt.Cerebro() for i in range(len(code)):#循環獲取10支股票歷史數據data = bt.feeds.GenericCSVData(dataname=code.iloc[i]+'.csv',fromdate=datetime.datetime(2019, 1, 1),todate=datetime.datetime(2021, 7, 15),dtformat='%Y-%m-%d',datetime=0,#定義trade_date在第0列open=2,high=3,low=4,close=5,volume=9,nullvalue=0.0,#設置空值)cerebro.adddata(data)使用策略對數據進行回測
????????使用的策略基本思路為:對股票30日的收益率并進行排序,選擇前5只股票,如果某只個股滿足股價位于10均線以上且沒有持倉時買入;如果某只個股已持倉但判斷不在選股池中或股價位于10均線以下則賣出。
策略非原創,只做了微小調整,代碼詳情來源于https://blog.csdn.net/ndhtou222/article/details/106416802
加載數據,進行回測
cerebro = bt.Cerebro() for i in range(len(code)):#循環獲取10支股票歷史數據data = bt.feeds.GenericCSVData(dataname=code.iloc[i]+'.csv',fromdate=datetime.datetime(2019, 1, 1),todate=datetime.datetime(2021, 7, 15),dtformat='%Y-%m-%d',datetime=0,#定義trade_date在第0列open=2,high=3,low=4,close=5,volume=9,nullvalue=0.0,#設置空值)cerebro.adddata(data)#回測設置 startcash=100000.0 cerebro.broker.setcash(startcash) # 設置傭金為千分之一 cerebro.broker.setcommission(commission=0.001)# 添加策略 cerebro.addstrategy(MyStrategy,printlog=True) cerebro.run() #獲取回測結束后的總資金 portvalue = cerebro.broker.getvalue() pnl = portvalue - startcash #打印結果 print(f'總資金: {round(portvalue,2)}') print(f'凈收益: {round(pnl,2)}')?
總結
以上是生活随笔為你收集整理的使用tushare数据进行backtrader回测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows Phone 7 开发积累
- 下一篇: Android service 小研究