🚀 Open Beta — Free to sign up. Start forward testing your strategies today. Join the Beta →

Forward Testing,
Verified in Real-Time

Stop guessing if your strategy works. See every trade logged automatically from TradingView with live P&L analytics, before you risk real capital.

Join the Beta

Free to start · No credit card required

Why Forward Testing?

Backtesting tells you what happened. Forward testing tells you what's happening right now.

Real Market Conditions

Strategies are tested against live market data with real spreads, slippage, and volatility. No simulated fills.

🛠

No Curve Fitting

Eliminates the overfitting trap. If it works forward, it works. No cherry-picked historical windows.

📈

Transparent Results

Every trade is logged with exact timestamp and price from TradingView. No edited or deleted entries.

Automated Tracking

TradingView alerts are captured 24/7 via webhook. No manual logging, no missed trades, no human error.

Strategy Optimizer

Find the ideal profit target, drawdown stop, and trading hours. Our optimizer analyzes your data to maximize win rate and P&L together.

📊

Risk Analytics

Monte Carlo simulations, Value at Risk, and drawdown analysis. Know your worst-case scenario before risking real capital.

How It Works

Three steps. Fully automated. Zero manual intervention.

1

Strategy Signals

Your TradingView strategy generates buy/sell alerts on any instrument — futures, indices, crypto.

2

Webhook Captures

Every alert is instantly captured via webhook with ticker, action, price, and timestamp. Deduplication built-in.

3

Live Analytics + Optimizer

Dashboard shows P&L, win rate, drawdown, hourly patterns, and strategy comparison. The optimizer then finds the best profit target, stop, and trading hours for your strategy.

See the Dashboard in Action

Real-time P&L analytics, risk metrics, and strategy insights — all in one place.

Forward Testing vs Backtesting

Both have their place, but forward testing proves what backtesting only suggests.

Feature Backtesting Forward Testing
Market Data Historical (past) Live (real-time)
Overfitting Risk High None
Price Source Simulated fills Live signal prices from TradingView
Results Credibility Can be cherry-picked Verified & timestamped
Time Required Minutes Days to weeks
Capital at Risk None None (paper trading)
Psychological Realism None Watching real-time results

Learn

Build your edge with the right knowledge before you risk real capital.

Why Most Traders Skip Forward Testing (And Pay the Price)

Backtesting feels productive. Forward testing feels slow. But the traders who survive their first year almost always did one thing differently.

Every trader discovers backtesting early. You load up historical data, tweak a few parameters, and watch the equity curve climb. It feels like progress. The numbers look good. You feel ready.

Then you go live, and everything falls apart.

The Gap Between Theory and Execution

Backtesting answers one question: "Would this strategy have worked in the past?" But it ignores the two variables that actually determine whether you make money: your execution discipline and your emotional response to real losses.

Forward testing bridges that gap. It forces you to watch your strategy operate on live data, in real time, with no ability to skip ahead or adjust parameters after the fact. Every trade is timestamped. Every result is permanent.

Why Traders Avoid It

  • It takes time. A meaningful forward test needs 50–100 trades, which can take weeks or months depending on your strategy.
  • It reveals uncomfortable truths. That 75% win rate from backtesting might drop to 58% in live conditions. Drawdowns feel different when you watch them happen in real time.
  • It requires patience. You cannot fast-forward the market. You have to sit with uncertainty while the data builds.

The Reward for Patience

Traders who complete a proper forward test — at least 50 trades with documented results — have something rare: evidence. Not a curve-fitted backtest. Not a hypothetical equity curve. Actual, verified, timestamped proof that their strategy works in current market conditions.

That evidence becomes your conviction when the inevitable drawdown arrives. And drawdowns always arrive.

How to Set Up a Proper Forward Test in 5 Steps

A forward test without structure is just watching charts. Here is a systematic framework that turns observation into actionable data.

Step 1: Define Your Rules Before You Start

Write down every entry condition, exit condition, position size rule, and time filter before running a single trade. If the rules are not specific enough to automate in TradingView, they are not specific enough to test.

Step 2: Choose Your Sample Size

Decide in advance how many trades you need before evaluating. A minimum of 50 trades is recommended for statistical relevance, though 100 gives much stronger confidence. Commit to this number before you start — not after the first losing streak.

Step 3: Automate the Logging

Manual trade journals introduce bias. You forget to log losing trades, round numbers in your favor, or skip days when you were distracted. Automated webhook capture eliminates all of these problems. Every alert fires, every trade is logged, no exceptions.

Step 4: Track More Than Just P&L

Raw profit and loss is important, but it is not the whole picture. Track win rate by time of day, by instrument, by day of week. Look at maximum drawdown duration. Identify which sessions are profitable and which are consistently negative. This granular data tells you where to optimize.

