The Fisher Transform of the typical price, over 13 bars, drives every trade. A cross up through -5 opens a long and a cross down through 5 opens a short. The system is always in the market and flips direction on each opposite signal.
Best run of 6. EUR/USD, 3 min, spread 1, from run sweeps:2026-09-23-EURUSD-3m-opt.tsv:3.
| Period | Up to 2026-09-23 |
| Instrument | EUR/USD, 3 minutes |
| Spread | 1 points |
| Contracts | 1 |
| Starting capital | 1,000,000 |
| Costs | Spread only. Commissions and overnight financing are not included. |
| Bars | Up to 200,000 bars, fewer where the instrument has less history |
| Last tested | 2026-09-23 |
| positionSize Contracts per trade | 1 |
| fisherPeriod Lookback for the Fisher Transform | 13 |
| upperLevel Sell short when Fisher drops back below this | 5 |
| lowerLevel Buy when Fisher climbs back above this | -5 |
| valueSmoothing Weight of the previous normalised value | 0.67 |
| clampTrigger Normalised value beyond this is clamped | 0.99 |
| clampValue Clamp level, keeps the log finite | 0.999 |
Every run
| Market | Timeframe | PF | Trades | Win % | Net | Max DD |
|---|---|---|---|---|---|---|
| EUR/USDBest run | 3 min | n/a | 6,227 | 50.23 | 140,774 USD | -50,961 |
| EUR/USD | 4 hours | n/a | 1,550 | 59.10 | 84,954 USD | -48,632 |
| Dow Jones | 1 hour | n/a | 1,268 | 60.96 | 24,659 EUR | -20,758 |
| Dow Jones | 4 hours | n/a | 341 | 60.12 | 13,477 EUR | -9,514 |
| GBP/USD | Daily | n/a | 442 | 59.95 | 5,897 USD | -5,630 |
| FTSE 100 | Daily | n/a | 349 | 63.04 | 5,538 EUR | -3,169 |
Charts
The code
// ============================================================ // Fisher Transform Cross // ProRealAlgos Strategy Library | prorealalgos.com // Type: Mean reversion // Direction: Long & short // Timeframe tested: 3 minutes // ============================================================ // --- Settings --- DEFPARAM CumulateOrders = false // --- Parameters --- positionSize = 1 // contracts per trade fisherPeriod = 13 // lookback for the Fisher Transform upperLevel = 5 // sell short when Fisher drops back below this lowerLevel = -5 // buy when Fisher climbs back above this valueSmoothing = 0.67 // weight of the previous normalised value clampTrigger = 0.99 // normalised value beyond this is clamped clampValue = 0.999 // clamp level, keeps the log finite // --- Indicators --- // Fisher Transform of the typical price. fisherValue and fisherLine carry over from the previous bar. IF BarIndex < fisherPeriod THEN fisherValue = 0 fisherLine = 0 ELSE highestPrice = Highest[fisherPeriod](TypicalPrice) lowestPrice = Lowest[fisherPeriod](TypicalPrice) IF highestPrice > lowestPrice THEN fisherValue = ((TypicalPrice - lowestPrice) / (highestPrice - lowestPrice) - 0.5) + valueSmoothing * fisherValue ENDIF IF fisherValue > clampTrigger THEN fisherValue = clampValue ENDIF IF fisherValue < (0 - clampTrigger) THEN fisherValue = 0 - clampValue ENDIF fisherLine = 0.5 * LOG((1 + fisherValue) / (1 - fisherValue)) + 0.5 * fisherLine ENDIF
15 more lines: the entry and exit rules.
Setup
Questions
Yes. It runs in ProOrder at 1 contract and needs no stop or target settings, since it only reverses.
EUR/USD 3 minutes made USD 140,774.00. EUR/USD 4 hours, Dow Jones 1 hour and 4 hours, GBP/USD daily and FTSE 100 daily were all positive too.
The headline run hit a max drawdown of USD 50,961.00 at 1 contract. On FTSE 100 daily it was EUR 3,169.00.
The daily version works, but the sweep found the most profit on EUR/USD 3 minutes. Daily runs trade less and had higher win rates, such as 63.04% on FTSE 100.
Related
The ProRealAlgos community gets the full rules, the complete code and the automated portfolio.