RC2_SIZING_UNKNOWN
Unknown sizing model
<name>. UseFixedQuantity,FixedCapital, orCompounding.
What it means
sizing = ... accepts three models and nothing else:
| Model | How quantity is computed |
|---|---|
FixedQuantity(n) |
Always n contracts/shares. |
FixedCapital(percent) |
A percentage of the capital the run started with. |
Compounding(percent) |
A percentage of current equity, so wins compound. |
The set is closed because sizing is how a signal becomes a position size in real money. A model the engine doesn’t implement can’t be approximated by one that it does, so the name is checked at compile time rather than resolved at run time.
Why it happens
A model borrowed from another platform, or one that sounds like it must exist:
class RiskSizing(Strategy): trade = Symbol() sizing = FixedRisk(2.0)
def execute(self): if self.trade.is_flat: self.buy(self.trade)PercentOfEquity, KellyFraction, FixedDollar land here for the same reason.
How to fix it
Choose the model whose shape matches your intent, and express the rest through the percentage or through per-signal overrides.
class Sized(Strategy): trade = Symbol() sizing = Compounding(percent=80)
def execute(self): if self.trade.is_flat: self.buy(self.trade) if self.trade.is_long: self.sell(self.trade, self.trade.position, reason="exit")Risk-per-trade sizing has no model of its own yet; the usual expression of it is FixedQuantity with a qty= override you compute yourself in execute().
A quoted model name is not a declaration
sizing = "FixedCapital" is a string, so it is read as persistent state rather than a sizing model — and the strategy then fails with RC2_NO_SIZING instead. Sizing models are calls: FixedCapital().
Related
- Sizing
RC2_NO_SIZING— nosizing = …line at all.RC2_OVERRIDE_INVALID— the right model, the wrong override kwarg.