SimplePositionSizer#

class qf_lib.backtesting.position_sizer.simple_position_sizer.SimplePositionSizer(broker: Broker, data_provider: DataProvider, order_factory: OrderFactory, signals_register: SignalsRegister)[source]#

Bases: PositionSizer

Converts each signal to a market order targeting a portfolio weight equal to Exposure value.

Exposure.LONG (1.0) → invest 100% of portfolio value in the asset. Exposure.SHORT (-1.0) → -100% (full short). Exposure.OUT (0.0) → flat.

Default on BacktestTradingSessionBuilder.

Examples

>>> sizer = SimplePositionSizer(broker, data_provider, OrderFactory(broker, data_provider),
...                             BacktestSignalsRegister())
>>> long_signal = Signal(ticker, Exposure.LONG, 0.02, 100.0, now)
>>> orders = sizer.size_signals([long_signal], use_stop_losses=False)
>>> orders[0].quantity
1000.0
>>> short_signal = Signal(ticker, Exposure.SHORT, 0.02, 100.0, now)
>>> sizer.size_signals([short_signal], use_stop_losses=False)[0].quantity
-1000.0