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
- VNPY 批量優化引數,並輸出到excel優化Excel
- 在VNPY2的進行CTA批量回測,支援Json和Excel格式匯入策略JSONExcel
- 記錄輸出結果工具-script
- 【執行計劃】格式化EXPLAIN PLAN的輸出結果AI
- MySQL的Explain結果輸出項解釋MySqlAI
- filebeat輸出結果到elasticsearch的多個索引Elasticsearch索引
- python 實現計算器功能 輸入字串,輸出相應結果Python字串
- MySQL show status命令輸出結果詳解MySql
- LINUX中fdisk -l 輸出結果的解讀Linux
- 簡單的mysql儲存過程,輸出結果集MySql儲存過程
- Laravel Excel 如何獲取 Excel 檔案的公式結果LaravelExcel公式
- MySQL執行計劃explain輸出列結果解析MySqlAI
- 測試結果
- sqlplus格式化輸出(輸出結果顯示在同一行)SQL
- 壽命計算器測試結果
- VNPY 一種基於統計的交易策略簡易實現
- 閃回資料庫測試之二 :通過read only檢視閃回的結果資料庫
- 批次檢測主機IP,並把結果生成excel檔案表格Excel
- VNPY 基於SAR和肯特納的交易策略
- 機器學習和統計模型的差異機器學習模型
- 壓測結果分析
- DataExpress測試結果Express
- php中對MYSQL操作之批量執行,與獲取批量結果PHPMySql
- 『動善時』JMeter基礎 — 37、將JMeter測試結果寫入ExcelJMeterExcel
- 資料泵匯出索引資料和統計資訊嗎索引
- 京東雲環境搭建oracle rac詳細部署梳理(可信的結果輸出)Oracle
- python中如何判斷all函式輸出結果為true?Python函式
- 慢動作輸出 Linux 命令結果並用彩色顯示Linux
- 在sqlplus下格式化輸出查詢結果集SQL
- vnpy,BollChannel布林線軌道策略分析
- 讀取popen輸出結果時未截斷字串導致的命令列注入字串命令列
- 有時候一個程式的輸出結果就是像這樣不可思議
- 第13周-閱讀專案4-寫出下面程式的輸出結果
- Linux下輸出excel檔案LinuxExcel
- XML 報表自動輸出ExcelXMLExcel
- Java中的輸入輸出總結Java
- C#呼叫Windows CMD命令並,返回輸出結果或錯誤資訊C#Windows