Backtest Configuration

Scanner's candle-based SL/TP1(partial)/TP2 Single full exit at target, SL at entry - %
Universe: | | Mode:

Portfolio Summary

Symbols

Total Capital

Final Value

Combined Return

Total Trades

Overall Win Rate

Best Symbol

Worst Symbol

Worst Max DD

Results

Configure and run a backtest to see results.
Symbol Return% Trades Win Rate Max DD Sharpe P&L (β‚Ή)

Initial

Final

Return

Trades

Won

Lost

Win Rate

Max DD

Sharpe

Sortino

Profit Factor

Volatility

VaR (95%)

Best Day

Worst Day

Strategy Criteria Used

Trades Executed

# Score Entry Time Entry β‚Ή Qty SL TP1 TP2 Exit Time Exit β‚Ή Exit Reason P&L %
SL Hits:
TP1:
TP2:
TARGET:
EOD (forced):
NEAR-MISS BARS (ALMOST TRIGGERED β€” 50%+ CRITERIA PASSED)
# SCORE TIME CLOSE β‚Ή VOLUME FAILED CRITERIA
ALL BARS CRITERIA (CLICK ANY BAR TO SEE FULL CRITERIA BREAKDOWN)
# SCORE TIME CLOSE VOLUME STATUS FAILED CRITERIA

No trades executed - Strategy criteria not met

The VmRsi signal was not triggered during this period. Possible reasons:

  • RSI never entered the alert band (-)
  • Volume did not exceed x the MA
  • Previous RSI values were not all below
  • Candle range was below MIN_CANDLE_RANGE ()
  • Volume was below MIN_VOLUME ()
// ============================================================ // GLOBAL KITE CHART OPENER FUNCTION (for partials) // ============================================================ // [L1425] This function is used by HTMX partials that don't have Alpine.js context async function openKiteChartFromPartial(symbol) { try { // [L1427] Fetch Kite chart URL from backend const response = await fetch(`/api/orders/kite-chart-url/${encodeURIComponent(symbol)}`); const data = await response.json(); if (data.url) { // [L1431] Open URL in new tab window.open(data.url, '_blank', 'noopener,noreferrer'); } else { // [L1434] Show error if URL not found if (window.showNotification) { window.showNotification(`Kite chart URL not found for ${symbol}`, 'error', 5); } console.error('[KITE CHART] URL not found:', data); } } catch (e) { // [L1441] Handle fetch errors if (window.showNotification) { window.showNotification(`Error loading Kite chart: ${e.message}`, 'error', 5); } console.error('[KITE CHART] Error:', e); } } // [L1448] Make it available globally window.openKiteChartFromPartial = openKiteChartFromPartial; // ============================================================ // GLOBAL FINPLOT CHART OPENER FUNCTION (for partials) // ============================================================ // [L1450] This function is used by HTMX/Jinja2 partials that don't have Alpine.js context // It opens a native finplot desktop chart window via the backend API function openFinplotFromPartial(symbol) { // [L1453] Default finplot parameters - 5-minute candles, 200 bars const FINPLOT_DEFAULT_RESOLUTION = 5; const FINPLOT_DEFAULT_COUNTBACK = 200; // [L1456] Normalize symbol to Fyers format (finplot uses Fyers data source) // Kite uses bare symbols like "RELIANCE", but Fyers needs "NSE:RELIANCE-EQ" let fmtSymbol = symbol; if (!symbol.includes(':')) { fmtSymbol = 'NSE:' + symbol; } // [L1461] Add -EQ suffix for equity symbols (not options CE/PE or futures FUT) if (!fmtSymbol.includes('-') && !fmtSymbol.includes('CE') && !fmtSymbol.includes('PE')) { fmtSymbol = fmtSymbol + '-EQ'; } // [L1465] Build the finplot API URL const url = `/api/backtest/finplot?symbol=${encodeURIComponent(fmtSymbol)}&resolution=${FINPLOT_DEFAULT_RESOLUTION}&countback=${FINPLOT_DEFAULT_COUNTBACK}`; // [L1468] Log the action with timestamp for debugging console.log(`[L1468] ${new Date().toLocaleTimeString()} - [Finplot] Opening for ${fmtSymbol}`); // [L1470] Fire the request - backend opens native desktop window fetch(url) .then(r => r.json()) .then(data => console.log(`[L1472] ${new Date().toLocaleTimeString()} - [Finplot] Response:`, data)) .catch(err => console.error(`[L1473] ${new Date().toLocaleTimeString()} - [Finplot] Error:`, err)); } // [L1475] Make it available globally for Jinja2 partials window.openFinplotFromPartial = openFinplotFromPartial;