VNPY 批量策略回測和統計結果的excel輸出
做VNPY這段時間,發現主要就是回測,和策略優化;然後就是有批量測試和引數集合效果匯出excel分析要求。還有就是一個策略對不同品種效果驗證。
然後想想,就自己寫了一個BatchBackTest 類,其實很簡答,就是輸入品種佇列,和策略佇列,然後就會迴圈跑出結果,輸出到指定路徑excel。 還有就是策略是元組,是由一個策略和對應引數組合。
程式碼如下。使用方法就是在 vnpy/example/CtaBacktesting 路徑下面新疆一個py,放入下面程式碼就可以
然後想想,就自己寫了一個BatchBackTest 類,其實很簡答,就是輸入品種佇列,和策略佇列,然後就會迴圈跑出結果,輸出到指定路徑excel。 還有就是策略是元組,是由一個策略和對應引數組合。
程式碼如下。使用方法就是在 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):
-
#填入品種佇列和策略佇列,返回結果resultlist, 為了輸出方便檢索,加入品種名稱,策略名稱和策略引數
-
resultlist = []
-
for symbol in symbollist:
-
for strategy in strategylist:
-
result = self.runBacktesting(symbol,strategy)
-
#加入品種名稱,策略名稱和策略引數
-
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 ):
-
#寫入測試品種和引數, 返回回測資料集包含回測結果
-
-
# 在引擎中建立策略物件
-
# 建立回測引擎
-
engine = BacktestingEngine()
-
# 設定引擎的回測模式為K線
-
engine.setBacktestingMode(engine.BAR_MODE)
-
# 設定回測用的資料起始日期
-
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"])
-
-
# 設定使用的歷史資料庫
-
engine.setDatabase(MINUTE_DB_NAME, symbol["vtSymbol"])
-
#設定策略,策略元組中第一個是策略,第二個引數
-
engine.initStrategy(strategy[0], strategy[1])
-
engine.runBacktesting()
-
df = engine.calculateDailyResult()
-
result = []
-
dfp,result = engine.calculateDailyStatistics(df)
-
engine.output(u'輸出統計資料')
-
# engine.showDailyResult(dfp, result)
-
return result
-
-
def toExcel(self, resultlist, path = "C:\data\datframe.xlsx"):
-
#按照輸入統計資料佇列和路徑,輸出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 "回測統計結果輸出到" + path
-
-
-
if __name__ == "__main__":
-
#建立品種佇列,這裡可以用json匯入,為了方便使用直接寫了。
-
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
-
}]
-
#這裡定義策略,策略引數先為空;策略加引數是一個元組
-
setting = {}
-
Strategylist = [(AtrRsiStrategy, setting),
-
(BollChannelStrategy, setting),
-
(DoubleMaStrategy, setting),
-
(DualThrustStrategy, setting),
-
(KkStrategy, setting),
-
(MultiSignalStrategy, setting),
-
(MultiTimeframeStrategy, setting)]
-
# 這裡是同一個策略,不同引數的情況,當然可以有多個策略和多個引數組合
-
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)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2156480/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用VNPY回測引擎分析實盤交易,並用excel和pdf輸出分析結果Excel
- 在VNPY2的進行CTA批量回測,支援Json和Excel格式匯入策略JSONExcel
- VNPY 批量優化引數,並輸出到excel優化Excel
- VNPY 一種基於統計的交易策略簡易實現
- VNPY 基於SAR和肯特納的交易策略
- python 實現計算器功能 輸入字串,輸出相應結果Python字串
- filebeat輸出結果到elasticsearch的多個索引Elasticsearch索引
- HTML Table 輸出ExcelHTMLExcel
- show engine innodb status 輸出結果解讀
- 簡單的mysql儲存過程,輸出結果集MySql儲存過程
- Laravel Excel 如何獲取 Excel 檔案的公式結果LaravelExcel公式
- 2018-07-06 自動回撥並統計成功與失敗的結果
- iPhone正常的使用年限是多久?蘋果給出回應,安卓輸了?iPhone蘋果安卓
- postman的批次執行:用於多條介面測試用例批次執行,輸出介面測試測試結果Postman
- sqoop進行將Hive 詞頻統計的結果資料傳輸到Mysql中OOPHiveMySql
- C#中EXCEL的輸入和倒出C#Excel
- vnpy,BollChannel布林線軌道策略分析
- 【Python】批量提取Excel裡的影像PythonExcel
- VNPY 交易所返回委託和交易狀態到策略的原始碼分析原始碼
- 數字多空策略交易系統(實盤+回測+資料)
- 批次檢測主機IP,並把結果生成excel檔案表格Excel
- Java:匯出Excel大批量資料的優化過程JavaExcel優化
- VNPY 中基於Ta-lib的KDJ策略實現
- 測試結果
- 用Pandas讀寫Excel檔案-輸出單sheet和多sheetExcel
- 使用Excel畫出各類統計圖(3)Excel
- 一個頁面內放入文字框和按鈕,實現文字框和按鈕輸繫結,輸入圓半徑,計算圓面積並彈窗計算結果顯示出來。(js)JS
- 慢動作輸出 Linux 命令結果並用彩色顯示Linux
- python中如何判斷all函式輸出結果為true?Python函式
- 使用 Laravel-Excel 和流的方法匯出 ExcelLaravelExcel
- Java用策略模式優雅地匯出ExcelJava模式Excel
- 『動善時』JMeter基礎 — 37、將JMeter測試結果寫入ExcelJMeterExcel
- 開源API測試工具 Hitchhiker v0.8 – 自動化測試結果統計API
- SpringBatch批量處理策略SpringBAT
- 為擴充套件VNPY量化產品線,特指定2020年的產品規劃, VNPY模擬回測方法的國家發明專利套件
- matlab輸出資料為excel檔案MatlabExcel
- 在·VNPY中按照CTA策略例項記錄交易條目和損益
- VNPY 單品種期貨的網格交易策略的實現