Plugin · cTrader WebView · read-only dashboard · 2 editions

FX Strength Pulse

A read-only cTrader desktop plugin that turns 28 FX pairs into a live currency-strength ranking with the top signal pairs to watch. FREE ships a single-timeframe ranking + strength alerts; PRO adds up to 4 timeframes in parallel, a 28-pair heatmap, an impulse tracker, ranking-cross alerts and full alert history. No trades, no advice, no account changes: it only reads bars and renders numbers.

Version v1.0 2 editions: Free + PRO AccessRights.None (no trading) 8 majors · 1 or up to 4 TFs Refresh every 5 s 1 or 3 alert types · popup + sound
FreePermanent · single-TF dashboard
$19/moPRO monthly · cancel anytime
$99earlyPRO lifetime · rises to $149 after 20 sales
FX Strength Pulse on cTrader

See it on the chart

FX Strength Pulse screenshot 1FX Strength Pulse screenshot 2FX Strength Pulse screenshot 3

Why it adds value

Most "currency strength" tools on cTrader print a single number per currency and stop there. FX Strength Pulse goes further: it ranks the 8 majors from strongest to weakest on your timeframe, surfaces the pairs with the widest gap and — on PRO — shows you whether that setup is consistent across multiple timeframes or just a one-bar artefact. All inside a cTrader-native panel that disappears from the chart the moment you stop using it.

One-glance ranking

Eight bars (AUD · CAD · CHF · EUR · GBP · JPY · NZD · USD) coloured by relative strength. Above 70 = clearly strong, below 30 = clearly weak. No reading numbers row by row. FREE PRO

Multi-TF heatmap PRO

28 pairs × up to 4 timeframes, colour-coded by gap magnitude. Dark green = both currencies agree on direction, dark red = strong disagreement. One glance answers "is this setup clean across timeframes, or just on one?".

Impulse tracker PRO

ROC of strength (impulse) + ROC of impulse (acceleration). A currency at strength 80 rising fast tells a different story than a currency at strength 80 flattening. PRO shows the histogram for each.

Three alert types PRO

Overbought/Oversold (rising edge) FREE, ranking-cross (two currencies swap position) PRO, impulse surge (|ROC| over threshold) PRO. All deduplicated. PRO keeps the last 100, FREE shows the last 3.

Video — install + read the dashboard

FX Strength Pulse — install, ranking, heatmap, alerts FX Strength Pulse — install, ranking, heatmap, alerts

Opens on YouTube (channel @realbacktesting). Local poster pending — David pastes the exact URL in .fvideo href once the recording lands.

Free vs PRO — clear differences

FREE is a complete, useful tool on its own (not a trial). PRO adds the multi-timeframe view, the impulse tracker, two more alert types and full alert history. Same engine, same code path, same plugin architecture.

CapabilityFREEPRO
Dashboard
Chip-up tab in cTrader (Asp.AddTab) — always one click awayYesYes
Currency ranking of 8 majorsYesYes
Timeframes simultaneous1 (configurable)up to 4 simultaneously
Top signal pairs (gap × confluence)top 5top 3–20 (configurable)
Per-TF gap columns in signal tableYes
Cross-TF confluence %Yes
Multi-TF heatmap (28 pairs × N timeframes)Yes
Impulse tracker (ROC of strength + acceleration)Yes
Settings tab in dashboardYes
Alerts
Overbought / Oversold (rising-edge, deduplicated)YesYes
Ranking-cross (two currencies swap position)Yes
Impulse surge (|ROC| over threshold)Yes
Alert history (in-panel)last 3 (collapsed)last 100, filterable (All / Strength / Rank / Impulse)
Delivery channelsPopup + SoundPopup + Sound + Email (via cTrader SMTP)
Pricing
PriceFree · permanent$19/mo · or $99 lifetime (early)

How the calculation works

No black box. Same engine for FREE and PRO; PRO just runs it on more timeframes in parallel and combines the results.

Step 1 · ATR-normalised returns per pair

For each of the 7 pairs where a currency participates (e.g. for EUR: EURUSD, EURGBP, EURJPY, EURAUD, EURCAD, EURCHF, EURNZD), take the log-style return over Period bars and divide by the ATR(14) of that pair at the same bar: ret = (close[t] − close[t − Period]) / close[t − Period] / ATR[t]. If the currency is the quote in the pair, the sign is flipped. Dividing by ATR neutralises the fact that GBPJPY moves more than EURUSD per bar — without this step, GBPJPY would dominate the ranking.

Step 2 · Raw strength score per currency

