本篇文章為大家展示了怎樣為VNPY增加數(shù)據(jù)庫記錄交易數(shù)據(jù)功能,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:國際域名空間、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、夏河網(wǎng)站維護、網(wǎng)站推廣。在VNPY中,并沒有提供實際交易數(shù)據(jù)庫記錄功能,雖然可以通過第三方交易軟件去讀取,但是對于針對單個策略交易效果驗證還是不方便,這里說以下為VNPY增加數(shù)據(jù)庫記錄交易數(shù)據(jù)功能。
其實主要還是調(diào)用VNPY已經(jīng)提供的功能。
1.在vnpy.trader.app.ctaStrategy.ctaBase中增加一個新的數(shù)據(jù)庫。
按照你的習(xí)慣給名字,比如 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): # 發(fā)出狀態(tài)更新事件 """收到成交推送(必須由用戶繼承實現(xiàn))""" # 對于無需做細粒度委托控制的策略,可以忽略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"
發(fā)現(xiàn)寫入數(shù)據(jù)的交易時間tradeTime只有時間,沒有日期,不方便分析。開了下源代碼,修改vnpy.trader.app.ctaStrategy.ctaTemplate 比較簡單。
如果發(fā)現(xiàn)插入數(shù)據(jù)是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)
上述內(nèi)容就是怎樣為VNPY增加數(shù)據(jù)庫記錄交易數(shù)據(jù)功能,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。