Baseline freeze
Run it: import the original trade list and lock starting equity, market, timeframe, date range, and costs.
Invalidate if: the same export cannot reproduce the same stats.
A practical test suite for proving a TradingView strategy is more than a pretty equity curve. The goal is not to make the strategy look good. The goal is to attack it until the weak parts confess.
Use a simple, public TradingView strategy export rather than PQN notebooks: for example, an RSI pullback strategy on SPY, QQQ, BTCUSD, or ES. Users only need the TradingView Strategy Tester export to begin.
These tests make the baseline trustworthy before we start punching it.
Run it: import the original trade list and lock starting equity, market, timeframe, date range, and costs.
Invalidate if: the same export cannot reproduce the same stats.
Run it: count trades, wins/losses, average hold time, and exposure proxy from entry/exit dates.
Invalidate if: too few trades or one date cluster explains most results.
Run it: record commission, slippage, order sizing, pyramiding, margin, and session settings from TradingView.
Invalidate if: the edge exists only with zero friction or impossible sizing.
Build null distributions. If random can match the strategy, the strategy is not special.
Run it: randomly reorder realized trade profits 1,000+ times and rebuild equity curves.
Invalidate if: baseline drawdown or terminal equity is ordinary inside the shuffled distribution.
Run it: sample trades with replacement to estimate outcome ranges from the observed trade distribution.
Invalidate if: a large share of bootstraps are negative or exceed acceptable drawdown.
Run it: randomly flip trade P/L signs while preserving magnitudes to test if direction matters.
Invalidate if: original expectancy is not an outlier versus random sign assignments.
Run it: keep trade count and holding-period distribution, but randomize entry dates on the same market.
Invalidate if: random entries produce similar Sharpe, return, or drawdown.
Run it: shift the entire signal series by random offsets, preserving clustering but breaking timing.
Invalidate if: shifted signals perform similarly to real signals.
Run it: rerun the TradingView strategy across random parameter sets and compare the chosen setting.
Invalidate if: the selected parameter is not on a broad robust plateau.
Keep the same trades, then make the world less friendly.
Run it: remove top 1, top 5, and top 10% winning trades. Quant Companion already has the beginning of this.
Invalidate if: one or two lucky trades carry the whole strategy.
Run it: subtract fixed or bps cost from every trade and redraw equity.
Invalidate if: realistic fees erase expectancy.
Run it: subtract slippage per contract/share or as bps of notional.
Invalidate if: edge requires perfect fills.
Separate actual signal value from beta, market drift, or trade distribution luck.
Run it: compare equity curve to buy-and-hold, SPY/QQQ, sector ETF, or underlying market.
Invalidate if: the strategy adds complexity without improving risk-adjusted return.
Run it: regress strategy returns against benchmark returns.
Invalidate if: alpha is insignificant or beta explains the result.
Run it: shuffle forward returns against factor values and compare IC/p-value distributions.
Invalidate if: the factor cannot beat shuffled labels.
Look for performance that survives different nearby worlds, not one lucky historical path.
Run it: split trades into years, quarters, or regimes and recompute stats for each period.
Invalidate if: one subperiod explains nearly all returns.
Run it: plot rolling net profit, Sharpe proxy, win rate, and drawdown across fixed trade windows.
Invalidate if: edge decays or spends long windows below zero.
Run it: optimize on one period in TradingView, test fixed settings on the next period.
Invalidate if: in-sample settings do not transfer out of sample.
What can become part of the current app versus what needs extension automation or more data.
| Test family | Works from TV export? | How to run it in Quant Companion | Implementation note |
|---|---|---|---|
| Trade bootstrap / Monte Carlo | Yes | Use existing net profit array, sample with replacement, compare terminal equity and drawdown distribution. | Already close: current Monte Carlo can be reframed as invalidation. |
| Remove best/worst trades | Yes | Existing controls remove best/worst trades; add pass/fail language and contribution stats. | Turn into “lucky outlier dependency” test. |
| Subperiod / rolling stats | Yes | Group uploaded trades by date period and show a per-period stats grid. | No price data required. |
| Fee and slippage haircut | Partial | Subtract fixed fee per trade immediately; bps/notional requires contracts and price fields to be reliable. | Start with fixed + percent-of-profit haircut; expand later. |
| Random entries / signal shifts | No | Needs OHLC series and strategy signal/holding rules, or TradingView automation to rerun variants. | Could become extension workflow later. |
| Parameter randomization | No | Needs repeated TradingView strategy runs across settings or user-uploaded result batches. | Batch upload is the lowest-friction v1 path. |