Step 5: Review Weekly, Decide Monthly

Check your dashboard weekly to stay engaged, but do not make strategy changes based on a single week of data. Wait until you hit your target sample size, then review the full picture. If the strategy meets your criteria, go live. If it does not, refine and retest.

What Your Forward Test Data Is Really Telling You

A dashboard full of numbers means nothing if you do not know which metrics matter and which ones mislead.

Profit Factor: Your Single Most Important Number

Profit factor is gross profit divided by gross loss. A profit factor above 1.0 means you are net profitable. Above 1.5 is solid. Above 2.0 is excellent. If your forward test shows a profit factor below 1.0 after 50+ trades, the strategy is not working in current conditions — regardless of what the backtest showed.

Win Rate Is Overrated (Sometimes)

A 40% win rate strategy can be highly profitable if the average win is three times the average loss. Conversely, a 70% win rate strategy can lose money if one bad trade wipes out ten small wins. Always look at win rate alongside average win and average loss size.

Maximum Drawdown Is Your Reality Check

Your backtest might show a 5% maximum drawdown. Your forward test shows 12%. That gap is the difference between simulated fills and real market conditions. The forward test drawdown is the number you should use for risk management — it is the one that reflects actual trading conditions.

Hourly Patterns Reveal Hidden Edges

Many strategies perform well during specific market hours and poorly during others. If your hourly analysis shows consistent losses between 12 PM and 1 PM, consider turning off alerts during that window. This single optimization can dramatically improve overall performance without changing the core strategy logic.

Day-of-Week Effects Are Real

Monday gaps, Friday position squaring, and mid-week trend continuation are well-documented market patterns. Your forward test data shows whether your specific strategy is affected by these patterns. If Mondays are consistently negative, skipping one day per week could be the easiest improvement you ever make.

Why Every Strategy Has a Better Version of Itself

A strategy with a 35% win rate is not necessarily a bad strategy. It might just be running at the wrong time, taking profits too early, or holding through drawdowns it should have cut. The difference between a losing strategy and a winning one is often not the signals — it is the rules around them.

The Hidden Variable: Execution Parameters

Most traders spend all their time optimizing entry signals: moving average lengths, RSI thresholds, indicator combinations. But the entry signal is only half the equation. The other half — when to take profit, when to cut losses, and which hours to trade — often has a bigger impact on the bottom line than the signal itself.

Consider two traders running the same crossover strategy on NQ futures. Same entries, same exits. But one takes profit at $400 per day and stops at $300 drawdown. The other lets it run with no limits. Over 60 trading days, these two "identical" strategies can produce dramatically different results — different win rates, different P&L, different drawdown profiles.

The Right Profit Target Changes Everything

Setting no profit target means you capture big winners but also give back gains during reversals. Setting it too tight means you cap your upside and turn winning days into mediocre ones. The optimal target depends on your specific strategy's behavior — its average win size, its tendency to give back gains, and how often it produces outlier days. There is no universal answer, but there is always an answer hiding in your data.

Drawdown Stops Protect Capital (If Set Correctly)

A daily drawdown stop prevents one bad session from erasing a week of gains. But set it too tight and you stop out of trades that would have recovered. Set it too loose and it never triggers when you need it. The right stop is specific to your strategy's loss distribution — it is a number that cuts the tail without clipping normal fluctuations.

Time Windows: The Most Underused Edge

Markets behave differently at different hours. Volatility clusters around opens and news releases. Lunch hours tend to chop. Overnight sessions have different liquidity. A strategy that loses money from 12 PM to 2 PM but prints money from 9 AM to 11 AM is not a bad strategy — it is a good strategy running during bad hours.

Restricting your trading window to only the profitable hours can transform a breakeven strategy into a consistently profitable one. This is not curve fitting — it is recognizing that market microstructure changes throughout the day, and your strategy's edge may only exist during specific conditions.

The Compounding Effect

What makes optimization powerful is that these three variables — profit target, drawdown stop, and trading hours — compound together. The right target on its own might add 5% to your win rate. The right stop might reduce your max drawdown by 30%. The right time window might eliminate your worst trading hours entirely. Combined, a strategy with a 35% trade win rate and negative P&L can become a 70%+ daily win rate strategy with positive expected value.

This is not theoretical. It is arithmetic. Every strategy has a set of execution parameters that maximizes its performance given its actual trade history. The challenge has always been finding them — the number of possible combinations across targets, stops, and time windows is in the hundreds of thousands.

Forward Test Data Makes It Real

