Forex market structure research · Oxarus Quant Studies on support and resistance levels, weekend gaps and how price behaves at levels, built on millions of minutes of data. Breadcrumbs: Oxarus home › Oxarus Quant › Research NOTICES - Interface data marked as representative is illustrative; it is not a real client, result or measurement. - Not investment advice. Trading in financial markets carries a risk of losing capital. SECTIONS - we measure first. - two published studies. - how long at the level? - when do they close? - how we avoid fooling ourselves. - let data answer your question. WE MEASURE FIRST. QUANT · RESEARCH We test widely held but rarely measured market ideas against data: seven years of minute prices, a matched control group for every idea and a repeat on a second pair. We publish the ideas that don't hold up, too. https://oxarus.com/en/quant/research - Institutional research → open_page(path="/quant/research", anchor="cta-heading") - Findings → open_page(path="/quant/research", anchor="studies") - Minute data, 2020–2026 - A matched control group in every test - Replicated on EURUSD and GBPUSD 1. Level 2. Control 3. Result Representative interface data · Representative chart. Findings are for research purposes only and are not investment advice. - file: level_study.ipynb - dataset: EURUSD · M1 · 2020–2026 · 40,658 touches - tag: Representative chart Count touches · Build control lines · Compare rates - done: done - level: Previous day high (PDH) - band: band = 0.05 × ATR - levelTag: PDH Matched control - tag: ctl - body: For every real level, a line at the same distance that means nothing. Taken from another day's real offset, shifted by 7 days. - Real level: 9–25 / day - Control line: ~25 / day - Distance distribution: identical Three touches on one level - 0 - n: #1 - minutes: 4 - dwell: 4 min - out: REJECT - 1 - n: #2 - minutes: 9 - dwell: 9 min - out: REJECT - 2 - n: #3 - minutes: 31 - dwell: 31 min - out: BREAK The touch that stayed longest in the band broke the level. One representative day; the rates are in the third cell. - resultTitle: Break rate · by level family PIVOT | 41 | 40 PDHLC | 41 | 40 ROUND | 41 | 40 SWING | 41 | 40 FIB | 39 | 39 Same result every year - 2020 - 2021 - 2022 - 2023 - 2024 - 2025 - 2026 - verdict: No difference: a level's name doesn't change the odds of a break. Representative chart; rates are from the published study. TWO PUBLISHED STUDIES. STUDIES Each study states its sample, period and control method. Pick a finding to bring its panel forward in the figure. https://oxarus.com/en/quant/research#studies From the published study. For research purposes only, not investment advice. - Do levels really hold? · EURUSD and GBPUSD · 2020–2026 At pivots, previous-day levels, round numbers, swing and Fibonacci levels, we checked whether price broke through, and compared the results with meaningless control lines that share the same distance distribution. - sample: 83,527 - sample unit: touches STUDY FACTS - Sample: 83,527 touches - Period: 2020–2026 - Pairs: EURUSD · GBPUSD - Resolution: M1 (minute bars) - Control: Distance-matched lines - Replication: Replicated on GBPUSD FINDINGS - Every level family broke about 41% of the time; matched control lines, 40%. The same held in each of the seven years. - Which touch it was made no difference: from the 1st touch to the 5th, 41%, 40%, 39%, 42%, 44%. - The only thing that changed the outcome was how long price stayed near the level on that touch. The same result replicated point for point on GBPUSD. - Break rate by level family - Break rate by touch number - Break probability by time in the band - Go to the dwell-time chart - Go to the dwell-time chart - Do weekend gaps close? · EURUSD · weekend and holiday breaks We measured when the Monday opening gap made it back to Friday's close, and how far price traveled before it did. - sample: 345 - sample unit: breaks STUDY FACTS - Sample: 345 breaks - Period: 2020–2026 - Pair: EURUSD - Resolution: M1 (minute bars) - Reference: Friday close - Horizon: 60 days FINDINGS - 65% of gaps closed during the opening session; among those, the median time to close was 11 minutes. - 95% closed within five trading days, and 98% within sixty days. - The small tail that never closed lined up exactly with geopolitical shock days. For gaps larger than 5 pips, the median excursion before closing was 21 pips, and 120 pips in the worst decile. - Closed in the opening session - Share closed over time - Excursion before the close - Go to the gap chart - Go to the gap chart PIVOT | 41 | 40 PDHLC | 41 | 40 ROUND | 41 | 40 SWING | 41 | 40 FIB | 39 | 39 - matched control: 40 touch number 41 · 40 · 39 · 42 · 44 - 20 - 21 - 22 - 23 - 24 - 25 - 26 stops 0 · 10 · 30 · 60 eurusd 41 · 51 · 55 · 56 gbpusd 40 · – · 54 · – - all: 65 - big: 10 - median time to close: 11 min - open - all: 0 - big: 0 - session - all: 65 - big: 10 - 5 days - all: 95 - big: 85 - 60 days - all: 98 - p50: 21 - p90: 120 - max: 470 - still open after 60 days: 2 Interface labels: Research note · Published · Figure {n} · level · 2020–2026: same every year · {value} pts · min · pips · all gaps · over 20 pips · log scale HOW LONG AT THE LEVEL? TIME AT THE LEVEL The longer price stays in a level's band, the more likely it is to break the level, until the effect levels off. Pick a duration; the chart and the ranges update together. https://oxarus.com/en/quant/research#dwell-heading - stop option: ≥{minutes} min - replication: GBPUSD replication - probability: break probability - base: base - lift: vs base - lift unit: pts - not measured: not measured - pair eur: EURUSD - pair gbp: GBPUSD Break probability by time spent in the level band. A research finding, not a trade recommendation. By session: base → 30 minutes Time in the band - rejects: Rejections - breaks: Breaks - median: median - selected: selected Robustness to band width With the band varied between 0.03 and 0.08 × ATR, the 30-minute lift stayed between +12 and +14 points. - plateau: plateau - dataset: EURUSD · GBPUSD · M1 · 2020–2026 · n=83,527 Time already in the band 0 · 10 · 30 · 60 eurusd 41 · 51 · 55 · 56 gbpusd 40 · – · 54 · – - control: 40 - control short: control plateau 56 · 57 - minute unit: min - break query: P(break | dwell ≥ {minutes} min) - chart sample: EURUSD n=40,658 · GBPUSD n=42,869 By session: base → 30 minutes - ASIA - base: 43 - at30: 55 - LDN - base: 40 - at30: 56 - NY - base: 40 - at30: 55 - By session: base → 30 minutes: 30 min rejects 9 · 10 breaks 28 · 31 - 0.03 - 0.05 - 0.08 - Robustness to band width: × ATR Robustness to band width 12 · 14 - Robustness to band width: 30 min WHEN DO THEY CLOSE? WEEKEND GAPS Across 345 weekend and holiday breaks, how long the opening gap took to get back to Friday's close. Pick a horizon. https://oxarus.com/en/quant/research#gaps-heading Horizon - Session - 5 days - 60 days The remaining 2%: gaps still open after sixty days. Every one of them coincides with a major geopolitical shock. Cumulative share of gaps closed By gap size - all gaps: All gaps - big gaps: Over 20 pips - same session: Closed in the same session - within week: Within 5 trading days Excursion before closing (≥5 pips) Before the gap closed, price moved the other way by a median of 21 pips, 120 pips in the worst decile, and 470 pips at most. - median fill: median fill - axis open: open - axis session: session - axis day: 1 day - axis week: 5 days - axis two months: 60 days - unfilled: unfilled - not measured: not measured - pips unit: pips EURUSD, 345 weekend and holiday breaks. A research finding, not investment advice. - n: 345 - median fill: 11 min - Horizon: 60 days - chart sample: EURUSD n=345 points 0 · 65 · – · 95 · 98 - 0 - at: 1 - value: 10 - 1 - at: 3 - value: 85 - unfilled: 2 - all: 65 - big: 10 - all: 95 - big: 85 - all: 98 Excursion before closing (≥5 pips) - p50: 21 - p90: 120 - max: 470 - Excursion before closing (≥5 pips): pips · log scale HOW WE AVOID FOOLING OURSELVES. METHOD We logged every interim result that turned out wrong. Switch any entry between how it looked at first and what it actually was. https://oxarus.com/en/quant/research#method-heading - Random lines broke less often than levels, so levels looked like 'magnets.' · CONTROL BIAS The random lines sat farther from price. Once the control lines were built with the same distance distribution, the difference vanished. - Three months of data showed a clear dip at the third touch. · MULTIPLE COMPARISONS Across seven years of data, it evaporated. Run enough comparisons, and some differences show up by chance. - One measurement came out with a 100% break rate. · SIGN BUG When a rate sticks to 0 or 1, suspect the measuring machinery first. It was a single sign error. - An idea seemed to hold on one pair. · REPLICATION We rebuilt the same test from scratch on another pair. Nothing that failed to hold on both counted as a finding. Correction log - resolved: resolved - count: {fixed} / {total} resolved - schematic: schematic - show traps: Show first glance - show fixes: Apply corrections - random: random lines - matched: matched lines - levels: levels - distance: distance to price touch rates 41 · 40 · 39 · 42 · 44 - 3 months of data 7 years of data - bug: sign(dist): 100 - fixed: 41 - matched control: 40 - eur: EUR 55 - gbp: GBP 54 - start: 0m - end: 30m Interface labels: At first glance · Actually · open LET DATA ANSWER YOUR QUESTION. RESEARCH If you'd like us to run measurements or hypothesis tests on market data for your organization, or build its research infrastructure, get in touch. https://oxarus.com/en/quant/research#cta - Send a research request → start_project_brief(topic="quant") - info@oxarus.com → contact(subject="Research request") ACTIONS - Institutional research → open_page(path="/quant/research", anchor="cta-heading") - Findings → open_page(path="/quant/research", anchor="studies") - Send a research request → start_project_brief(topic="quant") - info@oxarus.com → contact(subject="Research request") - Türkçe → switch_locale(locale="tr", path="/quant/research") RELATED PAGES - Oxarus Quant