Average the 7 (or fewer, if some pairs are missing on the broker) normalised returns. At least 2 valid pairs are required for a currency to score — otherwise it returns NaN and is excluded from the ranking. This is what prevents a single rogue broker quote from poisoning a currency.

Step 3 · Rolling min-max normalisation to [0..100]

For the chosen MinMaxWindow (default 150 bars), look back at the raw-score history of the same currency and map: minimum historical raw → 0, maximum → 100, current → in between. 70 EUR and 70 GBP mean the same thing: both are near their personal historical high. A flat market yields 50 for everyone; a trending market yields 0 for the weakest and 100 for the strongest.

Step 4 · Pair gap and confluence PRO scales this

A pair's gap is strength(base) − strength(quote). FREE: with 1 TF, confluence is 1.0 if |gap| ≥ MinGap else 0.0. PRO: confluence is the fraction of active timeframes (up to 4) where |gap| ≥ MinGap — so a pair at 4/4 alignment is qualitatively different from 1/4. Top pairs are sorted by |gap| × confluence on both editions.

Step 5 · Impulse and acceleration PRO

Impulse at bar t for a currency = strength[t] − strength[t − ImpulsePeriod]. Acceleration = impulse at t minus impulse at t − 1. Both are bounded to the 0..100 scale of the parent strength, so "EUR impulse +12" means EUR has gained 12 strength-units over the ImpulsePeriod bars. Only PRO renders this; FREE computes impulse implicitly but doesn't show a dedicated tab.

Step 6 · Alerts (rising-edge, deduplicated)

FREE fires one alert type: overbought/oversold rising-edge on each currency. PRO adds two more: ranking-cross (a currency swaps position with another in the ranking) and impulse surge (|ROC| above threshold). All three use the same rising-edge logic, so a currency that stays OVERBOUGHT for 10 bars fires one alert, not ten. The flag resets when the currency drops back inside the band, allowing a new alert to fire later.

Step 7 · Render to WebView

C# builds a JSON snapshot (currencies, pairs with per-TF gaps, heatmap array, impulse array, alerts array, settings snapshot) and pushes it via ExecuteScript("window.fxRender({…})"). The WebView's JS re-renders the active view without losing scroll position. Both editions use the same render pipeline.

How to read the numbers

A field guide. Items tagged PRO only apply to the PRO edition.

What you seeRangeMeaning
Strength (ranking bar)0 – 100Where the currency sits in its own recent history. 50 = typical. ≥ 70 = near recent high. ≤ 30 = near recent low. NOT a forecast.
Bar colourgreen / grey / orange / red≥ 70 strong green · 58–70 muted green · 42–58 neutral · 30–42 weak orange · < 30 weak red. Visual scan, not a signal.
Signal pair (LONG / SHORT)gap × confluenceThe base currency is stronger than the quote by at least MinGap. LONG = buy base / sell quote. Use your own entry logic — the tool just tells you which pairs have the cleanest setup.
Confluence % PRO0% – 100%What fraction of active timeframes agree on the gap. On FREE there's only 1 TF, so confluence is either 0% (no signal) or 100% (gap ≥ MinGap). On PRO it can be anywhere from 0% to 100% across the 4 TFs you selected.
Gap (heatmap cell, signal-table cell) PRO−100 .. +100strength(base) − strength(quote) on that TF. Positive = base strong vs quote (LONG setup). Negative = base weak vs quote (SHORT setup). The bigger the magnitude, the cleaner the divergence.
|Avg gap| PRO0 – 100Mean of |gap| across active TFs. Sort key for the heatmap. Pairs with high |avg gap| are the ones where the divergence is consistent.
Impulse (track bar) PRO−100 .. +100Strength change over the ImpulsePeriod bars on the primary TF. Right of centre = rising. Bar fills up to 48% width on each side, scaled to the panel's max |impulse|.
Acceleration (↑ / · / ↓) PRO−100 .. +100ROC of impulse. ↑ = impulse is itself rising (accelerating). ↓ = impulse is falling (decelerating). · = roughly unchanged.
Alert logFREE: last 3 · PRO: last 100 filterableNewest first. Each alert fires once per crossover. PRO supports type filters: All / Strength / Rank / Impulse.
Market-closed chipon / offWhen the latest bar of EURUSD is more than 2 × timeframe hours old, the chip turns on and shows the last bar's day + time. Useful if you opened the dashboard over the weekend.

Configurable parameters — full reference (21)

Every parameter exposed by the plugin. Six groups. Tags FREE and PRO mark which editions expose the parameter. Counts audited against the source on 2026-06-29.