The critical difference between optimizing on backtest data versus forward test data is overfitting. Backtests are vulnerable to curve fitting because you can always find parameters that look great on historical data. Forward test data is immune to this — the trades already happened in live market conditions with real spreads and slippage. When you optimize on forward test results, you are finding the best parameters for how your strategy actually performs, not how it would have performed in cherry-picked conditions.

How Much Data Do You Need?

The reliability of any optimization depends on sample size. With fewer than 50 trades, you are essentially reading tea leaves. At 100 trades, patterns start to stabilize. At 200 or more, you can trust the recommendations with real confidence. This is why forward testing and optimization work hand in hand — the longer you test, the more precise your optimization becomes.

The best approach: start your forward test, collect at least 200 trades, then optimize. Apply the optimized parameters and continue forward testing to verify they hold up. This cycle of test, optimize, and verify is how professional traders systematically improve their strategies over time.

How to Convert a TradingView Indicator to a Strategy

TradingView indicators show signals on the chart but cannot fire alerts or track P&L. Converting to a strategy unlocks automated forward testing.

Why Convert?

Indicators use study() or indicator() and can only plot visuals on the chart. Strategies use strategy() and can generate buy/sell orders, track positions, calculate P&L, and fire webhook alerts. You need a strategy to forward test.

Step 1: Change the Declaration

Replace the indicator declaration with a strategy declaration:

// Before (indicator):
indicator("My Signal", overlay=true)

// After (strategy):
strategy("My Signal", overlay=true,
     default_qty_type=strategy.fixed,
     default_qty_value=1,
     initial_capital=10000,
     calc_on_every_tick=false)

Step 2: Replace Plots with Orders

Find where your indicator plots buy/sell signals (arrows, shapes, colors) and replace them with strategy entry/exit calls:

// Before (indicator):
plotshape(buySignal, style=shape.triangleup,
     location=location.belowbar, color=color.green)
plotshape(sellSignal, style=shape.triangledown,
     location=location.abovebar, color=color.red)

// After (strategy):
if buySignal
    strategy.entry("Long", strategy.long)
if sellSignal
    strategy.entry("Short", strategy.short)

Step 3: Add Exit Logic

Indicators often only show entries. A strategy needs explicit exits. Common approaches:

// Exit on opposite signal (already handled above
// if using strategy.entry with same ID)

// Exit on stop loss / take profit:
strategy.exit("Exit Long", "Long",
     profit=200, loss=100)

// Exit at a specific condition:
if exitCondition
    strategy.close("Long")

Step 4: Handle alertcondition vs strategy.entry

If your indicator uses alertcondition(), those will not work in a strategy. Remove them — strategy orders automatically generate alert events that you can use for webhook alerts.

Common Pitfalls

  • Variable scope: Some var variables behave differently in strategies due to order execution. Test thoroughly.
  • Repainting: Indicators using security() on lower timeframes may repaint. Use barmerge.lookahead_off and calc_on_every_tick=false.
  • Pyramiding: By default, strategies only allow one entry per direction. Set pyramiding=0 to prevent stacking.
  • Commission: Add commission_type=strategy.commission.cash_per_contract and commission_value=X for realistic backtesting before forward testing.

How to Configure TradingView Alerts with JSON Messages

Proper alert configuration is critical for automated trade logging. Learn how to set up JSON-formatted alerts that the webhook can parse correctly.

Alert Message Format

TradingView alerts support dynamic placeholders that get replaced with real values when the alert fires. The webhook expects a specific format:

StrategyName: {"ticker": "{{ticker}}", "action": "{{strategy.order.action}}", "price": "{{strategy.order.price}}"}

The strategy name before the colon identifies which strategy fired the alert. The JSON after it contains the trade details.

Step-by-Step Setup

  1. Open your strategy on a TradingView chart
  2. Click the Alert button (clock icon) or press Alt+A
  3. In the Condition dropdown, select your strategy name
  4. Set the condition to "Order fills only" — this fires on every entry and exit
  5. In the Message field, paste the JSON template above (replace StrategyName with your actual strategy name)
  6. Under Notifications, enable Webhook URL
  7. Enter your webhook URL: https://pnlytics.io/webhook/YOUR_TOKEN
  8. Click Create

Available Placeholders

TradingView provides these dynamic variables for strategy alerts:

  • {{ticker}} — Symbol (e.g., MNQ1!, NQ1!, ES1!)
  • {{strategy.order.action}} — "buy" or "sell"
  • {{strategy.order.price}} — Fill price
  • {{strategy.order.id}} — Order ID (your entry/exit label)
  • {{strategy.market_position}} — "long", "short", or "flat"
  • {{strategy.market_position_size}} — Position size
  • {{time}} — Alert fire time
  • {{timenow}} — Current time (UTC)

