PatternsWizard pattern statistics

Estadísticas probadas de 179 patrones de gráficos y velas en seis mercados, comparadas con barras aleatorias. Remoto, de solo lectura, sin clave.

Servidor MCP alojado

npx add-mcp 'https://patternswizard.com/mcp/'

Se instala en Claude Code, Codex, Cursor y más

Documentación

MCP server for AI assistants

Connect Claude, ChatGPT, Cursor or any client of the Model Context Protocol, then ask questions such as “does the bullish engulfing work on crypto?” or “which chart patterns beat chance on forex 4h?”. No key, no account.

Server URL (Streamable HTTP):

https://patternswizard.com/mcp/

Claude Code:

claude mcp add --transport http patternswizard https://patternswizard.com/mcp/

Clients configured with a JSON file:

{
  "mcpServers": {
    "patternswizard": {
      "type": "http",
      "url": "https://patternswizard.com/mcp/"
    }
  }
}

In Claude and ChatGPT, add it as a custom connector with the server URL above.

Tools

  • search_patterns: List tested patterns with their headline result on one market and timeframe. Filter by name, family, direction or verdict, for example: which chart patterns beat chance on forex 4h. Patterns recorded on both breakout sides have no all row and are not listed: read them with get_pattern_stats.
  • get_pattern_stats: Full tested results of one pattern: detection rule, trade rules and every market, timeframe and breakout side measured, with confidence intervals, q-values, verdicts, timing quartiles and the page URL to cite.
  • compare_patterns: Put 2 to 10 patterns side by side on the same market, timeframe and breakout side.
  • get_methodology: How the statistics are computed: principles, the meaning of every field and verdict, and data coverage (assets and date range per market and timeframe).

Raw call, without a client:

curl -s https://patternswizard.com/mcp/ \
  -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_pattern_stats","arguments":{"pattern":"bullish engulfing","market":"crypto","timeframe":"1d"}}}'

JSON files

Files are regenerated with each update of the test bench, and only after the random-walk self-check has passed.

Fields

Shares go from 0 to 1 (0.55 means 55%). Other fractions can be negative or above 1. In a result row, a null value was not measured or does not apply: it is never a zero.

File information

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.

Pattern

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.

Result row

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.

MCP server responses

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).

A summary of the method is on the home page, and the principles are in /data/methodology.json.

License and citation

The data is © PatternsWizard, all rights reserved. You are welcome to read it, query it through the MCP server and quote individual numbers with a link to the pattern page they come from, or to the data file when the pattern has no page, credited as “PatternsWizard (https://patternswizard.com/), pattern statistics”. To republish the data set or reuse it in a product, contact us.