同時第三方資料來源和資料庫歷史資料,作為cta策略初始化
首先個人推薦使用第三方資料來源,如果資料來源質量有保證的話。
如果啟動第三方資料來源,在cta策略啟動時候,會從資料來源下載load_bar所需要的預期的資料,看策略需求,下載日期或長或短。
如果策略較少沒關係,如果策略較多,尤其是同一合約有多個策略時候,每次啟動就花費非常多時間,而且很多是重複下載,比如如果有多個螺紋鋼策略,就要下載多次螺紋鋼資料,還是不太方法。
這裡思路很簡單,策略啟動時候,對比啟動需要資料是否在資料庫內,如果有使用資料庫資料,如果沒有,下載再使用。
對比是按照需要資料的開始結束和資料庫內bar overview表的開始和結束。查詢結束時候可能大於bar結束時候,比如下午8點半啟動,但是bar結束資料是下午3點;這樣可能有差異取讀取,想想為了安全,冗餘一些沒有關係。
程式碼如下,只要用這個替代cta_engine裡面同名方法即可。這個是基於vntrade 2.3 的,2.6 的版本,改為 query_bar_from_datafeed即可
from vnpy.trader.database import database_manager from tzlocal import get_localzone LOCAL_TZ = get_localzone() def query_bar_from_rq( self, symbol: str, exchange: Exchange, interval: Interval, start: datetime, end: datetime ): """ Query bar data from RQData. """ req = HistoryRequest( symbol=symbol, exchange=exchange, interval=interval, start=start, end=end ) bar_start = None bar_end = None bar_overview_list = database_manager.get_bar_overview() for bar_overview in bar_overview_list: if bar_overview.symbol == symbol and bar_overview.exchange == exchange and bar_overview.interval == interval: bar_start = bar_overview.start.astimezone(LOCAL_TZ) bar_end = bar_overview.end.astimezone(LOCAL_TZ) if bar_start <= start: req = HistoryRequest( symbol=symbol, exchange=exchange, interval=interval, start= bar_end, end=end + timedelta(minutes=1) ) data = rqdata_client.query_history(req) if data: database_manager.save_bar_data(data) if bar_end: self.write_log(f"{symbol}.{exchange}-{interval.value},資料庫已有 {bar_start} 到 {bar_end}資料,從 {bar_end} 到{end}歷史資料下載完成") else: self.write_log( f"{symbol}.{exchange}-{interval.value},從 {start} 到{end}歷史資料下載完成") else: if bar_end: self.write_log(f"{symbol}.{exchange}-{interval.value},資料庫已有 {bar_start} 到 {bar_end}資料,從 {bar_end} 到{end}或無歷史資料") else: self.write_log( f"{symbol}.{exchange}-{interval.value},從 {start} 到{end}歷史資料下載失敗") bars = database_manager.load_bar_data( symbol=symbol, exchange=exchange, interval=interval, start=start, end=end, ) return bars
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2838063/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫歷史資料有效管理資料庫
- 巧用閃回資料庫來檢視歷史資料資料庫
- BI:資料說Facebook歷史和未來
- GridView用資料來源控制元件和用DataTable作為資料來源的不同View控制元件
- 資料來源連線資料庫資料庫
- 資料庫學習筆記1(資料管理歷史)資料庫筆記
- 從AdventureWorks學習資料庫建模——保留歷史資料資料庫
- java DB 雙資料來源和資料庫事務配置Java資料庫
- 國產資料庫源流史:AntDB資料庫資料庫
- BIRT 怎麼呼叫 Webservice 作為資料來源Web
- C/C++ Qt 資料庫與Chart實現歷史資料展示C++QT資料庫
- 改寫資料庫歷史的中國人資料庫
- 世界資料庫史資料庫
- 走進資料的歷史
- Jim Gray:資料管理歷史
- 潤乾填報時資料來源為nullNull
- 從資料庫發展史看資料庫未來技術趨勢資料庫
- Spring系列 之資料來源的配置 資料庫 資料來源 連線池的區別Spring資料庫
- Jupyter Notebook實現從IB介面歷史資料獲取,寫入資料庫,策略回測和實盤交易資料庫
- 資料表分割槽分割與刪除歷史資料
- 五種資料庫資料模型分片策略資料庫模型
- List作為GridView資料來源時,繫結模板列的例子View
- 為什麼有時Oracle資料庫不用索引來查詢資料?(轉)Oracle資料庫索引
- 監視資料庫映象的歷史記錄資料庫
- 實時資料庫與時序資料庫資料庫
- java 無需建立資料來源連線access資料庫Java資料庫
- 「資料庫、資料庫連線池、資料來源」這些概念你真的理解了嗎?資料庫
- 明解資料庫------資料庫儲存演變史資料庫
- 歷史股票資料的爬取
- zabbix清除歷史監控資料
- 回溯歷史:甲骨文收購開源資料庫廠商(轉)資料庫
- 基於多資料來源零程式碼同時生成多個資料庫CRUD增刪改查RESTful API介面資料庫RESTAPI
- 臨時表在Oracle資料庫與SQL Server資料庫中的異同Oracle資料庫SQLServer
- 資料庫映象和資料庫快照資料庫
- 【YashanDB資料庫】yasboot查詢資料庫狀態時顯示資料庫狀態為off資料庫boot
- jndi資料來源
- Oracle11g清理資料庫歷史日誌Oracle資料庫
- 資料庫模型設計——歷史與版本設計資料庫模型