Automated pattern recognition

Pattern Analysis

Every hour the scanner walks every market on the daily, 4-hour, 2-hour, hourly, 30-minute and 15-minute chart, finds chart and candlestick formations, and publishes a card for each one with the level that would trigger it, the measured target, the invalidation level — and how often that exact formation has actually worked before. A card appears a couple of minutes after the scan that found it.

Live setups
14689 timeframes
New this scan
0first seen this scan
Bullish
59340% of total
Bearish
87560% of total
Markets scanned
350forex · commodities · indices · crypto

Quality bar: a shape is published only when this market’s own record for it clears 20–30 samples and a 60% hit rate — and still clears 65% once that record is blended, by how much its sample can carry, towards the formation’s rate across all markets. 23307 live shapes did not qualify and are not shown.

Min win rate
Last scan: 2026-11-07 21:57 UTC · Updates hourly
Quick
Win-rate ladderWhole board 74.2%
Signal type
Expected edge by chart
showing 1468 of 1468· 1169 clear their cost
#1
NZD/CHF
15-MinuteForexOOS 66.9%
▼ Bearish
Hanging ManTriggered
Entry
0.45484
Target
0.45432
Stop
0.45536
FormedTriggeredTargetStop
R:R 1.00last 0.45485 · 0.00% away
Exithalf at target, half held to 1.2R· 0.45422
Estimated hit rate65.4%
sample n=72 · This market 66.7% ±10.9pp · avg R +0.37 · edge +0.04%All markets: 58.5% (n=18879)
Detected2026-11-06 21:45 UTC
Triggered2026-11-06 21:45 UTC
Full detail
#2
GBP/JPY
15-MinuteForexSolidOOS 67.0%Fragile @2x
▼ Bearish
Bearish Tri-StarTriggered
Entry
211.60
Target
211.39
Stop
211.81
FormedTriggeredTargetStop
R:R 1.00last 211.55 · +0.03% away
Exithalf at target, half held to 1.2R· 211.35
Estimated hit rate70.2%
sample n=45 · This market 77.8% ±12.1pp · avg R +0.56 · edge +0.06%All markets: 55.7% (n=15411)
Detected2026-11-06 19:45 UTC
Triggered2026-11-06 19:45 UTC
Full detail
#3
GBP/SGD
15-MinuteForexOOS 58.5%
▼ Bearish
Three Lower LowsTriggered
Entry
1.7130
Target
1.7093
Stop
1.7166
FormedTriggeredTargetStop
R:R 1.00last 1.7112 · +0.10% away
Exithalf at target, half held to 1.2R· 1.7086
Estimated hit rate67.2%
sample n=138 · This market 77.5% ±7.0pp · avg R +0.61 · edge +0.13%All markets: 51.3% (n=43866)
Detected2026-11-06 15:45 UTC
Triggered2026-11-06 15:45 UTC
Full detail
#4
Harmony
30-MinuteCryptoSolidOOS 66.1%
▼ Bearish
Hanging ManTriggered
Entry
0.00036
Target
0.00035
Stop
0.00036
FormedTriggeredTargetStop
R:R 1.00last 0.00036 · +0.57% away
Exithalf at target, half held to 1.2R· 0.00035
Estimated hit rate69.3%
sample n=55 · This market 78.2% ±10.9pp · avg R +0.76 · edge +0.87%All markets: 58.5% (n=9815)
Detected2026-11-07 17:30 UTC
Triggered2026-11-07 17:30 UTC
Full detail
#5
NZD/JPY
30-MinuteForexOOS 64.3%
▼ Bearish
On-NeckTriggered
Entry
87.8320
Target
87.6606
Stop
88.0034
FormedTriggeredTargetStop
R:R 1.00last 87.8770 · -0.05% away
Exithalf at target, half held to 1.2R· 87.6263
Estimated hit rate65.5%
sample n=57 · This market 71.9% ±11.7pp · avg R +0.45 · edge +0.09%All markets: 53.0% (n=16283)
Detected2026-11-06 19:30 UTC
Triggered2026-11-06 19:30 UTC
Full detail
#6
CHF/CNY
15-MinuteForexOOS 63.7%
▼ Bearish
Matching HighTriggered
Entry
8.1413
Target
8.0985
Stop
8.1841
FormedTriggeredTargetStop
R:R 1.00last 8.1379 · +0.04% away
Exithalf at target, half held to 1.2R· 8.0900
Estimated hit rate65.6%
sample n=161 · This market 67.7% ±7.2pp · avg R +0.72 · edge +0.38%All markets: 54.7% (n=16742)
Detected2026-11-06 18:00 UTC
Triggered2026-11-06 18:00 UTC
Full detail
#7
USD/TRY
4-HourForexSolidOOS 69.6%
▼ Bearish
Hanging Man near 20-bar HighTriggered
Entry
50.1512
Target
49.9869
Stop
50.3155
FormedTriggeredTargetStop
R:R 1.00last 50.1361 · +0.03% away
Exithalf at target, half held to 1.2R· 49.9540
Estimated hit rate70.9%
sample n=246 · This market 77.6% ±5.2pp · avg R +0.48 · edge +0.16%All markets: 55.8% (n=8036)
Detected2026-11-06 14:00 UTC
Triggered2026-11-06 14:00 UTC
Full detail
#8
USD/TRY
15-MinuteForexStrongOOS 63.7%
▼ Bearish
Matching HighTriggered
Entry
50.1523
Target
50.0943
Stop
50.2103
FormedTriggeredTargetStop
R:R 1.00last 50.1343 · +0.04% away
Exithalf at target, half held to 1.2R· 50.0827
Estimated hit rate82.4%
sample n=257 · This market 86.8% ±4.1pp · avg R +0.96 · edge +0.11%All markets: 54.7% (n=16742)
Detected2026-11-06 17:15 UTC
Triggered2026-11-06 17:15 UTC
Full detail
#9
AUD/CNY
15-MinuteForexOOS 63.7%
▼ Bearish
Matching HighTriggered
Entry
4.5878
Target
4.5664
Stop
4.6092
FormedTriggeredTargetStop
R:R 1.00last 4.5847 · +0.07% away
Exithalf at target, half held to 1.2R· 4.5621
Estimated hit rate65.9%
sample n=148 · This market 68.2% ±7.5pp · avg R +0.70 · edge +0.33%All markets: 54.7% (n=16742)
Detected2026-11-06 16:00 UTC
Triggered2026-11-06 16:00 UTC
Full detail
#10
EUR/CZK
2-HourForexOOS 64.1%
▼ Bearish
Tweezer TopTriggered
Entry
24.3293
Target
24.2632
Stop
24.3954
FormedTriggeredTargetStop
R:R 1.00last 24.2810 · +0.20% away
Exithalf at target, half held to 1.2R· 24.2500
Estimated hit rate66.9%
sample n=562 · This market 73.3% ±3.7pp · avg R +0.55 · edge +0.15%All markets: 52.7% (n=110694)
Detected2026-11-06 18:00 UTC
Triggered2026-11-06 18:00 UTC
Full detail
#11
USD/TRY
2-HourForexStrongOOS 64.1%
▼ Bearish
Tweezer TopTriggered
Entry
50.1512
Target
50.0071
Stop
50.2953
FormedTriggeredTargetStop
R:R 1.00last 50.1361 · +0.03% away
Exithalf at target, half held to 1.2R· 49.9782
Estimated hit rate75.5%
sample n=819 · This market 83.0% ±2.6pp · avg R +0.68 · edge +0.20%All markets: 52.7% (n=110694)
Detected2026-11-06 16:00 UTC
Triggered2026-11-06 16:00 UTC
Full detail
#12
EUR/DKK
2-HourForexThin move 0.004%OOS 65.6%Fragile @2x
▼ Bearish
Hanging ManTriggered
Entry
7.4752
Target
7.4742
Stop
7.4762
FormedTriggeredTargetStop
R:R 1.00last 7.4742 · +0.01% away
Exithalf at target, half held to 1.2R· 7.4740
Estimated hit rate66.3%
sample n=203 · This market 72.4% ±6.1pp · avg R +0.44 · edge +0.01%All markets: 56.4% (n=30690)
Detected2026-11-06 10:00 UTC
Triggered2026-11-06 10:00 UTC
Full detail
#13
CAD/DKK
DailyForexSolidOOS 71.8%
▲ Bullish
Inverted HammerTriggered
Entry
4.7479
Target
4.7734
Stop
4.7224
FormedTriggeredTargetStop
R:R 1.00last 4.7429 · +0.11% away
Exithalf at target, half held to 1.2R· 4.7785
Estimated hit rate68.1%
sample n=64 · This market 68.8% ±11.4pp · avg R +0.39 · edge +0.21%All markets: 61.7% (n=22393)
Detected2026-11-06 00:00 UTC
Triggered2026-11-06 00:00 UTC
Full detail
#14
GBP/TWD
DailyForexStrongOOS 75.8%
▼ Bearish
Hanging ManArmed
Entry
44.5511
Target
44.0381
Stop
45.0642
FormedTargetStop
R:R 1.00last 44.5511 · 0.00% away
Exithalf at target, half held to 1.2R· 43.9355
Estimated hit rate74.3%
sample n=123 · This market 75.6% ±7.6pp · avg R +0.53 · edge +0.61%All markets: 59.2% (n=24326)
Detected2026-11-06 00:00 UTC
TriggeredNot triggered yet
Full detail
#15
EUR/ILS
DailyForexSolidOOS 59.4%
▼ Bearish
Tweezer TopArmed
Entry
3.5929
Target
3.5184
Stop
3.6673
FormedTargetStop
R:R 1.00last 3.5929 · 0.00% away
Exithalf at target, half held to 1.2R· 3.5035
Estimated hit rate68.8%
sample n=395 · This market 72.4% ±4.4pp · avg R +0.50 · edge +1.03%All markets: 52.2% (n=99844)
Detected2026-11-06 00:00 UTC
TriggeredNot triggered yet
Full detail
#16
EUR/BRL
DailyForexSolidOOS 73.7%
▼ Bearish
Hanging Man near 20-bar HighArmed
Entry
6.1728
Target
6.0313
Stop
6.3144
FormedTargetStop
R:R 1.00last 6.1728 · 0.00% away
Exithalf at target, half held to 1.2R· 6.0030
Estimated hit rate70.0%
sample n=33 · This market 69.7% ±15.7pp · avg R +0.36 · edge +0.83%All markets: 58.4% (n=14540)
Detected2026-11-06 00:00 UTC
TriggeredNot triggered yet
Full detail
#17
CHF/BRL
DailyForexSolidOOS 73.7%
▼ Bearish
Hanging Man near 20-bar HighArmed
Entry
6.7414
Target
6.5835
Stop
6.8992
FormedTargetStop
R:R 1.00last 6.7414 · 0.00% away
Exithalf at target, half held to 1.2R· 6.5519
Estimated hit rate70.0%
sample n=42 · This market 69.0% ±14.0pp · avg R +0.45 · edge +1.05%All markets: 58.4% (n=14540)
Detected2026-11-06 00:00 UTC
TriggeredNot triggered yet
Full detail
#18
CAD/BRL
DailyForexSolidOOS 75.8%
▼ Bearish
Hanging ManArmed
Entry
3.9230
Target
3.8393
Stop
4.0068
FormedTargetStop
R:R 1.00last 3.9230 · 0.00% away
Exithalf at target, half held to 1.2R· 3.8226
Estimated hit rate68.0%
sample n=61 · This market 67.2% ±11.8pp · avg R +0.38 · edge +0.81%All markets: 59.2% (n=24326)
Detected2026-11-06 00:00 UTC
TriggeredNot triggered yet
Full detail
#19
USD/COP
DailyForexSolidOOS 75.8%
▼ Bearish
Hanging ManTriggered
Entry
3250.41
Target
3190.26
Stop
3310.56
FormedTriggeredTargetStop
R:R 1.00last 3239.50 · +0.34% away
Exithalf at target, half held to 1.2R· 3178.23
Estimated hit rate71.5%
sample n=40 · This market 72.5% ±13.8pp · avg R +0.50 · edge +0.93%All markets: 59.2% (n=24326)
Detected2026-11-04 00:00 UTC
Triggered2026-11-04 00:00 UTC
Full detail
#20
NZD/KRW
DailyForexStrongOOS 75.8%
▼ Bearish
Hanging ManTriggered
Entry
754.45
Target
747.06
Stop
761.84
FormedTriggeredTargetStop
R:R 1.00last 759.27 · -0.63% away
Exithalf at target, half held to 1.2R· 745.58
Estimated hit rate73.1%
sample n=103 · This market 72.8% ±8.6pp · avg R +0.48 · edge +0.47%All markets: 59.2% (n=24326)
Detected2026-10-29 00:00 UTC
Triggered2026-10-29 00:00 UTC
Full detail
#21
JPY/THB
DailyForexOOS 59.4%
▼ Bearish
Three Lower HighsTriggered
Entry
0.21419
Target
0.21099
Stop
0.21738
FormedTriggeredTargetStop
R:R 1.00last 0.21226 · +0.91% away
Exithalf at target, half held to 1.2R· 0.21035
Estimated hit rate66.0%
sample n=269 · This market 68.8% ±5.5pp · avg R +0.43 · edge +0.65%All markets: 53.0% (n=86726)
Detected2026-10-27 00:00 UTC
Triggered2026-10-27 00:00 UTC
Full detail
#22
AUD/PLN
15-MinuteForexOOS 58.5%
▼ Bearish
Tweezer TopTriggered
Entry
2.7067
Target
2.6976
Stop
2.7159
FormedTriggeredTargetStop
R:R 1.00last 2.7148 · -0.30% away
Exithalf at target, half held to 1.2R· 2.6957
Estimated hit rate65.6%
sample n=362 · This market 69.1% ±4.8pp · avg R +0.44 · edge +0.15%All markets: 52.1% (n=62618)
Detected2026-11-06 16:30 UTC
Triggered2026-11-06 16:30 UTC
Full detail
#23
NZD/CHF
30-MinuteForexOOS 64.3%
▼ Bearish
On-NeckArmed
Entry
0.45485
Target
0.45413
Stop
0.45557
FormedTargetStop
R:R 1.00last 0.45485 · 0.00% away
Exithalf at target, half held to 1.2R· 0.45398
Estimated hit rate65.5%
sample n=60 · This market 71.7% ±11.4pp · avg R +0.47 · edge +0.07%All markets: 53.0% (n=16283)
Detected2026-11-06 22:00 UTC
TriggeredNot triggered yet
Full detail
#24
NZD/CHF
HourlyForexOOS 63.5%
▼ Bearish
On-NeckArmed
Entry
0.45485
Target
0.45374
Stop
0.45596
FormedTargetStop
R:R 1.00last 0.45485 · 0.00% away
Exithalf at target, half held to 1.2R· 0.45351
Estimated hit rate65.3%
sample n=360 · This market 71.4% ±4.7pp · avg R +0.48 · edge +0.12%All markets: 52.9% (n=106539)
Detected2026-11-06 22:00 UTC
TriggeredNot triggered yet
Full detail
#25
EUR/AUD
15-MinuteForexOOS 66.9%Fragile @2x
▼ Bearish
Hanging ManTriggered
Entry
1.6225
Target
1.6207
Stop
1.6243
FormedTriggeredTargetStop
R:R 1.00last 1.6226 · 0.00% away
Exithalf at target, half held to 1.2R· 1.6203
Estimated hit rate66.8%
sample n=92 · This market 68.5% ±9.5pp · avg R +0.35 · edge +0.04%All markets: 58.5% (n=18879)
Detected2026-11-06 21:45 UTC
Triggered2026-11-06 21:45 UTC
Full detail
#26
EUR/JPY
30-MinuteForexSolidOOS 69.3%
▼ Bearish
Hanging ManTriggered
Entry
176.56
Target
176.34
Stop
176.78
FormedTriggeredTargetStop
R:R 1.00last 176.59 · -0.02% away
Exithalf at target, half held to 1.2R· 176.30
Estimated hit rate69.2%
sample n=31 · This market 74.2% ±15.4pp · avg R +0.45 · edge +0.06%All markets: 58.5% (n=9815)
Detected2026-11-06 21:30 UTC
Triggered2026-11-06 21:30 UTC
Full detail
#27
NZD/SGD
HourlyForexOOS 62.1%
▼ Bearish
Bearish Doji StarTriggered
Entry
0.71040
Target
0.70824
Stop
0.71256
FormedTriggeredTargetStop
R:R 1.00last 0.71050 · -0.01% away
Exithalf at target, half held to 1.2R· 0.70781
Estimated hit rate65.5%
sample n=717 · This market 68.9% ±3.4pp · avg R +0.41 · edge +0.13%All markets: 52.9% (n=159398)
Detected2026-11-06 21:00 UTC
Triggered2026-11-06 21:00 UTC
Full detail
#28
EUR/ILS
15-MinuteForexSolidOOS 58.2%
▲ Bullish
Matching LowTriggered
Entry
3.5515
Target
3.5687
Stop
3.5343
FormedTriggeredTargetStop
R:R 1.00last 3.5589 · -0.21% away
Exithalf at target, half held to 1.2R· 3.5721
Estimated hit rate68.4%
sample n=210 · This market 71.9% ±6.1pp · avg R +0.58 · edge +0.28%All markets: 44.6% (n=19087)
Detected2026-11-06 13:45 UTC
Triggered2026-11-06 13:45 UTC
Full detail
#29
JPY/CNY
15-MinuteForexOOS 63.7%
▼ Bearish
Matching HighTriggered
Entry
0.04210
Target
0.04195
Stop
0.04225
FormedTriggeredTargetStop
R:R 1.00last 0.04210 · 0.00% away
Exithalf at target, half held to 1.2R· 0.04192
Estimated hit rate65.2%
sample n=84 · This market 69.0% ±9.9pp · avg R +0.61 · edge +0.22%All markets: 54.7% (n=16742)
Detected2026-11-06 12:45 UTC
Triggered2026-11-06 12:45 UTC
Full detail
#30
GBP/SEK
DailyForexOOS 71.8%
▲ Bullish
Inverted HammerTriggered
Entry
13.1927
Target
13.2734
Stop
13.1120
FormedTriggeredTargetStop
R:R 1.00last 13.2036 · -0.08% away
Exithalf at target, half held to 1.2R· 13.2895
Estimated hit rate66.1%
sample n=37 · This market 64.9% ±15.4pp · avg R +0.33 · edge +0.20%All markets: 61.7% (n=22393)
Detected2026-11-06 00:00 UTC
Triggered2026-11-06 00:00 UTC
Full detail
#31
CAD/CHF
15-MinuteForexSolidOOS 66.9%
▼ Bearish
Hanging ManTriggered
Entry
0.58083
Target
0.57984
Stop
0.58182
FormedTriggeredTargetStop
R:R 1.00last 0.58060 · +0.04% away
Exithalf at target, half held to 1.2R· 0.57964
Estimated hit rate68.9%
sample n=304 · This market 69.7% ±5.2pp · avg R +0.48 · edge +0.08%All markets: 58.5% (n=18879)
Detected2026-11-06 21:30 UTC
Triggered2026-11-06 21:30 UTC
Full detail
#32
USD/TRY
30-MinuteForexStrongOOS 67.7%
▼ Bearish
Bearish Tri-StarTriggered
Entry
50.1501
Target
50.0891
Stop
50.2111
FormedTriggeredTargetStop
R:R 1.00last 50.1343 · +0.03% away
Exithalf at target, half held to 1.2R· 50.0769
Estimated hit rate85.1%
sample n=215 · This market 88.4% ±4.3pp · avg R +0.90 · edge +0.11%All markets: 55.4% (n=8138)
Detected2026-11-06 19:30 UTC
Triggered2026-11-06 19:30 UTC
Full detail
#33
EUR/SEK
15-MinuteForexOOS 66.9%Fragile @2x
▼ Bearish
Hanging ManTriggered
Entry
11.0254
Target
11.0167
Stop
11.0341
FormedTriggeredTargetStop
R:R 1.00last 11.0230 · +0.02% away
Exithalf at target, half held to 1.2R· 11.0150
Estimated hit rate65.0%
sample n=45 · This market 66.7% ±13.8pp · avg R +0.35 · edge +0.03%All markets: 58.5% (n=18879)
Detected2026-11-06 18:00 UTC
Triggered2026-11-06 18:00 UTC
Full detail
#34
NZD/SGD
15-MinuteForexOOS 58.0%
▼ Bearish
Three Shrinking Bodies DownTriggered
Entry
0.71089
Target
0.70903
Stop
0.71275
FormedTriggeredTargetStop
R:R 1.00last 0.71050 · +0.05% away
Exithalf at target, half held to 1.2R· 0.70865
Estimated hit rate67.6%
sample n=184 · This market 75.5% ±6.2pp · avg R +0.59 · edge +0.15%All markets: 50.7% (n=55686)
Detected2026-11-06 15:30 UTC
Triggered2026-11-06 15:30 UTC
Full detail
#35
EUR/CHF
30-MinuteForexSolidOOS 69.3%
▼ Bearish
Hanging ManTriggered
Entry
0.91381
Target
0.91262
Stop
0.91500
FormedTriggeredTargetStop
R:R 1.00last 0.91396 · -0.02% away
Exithalf at target, half held to 1.2R· 0.91238
Estimated hit rate69.7%
sample n=88 · This market 71.6% ±9.4pp · avg R +0.38 · edge +0.05%All markets: 58.5% (n=9815)
Detected2026-11-06 21:00 UTC
Triggered2026-11-06 21:00 UTC
Full detail
#36
AUD/CHF
15-MinuteForexSolidOOS 66.9%
▼ Bearish
Hanging ManTriggered
Entry
0.56309
Target
0.56203
Stop
0.56415
FormedTriggeredTargetStop
R:R 1.00last 0.56266 · +0.08% away
Exithalf at target, half held to 1.2R· 0.56182
Estimated hit rate70.4%
sample n=274 · This market 71.5% ±5.3pp · avg R +0.47 · edge +0.09%All markets: 58.5% (n=18879)
Detected2026-11-06 21:00 UTC
Triggered2026-11-06 21:00 UTC
Full detail
Charts are drawn for the first batch only — use "Show more" to draw the rest.

