Sizers¶
Sizers determine position sizes for orders.
Position Sizers Module - Order size calculation strategies.
This module provides position sizer implementations that determine the size of orders based on various strategies like fixed size, percentage of capital, risk/reward ratios, etc.
- Available Sizers:
FixedSize: Always uses a fixed size for orders.
FixedReverser: Reverses positions with fixed size.
PercentSizer: Uses a percentage of available cash.
AllInSizer: Uses all available cash for each order.
RiskReturnSizer: Sizes based on risk/reward ratio.
Example
Using a sizer with cerebro: >>> cerebro = bt.Cerebro() >>> cerebro.addsizer(bt.sizers.FixedSize, stake=100) >>> cerebro.addsizer(bt.sizers.PercentSizer, percents=10)
Overview¶
Sizers calculate how many shares/contracts to trade based on portfolio value, risk parameters, or custom logic.
Built-in Sizers¶
FixedSize: Fixed number of unitsFixedReverser: Fixed size with position reversalPercentSizer: Percentage of portfolioAllInSizer: Use all available cashAllInSizerInt: All-in with integer shares
Using Sizers¶
cerebro = bt.Cerebro()
# Fixed size sizer
cerebro.addsizer(bt.sizers.FixedSize, stake=10)
# Percentage sizer (10% of portfolio per trade)
cerebro.addsizer(bt.sizers.PercentSizer, percents=10)
# All-in sizer
cerebro.addsizer(bt.sizers.AllInSizer)
Per-Strategy Sizer¶
cerebro.addstrategy(
MyStrategy,
sizer=bt.sizers.PercentSizer,
sizer_percents=5
)
Creating Custom Sizers¶
class RiskSizer(bt.Sizer):
params = (
('risk', 0.02), # Risk 2% per trade
)
def _getsizing(self, comminfo, cash, data, isbuy):
# Calculate position size based on risk
risk_amount = cash * self.params.risk
atr = self.strategy.atr[0] # Assume ATR indicator exists
if atr > 0:
size = int(risk_amount / atr)
else:
size = 0
return size
# Use custom sizer
cerebro.addsizer(RiskSizer, risk=0.01)