kernc/backtesting.py

what about multiple stocks/data inputs?

JustinGuese opened this issue · 5 comments

Hi, I like the direction where backtesting.py is going, but I am missing some backtrader functionality... Maybe the most important - currently only one stock is supported right?

Because if I have a strategy which uses 2 stocks, how would I deal with that? The backtrader way was using self.datas instead of data, which then becomes an array with all the stock datas, and then obviously the buy/sell functions would need a ticker parameter...
Or is there already a way to achieve this?

or is that functionality actually already there?

class _Data:
    """
    A data array accessor. Provides access to OHLCV "columns"
    as a standard `pd.DataFrame` would, except it's not a DataFrame
    and the returned "series" are _not_ `pd.Series` but `np.ndarray`
    for performance reasons.
    """
    def __init__(self, df: pd.DataFrame):
        self.__df = df
        self.__i = len(df)
        self.__pip: Optional[float] = None
        self.__cache: Dict[str, _Array] = {}
        self.__arrays: Dict[str, _Array] = {}
        self._update()

so would I pass something like
data = { "MSFT" : yf.download("MSFT"), "AAPL" : ...?

Check out https://github.com/dodid/minitrade, a fork from this project which allows for multiasset backtesting.
Would love to have this functionality here under @kernc project though!

Seconding this since it is getting more important to mess with pair trading. Also @PabloCanovas do you know of any equivalents for bt?

s-kust commented

You may want to take a look at https://github.com/s-kust/python-backtesting-template/

You can easily run backtests of your strategy for several (or several dozen) tickers simultaneously. The results of these backtests are combined and saved in the output.xlsx file.

Duplicate of either #20 or #508.