QuantScript — multi-asset-dashboard.qs
// Multi-Asset Dashboard — BTC 1h with ETH 4h + XAU Daily Signals
//
// Uses multiple data.loadCandles() calls with callbacks to evaluate
// indicators on different secondary timeframes and symbols simultaneously.

mode("indicator", "Multi-Asset Dashboard");
candles("BTCUSD", timeframe: "1h", bars: 300, provider: "demotrader");

// ── Inputs ───────────────────────────────────────────────────────────────────
const ethSmaLen  = input.int(50, "ETH 4h SMA", minval: 10, maxval: 200, group: "ETH");
const xauRsiLen  = input.int(14, "XAU Daily RSI", minval: 5, maxval: 50, group: "XAU");
const xauOB      = input.float(70.0, "RSI Overbought", group: "XAU");
const xauOS      = input.float(30.0, "RSI Oversold", group: "XAU");

// ── Secondary feeds: each evaluated on its own native bars ───────────────────

// ETH 4h: SMA on native 4h bars
var ethSma = data.loadCandles("demotrader", "ETHUSD", "4h", (c) => ta.sma(c.close, ethSmaLen));

// XAU Daily: RSI-based signal (-1 / 0 / +1)
var xauSignal = data.loadCandles("demotrader", "XAUUSD", "1D", (c) => {
  const rsi = ta.rsi(c.close, xauRsiLen);
  if (rsi === null) return 0;
  return rsi > xauOB ? -1 : (rsi < xauOS ? 1 : 0);
});

// ── Plot ─────────────────────────────────────────────────────────────────────
event.onCandle((candle) => {
  // Primary: BTC price
  chart.plot(candle.close, "BTC Close");

  // ETH 4h SMA (forward-filled to 1h)
  chart.plot(ethSma, "ETH 4h SMA", "#FF9800");

  // XAU daily signal in oscillator pane
  chart.pane("signals");
  chart.plot(xauSignal, "XAU Signal", "#9C27B0");
  chart.hline(1, "Bullish", "#3fb950");
  chart.hline(-1, "Bearish", "#f85149");
  chart.hline(0, "Neutral", "#555");

  // Historical lookback on ETH SMA
  const prevEthSma = ethSma[1];
  if (prevEthSma !== null && ethSma !== null) {
    const rising = ethSma > prevEthSma;
    console.log("ETH 4h SMA: " + ethSma.toFixed(2) + (rising ? " ▲" : " ▼"));
  }
});

← Back to all examples