VNPY2 中凌晨0點時間戳的處理問題,和夜盤資料時間戳分析
今天在群裡面,看到有人反映vnpy2中0點0分0秒這一秒的時間戳有問題,如下圖倒序的tick資料,第三條應該是6-29 00:00:00
這個時間,但是儲存時候,日報變成了2021-06-28日。
這個問題在Github的issue 中也有人提了, 提問者也做了分析。
我這邊在重複分析下原因。
tick的資料接受處理實在CtpMdApi這個類中的onRtnDepthMarketData方法,這個是一個被介面呼叫方法,傳入的是叫做data字典格式的tick資料。。
從下面程式碼節段,可以看出,時間戳timestamp是用本地的日期(self.current_date) 和傳入tick data的時間data['UpdateTime'] 和毫秒data['UpdateMillisec']組合出來的。
timestamp: str = f"{self.current_date} {data['UpdateTime']}.{int(data['UpdateMillisec']/100)}" dt: datetime = datetime.strptime(timestamp, "%Y%m%d %H:%M:%S.%f") dt = CHINA_TZ.localize(dt) ..... datetime=dt,
self.current_date這個本地日期資料並不是實時讀取,而且用如下方法更新,這個方法是定時事件處理每秒出發跑一次更新。
為什麼這樣做,因為tick資料可能一秒有多少不同品種tick的傳入,如果每次都用datetime.now()方法計算,太佔用時間了。所以就一秒更新一次,節約運算。
def update_date(self) -> None: """更新當前日期""" self.current_date = datetime.now().strftime("%Y%m%d")
但是在凌晨0秒時候,這個current_date還沒有更新,還是昨天的時間,造成上面錯誤。
其實印象中這個錯誤在之前vnpy v1版本看到有人提出過,查了下在v1.9.2版本已經修復過。 v1.9.2程式碼如下
# 上期所和鄭商所可以直接使用,大商所需要轉換 tick.date = data['ActionDay'] # 大商所日期轉換 if tick.exchange == EXCHANGE_DCE: tick.date = datetime.now().strftime('%Y%m%d')
這裡可以看到,對於上期所和鄭商所使用tick中帶日期的actionDay,而只有大商所採用本地時間,因為大商所夜盤到11點,所以完全OK。
這裡好像問題解決差不多了,好像是在vnpy2版本把之前的休息忘記了。 只要按照v1.9.2版改改就差不多了。這個倒是不難。
但是為什麼要用本地日期了,而不直接用tick 資料自己帶的日期了,一查發現還是有些彎彎道道的。
首先tick資訊裡面其實有兩個日期,TradingDay 和ActionDay,其實tradingDay可以理解為交易日,比如夜盤交易通常算第二天的,夜盤的掛單到第二天還是有效;而ActionDay可以理解為實際日期,就是還是當天。
如下圖
但是,很奇怪的事情發現了,大商所的ActionDay竟然就是交易日TradingDay,所以沒法預設統統使用ActionDay,不然大商所的資料就亂,當天夜盤日期反而是明天。
所以該法就是分析交易所,如果是大商所用本地時間,其他用tick的ActionDay.
截圖引用的連結被自動吃了,沒有顯示,實在抱歉
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2781665/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- c++ 獲取當前時間周初凌晨時間戳(獲取當前時間週一凌晨時間戳)C++時間戳
- js獲取某時間的當天0點時間戳 與某時間的當週週一0點時間戳JS時間戳
- Python的時間、日期和時間戳的處理辦法Python時間戳
- Unix 字串時間戳問題字串時間戳
- java時間戳和PHP時間戳的轉換phptime()Java時間戳PHP
- 時間型別和時間戳型別時間戳
- MySQL時間戳、時間MySql時間戳
- 32 位 PHP 時間戳問題PHP時間戳
- mysql獲取今天、昨天0點時間戳MySql時間戳
- javascript時間戳與php返回的時間戳統一JavaScript時間戳PHP
- JavaScript 時間戳JavaScript時間戳
- kafka時間戳Kafka時間戳
- Perl中本地時間和UNIX時間戳間相互轉換時間戳
- db2 前滾最小恢復時間和時間戳問題DB2時間戳
- PHP獲取當天凌晨時間戳常用程式碼PHP時間戳
- 兩個時間戳的時間差時間戳
- mysql時間操作(時間差和時間戳和時間字串的互轉)MySql時間戳字串
- 時間轉換成時間戳時間戳
- C 時間轉換時間戳時間戳
- C# 時間戳轉時間C#時間戳
- javascript時間戳和時間格式的相互轉換JavaScript時間戳
- mysql資料庫時間戳函式MySql資料庫時間戳函式
- C 時間戳轉換成時間時間戳
- 時間戳轉化為時間格式時間戳
- Windows批處理中獲取系統日期、時間戳記Windows時間戳
- SQL Server中timestamp(時間戳)SQLServer時間戳
- 基於時間戳閃回資料庫時間戳資料庫
- JavaScript獲取時間戳JavaScript時間戳
- Python-時間戳Python時間戳
- python時間戳和時間字串的各種轉換Python時間戳字串
- Excel中時間戳轉換時間Excel時間戳
- 時間戳與時間字串的多時區轉換時間戳字串
- Android 時間戳和日期之間的轉化Android時間戳
- javascript將時間物件轉換為時間戳JavaScript物件時間戳
- 時間日期和時間戳相互轉換程式碼例項時間戳
- Linux命令date 日期時間和Unix時間戳互轉Linux時間戳
- 轉換時間戳的函式時間戳函式
- SCN 時間戳的相互轉換時間戳