Paper equity curve

Each settled replay trade drawn as a cumulative-R line. The terminal equity tells you whether the edge actually earned money overall — a different question than the headline hit rate.

Ordered by publication time across every timeframe in the selected family. Each step is one settled trade; the line is coloured by its terminal value, not by the result of any single trade. Trades that never triggered, and trades still open at the data cutoff, are excluded.

Follows the family filter above — switch to "Indicator combos" to view just the indicator family.

580.0R0-34.2R6694 trades
Timeframes
Total trades
6694
Total R
+550.63R
Avg R / trade
+0.08
Hit rate
42.7%
Profit factor
1.15winners R ÷ losers R
Max drawdown
-77.8Rlargest peak-to-trough dip

How the scanner works

The rules are fixed and mechanical. Nothing on this page is a human opinion, and nothing is tuned after the fact to look better.

  1. 1Formations are found from swing pivots (a high or low with three lower highs or higher lows on each side) and from candlestick shape. A pivot is only confirmed three bars after the extreme, so every card is published with that lag, never before
  2. 2The target is the measured move: the height of the formation projected from the breakout level. The invalidation level sits one ATR beyond the opposite side of the formation.
  3. 3A setup is scored only from the first bar a trader could have acted on it — the bar after the formation became visible, which for pivot-based shapes is three bars after the extreme. Breakouts that happened in that gap are not credited, because nobody could have known the pattern existed yet. It wins if the target is touched before the invalidation level, loses if the invalidation level is touched first, and times out if neither happens inside the window — 60 bars on the daily, 4-hour and 2-hour charts, 48 on the hourly, 30-minute and 15-minute. Timed-out setups are counted as not-wins.
  4. 4Rates are measured market by market. A market with fewer than 30 past occurrences is not published at all rather than being topped up from other markets — there is no number to show for it. The headline figure on a card is that market’s record pulled towards the formation’s rate across every market, by a strength fitted from how much of the gap between markets under that formation actually persists, which is the better estimate of what comes next; on the daily chart it is then moved by how far that market itself sits from the average market, because there — and measurably only there — that turns out to predict something. The market’s raw record and the cross-market rate are both printed beside it, and publication requires the raw record to clear the bar on its own. Setups still open at the time of the scan are excluded, so the number is not flattered by unresolved trades.
  5. 5Rates are descriptive, not predictive. They are computed on the rules above, on past bars, from prices that can actually be paid, but with no commission, no spread and no guarantee that the future resembles the past.

