RC2_IND_ON_MULTIVALUE
Indicator
<source>has multiple outputs — say which one:on=<source>.<output>.
What it means
Chaining (EMA(5, on=rsi)) feeds one indicator’s output into another as its input series. That only makes sense when the source produces one number per bar.
Aroon, MACD and BollingerBands produce three each (up/down/oscillator, line/signal/histogram, upper/mid/lower). A bare on=aroon does not name a series — it names a record — so the transpiler asks you which output you meant instead of picking one.
Why it happens
class Bad(Strategy): trade = Symbol() sizing = FixedCapital()
def execute(self): aroon = Aroon(14, on=self.trade) smooth = EMA(5, on=aroon) # ❌ up, down or oscillator? if smooth.value > 50 and self.trade.is_flat: self.buy(self.trade)How to fix it
Read the output you wanted directly and drop the chain — per-output chaining is not available yet (see below).
class Good(Strategy): period = Param(14, min=5, max=50) trade = Symbol() sizing = FixedCapital()
def execute(self): aroon = Aroon(self.period, on=self.trade)
if aroon.up > 70 and aroon.down < 30 and self.trade.is_flat: self.buy(self.trade) if aroon.up < aroon.down and self.trade.is_long: self.sell(self.trade, self.trade.position)The message tells you to write on=aroon.up, and that is the shape the language is heading for — but today that spelling raises RC2_IND_ON_MULTIVALUE_CHAIN instead. Until it lands, smooth a multi-value output by tracking it yourself in persistent state, or chain onto a single-value indicator such as RSI or SMA.
Related
- Indicators
AroonMACDRC2_IND_ON_MULTIVALUE_CHAIN— you did name the output; naming it is not yet supported.RC2_CROSS_MULTIVALUE— the same single-value rule, forcrossed_above/crossed_below.