vectorbt icon indicating copy to clipboard operation
vectorbt copied to clipboard

Multiple assets with `adjust_sl_func_nb`

Open sergejlazuk opened this issue 11 months ago • 1 comments
trafficstars

Hello, I would like to pass different arguments per Asset (price columns) into adjust_sl_func_nb. I use adjust_sl_args callback.

For same args for all assets it works, e.g. like this: (here I pass 10 and 20 as inputs into adjust_sl_func_nb which is used by all assets):

pf=vbt.Portfolio.from_signals(
        close=np.array([[10.,20.,30.,40.],[100.,200.,300.,400.]]).T,
        entries=np.array([[True,False,False,False],[True,False,False,False]]).T,
        size=1, size_type='Amount',direction='LongOnly',
        use_stops=True,
	adjust_sl_func_nb=my_adjust_sl_func_nb, 
        adjust_sl_args=(10., 20.), 
        init_cash=10000)

But how do i pass different args per asset? I tried as below (tuple of tuples), but it does not work:

pf=vbt.Portfolio.from_signals(
        close=np.array([[10.,20.,30.,40.],[100.,200.,300.,400.]]).T,
        entries=np.array([[True,False,False,False],[True,False,False,False]]).T,
        size=1, size_type='Amount',direction='LongOnly',
        use_stops=True,
	adjust_sl_func_nb=my_adjust_sl_func_nb,
        adjust_sl_args=((10., 20.), (11., 21.)),
        init_cash=10000)

Error:

No implementation of function Function(<built-in function sub>) found for signature:
 
 >>> sub(float64, UniTuple(float64 x 2))

Thanks a lot.

sergejlazuk avatar Nov 26 '24 12:11 sergejlazuk