Sizer calculating ATR indicator values
-
Is there a way for a sizer to hold the ATR calculation without initializing ATR in the strategy init?
For design decoupling purposes I would like the sizer to calculate a specific ticker's ATR value and then compute the position size,the ATR calculation should be the sizer's "head ache",not the strategies init ..
Can a sizer calculate ATR values for data without that ATR been initialized in the strategy?this does not seem to calculate ATR values :
# inside the sizer def _getsizing(self, comminfo, cash, data, isbuy): atr = bt.indicators.ATR(data, period=self.atr_parameter) # not initialized in __init__,**always empty ...** return position_size_that_depends_on_atr # crash ..
-
The
Sizer
instance is created inside the Strategy and the indicator will look for such Strategy to register itself. It has to do it or it wouldn't else work.Bottomline: It will still be as if you had done inside the Strategy
Caveat Emptor: never tried.
-
OK,
Thank you for your reply ( and kudos on the incredible work ..) -
Has this been solved? If so is it possible to post the Sizer code? Thanks!
-
class AtrBasedPositionSize(bt.Sizer): def __init__(self, atr_parameter, one_bar_risk, atrs): self.atr_parameter = atr_parameter self.atrs = atrs def _getsizing(self, comminfo, cash, data, isbuy): if(len(data)<=self.atr_parameter):return 0 ticker = data._name position_size = int((self.broker.getvalue()) / self.atrs[ticker][0]) return position_size
-
Thanks !