@magenta-kabuto No problem, you're welcome. Can you please change the start_date to '2006-01-01' when running backtester, and let us know if it worked?
Posts made by stefanm
-
RE: Backtesting
-
RE: Backtesting
@magenta-kabuto Hi, yes that's right, it seems that xarray DataArray is passed to function which expects pandas DataFrame (your entire algorithm is not visible, which is ok, so this is an assumption), but maybe you can try with this:
### use your regime_trade(Stockdata, param_2=0.15) as helper function def strategy(data): # param data: the data returned from load_data function, xarray.DataArray structure. Stockdata = ... # prepare data for regime_trade input, like you did for single pass trades = {} for j in logopenmod.keys(): trades[j] = regime_trade(Stockdata[j].iloc[:,3], 0.15) pd_signals = pd.concat(trades.values(), axis=1) xr_signals = xr.DataArray(pd_signals, dims=('time', 'asset')) is_liquid = data.sel(field="is_liquid") # assume that "stocks" is exactly the same as data is return xr_signals * is_liquid
Try it with Multi-pass, and change the name in competition_type. Set the start date as below:
weights = qnbk.backtest( competition_type = "stocks_nasdaq100", load_data = load_data, # if omitted it loads data by competition_type lookback_period = 365, start_date = "2006-01-01", # set start_date strategy = strategy, analyze = True, )
Regards
-
RE: Backtesting
@magenta-kabuto Hi, maybe this can help with your strategy also:
In your function regime_trade() before returning signals_df, convert it to pandas.Series structure, and name it to corresponding asset (e.g. "NAS: AAPL").series = signals_df.squeeze().rename(asset_name) return series
After putting it to trades = dict(), you can concatenate trades.values(), which will create pandas.DataFrame of signals by assets:
pd_signals = pd.concat(trades.values(), axis=1)
Then, convert it to xarray.DataArray and pass it as weights to backtester.
import xarray as xr xr_signals = xr.DataArray(pd_signals, dims=('time', 'asset'))