Skip to content

resample_apply data shift? #970

Closed as not planned
Closed as not planned
@jmlacasa

Description

@jmlacasa

Hi! Love the library. It is very simple to use
I have a question about the use of resample_apply. I am currently trying to calculate ATR indicator in a 5m time frame with 1m time frame input.

Expected Behavior

I would have expected that the ATR value for a 5m timestamp would be replicated to the next 5 1m timestamps.
like this:

ATR 5m
2023-04-21 02:55:00 0.059889
2023-04-21 03:00:00 0.059727
2023-04-21 03:05:00 0.059586

ATR5m in 1m candles (resample_apply output)
2023-04-21 03:00:00 0.059727
2023-04-21 03:01:00 0.059727
2023-04-21 03:02:00 0.059727
2023-04-21 03:03:00 0.059727
2023-04-21 03:04:00 0.059727
2023-04-21 03:05:00 0.059586
2023-04-21 03:06:00 0.059586
2023-04-21 03:07:00 0.059586
2023-04-21 03:08:00 0.059586
2023-04-21 03:09:00 0.059586

Actual Behavior

Instead what happens is the candle data is shifted one 5m candle forward.
i.e. what I see between 03:00:00 and 03:04:00 is old data from 02:55:00 instead of 03:00:00
Is there something I am assuming incorrectly?
Thank you for any help!

Steps to Reproduce

# self.data contains 1m candles

self.atr = resample_apply('5T'
                          , talib.ATR
                          , series=self.data.High
                          , low=self.data.Low.s.resample('5T').agg('min').to_numpy()
                          , close=self.data.Close.s.resample('5T').agg('last').to_numpy()
                          , timeperiod=200)

Timestamp
2023-04-21 02:59:00    0.060037
2023-04-21 03:00:00    0.059889
2023-04-21 03:01:00    0.059889
2023-04-21 03:02:00    0.059889
2023-04-21 03:03:00    0.059889
2023-04-21 03:04:00    0.059889
2023-04-21 03:05:00    0.059727
2023-04-21 03:06:00    0.059727
2023-04-21 03:07:00    0.059727
2023-04-21 03:08:00    0.059727
2023-04-21 03:09:00    0.059727
2023-04-21 03:10:00    0.059586

Freq: T, Name: ATR(H[5T],200), dtype: float64

talib.ATR(candles_1m['High'].resample('5T').agg('max')
          , candles_1m['Low'].resample('5T').agg('min')
          , candles_1m['Close'].resample('5T').agg('last')
          , timeperiod=200).tail(4)

Timestamp
2023-04-21 02:55:00    0.059889
2023-04-21 03:00:00    0.059727
2023-04-21 03:05:00    0.059586
2023-04-21 03:10:00    0.059331
Freq: 5T, dtype: float64

Additional info

  • Backtesting version: '0.3.3'
  • Pandas version: '1.5.3'

Metadata

Metadata

Assignees

No one assigned

    Labels

    invalidThis is not a (valid) bug report

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions