在VNPY中策略中,使用分鐘線合成日K線

張國平發表於2019-11-27

在論壇裡面看到不少關於分鐘合成日線的討論,也試著實現了。這裡是針對vnpy2.0的,1.92其實基本也差不多。


  1. 這裡把合成的日線HLOC資訊放在pandas.DataFrame裡面,因為日線分析的話,對運算時間要求不是特別高,DataFrame足矣

  2. 合成過程放在on_bar方法裡面,對每個傳入的分鐘進行日線合併處理;

  3. 這裡用了trading == False進行判斷,就是隻在策略初始化過程對於歷史資料進行日線合併。在交易過程中,不對當天傳入分鐘資料進行處理。因為日線是長週期資料,放在程式啟動時候呼叫使用就可以,不必要盤中分析,如果打算真要,註釋掉這個就可以。

  4. 這裡只是提供了這個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:
        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(self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'high'].all(),bar.high_price)
                self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'low'] = \
                    min(self.dayFrame.loc[self.dayFrame['datetime'] == bar.datetime.date(), 'low'].all(),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)

會插入如下資料,按照初始化使用天數,就會有多少條,

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2665919/,如需轉載,請註明出處,否則將追究法律責任。

相關文章