日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用tushare数据进行backtrader回测

發(fā)布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用tushare数据进行backtrader回测 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

????????tushare是很方便的數(shù)據(jù)獲取平臺,提供多種金融數(shù)據(jù),近乎包含了普通金融數(shù)據(jù)庫中的所有數(shù)據(jù),供一般學(xué)習(xí)研究使用足以。通過python接口,可以直接訪問數(shù)據(jù),無需下載,十分便捷。本人也在學(xué)校課程中初次了解到了tushare,并注冊了tushare賬號ID:455337。

數(shù)據(jù)獲取

???????? 使用策略進(jìn)行時,需要加數(shù)據(jù)到backtrader中,backer支持csv數(shù)據(jù),默認(rèn)為來自yahoofinance的數(shù)據(jù),但最常用的還是使用自己的csv數(shù)據(jù)。這時使用tushare進(jìn)行數(shù)據(jù)獲取就很方便了。

1.連接tushare接口:這里使用的是新版的tushare pro接口,注冊賬戶后可在個人主頁獲取token

import tushare as ts TOKEN = '****' pro = ts.pro_api(token=TOKEN)

2.這里我已經(jīng)進(jìn)行了股票alpha的計算,令alpha最小的十只股票作為資產(chǎn)組合,將他們的股票代碼記錄到code中。

#讀取選股的結(jié)果 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讀取數(shù)據(jù)的函數(shù):使用pro.daily()獲取股票日數(shù)據(jù)

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.簡單的循環(huán)獲取并保存數(shù)據(jù)

for i in range(len(code)):data=ts_get_daily_stock(code.iloc[i],'20190101','')#字段分別為股票代碼、開始日期、結(jié)束日期data.to_csv(code.iloc[i]+'.csv') cerebro = bt.Cerebro() for i in range(len(code)):#循環(huán)獲取10支股票歷史數(shù)據(jù)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,#設(shè)置空值)cerebro.adddata(data)

使用策略對數(shù)據(jù)進(jìn)行回測

????????使用的策略基本思路為:對股票30日的收益率并進(jìn)行排序,選擇前5只股票,如果某只個股滿足股價位于10均線以上且沒有持倉時買入;如果某只個股已持倉但判斷不在選股池中或股價位于10均線以下則賣出。

策略非原創(chuàng),只做了微小調(diào)整,代碼詳情來源于https://blog.csdn.net/ndhtou222/article/details/106416802

加載數(shù)據(jù),進(jìn)行回測

cerebro = bt.Cerebro() for i in range(len(code)):#循環(huán)獲取10支股票歷史數(shù)據(jù)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,#設(shè)置空值)cerebro.adddata(data)#回測設(shè)置 startcash=100000.0 cerebro.broker.setcash(startcash) # 設(shè)置傭金為千分之一 cerebro.broker.setcommission(commission=0.001)# 添加策略 cerebro.addstrategy(MyStrategy,printlog=True) cerebro.run() #獲取回測結(jié)束后的總資金 portvalue = cerebro.broker.getvalue() pnl = portvalue - startcash #打印結(jié)果 print(f'總資金: {round(portvalue,2)}') print(f'凈收益: {round(pnl,2)}')

?

總結(jié)

以上是生活随笔為你收集整理的使用tushare数据进行backtrader回测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。