Prices: Yahoo Finance OHLC. Median coverage per market — daily bars 22.9 years, 1-hour bars 2 years, 2-hour bars 2 years, 30-minute bars 59 days, 15-minute bars 59 days. The 4-hour and 2-hour bars are not native: they are built by combining 1-hour bars, so they inherit the full two-year 1-hour history. Yahoo stores only about two months of the 30-minute and 15-minute series, which is why those two are the shallowest in calendar terms — the 15-minute carries about twice as many bars over the same window, but the same two months.

One consequence is worth stating rather than leaving in the code: a group is simply N consecutive hourly bars as the vendor returns them, so on a market that closes, a group can span the close. Measured across the 348 markets, 7.5% of 4-hour bars and 2.8% of 2-hour bars contain an hourly gap, and on 266 markets some 4-hour bar spans more than 24 real hours — days, on the exchanges with long holidays.

Bounding a group by the session was measured on 2026-09-27 and rejected, in both of the forms it can take. Breaking the group at a session gap and keeping the short tail that follows read 0.19 points lower out-of-sample on the 4-hour and 0.07 on the 2-hour, because that tail is a shorter bar and the formations assume one bar length; discarding the tail instead read 0.09 and 0.01 lower, at the cost of 5.4% of 4-hour bars, 42% of them on the S&P, the Dow and the Nikkei. Both forms turned the 4-hour’s in-sample expectancy negative. One detail keeps these four numbers from being exact to the last decimal, and it is worth naming: the two halves are split at 60% of each variant’s own bar count, so a variant that changes the count also moves its own boundary — bar 1750 as the board ships it, 1655 with the tail discarded, 1833 with it kept.

