Incorrect `_timeframe` after loading Pandas dataframe to a data feed
I've built 1-minute time bars from tick-by-tick trading data of Bitcoin, which is loaded into a Pandas dataframe first, then converted to a data feed using the following code:
class CryptoPandasData(bt.feeds.PandasData): lines = ('mean', 'median', 'volume_sell', 'volume_buy', 'volume_quote', 'volume_quote_sell', 'volume_quote_buy', 'count', 'count_sell', 'count_buy') params = ( ('datetime', 'timestamp'), ('openinterest',None), ('mean', -1), ('median', -1), ('volume_sell', -1), ('volume_buy', -1), ('volume_quote', -1), ('volume_quote_sell', -1), ('volume_quote_buy', -1), ('count', -1), ('count_sell', -1), ('count_buy', -1), )
We can see that the timeframe of the data feed is
bt.TimeFrame.Days, which is apparently not correct, because my time bars are precisely 1-minute bars.
Any ideas? Thanks!
When you create the datafeed, you need to specify the timeframe and compression your data is using. Backtrader will not identify it by itself.
So when you do:
data_feed = CryptoPandasData(dataname=time_bars)
you would do it that way:
data_feed = CryptoPandasData(dataname=time_bars, timeframe=bt.TimeFrame.Minutes, compression=1)
@dasch Nice, problem solved, thanks a lot!
@dasch What if my bars are volume bars(from Chapter 2 "Financial Data Structures" of the book "Advances in Financial Machine Learning" by Marcos Prado), which don't have a fixed timeframe, use
I am not really sure, since I never used such a usecase. Just give it a try.