小編今天帶大家了解VNPY 批量策略回測和統(tǒng)計結(jié)果的excel輸出是怎樣的,文中知識點介紹的非常詳細。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個問題的朋友找到問題的答案,下面跟著小編一起深入學(xué)習(xí)“VNPY 批量策略回測和統(tǒng)計結(jié)果的excel輸出是怎樣的”的知識吧。
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),仙桃企業(yè)網(wǎng)站建設(shè),仙桃品牌網(wǎng)站建設(shè),網(wǎng)站定制,仙桃網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,仙桃網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
做VNPY這段時間,發(fā)現(xiàn)主要就是回測,和策略優(yōu)化;然后就是有批量測試和參數(shù)集合效果導(dǎo)出excel分析要求。還有就是一個策略對不同品種效果驗證。
然后想想,就自己寫了一個BatchBackTest 類,其實很簡答,就是輸入品種隊列,和策略隊列,然后就會循環(huán)跑出結(jié)果,輸出到指定路徑excel。 還有就是策略是元組,是由一個策略和對應(yīng)參數(shù)組合。
代碼如下。使用方法就是在 vnpy/example/CtaBacktesting 路徑下面新疆一個py,放入下面代碼就可以
# encoding: UTF-8
from vnpy.trader.app.ctaStrategy.ctaBacktesting import BacktestingEngine, MINUTE_DB_NAME
import pandas as pd
from vnpy.trader.app.ctaStrategy.strategy.strategyAtrRsi import AtrRsiStrategy
from vnpy.trader.app.ctaStrategy.strategy.strategyBollChannel import BollChannelStrategy
from vnpy.trader.app.ctaStrategy.strategy.strategyDoubleMa import DoubleMaStrategy
from vnpy.trader.app.ctaStrategy.strategy.strategyDualThrust import DualThrustStrategy
from vnpy.trader.app.ctaStrategy.strategy.strategyKingKeltner import KkStrategy
from vnpy.trader.app.ctaStrategy.strategy.strategyMultiSignal import MultiSignalStrategy
from vnpy.trader.app.ctaStrategy.strategy.strategyMultiTimeframe import MultiTimeframeStrategy
class BatchBackTest(object):
def __init__(self):
""
def calculateBacktesting(self,symbollist,strategylist):
#填入品種隊列和策略隊列,返回結(jié)果resultlist, 為了輸出方便檢索,加入品種名稱,策略名稱和策略參數(shù)
resultlist = []
for symbol in symbollist:
for strategy in strategylist:
result = self.runBacktesting(symbol,strategy)
#加入品種名稱,策略名稱和策略參數(shù)
result["Symbolname"] = str(symbol["vtSymbol"])
result["strategyname"] = str(strategy[0])
result["strategysetting"] = str(strategy[1])
resultlist.append(result)
return resultlist
def runBacktesting(self, symbol, strategy ):
#寫入測試品種和參數(shù), 返回回測數(shù)據(jù)集包含回測結(jié)果
# 在引擎中創(chuàng)建策略對象
# 創(chuàng)建回測引擎
engine = BacktestingEngine()
# 設(shè)置引擎的回測模式為K線
engine.setBacktestingMode(engine.BAR_MODE)
# 設(shè)置回測用的數(shù)據(jù)起始日期
engine.setStartDate(symbol["StartDate"])
engine.setSlippage(symbol["Slippage"]) # 1跳
engine.setRate(symbol["Rate"]) # 傭金大小
engine.setSize(symbol["Size"]) # 合約大小
engine.setPriceTick(symbol["Slippage"]) # 最小價格變動
engine.setCapital(symbol["Capital"])
# 設(shè)置使用的歷史數(shù)據(jù)庫
engine.setDatabase(MINUTE_DB_NAME, symbol["vtSymbol"])
#設(shè)置策略,策略元組中第一個是策略,第二個參數(shù)
engine.initStrategy(strategy[0], strategy[1])
engine.runBacktesting()
df = engine.calculateDailyResult()
result = []
dfp,result = engine.calculateDailyStatistics(df)
engine.output(u'輸出統(tǒng)計數(shù)據(jù)')
# engine.showDailyResult(dfp, result)
return result
def toExcel(self, resultlist, path = "C:\data\datframe.xlsx"):
#按照輸入統(tǒng)計數(shù)據(jù)隊列和路徑,輸出excel,這里不提供新增模式,如果想,可以改
#dft.to_csv(path,index=False,header=True, mode = 'a')
summayKey = resultlist[0].keys()
# summayValue = result.values()
dft = pd.DataFrame(columns=summayKey)
for result in resultlist:
new = pd.DataFrame(result, index=["0"])
dft = dft.append(new,ignore_index=True)
dft.to_excel(path,index=False,header=True)
print "回測統(tǒng)計結(jié)果輸出到" + path
if __name__ == "__main__":
#創(chuàng)建品種隊列,這里可以用json導(dǎo)入,為了方便使用直接寫了。
symbollist = [{
"vtSymbol": 'm1809',
"StartDate": "20180101",
"Slippage": 1,
"Size": 10,
"Rate": 2 / 10000,
"Capital": 10000
},
{
"vtSymbol": 'rb0000',
"StartDate": "20180101",
"Slippage": 1,
"Size": 10,
"Rate": 2 / 10000,
"Capital": 10000
}]
#這里定義策略,策略參數(shù)先為空;策略加參數(shù)是一個元組
setting = {}
Strategylist = [(AtrRsiStrategy, setting),
(BollChannelStrategy, setting),
(DoubleMaStrategy, setting),
(DualThrustStrategy, setting),
(KkStrategy, setting),
(MultiSignalStrategy, setting),
(MultiTimeframeStrategy, setting)]
# 這里是同一個策略,不同參數(shù)的情況,當(dāng)然可以有多個策略和多個參數(shù)組合
Strategylist2 = []
# 策略list
settinglist =[
{'kdlimit': 40, 'barmins': 9, 'cciWindow': 22},
{'kdlimit': 30, 'barmins': 13, 'cciWindow': 20}]
# 合并一個元組
if settinglist != []:
for para1 in settinglist:
Strategylist2.append((BollChannelStrategy, para1))
NT = BatchBackTest()
resultlist = NT.calculateBacktesting(symbollist,Strategylist)
#定義路徑
path = "C:\Project\BackTestResult.xlsx"
NT.toExcel(resultlist,path)
感謝大家的閱讀,以上就是“VNPY 批量策略回測和統(tǒng)計結(jié)果的excel輸出是怎樣的”的全部內(nèi)容了,學(xué)會的朋友趕緊操作起來吧。相信創(chuàng)新互聯(lián)小編一定會給大家?guī)砀鼉?yōu)質(zhì)的文章。謝謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!
分享標(biāo)題:VNPY批量策略回測和統(tǒng)計結(jié)果的excel輸出是怎樣的
標(biāo)題路徑:http://jinyejixie.com/article24/pppice.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、手機網(wǎng)站建設(shè)、做網(wǎng)站、移動網(wǎng)站建設(shè)、微信小程序、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)