Closes are rounded into 20 point boxes to build point and figure columns in code. A 4 box reversal up from a falling column opens a long, and a 4 box reversal down opens a short. Each signal flips the position, with a 350 point stop as a backstop.
Best run of 5. DAX 40, 1 hour, spread 3, from run sweeps:2026-09-24-DAX40-1h-opt.tsv:7.
| Period | Up to 2026-09-24 |
| Instrument | DAX 40, 1 hour |
| Spread | 3 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-25 |
| positionSize Contracts per trade | 1 |
| boxSize Price size of one point and figure box | 20 |
| reversalBoxes Boxes against the column needed to flip trend | 4 |
| stopLossPoints Protective stop in points | 350 |
Every run
| Market | Timeframe | PF | Trades | Win % | Net | Max DD |
|---|---|---|---|---|---|---|
| DAX 40Best run | 1 hour | n/a | 6,179 | 36.37 | 10,211 EUR | -7,950 |
| Silver | 5 min | n/a | 2,009 | 37.23 | 27,104 USD | -17,023 |
| Silver | 10 min | n/a | 1,838 | 37.11 | 25,000 USD | -17,197 |
| DAX 40 | 4 hours | n/a | 3,600 | 37.64 | 10,191 EUR | -7,863 |
| Gold | 4 hours | n/a | 296 | 37.16 | 1,631 EUR | -921 |
Charts
The code
Every file in the library uses the same header, the same section order and the same variable names. The numbers above were produced by the original version before the rewrite, and the rewrite has not yet been compiled in ProRealTime.
// ============================================================ // Point and Figure Reversal // ProRealAlgos Strategy Library | prorealalgos.com // Type: Trend // Direction: Long & short // Timeframe tested: 1 hour // ============================================================ // --- Settings --- DEFPARAM CumulateOrders = false // --- Parameters --- positionSize = 1 // contracts per trade boxSize = 20 // price size of one point and figure box reversalBoxes = 4 // boxes against the column needed to flip trend stopLossPoints = 350 // protective stop in points // --- Indicators --- // Column state, kept between bars. Both start at 1 as in the tested code. ONCE upColumn = 1 ONCE downColumn = 1 ONCE levelsSeeded = 0 ONCE downLowSeeded = 0 ONCE upHighSeeded = 0 // Price rounded down to the nearest box (the 0.5 makes round() round down) boxLevel = round((close / boxSize) - 0.5) * boxSize // Seed both extremes on the first bar IF levelsSeeded = 0 THEN downColumnLow = boxLevel upColumnHigh = boxLevel levelsSeeded = 1 ENDIF IF boxLevel > boxLevel[1] THEN IF upColumn = 1 THEN downColumn = 0 // one-time reseed of the down column low, as in the tested code IF downLowSeeded = 0 THEN downColumnLow = boxLevel downLowSeeded = 1 ENDIF IF boxLevel > upColumnHigh THEN upColumnHigh = boxLevel ENDIF ENDIF IF downColumn = 1 AND boxLevel >= downColumnLow + (reversalBoxes * boxSize) THEN upColumnHigh = boxLevel upColumn = 1 downColumn = 0 ENDIF ELSIF boxLevel < boxLevel[1] THEN IF downColumn = 1 THEN upColumn = 0 // one-time reseed of the up column high, as in the tested code IF upHighSeeded = 0 THEN upColumnHigh = boxLevel upHighSeeded = 1 ENDIF IF boxLevel < downColumnLow THEN downColumnLow = boxLevel ENDIF ENDIF IF upColumn = 1 AND boxLevel <= upColumnHigh - (reversalBoxes * boxSize) THEN downColumnLow = boxLevel upColumn = 0 downColumn = 1 ENDIF ENDIF
16 more lines: the entry and exit rules.
Read this first
Questions
Yes. The point and figure columns are rebuilt from closes inside the code, so no special chart type is needed.
DAX 40 1 hour and 4 hours both made about 10,200 EUR (10,210.8 and 10,191.3). Silver 5 and 10 minutes were positive too, and Gold 4 hours made 1,630.6 EUR.
On DAX 40 1 hour the worst drawdown was 7,950.4 EUR at 1 contract.
It gave the best DAX 40 result in the sweeps, and the 20 point box fits the typical hourly range of that index.
Related
The ProRealAlgos community gets the full rules, the complete code and the automated portfolio.