在VNPY中策略中,使用分鐘線合成日K線
在論壇裡面看到不少關於分鐘合成日線的討論,也試著實現了。這裡是針對vnpy2.0的,1.92其實基本也差不多。
-
這裡把合成的日線HLOC資訊放在pandas.DataFrame裡面,因為日線分析的話,對運算時間要求不是特別高,DataFrame足矣
-
合成過程放在on_bar方法裡面,對每個傳入的分鐘進行日線合併處理;
-
這裡用了trading == False進行判斷,就是隻在策略初始化過程對於歷史資料進行日線合併。在交易過程中,不對當天傳入分鐘資料進行處理。因為日線是長週期資料,放在程式啟動時候呼叫使用就可以,不必要盤中分析,如果打算真要,註釋掉這個就可以。
-
這裡只是提供了這個DataFrame 放置日線資料,具體如何分析還是要看使用者了
定於dayFrame儲存日線資料,在策略定義中插入全域性變數
class *********Strategy(CtaTemplate): author = "用Python的交易員" import pandas as pd dayFrame = pd.DataFrame(columns=['datetime', 'high', 'low', 'open', 'close'])
合併過程,在on_bar 方法中插入下面程式碼
def on_bar(self, bar: BarData): """ """ if self.trading == False: # adjustedBarTime = bar.datetime + timedelta(hours = 5) if self.dayFrame.empty: # 如果dayFrame 為空,先加入一條 self.dayFrame = self.dayFrame.append({'datetime': bar.datetime.date(), 'high':bar.high_price, 'low': bar.low_price, 'open': bar.open_price, 'close': bar.close_price}, ignore_index=True) else: self.dayFrame = self.dayFrame.sort_values(['datetime']).reset_index(drop=True) # 如果dayFrame 不為空,先按照日期排序, if bar.datetime.date() in self.dayFrame['datetime'].values: # 如果是已有日期,對比high,low更新,並使用新close self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'high'] = \ max(max(self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'high'].values),bar.high_price) self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'low'] = \ min(min(self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'low'].values),bar.low_price) self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'close'] = bar.close_price else: # 如果是新的日期,新建一條 self.dayFrame = self.dayFrame.append( {'datetime': bar.datetime.date(), 'high': bar.high_price, 'low': bar.low_price, 'open': bar.open_price, 'close': bar.close_price}, ignore_index=True)
另外,這裡預設就是自然日。如果想按照國內期貨期貨時間,就是晚上九點開盤時間就是第二天的話。有個取巧的方法,就是把bar時間加上5個小時,那麼下午9點就變成明天1點,這樣dataframe就會儲存為下一天資料。而當天15點加上5點20點還是當天資料。
不過這樣改很粗糙,只能支援國內時間和國內期貨,如果伺服器再其他時區,或者其他產品就另外分析。
修改方法,定義區域性變數adjustedBarTime,是傳入bar.datetime 時間加5;代替後面新增程式碼中所有用到bar.datetime地方。
週五時候想到一個問題,對於國內期貨,週五晚上資料屬於週一的,想想還真是頭大,這裡還要加上一天判斷是否第二天是週六,如果是就要改到加兩天,幸好一般節假日之前的交易日晚上無夜盤,不然更麻煩。
from datetime import datetime, timedelta if self.trading == False: adjustedBarTime = bar.datetime + timedelta(hours = 5) if adjustedBarTime.weekday() is 5: adjustedBarTime = adjustedBarTime + timedelta(days= 2)
會插入如下資料,按照初始化使用天數,就會有多少條,
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2665919/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- VNPY建立集中式的k線生成引擎,各個策略採用註冊訂閱,接收k線推送
- vnpy,BollChannel布林線軌道策略分析
- Flutter 股票 分時線、K線Flutter
- 在·VNPY中按照CTA策略例項記錄交易條目和損益
- VNPY中 Tick級別準高頻交易簡單策略
- 在命令列中連線mysql命令列MySql
- 在K8S中,映象下載策略有哪些?K8S
- VNPY 中基於Ta-lib的KDJ策略實現
- JMeter MQTT 在連線測試場景中的使用JMeterMQQT
- Oracle資料庫中的表連線方式及使用場合Oracle資料庫
- Vue中引入TradingView製作K線圖VueView
- 五分鐘瞭解網路連線
- 十分鐘-Nginx入門到上線Nginx
- 一分鐘搞懂ORACLE 外連線Oracle
- 雙均線策略:量化交易中的黃金法則
- 三分鐘破解無線網——無線網路安全攻防
- 在spring boot中3分鐘上手RPC框架DubboSpring BootRPC框架
- iOS股票K線圖、分時圖繪製iOS
- 4擬合線性函式的k和b函式
- 如何在 20 分鐘內給你的 K8s PaaS 上線一個新功能?K8S
- 在UnityUI中繪製線狀統計圖UnityUI
- 在Weblogic9.2.3中建立連線池Web
- 在JavaScript中理解策略模式JavaScript模式
- 5分鐘搞懂 Golang 資料庫連線管理Golang資料庫
- 為VNPY的K線序列管理工具ArrayManager增加對數收益率佇列佇列
- 1 分鐘上手,在容器中執行 Visual Studio Code
- 五分鐘k8s實戰-使用IngressK8S
- 在K8S中,在服務上線的時候Pod起不來怎麼進行排查?K8S
- 單龍系統螺紋1805K線5分鐘100MA覆盤
- 五分鐘掌握 JavaScript 中的 IoCJavaScript
- netdxf中修改多段線線寬
- 地平線:黎明時分中的雲渲染技術
- [譯]在 Flutter 中如何設計線性佈局?Flutter
- 在stable diffussion中控制生成圖片的光線
- 組策略每5分鐘出(轉)
- oracle中的連線Oracle
- 10分鐘搭建k8sK8S
- 跪求?????JBoss中的連線池配置及使用