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更多資訊可以參見 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")
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2659446/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 數字多空策略交易系統(實盤+回測+資料)
- 使用API介面獲取商品資料:從入門到實踐API
- C/C++ Qt 資料庫與Chart實現歷史資料展示C++QT資料庫
- python實現股票歷史資料析Python
- 使用Jupyter NoteBook進行IB查詢和交易,以及使用演算法交易示例演算法
- 如何在指定資料夾下進入jupyter notebook
- 10.註冊和登入功能實現(3)—— 註冊資料寫入資料庫資料庫
- Python 利用pandas和mysql-connector獲取Excel資料寫入到MySQL資料庫PythonMySqlExcel資料庫
- 用Jupyter—Notebook爬取網頁資料例項14網頁
- 用Jupyter—Notebook爬取網頁資料例項12網頁
- 登入介面:從資料庫中獲取資訊驗證登入(與註冊介面相聯絡)資料庫
- API商品資料介面呼叫實戰:爬蟲與資料獲取API爬蟲
- Python量化交易系統實戰--獲取股票資料Python
- (7)資料庫讀寫分離,主從同步實現方法(資料庫設定)資料庫主從同步
- 實用小工具——快速獲取資料庫時間寫法資料庫
- 【小專案】爬取上海票據交易所資料並寫入資料庫資料庫
- 資料庫讀寫分離,主從同步實現方法資料庫主從同步
- 歷史股票資料的爬取
- 資料庫實現原理#2(獲取第N個值).md資料庫
- MongoDB寫入資料策略MongoDB
- 同時第三方資料來源和資料庫歷史資料,作為cta策略初始化資料庫
- Thinkphp5框架實現獲取資料庫資料到檢視的方法PHP框架資料庫
- 獲取天氣介面資料
- ES 實現實時從Mysql資料庫中讀取熱詞,停用詞MySql資料庫
- 獲得JD商品評論 API 如何實現實時資料獲取API
- 實際案例:如何實現報表回寫時引數聯動輸入資料
- mysql資料庫實現主從複製MySql資料庫
- 資料庫學習筆記1(資料管理歷史)資料庫筆記
- 從session中獲取資料Session
- Spring Aop實現資料庫讀寫分離Spring資料庫
- dg_閃回資料庫實驗資料庫
- 使用SQL SERVER儲存過程實現歷史資料遷移SQLServer儲存過程
- swing 實現使用者登入註冊介面(不使用資料庫)資料庫
- 策略模式實現支援多種類資料庫的DBHelp模式資料庫
- 深度 | 實時歷史資料庫儲存成本驚人,怎麼破?資料庫
- 寫資料庫實驗報告資料庫
- 使用C#/.NET解析Wiki百科資料實現獲取歷史上的今天C#
- 從鍵盤鍵入String型別的資料插入資料庫中型別資料庫