Trading Strategy
FXTerminal's charts run in the browser with live prices, ten timeframes, a full drawing toolkit, order blocks, Smart Money Concepts, auto-detected chart patterns, fixed range volume profile and…
FX Terminal Research · 2026-08-16 · 13 min read
Short answer: FXTerminal's charts run in the browser with live prices, ten timeframes, a full drawing toolkit, order blocks, Smart Money Concepts, auto-detected chart patterns, fixed range volume profile and TradingView-style bar replay — free, no account needed to start.
And: when we ran a 368-configuration backtest grid on the order block indicator across two currency pairs and roughly four years of data, with proper in-sample/out-of-sample splits and two unseen markets held back, zero configurations were profitable across every out-of-sample segment. The best worst-case out-of-sample profit factor was 0.97.
Both of those things are true and they are not in conflict. This article covers what the toolkit does, how each piece works, and what the backtest actually found — because a chart tool that also tells you its indicators are not signal generators is more useful than one that does not.
Ten tools, all persisted, all with the behaviour you would expect:
| Tool | Notes |
|---|---|
| Trendline | Two-point, extendable |
| Ray | Extends infinitely to the right |
| Horizontal line | Snaps to price |
| Rectangle | Zone marking |
| Parallel channel | Three-point |
| Fibonacci retracement | Standard levels |
| Fibonacci extension | Projection targets |
| Measure | Pips, percentage and bar count |
| Text | Annotation |
| Fixed range volume profile | Two-click, draggable — see below |
This is a small feature with a large usability effect. Originally drawings were stored per symbol and timeframe, so a trendline drawn on H4 vanished when you switched to H1. That is not how anyone thinks about a level: a level is a property of the market, not of the bar size you happened to be looking at.
Drawings are now keyed per symbol and appear on every timeframe. Each individual drawing can be pinned to specific timeframes if you genuinely want it only on the daily.
A technical aside for anyone building something similar, because this was the hard part. Anchors are stored as {unix seconds, price}, which is correct and timeframe-independent. But lightweight-charts' logicalToCoordinate() returns 0 for any non-integer logical index — the library guards it with an integer check. An anchor created on H4 lands between bars when viewed on H1, giving a non-integer logical index, so every cross-timeframe drawing collapsed to the left edge of the pane as a vertical sliver. The fix is to interpolate between the two neighbouring integer indices; the mapping is linear, so it is exact. If you have ever seen drawings mysteriously stack up at x=0, this is why.
EMA, SMA, RSI, MACD, Bollinger Bands, ATR, Stochastic, Ichimoku, Supertrend, Donchian channels, support/resistance clustering, VWAP with session/week/month/quarter anchoring.
A port of the LuxAlgo Order Block Detector: volume-weighted pivot swings identify the last opposing candle before a displacement move, and the resulting zone extends right until mitigated. Mitigation can be set to wick-touch or close-through.
One deliberate departure from the original: no display cap on how far back blocks are drawn. The Pine version limits how many recent blocks show; here every unmitigated block persists, which is what you want when you are looking for a level from three weeks ago that price is only now returning to.
A port of the LuxAlgo SMC study, drawing:
Three deliberate deviations from the Pine original, each for a specific reason:
1. Explicit history caps — 500 structures, 250 swings, 250 equal highs/lows, 15 gaps. On TradingView the script is implicitly bounded by the platform's 500-drawing-object limit. Without an equivalent cap, 30,000 M1 bars generate thousands of internal breaks and the pane becomes an unreadable wall of lines. We tested this; it is genuinely illegible.
2. Fair value gaps extend to the current bar rather than drawing as a 2-bar box. A 2-bar box is about two pixels wide at any useful zoom — effectively invisible. Since the engine deletes a gap the moment price fills it, every gap still on screen is a live one, so extending it right is both visible and consistent with how the order block zones are drawn.
3. Symmetric gap invalidation. The original passes (currentHigh, last2Low) as (top, bottom) for bearish gaps, which means top actually holds the lower price — with the consequence that bearish gaps die on first touch while bullish gaps require a full fill. That asymmetry is a bug, not a feature, and it is normalised here so both directions require a full fill.
A zigzag pivot engine feeds an ordinary-least-squares trendline fit on each side of a swing sequence, and windows of five or six pivots are classified into thirteen pattern types — channels, wedges, triangles and their variants — with error and flatness thresholds controlling how permissive the fit is. Patterns are drawn overlap-free with a configurable maximum.
This is an original implementation of public-domain concepts (zigzag, line fitting, pattern taxonomy), not a port of any licensed script.
Built as an interactive drawing tool rather than a parameterised indicator, because the entire point is selecting a range on the chart by hand.
How to use it: pick the tool, click once to set the left edge, click again for the right. Drag either boundary to adjust; the profile recomputes live.
What it computes:
Why it matters: the POC is the market's accepted price for that period. Price returning to a POC from above is meeting an area of established acceptance; price rejecting from a VAH is failing at the edge of it. Volume profile answers "where did trade actually happen" in a way that price-only analysis cannot.
Settings — row count, value area percentage, width, placement, colours, three display toggles — are global across profiles rather than per-object, which is a deliberate choice: nobody wants to restyle each profile individually. Ranges persist per symbol.
The computation is memoised so that dragging a boundary or receiving a live tick does not recompute the whole profile.
Reveals candles one at a time from a start point you choose, so you can practise or test discretionary analysis with no knowledge of what comes next.
| Control | Behaviour |
|---|---|
| Start point | Click a candle or type a date. Nothing is pre-selected, and nothing is remembered between runs. |
| Playback | Play, pause, step, speed 0.5× to 10× |
| Trading | Place trades with pip-based stop and target; they resolve as bars reveal |
| Rewind | Trades resolve only on forward progress, never on rewind |
Two design decisions worth mentioning because they are the difference between a replay tool being usable and infuriating:
When a single bar spans both your stop and your target, the stop wins. Intrabar sequencing is unknowable from OHLC data, so the worst case is assumed. Any replay tool that resolves the target first is flattering you.
Auto-scroll is opt-out and gesture-aware. The view follows the newest bar during playback, but the moment you pan or zoom it stops following, and it re-engages only when you scroll back near the tail. Crucially, while following it translates the window by the number of bars added rather than re-pinning to the newest bar — so your zoom level and your right-hand gap are preserved and nothing ever jumps. A "go to latest" button re-engages it manually. Earlier versions re-pinned on every new candle, which yanked the view back every time you tried to look at anything.
We have a backtester, so we tested.
Setup: 368 backtest configurations spanning order block tap entries and rejection entries, crossed with EMA200 trend filters, ADX thresholds, RSI filters, session filters, and ATR-based stops, targets and trailing stops.
Markets: AUD/USD (4.8 years) and USD/CAD (3.8 years) for the search, with 70/30 in-sample / out-of-sample time splits. EUR/USD and USD/JPY held back entirely as unseen markets.
Costs: 0.7 pip spread.
Result:
Zero configurations were profitable on all out-of-sample segments. The best worst-case out-of-sample profit factor was 0.97.
Order blocks on H1 FX are approximately break-even after costs, and strongly regime-dependent — consistently losing on AUD/USD across 2021–24 while performing acceptably elsewhere.
Adding a VWAP-reclaim confirmation made it worse. The theory was that waiting for price to reclaim session VWAP after touching a demand zone would filter out failed taps. Measured on EUR/USD H1 over roughly 15 months: plain order block tap gave a profit factor of 0.89; tap plus rejection plus VWAP reclaim gave 0.70. Waiting for confirmation gave a worse entry price than the tap bounce itself, and the improvement in win quality did not cover it.
Reviewing every losing trade found a real effect — but not a universal one. On EUR/USD, trades taken with the EMA trend lost about 90% of the time (1 win, 9 losses) while counter-trend fades won 45%. Inverting the filter to trade order blocks against the prevailing trend lifted EUR/USD H1 from a profit factor of 1.25 to 2.52, with the win rate going from 37% to 50% and drawdown falling.
Encouraging — except the same inversion was neutral-to-worse on AUD/USD and USD/CAD. The effect is real on two pairs and absent on two others, which is the signature of a regime-specific behaviour rather than a structural edge. That configuration ships as a preset labelled paper-only, which is exactly what it is.
It does not mean order blocks or SMC are worthless. What it means is more specific and more useful:
They are context tools, not signal generators. An order block marks where a displacement move originated — genuinely useful information about where resting orders may sit. Mechanically buying every tap of one, with a fixed stop and target, does not make money on H1 FX after costs. Those are different claims, and the second one is the one being sold by most SMC content.
Confirmation is not free. The VWAP-reclaim result is the general lesson: every filter you add improves the quality of the trades you take and worsens the price at which you take them. That trade-off has to be measured, not assumed. It went the wrong way here.
A filter that works on two pairs and fails on two others is a regime observation. It may be tradeable with position sizing and regime detection. It is not an edge you can turn on and leave alone.
If you want to check any of this yourself, the same indicators are available as operands in the forex strategy backtester, including causal, no-lookahead versions of the order block features — a zone becomes visible only on its confirmation bar, never retroactively at its origin. That last detail is what makes the test honest, and it is locked by a prefix-equality test that verifies adding future bars never changes past signals.
Worth knowing before you design an analysis around a timeframe:
| Timeframe | Approximate reach |
|---|---|
| M1 | ~21 days |
| M15 | ~12 months |
| H1 | ~15 months |
| D1 | ~18 months |
| W1 | Several years |
The M1 constraint surprises people. A year-ago backtest works on H1, H4 and D1; it does not work on M1 or M5. Any zone-based indicator also needs warm-up bars before your test window so the zones have formed.
M1, M5, M10, M15, M30, H1, H4, D1, W1, MN1.
Ctrl+K opens a search modal across the instrument universe — majors, crosses, metals and the dollar index — filterable by name and category.
The right rail carries a live watchlist, latest news with calendar-event markers plotted directly on the candles, the compact strategy backtest panel, and a paper trading ticket. Open paper positions in the charted symbol are drawn as entry, stop and target price lines, so you can see your risk on the chart rather than in a separate window.
The chart screen switches to a compact layout based on both width and height, so a landscape phone gets the mobile chrome rather than a desktop layout squeezed into 375 pixels of vertical space. There is a dedicated mobile drawing bar and a two-layer fullscreen mode.
Is there a free Smart Money Concepts indicator that isn't on TradingView? Yes. FXTerminal's free live forex charts include a full SMC implementation — swing and internal break of structure, change of character, order blocks, fair value gaps, equal highs and lows, strong/weak extremes and premium/discount zones — running in the browser with no account required to start.
Do order blocks actually work? Not as a mechanical entry signal on H1 FX. We ran 368 backtest configurations across AUD/USD and USD/CAD with in-sample/out-of-sample splits and two unseen markets held back; zero configurations were profitable across all out-of-sample segments, with a best worst-case out-of-sample profit factor of 0.97. Order blocks are useful as context — marking where displacement originated — rather than as a standalone trigger.
Is there a free fixed range volume profile? Yus. It works as a two-click drawing tool with draggable boundaries, computing the point of control, value area high and value area low with a configurable value area percentage (70% by default) and row count, and splitting volume by candle direction. Ranges persist per symbol.
Can I use bar replay without a paid subscription? Yes. Pick any starting candle or type a date, then step or play forward at 0.5× to 10× speed while placing trades with stops and targets. Trades resolve only on forward progress, so rewinding does not re-trigger them, and a bar that spans both stop and target resolves as a stop — the worst case.
Why did my drawings disappear when I changed timeframe? They should not. Drawings are stored per symbol and appear on every timeframe by default. Individual drawings can be pinned to specific timeframes if you want a level visible only on the daily. If you have legacy drawings from an older per-timeframe scheme, they are merged automatically the first time you open that symbol.
What is the difference between the two order block indicators?
The standalone orderblocks indicator uses volume-weighted pivot detection. The order blocks inside the SMC suite use market-structure detection. They are different algorithms answering the same question and will sometimes disagree — which is worth paying attention to, since agreement between two independent methods is a stronger signal than either alone.
How far back does the chart data go? It depends on the timeframe. Roughly 21 days on M1, 12 months on M15, 15 months on H1, 18 months on D1, and several years on weekly. Finer timeframes carry less history because the underlying feed keeps a rolling bar window per timeframe.
Does adding a confirmation filter improve an entry? Not automatically, and this is measurable. Adding a session-VWAP reclaim confirmation to an order block tap entry moved EUR/USD H1 from a profit factor of 0.89 to 0.70 over roughly 15 months — the better trade quality did not compensate for the worse entry price. Test every filter both ways rather than assuming confirmation is protective.
The charting toolkit is the part of FXTerminal people use most, and it is the part I have least to say about — it draws what you would expect it to draw, it saves what you draw, and it does not charge you.
The part worth arguing about is what the indicators are for. Order blocks, fair value gaps and break-of-structure markers are excellent at answering "where did something happen here". They are poor at answering "should I buy this", and we have 368 backtests saying so. That distinction is the whole difference between a chart tool and a signal service, and it is the distinction most SMC content is built on blurring.
Draw on it, replay it, and — if you disagree with any of the above — test it. Everything in this article is free at fxterminal.app/charts, and the backtester that produced the uncomfortable numbers is at fxterminal.app/strategy-lab.