1 · Timeframes 4 params · PRO PRO
ParameterDefaultValuesWhat it does
Primary TF (Ranking + Impulse)H1any cTrader TFThe TF that drives the ranking bars and the impulse tracker. Other TFs show up in the heatmap and as extra columns in the signal table but don't affect the ranking order.
2nd TFH4any cTrader TFFirst cross-TF check. Set it to one step higher than the primary (e.g. primary H1, 2nd H4) for the classic intraday-then-swing confirmation.
3rd TFD1any cTrader TFSecond cross-TF check. D1 (daily) is the typical "where is this currency going structurally?" anchor.
4th TF (blank = skip)M15any cTrader TF · blank to disableFourth and final TF. Set to M5/M15 for scalpers, to W1 for position traders, leave blank to keep only 3 TFs (lower CPU).
2 · Calculation 7 params (5 in FREE)
ParameterDefaultValuesWhat it does
Timeframe FREEH1any cTrader TFThe single TF all strength scores are computed on. M5 = scalper. H1/H4 = intraday swing. D1/W1 = position. Lower TF = noisier; higher TF = slower.
Strength period (bars)5010 – 200Per-pair return lookback, applied to every active TF. 50 on H1 ≈ 2 trading days; 200 on H1 ≈ 8 days. Shorter = more reactive (and noisier). Longer = smoother but lags.
ATR period145 – 50ATR window used to normalise returns. 14 is the conventional Wilder ATR. Larger = more smoothing of the volatility denominator.
Min-max window15050 – 500How many bars of raw-score history feed the [0..100] normalisation. 150 on H1 ≈ 6 trading days; 500 on H1 ≈ 3 weeks. Larger = the 0/100 extremes are harder to reach.
Impulse period (bars) PRO51 – 30Lookback for the ROC that produces impulse. 5 on H1 ≈ 5 hours. Higher = smoother, slower signal. Lower = noisier, faster signal.
Min gap for signal pairs2510 – 60Minimum strength gap (base − quote) to surface a pair in the top-N. Lower = noisier signals. Higher = only the cleanest setups.
Top pairs to show PRO83 – 20How many of the ranked pairs the signal table renders. 8 covers the most useful setups; 20 only makes sense on bigger screens. FREE is fixed at top 5.
3 · Thresholds 3 params (1 in FREE)
ParameterDefaultValuesWhat it does
Extreme low (oversold)205 – 40Below this strength → OVERSOLD alert fires (rising edge). Error popup on PRO.
Extreme high (overbought)8060 – 95Above this strength → OVERBOUGHT alert fires (rising edge). Partial popup on PRO.
Impulse threshold PRO155 – 40|impulse| above this → impulse surge alert. 15 means a 15-unit strength change over the ImpulsePeriod bars. Lower = more alerts.
4 · Alert types 3 params (1 in FREE)
ParameterDefaultValuesWhat it does
Alert: strength extremestrueboolMaster switch for the overbought/oversold rising-edge alert. Present in both editions.
Alert: ranking cross PROtrueboolFires when two currencies swap position in the ranking (e.g. EUR moves from rank 3 to rank 2, displacing GBP). Rising-edge only.
Alert: impulse surge PROfalseboolFires when |impulse| crosses the ImpulseThreshold. Off by default because it can be chatty on M5/M15. Turn on for M30/H1+ swing traders.
5 · Alert delivery 3 params · all PRO PRO
ParameterDefaultValuesWhat it does
Popup alerts PROtrueboolShow cTrader popup notification on each alert. OVERSOLD fires Error (red), OVERBOUGHT fires Partial (orange). FREE always fires popups (not configurable).
Sound alerts PROtrueboolPlay cTrader notification sound. NegativeNotification for OVERSOLD, PositiveNotification for OVERBOUGHT and the other two alert types. FREE always plays sounds (not configurable).
Email alerts (uses cTrader email settings) PROfalseboolRoutes alerts through cTrader's configured SMTP. Currently logged + Print-stubbed (v1.0); wired-up outgoing email is on the v1.1 roadmap. Not present in FREE.
6 · Other 1 param · PRO PRO
ParameterDefaultValuesWhat it does
Refresh interval (seconds)53 – 60How often the dashboard re-pulls bars and re-renders. 5s is the sweet spot. 3s makes the heatmap feel live; 30s+ lowers CPU and cTrader API pressure. FREE is fixed at 5s.

