您好,登錄后才能下訂單哦!
這篇文章主要介紹在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)
會插入如下數據,按照初始化使用天數,就會有多少條,
以上是“在VNPY中策略中如何使用分鐘線合成日K線”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。