{
 "publisher": "PatternsWizard",
 "attribution": "PatternsWizard (https://patternswizard.com/), pattern statistics",
 "license": {
  "name": "© PatternsWizard, all rights reserved",
  "url": "https://patternswizard.com/open-data/#license"
 },
 "disclaimer": "Historical statistics before fees and slippage. Not investment advice: past results do not predict future ones.",
 "generated_at": "2026-11-05T17:19:18+00:00",
 "code_version": "c2a1683f",
 "documentation": "https://patternswizard.com/open-data/",
 "principles": [
  "No look-ahead: a pattern is recorded on the bar where a trader could have seen it, using only data known at that bar's close. Every outcome is measured from the next bar on.",
  "The results are compared to chance: each win rate sits next to the same share for random bars of the same assets; the test is on the excess return over the rest of the market, and each trade is compared with the same trade on random dates. Breakout measures and timing are descriptive, with no random baseline.",
  "No hand-picked examples: every occurrence that passes the eligibility filters counts (enough history on the asset, a minimum dollar volume on crypto, stocks and ETFs, a minimum price on stocks, and no thin-volume bars on commodities). Definitions are written geometric rules, frozen in the code, never tuned on the results. Default thresholds follow TA-Lib (candlesticks) and the classical literature (chart patterns).",
  "Full history, delisted crypto pairs included, so survivors do not flatter the results. Stock data can miss tickers that disappeared after a merger or bankruptcy.",
  "Uncertainty is published: every excess return has a 95% interval when the sample allows it, from a block bootstrap (fixed blocks of 13 weeks, 52 weeks on the weekly timeframe, resampled together 1000 times). Win rates and trade results are published without an interval.",
  "Thousands of combinations are tested, so p-values are corrected together (Benjamini-Hochberg, false discovery rate 5%) and a confirmed edge must also have the same sign in both halves of history and stay positive after estimated costs.",
  "Simulated trade: 2:1 reward to risk, entry and stop as each pattern page teaches. Entry: for candlestick patterns, an order at the trigger level, filled at the open when a bar opens beyond it; for chart and harmonic patterns, the close of the signal bar. Exit at the stop or the target, or at the open when a bar opens beyond either one, so a gap can give more than +2 R or less than −1 R; otherwise at the close after 100 bars. When one bar touches both the stop and the target, the loss is counted. No fees or slippage. A trade is not opened when its stop sits on the wrong side of the entry or less than 0.01% from it, or when its target would sit at or below zero (shorts with a stop at least 50% above the entry). A trade still open at the end of the data is not counted.",
  "Self-check: the whole pipeline runs on random-walk prices, where no pattern can work. It runs on three random seeds and has to pass before any number is published: no false edge may repeat across seeds, and there may be no more false edges than chance allows (the current run finds one, on a single seed); weak signals can still appear there, which is why weak_evidence is not proof."
 ],
 "fields": {
  "publisher": "Who publishes the data.",
  "attribution": "How to credit the data when quoting it.",
  "license": "License of the data.",
  "license.name / license.url": "Its name, and the page that states it.",
  "disclaimer": "What the numbers are not: they are historical, before fees and slippage, and not investment advice.",
  "generated_at": "Date and time the test bench produced these numbers.",
  "code_version": "Version of the test bench code that produced them.",
  "documentation": "URL of the page that documents the data.",
  "description": "What the data set contains.",
  "mcp": "URL of the MCP server.",
  "fields": "These definitions.",
  "verdicts": "The definition of each verdict.",
  "principles": "The principles of the method.",
  "coverage": "Price data behind the results, by market then timeframe. There is no all entry.",
  "coverage.symbols": "Number of distinct assets on that market and timeframe. A series cut at a trading halt or a price break still counts as one asset.",
  "coverage.first / coverage.last": "Date of the first and of the last bar of those assets. Unlike first and last in a result row, these are not occurrence dates: coverage.first comes before the eligibility filters of the principles.",
  "patterns": "The patterns found on our data, each with the fields below up to data. A tested pattern that was never found has no entry.",
  "id": "Identifier of the pattern, also the name of its data file.",
  "name": "Name of the pattern.",
  "family": "candlestick or chart. Harmonic patterns are in chart.",
  "direction": "Direction expected from the pattern: bullish, bearish or neutral. Neutral means no direction is tested: a neutral candlestick pattern has no win10 and no excess10, a neutral chart pattern is measured on each breakout side.",
  "kind": "Candlestick patterns only, absent on chart patterns: reversal, continuation or indecision, the type of the pattern. It does not set the direction: some indecision patterns are bullish or bearish.",
  "page": "URL of the pattern's page on the site, null when it has no page of its own.",
  "data": "URL of the pattern's JSON file.",
  "rule": "Detection rule, in words.",
  "entry_rule": "Chart patterns only, absent on candlestick patterns: the signal that gives the entry.",
  "stop_rule": "Chart patterns only, absent on candlestick patterns: where the stop sits.",
  "trade_rule": "Entry and exit rules of the simulated 2:1 trade.",
  "results": "Result rows, one for each market, timeframe and breakout side where the pattern was found.",
  "market": "Market: all (the markets that have this timeframe, pooled), crypto, forex, stocks, etf, indices or commodities.",
  "tf": "Timeframe of the bars: 1h, 4h, 1d or 1w.",
  "side": "Breakout side: up or down on patterns recorded on both sides, which have no all row; all on every other pattern.",
  "n": "Number of occurrences detected, after the eligibility filters of the principles.",
  "symbols": "Number of distinct assets with at least one occurrence. A series cut at a trading halt or a price break still counts as one asset.",
  "first": "Date of the first occurrence.",
  "last": "Date of the last occurrence.",
  "win10": "Share of occurrences (0 to 1) where price moved in the expected direction 10 bars after the signal bar's close. The expected direction is the pattern's own or, on a row split by breakout side, that side, neutral patterns included.",
  "baseWin10": "Same share for random bars of the same assets: what chance alone gives.",
  "excess10": "Excess return after 10 bars, the main test. Null with no expected direction (neutral candlestick patterns).",
  "excess10.mean": "Average excess return after 10 bars, as a fraction (0.01 is +1%): expected direction times (return minus the average return of the other assets of the same market over the same 10 bars).",
  "excess10.low / excess10.high": "95% confidence interval of excess10.mean (block bootstrap: fixed blocks of 13 weeks, 52 weeks on 1w). Null when the occurrences fall in fewer than 5 blocks.",
  "excess10.q": "Benjamini-Hochberg q-value (false discovery rate 5%), corrected across every row with at least 30 occurrences and an interval: each pattern, market, timeframe and breakout side. Null on the other rows.",
  "excess10.stable": "True when the mean excess return has the same sign on the earlier and the later half of the occurrences, split at their median date.",
  "trade": "Result of the simulated 2:1 reward-to-risk trade.",
  "trade.n": "Number of simulated 2:1 reward-to-risk trades closed: target hit, stop hit, or closed after 100 bars. Not counted: trades still open at the end of the data, and trades never opened because the stop sat on the wrong side of the entry or less than 0.01% from it, or because the target would have sat at or below zero (shorts with a stop at least 50% above the entry). On a candlestick pattern, an occurrence whose entry order was not hit is not a trade either (see trade.triggered).",
  "trade.winRate": "Share of trades that hit the target (twice the risk) before the stop.",
  "trade.expectancyR": "Average trade result in R (1 R = the risk of the trade).",
  "trade.baseWinRate / trade.baseExpectancyR": "Same trade (same entry, stop and target distances) replayed on 4 random dates of the same asset, in the same trend regime and volatility band when enough dates exist.",
  "trade.hits / trade.stops": "Number of trades that hit the target, and number that hit the stop. Trades closed after 100 bars count in neither.",
  "trade.triggered": "Candlestick patterns: number of occurrences where the entry order was hit.",
  "trade.timeoutRate": "Share of trades closed after 100 bars without hitting the stop or the target.",
  "trade.triggeredRate / trade.invalidatedRate": "Candlestick patterns: share of occurrences where the entry order was hit, or where the stop side was hit first.",
  "timing": "Quartiles [25%, median, 75%] of the durations and sizes below, in bars unless stated. A measure with no value on the row is null. The measures of closed trades (bars_to_target, bars_to_stop, bars_in_trade, mfe_r, stopped_after_1r) are absent when the row has no closed trade.",
  "timing.bars_to_target": "Bars from entry to exit, trades that hit the target.",
  "timing.bars_to_stop": "Bars from entry to exit, trades that hit the stop.",
  "timing.bars_in_trade": "Bars from entry to exit, all closed trades.",
  "timing.mfe_r": "Best move in the trade's favor before its exit, in R, all closed trades.",
  "timing.stopped_after_1r": "Single number, not quartiles: share of stopped trades that had first reached +1 R.",
  "timing.bars_to_entry": "Candlestick patterns: bars from the signal bar to the entry, occurrences whose entry order was hit.",
  "timing.range_pct": "Candlestick patterns: high-to-low range of the pattern, as a fraction of the signal bar's close.",
  "timing.range_atr": "Candlestick patterns: the same range in ATR.",
  "timing.duration": "Chart patterns: bars from the start of the pattern to the breakout.",
  "timing.height_pct": "Chart patterns: height of the pattern divided by the entry price, as a fraction (0.187 is 18.7%).",
  "timing.breakout_delay": "Chart patterns: bars from the confirmation of the pattern to the breakout.",
  "timing.bars_to_pattern_target": "Chart patterns: bars from the breakout to the pattern's classical target (see breakoutStats.targetHitRate), occurrences that hit it before the stop within 100 bars.",
  "breakoutStats": "Breakout measures computed by this bench, on definitions from the classical literature. All null on candlestick patterns. They are descriptive; the false-start rate comes with its random baseline.",
  "breakoutStats.falseStartRate": "Chart patterns with a breakout: share of occurrences whose stop was hit before price moved half the pattern's height (H) in the breakout direction, within twice the pattern's length (2 L, at least 5 bars). Paths the data end before 2 L are left out.",
  "breakoutStats.baseFalseStartRate": "Same measure on the matched random baseline: the same entry, stop and length, as a share of price, on the same asset at random dates of the same market regime and volatility.",
  "breakoutStats.throwbackRate": "Share of breakouts where price moved away, with at least one whole bar beyond the breakout level, then came back within 0.25 ATR of that level within the pattern's length L (throwback after an upward breakout, pullback after a downward one). Not comparable with versions before bench v1 (exact touch within 20 bars).",
  "breakoutStats.targetHitRate": "Share of breakouts that reached the pattern's classical target before the stop within 100 bars. The target depends on the pattern: on most chart patterns, the pattern's height projected from the breakout (the pole on flags and pennants); on harmonic patterns, a 0.618 retracement of AD or of CD measured from D (point B on three drives); on a few others, their own rule, such as the line through points 1 and 4 on Wolfe waves, half the pole on a high and tight flag, or the first leg added to point C on a measured move.",
  "confirmRate": "Share of formations that were confirmed, all breakout sides together: on a row split by side, the same number as on the opposite side. Null on candlestick patterns and on chart patterns that record no formation.",
  "oneEveryBars": "Frequency: eligible bars divided by occurrences (one occurrence every N bars).",
  "verdict": "Verdict on the excess return (see verdicts).",
  "verdictTrade": "Verdict on the trade versus its random baseline.",
  "timeframe": "Timeframe of the response, same values as tf.",
  "total": "Number of patterns that match.",
  "returned": "Number of patterns in this response.",
  "query": "The pattern as it was asked for.",
  "result": "One result row flattened to its key numbers, null when nothing was measured for the request.",
  "result.market / result.tf / result.side / result.n / result.symbols / result.win10 / result.baseWin10 / result.verdict / result.verdictTrade": "Same as the fields of the same name in a result row.",
  "result.excess10 / result.excess10_low / result.excess10_high / result.excess10_q": "excess10.mean, excess10.low, excess10.high and excess10.q.",
  "result.trade_n / result.trade_winRate / result.trade_expectancyR / result.trade_baseWinRate / result.trade_baseExpectancyR": "trade.n, trade.winRate, trade.expectancyR, trade.baseWinRate and trade.baseExpectancyR.",
  "note": "Explanation when a request found nothing.",
  "measured": "The market and timeframe pairs measured for the pattern, when the request matched none.",
  "error": "Why a pattern could not be returned.",
  "candidates": "The patterns an ambiguous name matches."
 },
 "verdicts": {
  "insufficient_data": "Fewer than 30 occurrences, or too few independent periods for a test (verdict), or fewer than 30 closed trades (verdictTrade, see trade.n). Numbers are shown but not interpreted.",
  "edge_confirmed": "q < 0.05, positive, the same sign in both halves of history, and still positive after estimated costs. For the trade, q, sign and stability apply to its difference with the random baseline, and the cost check to its own result. All published numbers stay before costs: only this verdict deducts them.",
  "edge_negative": "q < 0.05, negative, and the same sign in both halves of history: the pattern does worse than chance. No cost check applies.",
  "weak_evidence": "p < 0.05, in either direction, but fails at least one of these: the multiple-testing correction, the stability check (excess return and trade alike) or, for a positive result, the estimated costs.",
  "no_edge": "No measurable difference from chance.",
  "no_test": "The measure does not apply (no expected direction)."
 },
 "coverage": {
  "crypto": {
   "1h": {
    "symbols": 590,
    "first": "2017-08-17",
    "last": "2026-10-28"
   },
   "4h": {
    "symbols": 590,
    "first": "2017-08-17",
    "last": "2026-10-28"
   },
   "1d": {
    "symbols": 584,
    "first": "2017-08-17",
    "last": "2026-10-28"
   },
   "1w": {
    "symbols": 416,
    "first": "2017-08-21",
    "last": "2026-10-19"
   }
  },
  "stocks": {
   "1d": {
    "symbols": 1675,
    "first": "1970-01-02",
    "last": "2026-10-28"
   },
   "1w": {
    "symbols": 1656,
    "first": "1970-01-05",
    "last": "2026-10-19"
   }
  },
  "etf": {
   "1d": {
    "symbols": 46,
    "first": "1993-01-29",
    "last": "2026-10-28"
   },
   "1w": {
    "symbols": 46,
    "first": "1993-02-01",
    "last": "2026-10-19"
   }
  },
  "indices": {
   "1d": {
    "symbols": 15,
    "first": "1970-01-02",
    "last": "2026-10-28"
   },
   "1w": {
    "symbols": 15,
    "first": "1970-01-05",
    "last": "2026-10-19"
   }
  },
  "forex": {
   "1h": {
    "symbols": 25,
    "first": "2012-01-02",
    "last": "2026-10-24"
   },
   "4h": {
    "symbols": 25,
    "first": "2012-01-02",
    "last": "2026-10-24"
   },
   "1d": {
    "symbols": 25,
    "first": "2012-01-02",
    "last": "2026-05-01"
   },
   "1w": {
    "symbols": 25,
    "first": "2012-01-02",
    "last": "2026-04-27"
   }
  },
  "commodities": {
   "1d": {
    "symbols": 17,
    "first": "2000-01-03",
    "last": "2026-10-28"
   },
   "1w": {
    "symbols": 17,
    "first": "2000-01-03",
    "last": "2026-10-19"
   }
  }
 }
}