Maybe this will help someone... I had the same issue and solved it by using a percentage of my portfolio
class Antoine_sizer(bt.Sizer):
params = (('prop', 0.1),)
def _getsizing(self, comminfo, cash, data, isbuy):
"""Returns the proper sizing"""
if isbuy: # Buying
target = self.broker.getvalue() * self.params.prop # Ideal total value of the position
price = data.close[0]
size_net = target / price # How many shares are needed to get target
size = size_net * 0.99
if size * price > cash:
return 0 # Not enough money for this trade
else:
return size
else: # Selling
return self.broker.getposition(data).size # Clear the position