您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Jupyter Notebook怎么實現從IB接口歷史數據獲取及寫入數據庫、策略回測和實盤交易,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
剛好有個同學問怎么實現IB盈透歷史數據獲取,和策略回測和實盤交易。想著熟悉vnpy2.0操作,就用Jupyter Notebook都是跑了一邊。VNPY2.0的整體架構設計很有擴展性,而且調用也比起v1.0先進清晰很多,引擎加載調用非常方便。
講講注意點:
IB盈透接口歷史數據大多是要收費訂閱的,如果收費會有報錯信息提示,這里找個免費的作為使用。另外vnpy是按照最大6個月歷史數據設計的。
數據庫定義有個小坑,我是用mongodb的,在第一次填寫 trader/setting.py中密碼寫錯了,后面在trader/setting.py改發現怎么也改不好;原來當第一次維護后,配置會寫入.vntrader/vt_setting,之后系統只會去.vntrader/vt_setting讀取。去改vt_setting,而不是trader/setting.py。
使用CtaStrategyApp支持加入新策略,系統會自動輸出json保持策略信息;所以第二次運行代碼時候,會提示已經有了,不是問題。
我在代碼里面把回測和實盤放在一次,如果直接跑下來可能會報錯,建議跑實盤時候先注釋的回測。
使用script_engine訂閱歷史數據是是默認從rqdata獲取,vnpy v2.07 IB接口已經提供歷史數據獲取,這里創建HistoryRequest用main_engine來獲取,
為了方便貼出來,改成.py代碼格式,直接跑也沒有問題。
from vnpy.app.script_trader import init_cli_trading from vnpy.app.script_trader.cli import process_log_event from vnpy.gateway.ib import IbGateway from time import sleep from datetime import datetime import pandas as pd # 連接到服務器 setting = { "TWS地址": "127.0.0.1", "TWS端口": 7497, "客戶號":8 #每個鏈接用一個獨立的鏈接號,一個IBAPI支持32個來同時鏈接 } engine = init_cli_trading([IbGateway]) #返回Script_engine 示例,并且給main_engine注冊了gateway engine.connect_gateway(setting, "IB") #鏈接 # 查詢資金 - 自動 sleep(10) print("***查詢資金和持倉***") print(engine.get_all_accounts(use_df = True)) # 查詢持倉 print(engine.get_all_positions(use_df = True)) # 訂閱行情 from vnpy.trader.constant import Exchange from vnpy.trader.object import SubscribeRequest # 從我測試直接用Script_engine有問題,IB的品種太多,get_all_contracts命令不行,需要指定具體后才可以,這里使用main_engine訂閱 req1 = SubscribeRequest("12087792",Exchange.IDEALPRO) #創建行情訂閱 engine.main_engine.subscribe(req1,"IB") # 使用script_engine訂閱歷史數據是從rqdata獲取,vnpy v2.07已經提供歷史數據獲取,這里創建HistoryRequest來獲取, # 查詢如果沒有endtime,默認當前。返回歷史數據輸出到數據庫和csv文件 # 關于api更多信息可以參見 https://interactivebrokers.github.io/tws-api/historical_bars.html print("***從IB讀取歷史數據, 返回歷史數據輸出到數據庫和csv文件***") from vnpy.trader.object import HistoryRequest from vnpy.trader.object import Interval start = datetime.strptime('20190901', "%Y%m%d") historyreq = HistoryRequest( symbol="12087792", exchange=Exchange.IDEALPRO, start=start, interval=Interval.MINUTE ) # # 讀取歷史數據,并把歷史數據BarData放入數據庫 bardatalist = engine.main_engine.query_history(historyreq,"IB") from vnpy.trader.database import database_manager database_manager.save_bar_data(bardatalist) # 把歷史數據BarData輸出到csv pd.DataFrame(bardatalist).to_csv("C:\Project\\"+ str(historyreq.symbol) + ".csv" , index=True, header=True) print("History data export to CSV") # # 參考backtesting.ipynb, 使用自帶的雙均線策略回測,10日上穿60日做多,否則反之 print("***從數據庫讀取歷史數據, 進行回測***") from vnpy.app.cta_strategy.backtesting import BacktestingEngine from vnpy.app.cta_strategy.strategies.double_ma_strategy import ( DoubleMaStrategy, ) btengine = BacktestingEngine() #新建回測引擎 btengine.set_parameters( vt_symbol="12087792.IDEALPRO", interval="1m", start=datetime(2019, 9, 1), end=datetime(2019, 10, 5), rate = 0, slippage=0.00005, size=1000, pricetick=0.00005, capital=1_000_000, ) btengine.add_strategy(DoubleMaStrategy, {"fast_window":10, "slow_window": 60}) btengine.load_data() btengine.run_backtesting() df = btengine.calculate_result() btengine.calculate_statistics() btengine.show_chart() # 給script_engine載入雙均線策略,實盤運行 print("***從數據庫讀取準備數據, 實盤運行***") # 使用cta交易引擎 from vnpy.app.cta_strategy import CtaStrategyApp from vnpy.app.cta_strategy.base import EVENT_CTA_LOG engine.event_engine.register(EVENT_CTA_LOG, process_log_event) cta_engine = engine.main_engine.add_app(CtaStrategyApp) #加入app cta_engine.init_engine() cta_engine.add_strategy("DoubleMaStrategy","DoubleMaStrategy_IB_12087792_v1", "12087792.IDEALPRO",{"fast_window":10, "slow_window": 50}) sleep(10) cta_engine.init_strategy("DoubleMaStrategy_IB_12087792_v1") sleep(10) cta_engine.start_strategy("DoubleMaStrategy_IB_12087792_v1")
以上就是Jupyter Notebook怎么實現從IB接口歷史數據獲取及寫入數據庫、策略回測和實盤交易,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。