Example: Full Alert Message

MNQ (4-52) V2: {"ticker": "{{ticker}}", "action": "{{strategy.order.action}}", "price": "{{strategy.order.price}}"}

When this alert fires on a buy at 20150.25, the webhook receives:

MNQ (4-52) V2: {"ticker": "MNQ1!", "action": "buy", "price": "20150.25"}

Adding Extra Fields

You can include additional fields for context. The webhook stores the full JSON:

MNQ (4-52) V2: {"ticker": "{{ticker}}", "action": "{{strategy.order.action}}", "price": "{{strategy.order.price}}", "regime": "TRENDING", "take_profit": "200"}

Tips

  • Alert expiration: Set to "Open-ended" so it does not expire after a month
  • Strategy name consistency: Use the exact same strategy name prefix across all alerts for the same strategy. The dashboard groups trades by this name.
  • Test first: Create the alert, wait for one signal, then check the dashboard to confirm it appears correctly
  • Multiple strategies: Create separate alerts for each strategy, each with its own unique name prefix

How to Set Up Webhook Alerts for Forward Testing

Connect your TradingView strategy to the dashboard with webhook alerts. Works with any platform that supports HTTP POST webhooks.

What Is a Webhook?

A webhook is an HTTP POST request that TradingView sends to your server every time an alert fires. The server receives the trade data, stores it in a database, and the dashboard displays it in real time. No polling, no manual entry.

Requirements

  • TradingView Pro, Pro+, or Premium — Webhook alerts are not available on the free plan
  • A running webhook server — The server must be reachable on port 80 or 443 from the internet
  • A strategy (not an indicator) — Indicators cannot fire order-based alerts

Setting Up the Webhook URL

Your webhook URL is the address where TradingView sends alert data. It follows this format:

https://pnlytics.io/webhook/YOUR_TOKEN

TradingView requires the webhook to be on port 80 (HTTP) or 443 (HTTPS). Other ports will not work.

Creating Your First Alert

  1. Add your strategy to a chart
  2. Press Alt+A or click the Alerts icon
  3. Select your strategy from the Condition dropdown
  4. Choose "Order fills only"
  5. In the Message box, enter your JSON template:
    MyStrategy: {"ticker": "{{ticker}}", "action": "{{strategy.order.action}}", "price": "{{strategy.order.price}}"}
  6. Scroll to Notifications and toggle Webhook URL on
  7. Paste your webhook URL
  8. Set expiration to Open-ended
  9. Click Create

Verifying It Works

After creating the alert, check the health endpoint to confirm the server is receiving data:

https://pnlytics.io/health

This returns the total alert count. After your first alert fires, the count should increase. Then check the dashboard to see the trade appear in the Recent Trades tab.

Supported Platforms

While TradingView is the primary platform, the webhook accepts alerts from any source that sends an HTTP POST with JSON data. The server automatically normalizes field names from:

  • TradingView — Native webhook support
  • TradersPost — Use the custom webhook forwarding feature
  • 3Commas — Configure a custom webhook URL in bot settings
  • Bybit / Alpaca — Use their API webhook features or a relay service
  • Custom bots — Any script that can send an HTTP POST

The webhook recognizes 35+ field name variations (e.g., symbol or pair instead of ticker, long or enter_long instead of buy) so most platforms work without any format changes.

Troubleshooting

  • Alert not arriving? Check that your server IP is correct and port 80 is open. TradingView will not send to non-standard ports.
  • Getting 403 errors? If you are behind Cloudflare, use the direct server IP for the webhook URL, not the domain name.
  • Duplicate trades? The server has built-in deduplication. If you see duplicates, check if you have multiple alerts set up for the same strategy.
  • Wrong strategy name? Make sure the text before the colon in your alert message exactly matches what you want to see in the dashboard filter.

Simple, Transparent Pricing

Free tier available now. Paid plans coming soon.

Free

$0/mo
  • Strategies 3
  • Alerts / month 100
  • History 30 days
  • Real-time webhooks
  • Daily P&L + Trades
  • Hourly / Day of Week
  • Target P&L
  • Best Window
  • Comparison / Risk / MC
Free During Beta

Pro

$49/mo
  • Strategies Unlimited
  • Alerts / month Unlimited
  • History Unlimited
  • Real-time webhooks
  • Daily P&L + Trades
  • Hourly / Day of Week
  • Target P&L
  • CSV import/export
  • Best Trading Window
  • Comparison Stats
  • Risk & Monte Carlo
Free During Beta

This platform is an analytics tool only — it does not provide financial advice or execute trades. Past performance is not indicative of future results. By continuing, you agree to our Terms of Service and Privacy Policy.