如何处理流式FX数据并计算实时流ATR()?

时间:2017-04-25 09:44:24

标签: python algorithmic-trading

我正在尝试使用python进行算法交易,以进行回溯测试。

首先我下载了​​一些滴答数据,然后将它们重新采样为10秒OHLC数据,然后使用ATR指标作为定义函数:

     df = pd.read_csv( 'gbpusd jan17.csv',
                        names       = ['instrument', 'time', 'bid', 'ask'],
                        index_col   = 1,
                        parse_dates = True,
                        nrows       = 1000
                        )
     df = df['ask'].resample('10s').ohlc()
     n  = list( range( 0, len( df.index ) ) ) # I changed index because my indicator
                                              # doesn't work on datetime index      
     df.index = n

     def ATR(df, n): #________________________# Average True Range  
         i    = 0  
         TR_l = [0]  
         while i < df.index[-1]:
            TR = max( df.get_value( i + 1, 'high' ),
                      df.get_value( i,     'close' )
                      )
               - min( df.get_value( i + 1, 'low' ),
                      df.get_value( i,     'close' )
                      )
            TR_l.append( TR )
            i = i + 1  
         TR_s = pd.Series( TR_l )  
         ATR  = pd.Series( TR_s.rolling( window      = 12,
                                         min_periods = 12,
                                         center      = False
                                         ).mean(),
                           name = 'ATR_' + str(n)
                           )
         df  = df.join( ATR )
         return df

   Outputs: head()
                                 instrument      bid      ask
      time                                                
      2017-01-02 00:00:01.105    GBP/USD         1.23399  1.23551
      2017-01-02 00:00:01.561    GBP/USD         1.23399  1.23551
      2017-01-02 00:00:05.122    GBP/USD         1.23399  1.23551
      2017-01-02 00:00:05.525    GBP/USD         1.23365  1.23577
      2017-01-02 00:00:06.139    GBP/USD         1.23365  1.23577 

      open     high     low      close    ATR_8
    \
      1.23562  1.23562  1.23562  1.23562  0.000120   0.596718     
      1.23562  1.23575  1.23548  1.23548  0.000121   0.619445     
      1.23548  1.23548  1.23541  1.23541  0.000122   0.645532    
      1.23541  1.23541  1.23541  1.23541  0.000117   0.674178   
      1.23541  1.23548  1.23541  1.23548  0.000123   0.687229

但是,当我连接到Oanda API以获得流速时,问题就出现了,ATR计算的while循环似乎不起作用,首先我认为,由于没有足够的数据行开始,它不起作用,所以我在某些滴答之后开始进行ATR计算,但仍无效。

任何人都可以使用 while 循环,我该如何更改流媒体数据?

0 个答案:

没有答案