One further property is worth recording rather than leaving in the code. A group’s boundaries are anchored to the start of the array the vendor returns, and the vendor is asked for a start DATE, so the window advances one calendar day at a time — and a day of bars is a multiple of four only on a market that never closes. On the median market about 29% of days break that rule, so the 4-hour and 2-hour grids are re-cut roughly one day in three and a card can appear or vanish with no market behind the change. Anchoring the boundaries elsewhere — to the session open, to a clock grid, or by trimming the series onto a fixed grid — was measured on 2026-09-28 and none of the three beat the current grouping (4-hour 63.008% out-of-sample as it stands against 62.915% session-anchored; 2-hour 63.390% against 63.383%), while anchoring would discard 5.4% of 4-hour bars, concentrated in cash indices where a session leaves a remainder — 42% each on the S&P, the Dow and the Nikkei. So the grouping stays.

What the instability is worth, though, is measurable: re-cutting the same series from a bar three positions later left the bar count within 0.1% and the hit rate within 0.06 points, but moved the out-of-sample expectancy from +0.011 to −0.026 per trade on the 4-hour and from +0.015 to −0.017 on the 2-hour. Read the hit rates here as reproducible and the R column as indicative.

Risk warning

This is pattern recognition, not a recommendation. Even the shapes published here clear only a [object Object]% historical bar, so more than one in four still fails. Size positions and place stops yourself; nothing here is investment advice.