為VNPY增加資料庫記錄交易資料功能

張國平發表於2019-01-25

在VNPY中,並沒有提供實際交易資料庫記錄功能,雖然可以透過第三方交易軟體去讀取,但是對於針對單個策略交易效果驗證還是不方便,這裡說以下為VNPY增加資料庫記錄交易資料功能。


其實主要還是呼叫VNPY已經提供的功能。


1.在vnpy.trader.app.ctaStrategy.ctaBase中增加一個新的資料庫。

按照你的習慣給名字,比如 DEAL_DB_NAME = 'VnTrader_DEAL_Db'

2.在 vnpy.trader.app.ctaStrategy.ctaTemplate  中,增加一個新的function.

def insertData(self, dbName, collectionName, data):
    if self.trading:
        self.ctaEngine.insertData(dbName, collectionName, data)

3. 在策略onTrade function中加入下面程式碼,用策略名字做collection名字

def onTrade(self, trade):
    # 發出狀態更新事件
    """收到成交推送(必須由使用者繼承實現)"""
    # 對於無需做細粒度委託控制的策略,可以忽略onOrder
    t = trade
    self.insertData(DEAL_DB_NAME,self.name,t)

 在策略程式碼中,如果沒有DEAL_DB_NAME的引用會不成功,請在策略中加入引用

   from vnpy.trader.app.ctaStrategy.ctaBase import DEAL_DB_NAME
或者在

self.insertData(DEAL_DB_NAME,self.name,t)

直接寫死,"DEAL_DB_NAME"


-----------------------------------------------2019年01月30日更新--------------------------------------------------------

發現寫入資料的交易時間 tradeTime 只有時間,沒有日期,不方便分析。開了下原始碼,修改 vnpy.trader.app.ctaStrategy.ctaTemplate 比較簡單。

如果發現插入資料是VtTradeData物件,修改tradeTime

from vnpy.trader.vtObject import VtTradeData
from datetime import datetime
def insertData(self, dbName, collectionName, data):
    if self.trading:
        if isinstance(data,VtTradeData):
            data.tradeTime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        self.ctaEngine.insertData(dbName, collectionName, data)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2564798/,如需轉載,請註明出處,否則將追究法律責任。

相關文章