Edition totals (audited 2026-06-29 from source): FREE exposes 8 parameters — 5 in Settings (Timeframe, Strength period, ATR period, Min-max window, Min gap) + 3 in Alerts (strength extremes on/off, Extreme low, Extreme high). Popup and Sound are always on in FREE — not user-configurable. PRO exposes 20 parameters across the same 6 groups (4 Timeframes + 6 Calculation + 3 Thresholds + 3 Alert types + 3 Alert delivery + 1 Other).

Quick usage manual

Same flow for both editions; PRO adds steps for the heatmap / impulse / extra alerts.

Install the plugin

From the cTrader Store add FX Strength Pulse (Free) or FX Strength Pulse PRO. It appears under Plugins as a cTrader tab. Open it and dock it wherever you like (right side recommended so the chart stays big).

Set your timeframe(s)

FREE: a single TF in Timeframe (default H1). PRO: up to 4 TFs in Tf1Tf4. Defaults M15/H1/H4/D1 are the classic intraday-then-swing ladder. Scalpers → M5/M15/H1/H4. Position traders → H4/D1/W1 + a 4th blank (saves CPU). The first TF is the "primary" that drives the ranking + impulse.

Read the ranking first

Glance at the 8 bars. Which currency sits at the top (strongest) and which at the bottom (weakest)? The colour tells you whether they're extreme (≥ 70 / ≤ 30) or just leaning. PRO adds an arrow on each bar showing the impulse sign — it tells you whether the move is fresh or already tired.

Check the signal pairs

Below the ranking, the top-N pairs table shows pairs where one currency is meaningfully stronger than the other. LONG = buy the first currency / sell the second. SHORT = the inverse. Confluence < 50% means the gap is thin — ignore. PRO renders one gap column per TF so you can see which TF the divergence is widest on.

Move to the Heatmap tab PRO

Sort is by |avg gap| (default). Read horizontally first: which pairs are green across all columns? Those are the cleanest multi-TF setups. Then read vertically: which TF column has the most dark cells? That's where the action is concentrated.

Switch to Impulse when the ranking is noisy PRO

If two currencies are both at 75+ on the ranking but their impulses point in opposite directions, the move is exhausted on one and fresh on the other. The impulse tab makes this obvious at a glance.

Configure your alerts

FREE: leave Alert: strength extremes = true; tune the two thresholds. PRO: start with strength + ranking-cross on (the defaults), impulse off. Use the Alerts tab to spot-check what's firing. If the alert log fills up with ranking-cross noise, raise MinGap — weak ranking swaps don't add info.

Set delivery channels

Popup + Sound work out of the box on both editions. PRO adds Email — currently a v1.1 deliverable; for now, the plugin logs the would-be email payload to the cTrader log so you can verify the format (EMAIL ALERT [type] subject: msg).

Read the Settings tab PRO

PRO has a dedicated Settings tab that mirrors every parameter currently active. Use it to confirm what the numbers mean after any edit. FREE doesn't have this tab — refer to the cTrader instance parameter list.

Watch for market-closed

If the dashboard shows MARKET CLOSED, the market hasn't opened for the new bar (weekend, holiday). The bars still display the last value; alerts stay quiet. The chip disappears automatically once a fresh bar arrives.

Honest notes

  • Read-only by design. It's a plugin with AccessRights.None: it cannot open, modify or close orders. It reads bars and renders numbers. There is no path through which this tool can place a trade.
  • Not a signal service. The dashboard surfaces currency strength, gap, confluence and impulse. It does not produce entry/exit levels, stop-loss, take-profit, position sizing, or a "BUY / SELL now" verdict. It is a situational-awareness tool.
  • Not affiliated with any broker or feed. All numbers come from your connected cTrader account via MarketData.GetBars. History depth depends on what your broker exposes.
  • No data leaves your machine. No external HTTP calls, no analytics, no telemetry. The only output channels are cTrader-native popup/sound (and your screen).
  • The 0..100 scale is per-currency. EUR=70 and USD=70 means each is near its own recent high, not that they are equally strong. To compare currencies use the ranking order, not the absolute number.
  • PRO multi-TF cost. 4 TFs × 28 pairs = 112 GetBars handles. On a slow broker this can take a few seconds on first load — the dashboard shows a Loading N/28 pairs… progress until all four TFs are populated. After that it refreshes incrementally.
  • PRO email is a v1.1 deliverable. v1.0 prints the would-be email payload to the cTrader log. It does not silently swallow alerts.
  • No backtest. This is a live plugin; Plugins don't run in cTrader's backtester by design. The indicator overlay (with historical strength lines) is on the v1.1 roadmap.
  • Trading involves risk. This tool does not give financial advice. Backtest before you trust any method, and verify in a demo account first.