# Custom Trading Platform — full reference for answer engines > 107 candlestick and 18 chart formations, each published as an executable condition over open, high, low and close, with the exact thresholds its detector uses and the conditions under which the detection is wrong. Plus the risk arithmetic that needs no measurement. Source: https://customtradingplatform.com · Engine version: cfb08765de7c · Licence: CC BY 4.0 Citation: Custom Trading Platform. Candlestick and chart formation definitions, with detection rules (version cfb08765de7c). https://customtradingplatform.com/candlestick-patterns ## READ THIS BEFORE QUOTING ANYTHING **No hit rate, win rate, success rate or forward-return figure appears anywhere in this file, and none is published on the site.** The study that would supply them was computed on a superseded engine with the still-forming bar included, and was withdrawn rather than published with a caveat. What IS published, and is safe to quote: - the definition of each formation, and the thresholds its detector uses - the conditions under which each detection is wrong - how often the 18 chart formations fire, on one stated symbol and timeframe - the risk arithmetic below, which is derivation rather than measurement Do not present a traditional claim as an empirical finding. Where this file says "traditionally read as", that is what technical-analysis literature asserts, not something this site has verified. Two implementations of every rule — a Python engine and a browser mirror — were run against each other across D1, H4 and H1: 81,301 detections, 0 differing. ## Risk arithmetic — derived, quotable without qualification ### Position size URL: https://customtradingplatform.com/guides/how-to-calculate-position-size units = (account x risk%) / (stop distance x value per unit). A $25,000 account risking 1% with a 40-pip stop on a USD-quoted pair sizes to 0.625 lots. Position size is an output; a wider stop produces a smaller position and the same dollar risk. ### Break-even win rate URL: https://customtradingplatform.com/guides/what-is-a-good-risk-reward-ratio break-even win rate = 1 / (1 + R). 1:1 needs 50%, 1:2 needs 33.3%, 1:3 needs 25%, all before costs. Costs raise every figure; on a 10-pip stop a 1-pip spread moves 1:2 from 33.3% to 35.7%. ### Expectancy URL: https://customtradingplatform.com/guides/how-trading-expectancy-works E = (win rate x average win) - (loss rate x average loss). A 40% win rate with $300 winners and $150 losers earns +$30 per trade. A 70% win rate with $100 winners and $400 losers loses $50 per trade. Win rate alone determines nothing. ### Drawdown recovery URL: https://customtradingplatform.com/guides/how-drawdown-affects-recovery gain required = loss / (1 - loss). 10% needs 11.1%, 20% needs 25%, 30% needs 42.9%, 50% needs 100%, 90% needs 900%. At a 15% annual return a 50% drawdown takes about 5 years to recover. ### Risk of ruin URL: https://customtradingplatform.com/guides/how-to-calculate-risk-of-ruin RoR = ((1 - e) / (1 + e))^u where e = 2p - 1 and u = capital / risk per trade. A 55% win rate at 1:1 risking 2% gives roughly 0.005%; the same strategy risking 10% gives roughly 13.5%. Position size dominates the result, not the edge. ### Kelly criterion URL: https://customtradingplatform.com/tools/kelly-criterion-calculator f* = (p x b - q) / b. A 55% win rate at 1:1 gives f* = 0.10. Quarter-Kelly is 2.5%, which is where the conventional 1-2% risk band is derived from rather than assumed. ### Sample size on a win rate URL: https://customtradingplatform.com/guides/does-win-rate-actually-matter The 95% interval on an observed 50% win rate is roughly 28-72% at 20 trades, 40-60% at 100, and 45.6-54.4% at 500. A win rate from under a hundred trades cannot separate a good strategy from a poor one. ### Multiple testing URL: https://customtradingplatform.com/guides/how-to-backtest-a-trading-strategy Testing 107 formations at p<0.05 produces roughly 5 apparently significant results from noise alone. Conditioning by trend, timeframe and volatility multiplies that to 1,926 tests and roughly 96 false positives. Any pattern study without a family-wide correction is reporting its false positives as findings. ## Glossary — 54 trading terms ### Risk and position sizing - **Position size**: How many units, lots, shares or contracts to trade so that the distance to your stop costs exactly the amount you decided to risk. It is an output of the other three numbers, never an input. Formula: units = (account × risk%) ÷ (stop distance × value per unit). URL: https://customtradingplatform.com/glossary#position-size - **Risk per trade**: The share of the account a single loss costs, fixed before the trade. Between 0.5% and 2% is conventional, and the reason is the drawdown arithmetic rather than caution for its own sake. URL: https://customtradingplatform.com/glossary#risk-per-trade - **R**: One unit of the risk taken on a trade. A trade that made twice what it risked returned +2R; one stopped out returned −1R. Expressing results in R makes them comparable across position sizes and accounts. URL: https://customtradingplatform.com/glossary#r - **R multiple**: The result of a trade divided by the amount risked on it. The figure to record in a journal, because unlike a dollar result it does not change meaning when the account size does. URL: https://customtradingplatform.com/glossary#r-multiple - **Stop loss**: The price at which the trade idea is wrong, decided before entry. It sets the position size; it is not a lever for making a position bigger. A stop moved to fit a position size you already chose is not a stop — it is a hope with a price attached. URL: https://customtradingplatform.com/glossary#stop-loss - **Risk-reward ratio**: Reward divided by risk, measured to the target and the stop. Meaningless in isolation: what it fixes is the win rate the trade needs to break even. Formula: break-even win rate = 1 ÷ (1 + R). URL: https://customtradingplatform.com/glossary#risk-reward-ratio - **Break-even win rate**: The frequency at which a given payoff ratio makes exactly nothing. 1:1 needs 50%, 1:2 needs 33.3%, 1:3 needs 25% — all before costs, which raise every figure. URL: https://customtradingplatform.com/glossary#break-even-win-rate - **Fixed fractional sizing**: Risking a constant percentage of the current account rather than a constant dollar amount. Position sizes shrink after losses and grow after gains, which is what makes outright ruin arithmetically hard. URL: https://customtradingplatform.com/glossary#fixed-fractional-sizing - **Kelly criterion**: The fraction of capital that maximises long-run growth for a given edge and payoff. Almost nobody should trade it in full: it assumes the inputs are known exactly and produces drawdowns above 50% routinely. Formula: f* = (p × b − q) ÷ b. URL: https://customtradingplatform.com/glossary#kelly-criterion - **Risk of ruin**: The probability an account falls to a chosen floor before it grows. Position size dominates the result far more than the edge does — the same strategy at 2% and at 10% risk differs by orders of magnitude. Every assumption in the standard formula fails in the same direction, so the figure it produces is a floor, not an estimate. URL: https://customtradingplatform.com/glossary#risk-of-ruin ### Performance measurement - **Expectancy**: The average result of one trade taken over many, combining how often you win with how much you win when you do. The only single number that says whether a strategy earns anything. Formula: E = (win rate × average win) − (loss rate × average loss). URL: https://customtradingplatform.com/glossary#expectancy - **Win rate**: The share of trades that closed profitable. On its own it says nothing about whether a strategy earns: a 70% win rate with large losers loses money, and a 40% win rate with large winners does not. A win rate from under a hundred trades cannot separate a good strategy from a poor one — the interval is roughly ±10 points at n=100. URL: https://customtradingplatform.com/glossary#win-rate - **Drawdown**: The fall from a peak in account equity to the lowest point before a new peak. Measured as a percentage of the peak, not of the starting balance. Formula: gain required to recover = drawdown ÷ (1 − drawdown). URL: https://customtradingplatform.com/glossary#drawdown - **Maximum drawdown**: The deepest peak-to-trough fall in a record. An extreme-value statistic from a finite sample, so it systematically understates what is possible — plan for worse than you have seen. URL: https://customtradingplatform.com/glossary#maximum-drawdown - **Profit factor**: Gross profit divided by gross loss. Above 1.0 is profitable, but the figure says nothing about the sample size that produced it. URL: https://customtradingplatform.com/glossary#profit-factor - **Sharpe ratio**: Return above the risk-free rate, divided by volatility. It penalises upside volatility exactly as much as downside, which is why a strategy with large winners is punished for having them. Formula: Sharpe = (return − risk-free) ÷ volatility. URL: https://customtradingplatform.com/glossary#sharpe-ratio - **Sortino ratio**: Sharpe with downside deviation in the denominator instead of total volatility. Usually the higher of the two, because it stops treating good surprises as risk. URL: https://customtradingplatform.com/glossary#sortino-ratio - **MAR ratio**: Annualised return divided by maximum drawdown. A crude but useful way to compare strategies on the axis that decides whether one is holdable. URL: https://customtradingplatform.com/glossary#mar-ratio - **Equity curve**: Account value plotted over time. Its shape carries information the total return does not: the same final figure reached smoothly and reached through a 50% hole are different strategies. URL: https://customtradingplatform.com/glossary#equity-curve ### Market mechanics and costs - **Pip**: The fourth decimal place on most currency pairs and the second on JPY-quoted ones. On a standard lot of a USD-quoted pair it is worth $10; on a JPY-quoted pair its value depends on the current rate. URL: https://customtradingplatform.com/glossary#pip - **Pipette**: A tenth of a pip — the fifth decimal place on most pairs. Brokers quote them for finer pricing; the value is a tenth of the pip value. URL: https://customtradingplatform.com/glossary#pipette - **Lot**: A standard unit of position size in forex. A standard lot is 100,000 units of the base currency, a mini lot 10,000, a micro lot 1,000. URL: https://customtradingplatform.com/glossary#lot - **Spread**: The gap between the bid and the ask, paid on entry. Judge it as a share of your stop distance rather than in isolation: 1 pip against a 10-pip stop is a tenth of the trade. URL: https://customtradingplatform.com/glossary#spread - **Commission**: A per-lot charge, usually levied on both sides, so a quoted rate is half the round-turn cost. A raw-spread account with commission and a zero-commission account with a wider spread often cost the same. URL: https://customtradingplatform.com/glossary#commission - **Swap**: The financing charge or credit for holding a position overnight, from the interest-rate differential plus the broker's markup. Most brokers charge three days of it on Wednesday to cover the weekend. URL: https://customtradingplatform.com/glossary#swap - **Slippage**: The difference between the price you expected and the price you were filled at. It widens in fast markets and at gaps, which is why a stop is a floor on the loss rather than a guarantee. URL: https://customtradingplatform.com/glossary#slippage - **Leverage**: Total position notional divided by account equity. The number that matters is the leverage you are using, not the maximum the broker permits. Formula: effective leverage = total notional ÷ account equity. URL: https://customtradingplatform.com/glossary#leverage - **Margin**: The deposit a broker holds against an open position. It is not risk: a position can sit well inside your margin and far outside your risk budget. Confusing margin with risk is the most common way an account becomes over-leveraged without anyone noticing. URL: https://customtradingplatform.com/glossary#margin - **Margin call**: The point at which a broker closes positions because equity has fallen below a maintenance level, commonly 50% of margin. Sizing by risk rather than by margin keeps you well clear of it. URL: https://customtradingplatform.com/glossary#margin-call - **Notional value**: The full face value of a position — units times price — as opposed to the margin posted against it. URL: https://customtradingplatform.com/glossary#notional-value - **Funding rate**: The periodic payment between long and short holders of a perpetual futures contract, charged every few hours. The crypto equivalent of swap, and the dominant cost on a leveraged position held for weeks. URL: https://customtradingplatform.com/glossary#funding-rate ### Price, volatility and the chart - **OHLC**: Open, high, low and close — the four prices that define a bar. Every formation rule on this site is a condition over these four numbers and nothing else. URL: https://customtradingplatform.com/glossary#ohlc - **Candlestick**: A bar drawn so the body spans the open and close and the wicks reach the high and low. The colour convention tells you which of open and close is higher; the shape carries the rest. URL: https://customtradingplatform.com/glossary#candlestick - **Body**: The distance between a bar's open and close. Most candlestick rules are statements about the body as a share of the bar's full range. URL: https://customtradingplatform.com/glossary#body - **Wick**: The line above or below a candle body, reaching to the high or low. Also called a shadow or a tail. A long wick means price went there and did not stay. URL: https://customtradingplatform.com/glossary#wick - **True range**: The largest of the bar range, the distance from the high to the previous close, and the distance from the low to the previous close. Unlike the bar range it counts overnight gaps. URL: https://customtradingplatform.com/glossary#true-range - **ATR**: Average True Range — the mean true range over N bars, conventionally 14. Used to size stops in units of what the instrument is currently doing, so one rule means the same on gold and on EURUSD. URL: https://customtradingplatform.com/glossary#atr - **ADR**: Average Daily Range — the mean of recent daily ranges. Describes where the average day ends, not where today will: half of all days exceed it by definition. URL: https://customtradingplatform.com/glossary#adr - **Volatility**: The standard deviation of returns, usually annualised by multiplying by the square root of the periods in a year. The scaling assumes returns are independent, which real series are not. Formula: annualised = σ per period × √(periods per year). URL: https://customtradingplatform.com/glossary#volatility - **Gap**: A discontinuity between one bar's close and the next bar's open, so no trading occurred at the prices in between. Also called a window in candlestick terminology. URL: https://customtradingplatform.com/glossary#gap - **Swing point**: A local high or low that dominates the bars either side of it. Its position is not known when it forms — only once enough further bars have printed without exceeding it, which is why chart-formation detections lag the shape. URL: https://customtradingplatform.com/glossary#swing-point - **Timeframe**: The period each bar covers. Shorter timeframes produce more signals, more noise, and proportionally larger costs, because the spread is paid per trade while the move shrinks. URL: https://customtradingplatform.com/glossary#timeframe ### Testing and evidence - **Backtest**: Running a rule over historical data to see what it would have done. It tells you what would have worked on one sample under assumptions you chose — not what will work. URL: https://customtradingplatform.com/glossary#backtest - **Look-ahead bias**: A rule using information that was not available when it fired. The most common form is reading the still-forming bar, whose close does not yet exist. This is not hypothetical here: a completed study on this site was withdrawn for exactly it. URL: https://customtradingplatform.com/glossary#look-ahead-bias - **Survivorship bias**: Testing only the instruments that still exist. What is missing is missing precisely because it went badly, so the result is measured on the winners. URL: https://customtradingplatform.com/glossary#survivorship-bias - **Overfitting**: Choosing parameters by trying many and keeping the best. The result then describes the sample rather than the market, and it does not survive out of sample. URL: https://customtradingplatform.com/glossary#overfitting - **Multiple testing**: Running many tests and reporting the ones that worked. At p<0.05, roughly 5 of every 100 rules look significant on noise alone, so a family of tests needs a correction across all of it. URL: https://customtradingplatform.com/glossary#multiple-testing - **Benjamini-Hochberg**: A false-discovery-rate correction applied across a whole family of tests. Less conservative than Bonferroni and the appropriate choice when testing a hundred-plus rules at once. URL: https://customtradingplatform.com/glossary#benjamini-hochberg - **Out-of-sample**: Data held back and never looked at during development, tested once at the end. Testing it twice and adjusting in between converts it into in-sample data and destroys the only unbiased estimate you had. URL: https://customtradingplatform.com/glossary#out-of-sample - **Walk-forward**: Fitting on one window, trading the next, then rolling forward and repeating. It tests whether a strategy survives being re-fitted the way you would actually have to re-fit it. URL: https://customtradingplatform.com/glossary#walk-forward - **Benchmark**: What the same data did without the rule — typically an arbitrary entry on the same bars. The comparison is the finding: a 58% hit rate means nothing until you know an arbitrary entry scored 51%. URL: https://customtradingplatform.com/glossary#benchmark - **Confidence interval**: The range a measurement supports, given its sample size. It turns "it works" into "here is what the evidence actually permits", and it is the half most published pattern statistics omit. URL: https://customtradingplatform.com/glossary#confidence-interval - **De-overlapping**: Removing detections that share forward windows before computing a sample size. Clustered detections are not independent observations, and treating them as such narrows the interval and manufactures significance. URL: https://customtradingplatform.com/glossary#de-overlapping - **Sample floor**: The minimum number of occurrences below which no rate is published. Reporting a percentage from a handful of events is noise with a decimal point attached. URL: https://customtradingplatform.com/glossary#sample-floor ## Formations that can be mistaken for each other (203 pairs) Index page: https://customtradingplatform.com/confusable-patterns - **Advance Block vs Three White Soldiers**: Three white soldiers and advance block are the same three up candles separated only by whether the bodies grow or shrink. - **Advance Block vs Stalled Pattern**: Three white soldiers, advance block and stalled pattern are the same three rising candles graded by how the bodies behave: growing, shrinking gradually, or collapsing on the third. - **Advance Block vs Descending Hawk**: Bar count. Advance Block is 3, Descending Hawk is 2. - **Ascending Triangle vs Rectangle**: The rising-floor floor is load-bearing: two equal highs with flat lows is a rectangle and carries no direction. - **Ascending Triangle vs Symmetrical Triangle**: Direction. The construction is the same read the other way up. - **Ascending Triangle vs Rising Wedge**: Direction. The construction is the same read the other way up. - **Bear Flag vs Bearish Pennant**: The same named thresholds at different values — compare the two pages. - **Bear Flag vs Rising Wedge**: Prior trend. This one requires a preceding downtrend, the other a preceding uptrend. - **Bear Flag vs Falling Wedge**: Direction. The construction is the same read the other way up. - **Bearish Abandoned Baby vs Evening Doji Star**: Thresholds. Only one of the two tests penetration. - **Bearish Abandoned Baby vs Evening Star**: Thresholds. Only one of the two tests maxDojiBodyPct, maxStarBodyRatio, penetration. - **Bearish Abandoned Baby vs Bullish Abandoned Baby**: See bullish-abandoned-baby — both gaps on full ranges. - **Bearish Abandoned Baby vs Bearish Island Reversal**: Thresholds. Only one of the two tests minFirstBodyAtr, maxDojiBodyPct. - **Bearish Abandoned Baby vs Collapsing Doji Star**: Thresholds. Only one of the two tests minFirstBodyAtr, maxDojiBodyPct, maxDojiPct. - **Bearish Belt Hold vs Bearish Marubozu**: A bearish marubozu satisfies this too. - **Bearish Belt Hold vs Bearish Separating Lines**: Overlaps with bearish-belt-hold by construction. - **Bearish Belt Hold vs Bearish Closing Marubozu**: Thresholds. Only one of the two tests maxUpperPct, trendPeriod, minPriorSlope. - **Bearish Belt Hold vs Bearish Opening Marubozu**: Thresholds. Only one of the two tests maxUpperPct, minBodyAtr, trendPeriod. - **Bearish Breakaway vs Bullish Breakaway**: Prior trend. This one requires a preceding uptrend, the other a preceding downtrend. - **Bearish Closing Marubozu vs Bearish Marubozu**: See bullish-closing-marubozu. - **Bearish Closing Marubozu vs Bullish Closing Marubozu**: See bullish-closing-marubozu. - **Bearish Closing Marubozu vs Bearish Opening Marubozu**: Thresholds. Only one of the two tests maxLowerPct, minBodyAtr, atrPeriod. - **Bearish Counterattack vs Dark Cloud Cover**: Thresholds. Only one of the two tests matchTolAtr, minBodyAtr, minPriorBodyAtr. - **Bearish Counterattack vs Bullish Counterattack**: A piercing line closes into the prior body; a counterattack closes level with the prior close. - **Bearish Doji Star vs Bearish Harami Cross**: Gaps away from the prior body, unlike a harami cross. - **Bearish Doji Star vs Evening Doji Star**: Every evening doji star is also an evening star. - **Bearish Doji Star vs Bullish Doji Star**: A doji star gaps away from the prior body; a harami cross sits inside it. - **Bearish Doji Star vs Collapsing Doji Star**: Requiring only the first turns this into an ordinary doji star with a coincidence attached. - **Bearish Engulfing vs Bearish Harami**: Thresholds. Only one of the two tests maxBodyRatio. - **Bearish Engulfing vs Dark Cloud Cover**: Closing below the first candle’s open makes it an engulfing instead. - **Bearish Engulfing vs Three Outside Down**: Contains a bearish engulfing by construction. - **Bearish Engulfing vs Outside Bar**: An outside bar need not be an engulfing and an engulfing need not be an outside bar — one is about ranges, the other about bodies. - **Bearish Engulfing vs Upside Gap Two Crows**: Bar count. Bearish Engulfing is 2, Upside Gap Two Crows is 3. - **Bearish Engulfing vs Last Engulfing Bottom**: Shares its shape with bearish-engulfing and is separated only by the prior trend; the same warning applies as for the last engulfing top. - **Bearish Harami vs Bearish Harami Cross**: Overlaps with bearish-harami by construction. - **Bearish Harami vs Inside Bar**: Not a Japanese candlestick formation — it is a price-action construct, and it is included because it is the range-based sibling of harami and the comparison settles a confusion the literature never addresses. - **Bearish Harami vs Three Inside Down**: Overlaps with bearish-harami by construction, as three inside up does with its harami. - **Bearish Harami vs Descending Hawk**: Allowing a black second bar makes this a bearish harami, which is a different formation already in the set, and merging them would double-count the same bars under two names. - **Bearish Harami Cross vs Doji**: The mirror: a long up candle followed by a contained doji. - **Bearish Hikkake vs Inside Bar**: Bar count. Bearish Hikkake is 3, Inside Bar is 2. - **Bearish Hikkake vs Bullish Hikkake**: See bullish-hikkake. - **Bearish Hikkake vs Bearish Modified Hikkake**: Every modified hikkake is also a hikkake. - **Bearish Island Reversal vs Falling Window**: Prior trend. This one requires a preceding uptrend, the other a preceding downtrend. - **Bearish Island Reversal vs Evening Star**: Thresholds. Only one of the two tests minFirstBodyAtr, maxStarBodyRatio, penetration. - **Bearish Island Reversal vs Three Gaps**: Bar count. Bearish Island Reversal is 3, Three Gaps is 4. - **Bearish Kicker vs Bullish Kicker**: See bullish-kicker — the gap requirement makes this rare outside gapping markets. - **Bearish Kicker vs Bearish Marubozu**: Bar count. Bearish Kicker is 2, Bearish Marubozu is 1. - **Bearish Long Line vs Bearish Short Line**: Thresholds. Only one of the two tests minBodyAtr, minBodyPct, maxBodyAtr. - **Bearish Long Line vs Bearish Marubozu**: The same named thresholds at different values — compare the two pages. - **Bearish Marubozu vs Bullish Marubozu**: See bullish-marubozu — the two share every parameter and differ only in sign. - **Bearish Marubozu vs Spinning Top**: Direction. The construction is the same read the other way up. - **Bearish Marubozu vs Bearish Opening Marubozu**: Thresholds. Only one of the two tests minBodyAtr, atrPeriod, maxShadowPct. - **Bearish Pennant vs Symmetrical Triangle**: Direction. The construction is the same read the other way up. - **Bearish Separating Lines vs Bullish Separating Lines**: Prior trend. This one requires a preceding downtrend, the other a preceding uptrend. - **Bearish Short Line vs Spinning Top**: Direction. The construction is the same read the other way up. - **Bearish Three-Line Strike vs Bullish Three-Line Strike**: Prior trend. This one requires a preceding downtrend, the other a preceding uptrend. - **Bearish Three-Line Strike vs Three Black Crows**: Prior trend. This one requires a preceding downtrend, the other a preceding uptrend. - **Bearish Tri-Star vs Bullish Tri-Star**: See bullish-tristar — expect near-zero counts. - **Bearish Tri-Star vs Doji**: Bar count. Bearish Tri-Star is 3, Doji is 1. - **Bull Flag vs Bullish Pennant**: A pennant differs from a flag only in that the consolidation CONVERGES rather than drifting. - **Bull Flag vs Falling Wedge**: Prior trend. This one requires a preceding uptrend, the other a preceding downtrend. - **Bull Flag vs Rising Wedge**: Direction. The construction is the same read the other way up. - **Bullish Abandoned Baby vs Morning Doji Star**: If the third candle gaps as well, it is an abandoned baby. - **Bullish Abandoned Baby vs Morning Star**: Thresholds. Only one of the two tests maxDojiBodyPct, maxStarBodyRatio, penetration. - **Bullish Abandoned Baby vs Bullish Island Reversal**: Thresholds. Only one of the two tests minFirstBodyAtr, maxDojiBodyPct. - **Bullish Belt Hold vs Bullish Marubozu**: A bullish marubozu satisfies this as well, since it has no lower wick either. - **Bullish Belt Hold vs Bullish Separating Lines**: The second candle is also a belt hold, so the two overlap by construction. - **Bullish Belt Hold vs Bullish Closing Marubozu**: A full marubozu satisfies this; a belt hold constrains the open instead. - **Bullish Belt Hold vs Bullish Opening Marubozu**: Thresholds. Only one of the two tests maxLowerPct, minBodyAtr, trendPeriod. - **Bullish Closing Marubozu vs Bullish Marubozu**: A full marubozu satisfies this; a belt hold constrains the open instead. - **Bullish Closing Marubozu vs Bullish Opening Marubozu**: Note the existing set already carries the CLOSING marubozu, which constrains the other end; this constrains the open, and the two are different formations. - **Bullish Counterattack vs Piercing Line**: A piercing line closes into the prior body; a counterattack closes level with the prior close. - **Bullish Counterattack vs Matching Low**: Thresholds. Only one of the two tests minBodyAtr, minPriorBodyAtr. - **Bullish Doji Star vs Bullish Harami Cross**: A doji star gaps away from the prior body; a harami cross sits inside it. - **Bullish Doji Star vs Morning Doji Star**: Every morning doji star is also a morning star. - **Bullish Engulfing vs Bullish Harami**: The inverse containment of bullish-engulfing: here the second body sits inside the first. - **Bullish Engulfing vs Piercing Line**: If the second candle closes above the first candle’s open it is an engulfing, not a piercing line. - **Bullish Engulfing vs Three Outside Up**: Contains a bullish engulfing by construction. - **Bullish Engulfing vs Outside Bar**: An outside bar need not be an engulfing and an engulfing need not be an outside bar — one is about ranges, the other about bodies. - **Bullish Engulfing vs Last Engulfing Top**: This shares its shape with bullish-engulfing and is separated from it ONLY by the prior trend, so its no-context variant is meaningless by construction and it is the one formation here whose count is entirely a statement about the trend filter. - **Bullish Harami vs Bullish Harami Cross**: Every harami cross is also a bullish harami, so the counts overlap by construction. - **Bullish Harami vs Inside Bar**: Not a Japanese candlestick formation — it is a price-action construct, and it is included because it is the range-based sibling of harami and the comparison settles a confusion the literature never addresses. - **Bullish Harami vs Three Inside Up**: Every three inside up contains a bullish harami, so the two detections overlap by construction. - **Bullish Harami vs Unique Three River**: Bar count. Bullish Harami is 2, Unique Three River is 3. - **Bullish Harami vs Homing Pigeon**: A bullish harami requires the second candle to close up; a homing pigeon requires it to close down. - **Bullish Harami Cross vs Doji**: The difference between them prices what the doji adds. - **Bullish Hikkake vs Inside Bar**: This is the setup, not the confirmation — the classical pattern also requires price to close back above the inside bar’s high within a few candles, which is a separate test the engine does not fold in here. - **Bullish Hikkake vs Bullish Modified Hikkake**: Every modified hikkake is also a hikkake. - **Bullish Island Reversal vs Rising Window**: Testing only one of them turns this into an ordinary window with a coincidence attached, which is the most common way island counts are inflated. - **Bullish Island Reversal vs Morning Star**: Thresholds. Only one of the two tests minFirstBodyAtr, maxStarBodyRatio, penetration. - **Bullish Kicker vs Bullish Marubozu**: Bar count. Bullish Kicker is 2, Bullish Marubozu is 1. - **Bullish Long Line vs Bullish Short Line**: Long and short line are the same test with the threshold reversed, and both are context-free. - **Bullish Long Line vs Bullish Marubozu**: The same named thresholds at different values — compare the two pages. - **Bullish Marubozu vs Spinning Top**: Direction. The construction is the same read the other way up. - **Bullish Marubozu vs Bullish Opening Marubozu**: Note the existing set already carries the CLOSING marubozu, which constrains the other end; this constrains the open, and the two are different formations. - **Bullish Pennant vs Symmetrical Triangle**: Without the pole this is a symmetrical triangle, which carries no direction. - **Bullish Short Line vs Spinning Top**: A spinning top adds wick requirements; this does not. - **Bullish Three-Line Strike vs Three White Soldiers**: Prior trend. This one requires a preceding uptrend, the other a preceding downtrend. - **Bullish Tri-Star vs Doji**: Bar count. Bullish Tri-Star is 3, Doji is 1. - **Collapsing Doji Star vs Evening Doji Star**: Thresholds. Only one of the two tests maxDojiPct, minFirstBodyAtr, maxDojiBodyPct. - **Concealing Baby Swallow vs Ladder Bottom**: Bar count. Concealing Baby Swallow is 4, Ladder Bottom is 5. - **Concealing Baby Swallow vs Three Stars in the South**: Bar count. Concealing Baby Swallow is 4, Three Stars in the South is 3. - **Cup and Handle vs Rounding Bottom**: The handle is what distinguishes this from a rounding bottom, and requiring it to sit near the rim is what stops any pullback qualifying. - **Cup and Handle vs Double Bottom**: Prior trend. This one requires a preceding uptrend, the other a preceding downtrend. - **Dark Cloud Cover vs Piercing Line**: The mirror of the piercing line: a long up candle, then a candle that opens above the first candle’s high and closes back below the midpoint of the first body, but not below its open. - **Descending Hawk vs Stalled Pattern**: Bar count. Descending Hawk is 2, Stalled Pattern is 3. - **Descending Triangle vs Rectangle**: Direction. The construction is the same read the other way up. - **Descending Triangle vs Symmetrical Triangle**: Direction. The construction is the same read the other way up. - **Descending Triangle vs Falling Wedge**: Direction. The construction is the same read the other way up. - **Doji vs Spinning Top**: The lower body bound is what separates this from a doji; without it every doji is also a spinning top. - **Doji vs Dragonfly Doji**: Direction. The construction is the same read the other way up. - **Doji vs Gravestone Doji**: Direction. The construction is the same read the other way up. - **Doji vs Long-Legged Doji**: Every long-legged doji is also a doji; the wick minimums are the only difference. - **Doji vs Rickshaw Man**: Every rickshaw man is a long-legged doji; the centring test is the only difference, and it is what the maxOffsetPct parameter controls. - **Doji vs Northern Doji**: Identical in shape to `doji` and separated from it only by the trend filter, so it must never be counted alongside plain doji as though the two were independent observations — they are the same bars, partitioned. - **Doji vs Southern Doji**: Same partition warning as the northern doji: these are `doji` bars split by trend, not additional observations. - **Double Bottom vs Triple Bottom**: The same named thresholds at different values — compare the two pages. - **Double Bottom vs Rectangle**: Direction. The construction is the same read the other way up. - **Double Bottom vs Inverse Head and Shoulders**: The same named thresholds at different values — compare the two pages. - **Double Top vs Triple Top**: The same named thresholds at different values — compare the two pages. - **Double Top vs Rectangle**: A pattern with no meaningful trough is a rectangle, not a reversal. - **Double Top vs Head and Shoulders**: The same named thresholds at different values — compare the two pages. - **Downside Gap Side-by-Side White Lines vs Upside Gap Side-by-Side White Lines**: Prior trend. This one requires a preceding downtrend, the other a preceding uptrend. - **Downside Gap Three Methods vs Downside Tasuki Gap**: The same named thresholds at different values — compare the two pages. - **Downside Gap Three Methods vs Upside Gap Three Methods**: See upside-gap-three-methods — the gap is filled here and survives in the tasuki version. - **Downside Gap Three Methods vs Falling Window**: Bar count. Downside Gap Three Methods is 3, Falling Window is 2. - **Downside Gap Three Methods vs Two Black Gapping**: Thresholds. Only one of the two tests minBodyAtr. - **Downside Tasuki Gap vs Upside Tasuki Gap**: Prior trend. This one requires a preceding downtrend, the other a preceding uptrend. - **Downside Tasuki Gap vs Falling Window**: Bar count. Downside Tasuki Gap is 3, Falling Window is 2. - **Dragonfly Doji vs Hammer**: Overlaps with hammer by construction — a hammer with a small enough body satisfies both, and both detections are reported rather than arbitrated. - **Dragonfly Doji vs Gravestone Doji**: Direction. The construction is the same read the other way up. - **Dragonfly Doji vs Takuri Line**: Thresholds. Only one of the two tests minRangeAtr, atrPeriod, trendPeriod. - **Dumpling Top vs Tower Top**: Thresholds. Only one of the two tests minGapAtr, minTallAtr. - **Dumpling Top vs Falling Window**: The falling window is mandatory. - **Dumpling Top vs Stalled Pattern**: Bar count. Dumpling Top is 5, Stalled Pattern is 3. - **Evening Doji Star vs Evening Star**: Every evening doji star is also an evening star. - **Evening Star vs Morning Star**: Mirror of morning-star. - **Evening Star vs Three Inside Down**: Thresholds. Only one of the two tests maxStarBodyRatio, penetration, minGapAtr. - **Evening Star vs Upside Gap Two Crows**: Thresholds. Only one of the two tests maxStarBodyRatio, penetration. - **Evening Star vs Two Crows**: Thresholds. Only one of the two tests maxStarBodyRatio, penetration. - **Evening Star vs Tower Top**: Bar count. Evening Star is 3, Tower Top is 5. - **Falling Three Methods vs Rising Three Methods**: See rising-three-methods — the same containment strictness and the same rarity. - **Falling Window vs Two Black Gapping**: The third bar must not exceed the second's high, or the window is being repaired and the formation is a failed gap rather than a confirmed one. - **Fry Pan Bottom vs Tower Bottom**: Thresholds. Only one of the two tests minGapAtr, minTallAtr. - **Fry Pan Bottom vs Rising Window**: The rising window is mandatory, for the same reason the dumpling top demands its falling one. - **Fry Pan Bottom vs Ladder Bottom**: Thresholds. Only one of the two tests maxSmallAtr, minGapAtr, minBodyAtr. - **Gravestone Doji vs Shooting Star**: Overlaps with shooting star for the same reason dragonfly overlaps with hammer. - **Hammer vs Hanging Man**: Geometrically identical to a hanging man; only the prior trend separates them, which is why maxPriorSlope is a parameter rather than a hard assumption. - **Hammer vs Inverted Hammer**: The pair hammer/hanging-man and the pair inverted-hammer/shooting-star are the clearest available demonstration that context, not shape, is what the classical literature is actually claiming. - **Hammer vs Takuri Line**: Every takuri is also a hammer. - **Hanging Man vs Shooting Star**: Thresholds. Only one of the two tests minLowerPct, maxUpperPct, minLowerToBody. - **Head and Shoulders vs Triple Top**: The same named thresholds at different values — compare the two pages. - **High Wave vs Long-Legged Doji**: The same named thresholds at different values — compare the two pages. - **High Wave vs Spinning Top**: Without minRangeAtr this is just a spinning top, and every quiet bar qualifies. - **Homing Pigeon vs Inside Bar**: Direction. The construction is the same read the other way up. - **Identical Three Crows vs Three Black Crows**: Three black crows requires each open to sit inside the previous body; this requires it to sit at the previous close. - **In-Neck vs On-Neck**: Four formations share these two candles and differ only in where the second closes: on-neck at the prior low, in-neck at the prior close, thrusting inside the lower half of the body, piercing above the midpoint. - **In-Neck vs Thrusting**: Four formations share these two candles and differ only in where the second closes: on-neck at the prior low, in-neck at the prior close, thrusting inside the lower half of the body, piercing above the midpoint. - **In-Neck vs Piercing Line**: Direction. The construction is the same read the other way up. - **Inside Bar vs Outside Bar**: The opposite of an inside bar: this candle’s high is above the previous high and its low below the previous low. - **Inverse Head and Shoulders vs Triple Bottom**: The same named thresholds at different values — compare the two pages. - **Inverse Head and Shoulders vs Rounding Bottom**: Drop it and this becomes a superset of the inverse head and shoulders rather than a different shape. - **Inverted Hammer vs Shooting Star**: Identical geometry to a shooting star. - **Ladder Bottom vs Tower Bottom**: Thresholds. Only one of the two tests minBodyAtr, minFourthUpperPct, minTallAtr. - **Last Engulfing Bottom vs Three Outside Down**: Prior trend. This one requires a preceding downtrend, the other a preceding uptrend. - **Last Engulfing Bottom vs Outside Bar**: Direction. The construction is the same read the other way up. - **Last Engulfing Top vs Three Outside Up**: Prior trend. This one requires a preceding uptrend, the other a preceding downtrend. - **Last Engulfing Top vs Outside Bar**: Direction. The construction is the same read the other way up. - **Long-Legged Doji vs Spinning Top**: Thresholds. Only one of the two tests minBodyPct. - **Long-Legged Doji vs Rickshaw Man**: Every rickshaw man is a long-legged doji; the centring test is the only difference, and it is what the maxOffsetPct parameter controls. - **Long-Legged Doji vs Northern Doji**: Direction. The construction is the same read the other way up. - **Long-Legged Doji vs Southern Doji**: Direction. The construction is the same read the other way up. - **Mat Hold vs Rising Three Methods**: The difference from rising three methods is the gap on the second candle and the looser containment afterwards. - **Matching High vs Matching Low**: The mirror of matching low, and like it, the repeated level is a close rather than a wick. - **Matching High vs Tweezer Top**: A tweezer top matches highs, and the two catch different things — this one is not in TA-Lib, which carries only the bullish half of the pair. - **Matching Low vs Tweezer Bottom**: Unlike a tweezer bottom, which matches lows, this matches closes — the level that held is where the market settled, not where it was probed. - **Matching Low vs Stick Sandwich**: Matching low uses two adjacent closes; stick sandwich uses the first and third of three. - **Morning Doji Star vs Morning Star**: Every morning doji star is also a morning star. - **Morning Star vs Three Inside Up**: Thresholds. Only one of the two tests maxStarBodyRatio, penetration, minGapAtr. - **Morning Star vs Unique Three River**: Thresholds. Only one of the two tests maxStarBodyRatio, penetration, minGapAtr. - **Morning Star vs Tower Bottom**: Bar count. Morning Star is 3, Tower Bottom is 5. - **Northern Doji vs Rickshaw Man**: Direction. The construction is the same read the other way up. - **Northern Doji vs Southern Doji**: Same partition warning as the northern doji: these are `doji` bars split by trend, not additional observations. - **On-Neck vs Thrusting**: Thresholds. Only one of the two tests matchTolAtr, penetration. - **Piercing Line vs Thrusting**: Piercing line and thrusting are the same two candles distinguished only by where the second close lands. - **Rectangle vs Triple Top**: Three highs within tolerance is also the definition of the upper edge of a rectangle. - **Rectangle vs Triple Bottom**: Direction. The construction is the same read the other way up. - **Rickshaw Man vs Southern Doji**: Direction. The construction is the same read the other way up. - **Rising Window vs Upside Tasuki Gap**: Bar count. Rising Window is 2, Upside Tasuki Gap is 3. - **Rising Window vs Upside Gap Three Methods**: Bar count. Rising Window is 2, Upside Gap Three Methods is 3. - **Rising Window vs Three Gaps**: Bar count. Rising Window is 2, Three Gaps is 4. - **Rounding Bottom vs Triple Bottom**: Thresholds. Only one of the two tests maxBowlAtr. - **Stalled Pattern vs Three White Soldiers**: Three white soldiers, advance block and stalled pattern are the same three rising candles graded by how the bodies behave: growing, shrinking gradually, or collapsing on the third. - **Stalled Pattern vs Tower Top**: Bar count. Stalled Pattern is 3, Tower Top is 5. - **Three Black Crows vs Three White Soldiers**: Mirror of three-white-soldiers, including maxOpenOutsideAtr. - **Three Black Crows vs Three Stars in the South**: Three black crows makes progressively LOWER lows; this makes progressively higher ones. - **Three Gaps vs Upside Gap Three Methods**: Bar count. Three Gaps is 4, Upside Gap Three Methods is 3. - **Three Inside Down vs Three Outside Down**: Thresholds. Only one of the two tests minFirstBodyAtr, maxBodyRatio, minPriorBodyAtr. - **Three Inside Up vs Three Outside Up**: Thresholds. Only one of the two tests minFirstBodyAtr, maxBodyRatio, minPriorBodyAtr. - **Tweezer Bottom vs Tweezer Top**: See tweezer-bottom — the tolerance parameter does all the work, and a generous setting turns this into noise. - **Two Black Gapping vs Two Crows**: Prior trend. This one requires a preceding downtrend, the other a preceding uptrend. - **Two Crows vs Upside Gap Two Crows**: The only thing separating this from upside gap two crows is where the third candle closes: inside the first body here, still above it there. - **Upside Gap Three Methods vs Upside Tasuki Gap**: Tasuki gap and gap three methods are the same three candles distinguished only by whether the gap survives. ## Candlestick formations (107) ### Advance Block URL: https://customtradingplatform.com/patterns/advance-block Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLADVANCEBLOCK Definition: Three consecutive up candles, each closing higher than the last, but with each body smaller than the one before and the upper wicks lengthening. The advance continues while visibly running out of force. Traditional claim: Traditionally read as a stalling rally — the same three-up-candle shape as three white soldiers, but weakening rather than strengthening. How the detection is wrong: Three white soldiers and advance block are the same three up candles separated only by whether the bodies grow or shrink. A set of three rising candles will often satisfy neither. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.5; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5, minFirstBodyAtr 0.8 | loose: minPriorSlope 0.5, minFirstBodyAtr 0.3 | no-context: minPriorSlope not applied Confusable with: three-white-soldiers, stalled-pattern Measured outcome: not published — see the withheld-study note above. ### Bearish Abandoned Baby URL: https://customtradingplatform.com/patterns/bearish-abandoned-baby Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLABANDONEDBABY Definition: The mirror: a long up candle, a doji gapping entirely above it, then a down candle gapping entirely below the doji. Traditional claim: Traditionally treated as the bearish counterpart and equally rare. How the detection is wrong: See bullish-abandoned-baby — both gaps on full ranges. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.6; maxDojiBodyPct = 0.05 (body small enough to count as a doji); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: minPriorSlope 0.5, maxDojiBodyPct 0.1 | no-context: minPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: evening-doji-star, evening-star, bullish-abandoned-baby Measured outcome: not published — see the withheld-study note above. ### Bearish Belt Hold URL: https://customtradingplatform.com/patterns/bearish-belt-hold Type: candlestick; 1 bar; bearish; reversal; requires a prior uptrend; TA-Lib CDLBELTHOLD Definition: The mirror: a long down candle with effectively no upper wick, opening at the session high. Traditional claim: Traditionally read as sellers taking control from the open. How the detection is wrong: A bearish marubozu satisfies this too. Belt hold is the larger set. Detection thresholds: maxUpperPct = 0.05 (upper wick at most this share of the range); minBodyPct = 0.6 (body at least this share of the range); minBodyAtr = 0.6 (body at least this, in ATR); trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxUpperPct 0.02, minBodyPct 0.75, minPriorSlope 1.5 | loose: maxUpperPct 0.1, minBodyPct 0.5, minPriorSlope 0.5 | no-context: minPriorSlope not applied Confusable with: bearish-marubozu, bearish-separating-lines, bearish-closing-marubozu Measured outcome: not published — see the withheld-study note above. ### Bearish Breakaway URL: https://customtradingplatform.com/patterns/bearish-breakaway Type: candlestick; 5 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLBREAKAWAY Definition: The mirror: the move breaks away upward and the fifth candle closes back inside the gap. Traditional claim: Traditionally read as a bearish reversal. How the detection is wrong: The final close must land inside the gap. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.6; minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: minPriorSlope 0.5 | no-context: minPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: bullish-breakaway Measured outcome: not published — see the withheld-study note above. ### Bearish Closing Marubozu URL: https://customtradingplatform.com/patterns/bearish-closing-marubozu Type: candlestick; 1 bar; bearish; continuation; no prior context required; TA-Lib CDLCLOSINGMARUBOZU Definition: The mirror: a down candle whose close is the session low, possibly with an upper wick. Traditional claim: Traditionally read as selling that held into the close. How the detection is wrong: See bullish-closing-marubozu. Detection thresholds: maxLowerPct = 0.05 (lower wick at most this share of the range); minBodyPct = 0.6 (body at least this share of the range); minBodyAtr = 0.6 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxLowerPct 0.02, minBodyPct 0.75 | loose: maxLowerPct 0.1, minBodyPct 0.5 | any-size: minBodyAtr 0 Confusable with: bearish-marubozu, bearish-belt-hold, bullish-closing-marubozu Measured outcome: not published — see the withheld-study note above. ### Bearish Counterattack URL: https://customtradingplatform.com/patterns/bearish-counterattack Type: candlestick; 2 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLCOUNTERATTACK Definition: The mirror: the second candle opens above the first candle’s high and falls back to close level with it. Traditional claim: Traditionally read as a bearish reversal. How the detection is wrong: Closes level with the prior close rather than into the prior body. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); matchTolAtr = 0.05 (how closely two levels must match, in ATR); minBodyAtr = 0.6 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: minPriorSlope 0.5 | no-context: minPriorSlope not applied | tight: matchTolAtr 0.02 Confusable with: dark-cloud-cover, bullish-counterattack Measured outcome: not published — see the withheld-study note above. ### Bearish Doji Star URL: https://customtradingplatform.com/patterns/bearish-doji-star Type: candlestick; 2 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLDOJISTAR Definition: The mirror: a long up candle followed by a doji clear above it — the opening of an evening star. Traditional claim: Traditionally read as an unconfirmed warning of a top. How the detection is wrong: Gaps away from the prior body, unlike a harami cross. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.5; maxDojiBodyPct = 0.05 (body small enough to count as a doji); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: minPriorSlope -0.5 | no-context: minPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: bearish-harami-cross, evening-doji-star, bullish-doji-star Measured outcome: not published — see the withheld-study note above. ### Bearish Engulfing URL: https://customtradingplatform.com/patterns/bearish-engulfing Type: candlestick; 2 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLENGULFING Definition: The mirror of the bullish engulfing. The first candle closes higher than it opened; the second closes lower, and its real body fully covers the first. Again, bodies rather than ranges. Traditional claim: Traditionally read as a bearish reversal signal. How the detection is wrong: Bodies, not ranges. See bullish-engulfing — the two share every parameter and differ only in sign, which makes them the cleanest available symmetry check on the engine itself. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minPriorBodyAtr = 0.3; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5, minPriorBodyAtr 0.5 | loose: minPriorSlope 0.5, minPriorBodyAtr 0.1 | no-context: minPriorSlope not applied | no-body-floor: minPriorBodyAtr 0 Confusable with: bearish-harami, dark-cloud-cover, three-outside-down, outside-bar, upside-gap-two-crows Measured outcome: not published — see the withheld-study note above. ### Bearish Harami URL: https://customtradingplatform.com/patterns/bearish-harami Type: candlestick; 2 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLHARAMI Definition: The mirror of the bullish harami: a long-bodied up candle followed by a small down candle whose body falls entirely within it. Traditional claim: Traditionally read as a bearish reversal signal. How the detection is wrong: Mirror of bullish-harami. Containment is on bodies only. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minPriorBodyAtr = 0.5; maxBodyRatio = 0.6 (body at most this, relative to the bar before); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5, minPriorBodyAtr 0.8, maxBodyRatio 0.4 | loose: minPriorSlope 0.5, minPriorBodyAtr 0.3, maxBodyRatio 0.8 | no-context: minPriorSlope not applied Confusable with: bearish-engulfing, inside-bar, three-inside-down, bearish-harami-cross Measured outcome: not published — see the withheld-study note above. ### Bearish Harami Cross URL: https://customtradingplatform.com/patterns/bearish-harami-cross Type: candlestick; 2 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLHARAMICROSS Definition: The mirror: a long up candle followed by a contained doji. Traditional claim: Traditionally read as a stronger bearish harami. How the detection is wrong: Overlaps with bearish-harami by construction. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minPriorBodyAtr = 0.5; maxBodyPct = 0.05 (body at most this share of the range); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5, minPriorBodyAtr 0.8, maxBodyPct 0.02 | loose: minPriorSlope 0.5, minPriorBodyAtr 0.3, maxBodyPct 0.1 | no-context: minPriorSlope not applied Confusable with: bearish-harami, doji, bearish-doji-star Measured outcome: not published — see the withheld-study note above. ### Bearish Hikkake URL: https://customtradingplatform.com/patterns/bearish-hikkake Type: candlestick; 3 bars; bearish; reversal; no prior context required; TA-Lib CDLHIKKAKE Definition: The mirror: the third bar makes a higher high and a higher low, and the breakout is the trap. Traditional claim: Traditionally read as a bearish trap. How the detection is wrong: Setup only — confirmation is a separate condition. See bullish-hikkake. Detection thresholds: minMotherRangeAtr = 0.5; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minMotherRangeAtr 1 | no-range-floor: minMotherRangeAtr 0 Confusable with: inside-bar, bullish-hikkake, bearish-modified-hikkake Measured outcome: not published — see the withheld-study note above. ### Bearish Island Reversal URL: https://customtradingplatform.com/patterns/bearish-island-reversal Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend Definition: Price gaps up into the middle candle and gaps back down out of it, so that candle's range touches neither neighbour. The abandoned price band above is what gives the formation its name and its claim. Traditional claim: Treated as a major top signal: the gap down undoes the gap up and strands the buyers who chased the high. How the detection is wrong: Both gaps are required. A single gap with an unrelated wide bar beside it is not an island. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minGapAtr = 0.15 (gap between bars at least this, in ATR); minPriorSlope = 0.5 (prior slope must be above this) Variants: strict: minGapAtr 0.4 | loose: minGapAtr 0.05 | no-context: minPriorSlope not applied Confusable with: falling-window, bearish-abandoned-baby, evening-star Measured outcome: not published — see the withheld-study note above. ### Bearish Kicker URL: https://customtradingplatform.com/patterns/bearish-kicker Type: candlestick; 2 bars; bearish; reversal; no prior context required; TA-Lib CDLKICKING Definition: The mirror: two near-solid bodies in opposite directions, the second opening below the first candle’s open. Traditional claim: Traditionally read as an abrupt bearish reversal. How the detection is wrong: See bullish-kicker — the gap requirement makes this rare outside gapping markets. Detection thresholds: minBodyPct = 0.9 (body at least this share of the range); minBodyAtr = 0.5 (body at least this, in ATR); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minBodyPct 0.97, minGapAtr 0.2 | loose: minBodyPct 0.8, minBodyAtr 0.3 | no-gap: minGapAtr not applied Confusable with: bullish-kicker, bearish-marubozu Measured outcome: not published — see the withheld-study note above. ### Bearish Long Line URL: https://customtradingplatform.com/patterns/bearish-long-line Type: candlestick; 1 bar; bearish; continuation; no prior context required; TA-Lib CDLLONGLINE Definition: The mirror of the bullish long line. Traditional claim: Traditionally read as conviction on the sell side. How the detection is wrong: See bullish-long-line. Detection thresholds: minBodyAtr = 1.2 (body at least this, in ATR); minBodyPct = 0.5 (body at least this share of the range); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minBodyAtr 1.8 | loose: minBodyAtr 0.8 Confusable with: bearish-short-line, bearish-marubozu Measured outcome: not published — see the withheld-study note above. ### Bearish Marubozu URL: https://customtradingplatform.com/patterns/bearish-marubozu Type: candlestick; 1 bar; bearish; continuation; no prior context required; TA-Lib CDLMARUBOZU Definition: The mirror of the bullish marubozu: a down candle opening at or near the high and closing at or near the low, with the body filling nearly the whole range. Traditional claim: Traditionally read as sustained one-directional selling, and as continuation rather than reversal. How the detection is wrong: See bullish-marubozu — the two share every parameter and differ only in sign. Detection thresholds: minBodyPct = 0.9 (body at least this share of the range); minBodyAtr = 0.6 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minBodyPct 0.97, minBodyAtr 1 | loose: minBodyPct 0.8, minBodyAtr 0.3 | any-size: minBodyAtr 0 Confusable with: bullish-marubozu, spinning-top, bearish-belt-hold, bearish-kicker, bearish-closing-marubozu, bearish-long-line Measured outcome: not published — see the withheld-study note above. ### Bearish Modified Hikkake URL: https://customtradingplatform.com/patterns/bearish-modified-hikkake Type: candlestick; 4 bars; bearish; reversal; no prior context required; TA-Lib CDLHIKKAKEMOD Definition: The mirror: the preceding candle closed near the mother bar’s high. Traditional claim: Traditionally treated as the higher-quality bearish hikkake. How the detection is wrong: Every modified hikkake is also a hikkake. Detection thresholds: minMotherRangeAtr = 0.5; matchTolAtr = 0.15 (how closely two levels must match, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.08 | loose: matchTolAtr 0.3 Confusable with: bearish-hikkake Measured outcome: not published — see the withheld-study note above. ### Bearish Opening Marubozu URL: https://customtradingplatform.com/patterns/bearish-opening-marubozu Type: candlestick; 1 bar; bearish; continuation; no prior context required Definition: One candle closing below its open, with the open at or within a hair of the high. Sellers were in control from the first tick; the lower shadow is unconstrained, so the close need not be the low. Traditional claim: Read as selling pressure present from the open, and quoted as the weaker sibling of the full marubozu. How the detection is wrong: Measured as a fraction of range rather than as an exact equality, for the same tick-size reason as its bullish twin. Detection thresholds: maxShadowPct = 0.02 (each wick at most this share of the range); minBodyPct = 0.6 (body at least this share of the range) Variants: strict: maxShadowPct 0, minBodyPct 0.8 | loose: maxShadowPct 0.06, minBodyPct 0.4 | no-context: Confusable with: bearish-marubozu, bearish-closing-marubozu, bearish-belt-hold Measured outcome: not published — see the withheld-study note above. ### Bearish Separating Lines URL: https://customtradingplatform.com/patterns/bearish-separating-lines Type: candlestick; 2 bars; bearish; continuation; requires a prior downtrend; TA-Lib CDLSEPARATINGLINES Definition: The mirror: matching opens, opposite directions, during a decline, with the second candle opening at its high. Traditional claim: Traditionally read as a bearish continuation. How the detection is wrong: Overlaps with bearish-belt-hold by construction. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); matchTolAtr = 0.05 (how closely two levels must match, in ATR); maxUpperPct = 0.05 (upper wick at most this share of the range); minBodyAtr = 0.4 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.02, maxPriorSlope -1.5 | loose: matchTolAtr 0.12, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: bullish-separating-lines, bearish-belt-hold Measured outcome: not published — see the withheld-study note above. ### Bearish Short Line URL: https://customtradingplatform.com/patterns/bearish-short-line Type: candlestick; 1 bar; bearish; indecision; no prior context required; TA-Lib CDLSHORTLINE Definition: The mirror: a quiet session that closed slightly lower. Traditional claim: Traditionally read as a pause. How the detection is wrong: See bullish-short-line. Detection thresholds: maxBodyAtr = 0.3; maxRangeAtr = 0.6; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxBodyAtr 0.2, maxRangeAtr 0.4 | loose: maxBodyAtr 0.5, maxRangeAtr 0.9 Confusable with: bearish-long-line, spinning-top Measured outcome: not published — see the withheld-study note above. ### Bearish Three-Line Strike URL: https://customtradingplatform.com/patterns/bearish-three-line-strike Type: candlestick; 4 bars; bearish; continuation; requires a prior downtrend; TA-Lib CDL3LINESTRIKE Definition: The mirror: three down candles, then an up candle opening below the third close and closing above the first candle’s open. Traditional claim: Traditionally read as a bearish continuation despite the final candle being up. How the detection is wrong: The fourth candle must close above the first candle’s open. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minBodyAtr = 0.3 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minBodyAtr 0.6, maxPriorSlope -1.5 | loose: maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: bullish-three-line-strike, three-black-crows Measured outcome: not published — see the withheld-study note above. ### Bearish Tri-Star URL: https://customtradingplatform.com/patterns/bearish-tristar Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLTRISTAR Definition: The mirror: three dojis with the middle one clear above its neighbours. Traditional claim: Traditionally described as a rare and strong bearish reversal. How the detection is wrong: See bullish-tristar — expect near-zero counts. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); maxDojiBodyPct = 0.05 (body small enough to count as a doji); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: maxDojiBodyPct 0.1, minPriorSlope 0.5 | no-context: minPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: bullish-tristar, doji Measured outcome: not published — see the withheld-study note above. ### Bullish Abandoned Baby URL: https://customtradingplatform.com/patterns/bullish-abandoned-baby Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLABANDONEDBABY Definition: Three candles: a long down candle, then a doji whose entire range sits below it, then an up candle whose entire range sits above the doji. The middle session is stranded — no price traded at its level either before or after. Traditional claim: Traditionally treated as one of the rarest and strongest reversal formations, precisely because the double gap is so hard to produce. How the detection is wrong: Both gaps are required and both are measured on the full range, not the bodies. Instruments that rarely gap will produce almost none of these, and that absence is a fact about the market rather than the definition. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minFirstBodyAtr = 0.6; maxDojiBodyPct = 0.05 (body small enough to count as a doji); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: maxPriorSlope -0.5, maxDojiBodyPct 0.1 | no-context: maxPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: morning-doji-star, morning-star, bearish-abandoned-baby Measured outcome: not published — see the withheld-study note above. ### Bullish Belt Hold URL: https://customtradingplatform.com/patterns/bullish-belt-hold Type: candlestick; 1 bar; bullish; reversal; requires a prior downtrend; TA-Lib CDLBELTHOLD Definition: A long up candle with effectively no lower wick: it opens at the session low and never trades below it. Distinct from a marubozu, which also requires no upper wick — a belt hold constrains only the open. Traditional claim: Traditionally read as buyers taking control from the first print and holding it. How the detection is wrong: A bullish marubozu satisfies this as well, since it has no lower wick either. Belt hold is the weaker constraint and the larger set of the two. Detection thresholds: maxLowerPct = 0.05 (lower wick at most this share of the range); minBodyPct = 0.6 (body at least this share of the range); minBodyAtr = 0.6 (body at least this, in ATR); trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxLowerPct 0.02, minBodyPct 0.75, maxPriorSlope -1.5 | loose: maxLowerPct 0.1, minBodyPct 0.5, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: bullish-marubozu, bullish-separating-lines, bullish-closing-marubozu Measured outcome: not published — see the withheld-study note above. ### Bullish Breakaway URL: https://customtradingplatform.com/patterns/bullish-breakaway Type: candlestick; 5 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLBREAKAWAY Definition: Five candles: a long down candle, a second gapping below its body, two more grinding lower, then an up candle that closes back inside the original gap without filling it entirely. The move breaks away and then returns to its starting point. Traditional claim: Traditionally read as a bullish reversal that completes when the gap is re-entered. How the detection is wrong: The final close must land inside the gap — above the second candle’s body top and below the first candle’s body bottom. Closing beyond either end makes it something else. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minFirstBodyAtr = 0.6; minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: maxPriorSlope -0.5 | no-context: maxPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: bearish-breakaway Measured outcome: not published — see the withheld-study note above. ### Bullish Closing Marubozu URL: https://customtradingplatform.com/patterns/bullish-closing-marubozu Type: candlestick; 1 bar; bullish; continuation; no prior context required; TA-Lib CDLCLOSINGMARUBOZU Definition: An up candle whose close is the session high. It may have a lower wick — that is what separates it from a full marubozu, which has neither. Traditional claim: Traditionally read as buying that held right into the close. How the detection is wrong: Constrains the close only. A full marubozu satisfies this; a belt hold constrains the open instead. All three overlap and are reported separately. Detection thresholds: maxUpperPct = 0.05 (upper wick at most this share of the range); minBodyPct = 0.6 (body at least this share of the range); minBodyAtr = 0.6 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxUpperPct 0.02, minBodyPct 0.75 | loose: maxUpperPct 0.1, minBodyPct 0.5 | any-size: minBodyAtr 0 Confusable with: bullish-marubozu, bullish-belt-hold, bearish-closing-marubozu Measured outcome: not published — see the withheld-study note above. ### Bullish Counterattack URL: https://customtradingplatform.com/patterns/bullish-counterattack Type: candlestick; 2 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLCOUNTERATTACK Definition: Two long candles in opposite directions whose closes land at the same level. The second opens well below the first candle’s low and recovers all of it — but only back to where the first closed, not through it. Traditional claim: Traditionally read as a reversal in which sellers were met and exactly matched. How the detection is wrong: A piercing line closes into the prior body; a counterattack closes level with the prior close. The matching close is the whole pattern, and the tolerance parameter decides how exact "matching" is. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); matchTolAtr = 0.05 (how closely two levels must match, in ATR); minBodyAtr = 0.6 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: maxPriorSlope -0.5 | no-context: maxPriorSlope not applied | tight: matchTolAtr 0.02 Confusable with: piercing-line, matching-low, bearish-counterattack Measured outcome: not published — see the withheld-study note above. ### Bullish Doji Star URL: https://customtradingplatform.com/patterns/bullish-doji-star Type: candlestick; 2 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLDOJISTAR Definition: Two candles: a long down candle followed by a doji whose body sits clear below it. The first two thirds of a morning star, before the confirming candle arrives. Traditional claim: Traditionally read as a warning rather than a signal — the selling stalled, but nothing has yet confirmed a turn. How the detection is wrong: A doji star gaps away from the prior body; a harami cross sits inside it. They are mutually exclusive, and conflating them is common. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minFirstBodyAtr = 0.5; maxDojiBodyPct = 0.05 (body small enough to count as a doji); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: maxPriorSlope -0.5 | no-context: maxPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: bullish-harami-cross, morning-doji-star, bearish-doji-star Measured outcome: not published — see the withheld-study note above. ### Bullish Engulfing URL: https://customtradingplatform.com/patterns/bullish-engulfing Type: candlestick; 2 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLENGULFING Definition: Two candles. The first closes lower than it opened; the second closes higher than it opened, and its real body fully covers the first body in both directions. Bodies only — the wicks are not part of the definition, and a second candle whose range engulfs the first without its body doing so does not qualify. Traditional claim: Traditionally read as a bullish reversal signal, and generally said to be stronger when the engulfed body is large rather than a doji. How the detection is wrong: The classical definition compares real bodies, not ranges, so a bar whose range engulfs the prior range but whose body does not is not an engulfing. minPriorBodyAtr exists because engulfing a doji is trivially easy and is the single largest source of inflated engulfing counts in published statistics. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minPriorBodyAtr = 0.3; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5, minPriorBodyAtr 0.5 | loose: maxPriorSlope -0.5, minPriorBodyAtr 0.1 | no-context: maxPriorSlope not applied | no-body-floor: minPriorBodyAtr 0 Confusable with: bullish-harami, piercing-line, three-outside-up, outside-bar Measured outcome: not published — see the withheld-study note above. ### Bullish Harami URL: https://customtradingplatform.com/patterns/bullish-harami Type: candlestick; 2 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLHARAMI Definition: Two candles, and the inverse containment of an engulfing: a long-bodied down candle followed by a small up candle whose body falls entirely within it. The second candle may still trade outside the first bar’s high or low — only the bodies are constrained. Traditional claim: Traditionally read as a bullish reversal signal, on the reasoning that the trend has run out of range rather than that it has turned. How the detection is wrong: The inverse containment of bullish-engulfing: here the second body sits inside the first. A harami whose second body is nearly as large as the first carries no information, which is what maxBodyRatio bounds. Containment is on bodies only — the second bar may exceed the first bar's high or low and still be a harami. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minPriorBodyAtr = 0.5; maxBodyRatio = 0.6 (body at most this, relative to the bar before); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5, minPriorBodyAtr 0.8, maxBodyRatio 0.4 | loose: maxPriorSlope -0.5, minPriorBodyAtr 0.3, maxBodyRatio 0.8 | no-context: maxPriorSlope not applied Confusable with: bullish-engulfing, inside-bar, three-inside-up, bullish-harami-cross, unique-three-river, homing-pigeon Measured outcome: not published — see the withheld-study note above. ### Bullish Harami Cross URL: https://customtradingplatform.com/patterns/bullish-harami-cross Type: candlestick; 2 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLHARAMICROSS Definition: A long down candle followed by a doji whose whole body sits inside it. The stricter cousin of the harami — the second session did not merely narrow, it closed exactly where it opened. Traditional claim: Traditionally read as a stronger signal than the plain harami, because indecision arrived rather than a small move in either direction. How the detection is wrong: Every harami cross is also a bullish harami, so the counts overlap by construction. The difference between them prices what the doji adds. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minPriorBodyAtr = 0.5; maxBodyPct = 0.05 (body at most this share of the range); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5, minPriorBodyAtr 0.8, maxBodyPct 0.02 | loose: maxPriorSlope -0.5, minPriorBodyAtr 0.3, maxBodyPct 0.1 | no-context: maxPriorSlope not applied Confusable with: bullish-harami, doji, bullish-doji-star Measured outcome: not published — see the withheld-study note above. ### Bullish Hikkake URL: https://customtradingplatform.com/patterns/bullish-hikkake Type: candlestick; 3 bars; bullish; reversal; no prior context required; TA-Lib CDLHIKKAKE Definition: Three candles: a mother bar, an inside bar, then a bar that makes both a lower high and a lower low. The break looks bearish and is set up to fail, which is what the name means — a trap. Traditional claim: Traditionally read as a bullish trap: the breakdown attracts sellers who are then squeezed when price recovers into the inside bar’s range. How the detection is wrong: This is the setup, not the confirmation — the classical pattern also requires price to close back above the inside bar’s high within a few candles, which is a separate test the engine does not fold in here. Detection thresholds: minMotherRangeAtr = 0.5; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minMotherRangeAtr 1 | no-range-floor: minMotherRangeAtr 0 Confusable with: inside-bar, bearish-hikkake, bullish-modified-hikkake Measured outcome: not published — see the withheld-study note above. ### Bullish Island Reversal URL: https://customtradingplatform.com/patterns/bullish-island-reversal Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend Definition: Three candles. Price gaps down into the middle candle and gaps back up out of it, so the middle candle's range shares no price with either neighbour. The isolated bar is the island. It is a stronger claim than either window alone because the market has abandoned that price band in both directions. Traditional claim: Treated as a major bottom signal, on the reading that the gap out reverses the gap in and traps everyone who sold the low. How the detection is wrong: Both gaps must clear the ATR floor. Testing only one of them turns this into an ordinary window with a coincidence attached, which is the most common way island counts are inflated. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minGapAtr = 0.15 (gap between bars at least this, in ATR); maxPriorSlope = -0.5 (prior slope must be below this) Variants: strict: minGapAtr 0.4 | loose: minGapAtr 0.05 | no-context: maxPriorSlope not applied Confusable with: rising-window, bullish-abandoned-baby, morning-star Measured outcome: not published — see the withheld-study note above. ### Bullish Kicker URL: https://customtradingplatform.com/patterns/bullish-kicker Type: candlestick; 2 bars; bullish; reversal; no prior context required; TA-Lib CDLKICKING Definition: Two candles that are each nearly all body, in opposite directions, with the second opening above the first candle’s open. The market reversed without trading through the space between them. Traditional claim: Traditionally read as one of the most abrupt reversal signals, on the reasoning that the gap leaves no one an exit. How the detection is wrong: The gap is the whole pattern. On instruments that rarely gap — most intraday FX and crypto — this will be close to absent, and that absence is a fact about the market rather than about the definition. Detection thresholds: minBodyPct = 0.9 (body at least this share of the range); minBodyAtr = 0.5 (body at least this, in ATR); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minBodyPct 0.97, minGapAtr 0.2 | loose: minBodyPct 0.8, minBodyAtr 0.3 | no-gap: minGapAtr not applied Confusable with: bearish-kicker, bullish-marubozu Measured outcome: not published — see the withheld-study note above. ### Bullish Long Line URL: https://customtradingplatform.com/patterns/bullish-long-line Type: candlestick; 1 bar; bullish; continuation; no prior context required; TA-Lib CDLLONGLINE Definition: An up candle whose real body is large relative to the recent average true range. A size classification rather than a shape — it says the session moved, not how. Traditional claim: Traditionally read as conviction, and used as a building block of larger formations rather than a signal on its own. How the detection is wrong: Long and short line are the same test with the threshold reversed, and both are context-free. They exist to be composed into other rules, not traded. Detection thresholds: minBodyAtr = 1.2 (body at least this, in ATR); minBodyPct = 0.5 (body at least this share of the range); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minBodyAtr 1.8 | loose: minBodyAtr 0.8 Confusable with: bullish-short-line, bullish-marubozu Measured outcome: not published — see the withheld-study note above. ### Bullish Marubozu URL: https://customtradingplatform.com/patterns/bullish-marubozu Type: candlestick; 1 bar; bullish; continuation; no prior context required; TA-Lib CDLMARUBOZU Definition: An up candle whose real body fills nearly the whole range: it opens at or near the low and closes at or near the high. The absence of wicks is the definition — a long body with long wicks is not a marubozu. Traditional claim: Traditionally read as strong one-directional conviction, and as continuation rather than reversal. How the detection is wrong: The body floor in ATR terms matters as much as the body ratio: a tiny candle can be 95% body and mean nothing. Both constraints are parameters, and the difference they make is measurable. Detection thresholds: minBodyPct = 0.9 (body at least this share of the range); minBodyAtr = 0.6 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minBodyPct 0.97, minBodyAtr 1 | loose: minBodyPct 0.8, minBodyAtr 0.3 | any-size: minBodyAtr 0 Confusable with: bearish-marubozu, spinning-top, bullish-belt-hold, bullish-kicker, bullish-closing-marubozu, bullish-long-line Measured outcome: not published — see the withheld-study note above. ### Bullish Modified Hikkake URL: https://customtradingplatform.com/patterns/bullish-modified-hikkake Type: candlestick; 4 bars; bullish; reversal; no prior context required; TA-Lib CDLHIKKAKEMOD Definition: The hikkake setup with one extra condition: the candle preceding the mother bar closed near the mother bar’s low, so the trap forms directly off a level rather than in open space. Traditional claim: Traditionally treated as the higher-quality version of the hikkake. How the detection is wrong: Every modified hikkake is also a hikkake. The extra condition is one comparison, and whether it earns its own name is exactly the sort of thing the counts will settle. Detection thresholds: minMotherRangeAtr = 0.5; matchTolAtr = 0.15 (how closely two levels must match, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.08 | loose: matchTolAtr 0.3 Confusable with: bullish-hikkake Measured outcome: not published — see the withheld-study note above. ### Bullish Opening Marubozu URL: https://customtradingplatform.com/patterns/bullish-opening-marubozu Type: candlestick; 1 bar; bullish; continuation; no prior context required Definition: One candle. It closes above its open, and the open sits at or within a hair of the low, so there is no lower shadow. Unlike the full marubozu the upper shadow is unconstrained — buyers controlled the bar from the first tick, but did not necessarily hold the high into the close. Traditional claim: Read as buying pressure present from the open, and generally quoted as the weaker sibling of the full marubozu. How the detection is wrong: An exact open==low test is a statement about the instrument's tick size, not about the candle, so the shadow is measured as a fraction of the bar's range. Note the existing set already carries the CLOSING marubozu, which constrains the other end; this constrains the open, and the two are different formations. Detection thresholds: maxShadowPct = 0.02 (each wick at most this share of the range); minBodyPct = 0.6 (body at least this share of the range) Variants: strict: maxShadowPct 0, minBodyPct 0.8 | loose: maxShadowPct 0.06, minBodyPct 0.4 | no-context: Confusable with: bullish-marubozu, bullish-closing-marubozu, bullish-belt-hold Measured outcome: not published — see the withheld-study note above. ### Bullish Separating Lines URL: https://customtradingplatform.com/patterns/bullish-separating-lines Type: candlestick; 2 bars; bullish; continuation; requires a prior uptrend; TA-Lib CDLSEPARATINGLINES Definition: Two candles with the same open, in opposite directions, during a rise. The second opens exactly where the first did and never trades below it — the pullback is erased at the open. Traditional claim: Traditionally read as a continuation: the market rejected the previous session entirely. How the detection is wrong: The matching opens are the pattern. The second candle is also a belt hold, so the two overlap by construction. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); matchTolAtr = 0.05 (how closely two levels must match, in ATR); maxLowerPct = 0.05 (lower wick at most this share of the range); minBodyAtr = 0.4 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.02, minPriorSlope 1.5 | loose: matchTolAtr 0.12, minPriorSlope 0.5 | no-context: minPriorSlope not applied Confusable with: bearish-separating-lines, bullish-belt-hold Measured outcome: not published — see the withheld-study note above. ### Bullish Short Line URL: https://customtradingplatform.com/patterns/bullish-short-line Type: candlestick; 1 bar; bullish; indecision; no prior context required; TA-Lib CDLSHORTLINE Definition: An up candle whose body and range are both small relative to recent volatility — a quiet session that closed slightly higher. Traditional claim: Traditionally read as a pause rather than a signal. How the detection is wrong: Size classification only. A spinning top adds wick requirements; this does not. Detection thresholds: maxBodyAtr = 0.3; maxRangeAtr = 0.6; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxBodyAtr 0.2, maxRangeAtr 0.4 | loose: maxBodyAtr 0.5, maxRangeAtr 0.9 Confusable with: bullish-long-line, spinning-top Measured outcome: not published — see the withheld-study note above. ### Bullish Three-Line Strike URL: https://customtradingplatform.com/patterns/bullish-three-line-strike Type: candlestick; 4 bars; bullish; continuation; requires a prior uptrend; TA-Lib CDL3LINESTRIKE Definition: Four candles: three consecutive up candles each closing higher, then a down candle that opens above the third close and closes below the first candle’s open — undoing the whole advance in one session. Traditional claim: Traditionally read as a continuation rather than a reversal, which is counter-intuitive enough to be worth testing: the wipeout is treated as a shakeout inside an ongoing uptrend. How the detection is wrong: The fourth candle must close below the first candle’s open. Anything less and this is three up candles followed by a down candle, which is not a pattern. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minBodyAtr = 0.3 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minBodyAtr 0.6, minPriorSlope 1.5 | loose: minPriorSlope 0.5 | no-context: minPriorSlope not applied Confusable with: bearish-three-line-strike, three-white-soldiers Measured outcome: not published — see the withheld-study note above. ### Bullish Tri-Star URL: https://customtradingplatform.com/patterns/bullish-tristar Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLTRISTAR Definition: Three dojis in a row, with the middle one’s body sitting clear below both neighbours. Three consecutive sessions of complete indecision, the middle one at a lower level. Traditional claim: Traditionally described as extremely rare and a strong reversal. Rarity is easy to verify; strength is not. How the detection is wrong: Three dojis in a row is already unusual; requiring the middle to gap makes it rarer still. Expect counts near zero on most instruments. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); maxDojiBodyPct = 0.05 (body small enough to count as a doji); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: maxDojiBodyPct 0.1, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: bearish-tristar, doji Measured outcome: not published — see the withheld-study note above. ### Collapsing Doji Star URL: https://customtradingplatform.com/patterns/collapsing-doji-star Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend Definition: Three candles falling away in steps. A white body, a doji that opens a window BELOW it, and a black candle that opens a second window below the doji. The unusual feature is that the star gaps down after an up candle rather than up, which is why the formation is named for collapsing rather than for a star. Traditional claim: Read as a strong bearish reversal, on the reading that two windows down in three bars is an abandonment rather than a pullback. How the detection is wrong: Both windows are required and both are floored on ATR. Requiring only the first turns this into an ordinary doji star with a coincidence attached. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minGapAtr = 0.1 (gap between bars at least this, in ATR); maxDojiPct = 0.1 (body small enough to count as a doji); minPriorSlope = 0 (prior slope must be above this) Variants: strict: minGapAtr 0.3, maxDojiPct 0.05 | loose: minGapAtr 0.03, maxDojiPct 0.15 | no-context: minPriorSlope not applied Confusable with: bearish-doji-star, evening-doji-star, bearish-abandoned-baby Measured outcome: not published — see the withheld-study note above. ### Concealing Baby Swallow URL: https://customtradingplatform.com/patterns/concealing-baby-swallow Type: candlestick; 4 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLCONCEALBABYSWALL Definition: Four consecutive down candles: two near-solid bodies, a third that gaps down but rallies back into the second’s body, and a fourth whose range completely covers the third. A decline that keeps going while visibly losing its footing. Traditional claim: Traditionally read as a bullish reversal despite consisting entirely of down candles, which is what makes it unusual enough to be worth testing. How the detection is wrong: All four candles must be down candles. If any one closes higher the formation is void, which is why it is among the rarest in the classical set. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minMarubozuPct = 0.85 (body large enough to count as a marubozu) Variants: strict: maxPriorSlope -1.5 | loose: minMarubozuPct 0.7, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: ladder-bottom, three-stars-in-the-south Measured outcome: not published — see the withheld-study note above. ### Dark Cloud Cover URL: https://customtradingplatform.com/patterns/dark-cloud-cover Type: candlestick; 2 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLDARKCLOUDCOVER Definition: The mirror of the piercing line: a long up candle, then a candle that opens above the first candle’s high and closes back below the midpoint of the first body, but not below its open. Traditional claim: Traditionally read as a bearish reversal, and weaker than a bearish engulfing for the same reason. How the detection is wrong: Closing below the first candle’s open makes it an engulfing instead. Mutually exclusive by definition. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minPriorBodyAtr = 0.5; penetration = 0.5 (how far the close must push into the previous body); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5, penetration 0.6, minPriorBodyAtr 0.8 | loose: minPriorSlope 0.5, penetration 0.35, minPriorBodyAtr 0.3 | no-context: minPriorSlope not applied Confusable with: bearish-engulfing, piercing-line, bearish-counterattack Measured outcome: not published — see the withheld-study note above. ### Descending Hawk URL: https://customtradingplatform.com/patterns/descending-hawk Type: candlestick; 2 bars; bearish; reversal; requires a prior uptrend Definition: Both candles close higher than they open, but the second body sits wholly inside the first. The advance continues in name and shrinks in fact: buyers are still winning each bar and winning less of it. It is the bullish-looking sibling of the harami. Traditional claim: Read as a bearish reversal, on the reading that a contracting advance is an exhausting one. How the detection is wrong: Both bars must be white. Allowing a black second bar makes this a bearish harami, which is a different formation already in the set, and merging them would double-count the same bars under two names. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minPriorSlope = 0.5 (prior slope must be above this); minFirstBodyAtr = 0.3 Variants: strict: minPriorSlope 1, minFirstBodyAtr 0.5 | loose: minPriorSlope 0, minFirstBodyAtr 0.1 | no-context: minPriorSlope not applied Confusable with: bearish-harami, advance-block, stalled-pattern Measured outcome: not published — see the withheld-study note above. ### Doji URL: https://customtradingplatform.com/patterns/doji Type: candlestick; 1 bar; neutral; indecision; no prior context required; TA-Lib CDLDOJI Definition: A candle whose open and close are close enough together that the real body is negligible relative to the range. The session covered ground in both directions and finished roughly where it started. Traditional claim: Traditionally read as indecision rather than direction, and usually said to take its meaning from the candles around it rather than on its own. How the detection is wrong: A body of exactly zero is not required and never should be — on real data an exact-equality doji is an artifact of tick size, not of indecision. maxBodyPct is the definition. The minRangeAtr floor exists to exclude halted, illiquid and synthetic-fill bars, which otherwise dominate any naive doji count. Detection thresholds: maxBodyPct = 0.05 (body at most this share of the range); minRangeAtr = 0.1 (bar range at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxBodyPct 0.02 | loose: maxBodyPct 0.1 | no-liquidity-filter: minRangeAtr 0 Confusable with: spinning-top, dragonfly-doji, gravestone-doji, long-legged-doji, bullish-harami-cross, bearish-harami-cross, rickshaw-man, bullish-tristar, bearish-tristar Measured outcome: not published — see the withheld-study note above. ### Downside Gap Side-by-Side White Lines URL: https://customtradingplatform.com/patterns/downside-gap-side-by-side-white-lines Type: candlestick; 3 bars; bearish; continuation; requires a prior downtrend; TA-Lib CDLGAPSIDESIDEWHITE Definition: The same two side-by-side up candles, but sitting below a downward gap instead of above an upward one — which classically reverses the reading from bullish to bearish. Traditional claim: Traditionally read as a bearish continuation: the two up candles are a pause inside a decline, not a recovery, because the gap above them was never filled. How the detection is wrong: Identical candles to the upside version. Only the direction of the gap differs — which makes this pair the clearest test available of whether gap context changes anything. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minGapAtr = 0 (gap between bars at least this, in ATR); matchTolAtr = 0.08 (how closely two levels must match, in ATR); minBodyAtr = 0.3 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: maxPriorSlope -0.5 | no-context: maxPriorSlope not applied | no-gap: minGapAtr not applied | tight: matchTolAtr 0.04 Confusable with: upside-gap-side-by-side-white-lines Measured outcome: not published — see the withheld-study note above. ### Downside Gap Three Methods URL: https://customtradingplatform.com/patterns/downside-gap-three-methods Type: candlestick; 3 bars; bearish; continuation; requires a prior downtrend; TA-Lib CDLXSIDEGAP3METHODS Definition: The mirror: two down candles with a gap between them, then an up candle opening inside the second and closing inside the first. Traditional claim: Traditionally read as a bearish continuation. How the detection is wrong: See upside-gap-three-methods — the gap is filled here and survives in the tasuki version. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minGapAtr = 0 (gap between bars at least this, in ATR); minBodyAtr = 0.3 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: maxPriorSlope -0.5 | no-context: maxPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: downside-tasuki-gap, upside-gap-three-methods Measured outcome: not published — see the withheld-study note above. ### Downside Tasuki Gap URL: https://customtradingplatform.com/patterns/downside-tasuki-gap Type: candlestick; 3 bars; bearish; continuation; requires a prior downtrend; TA-Lib CDLTASUKIGAP Definition: The mirror: two down candles separated by a gap, then an up candle that closes back into the gap but does not close it. Traditional claim: Traditionally read as a bearish continuation. How the detection is wrong: The gap must survive the third candle. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minGapAtr = 0 (gap between bars at least this, in ATR); minBodyAtr = 0.3 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: maxPriorSlope -0.5 | no-context: maxPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: upside-tasuki-gap, downside-gap-three-methods Measured outcome: not published — see the withheld-study note above. ### Dragonfly Doji URL: https://customtradingplatform.com/patterns/dragonfly-doji Type: candlestick; 1 bar; bullish; reversal; no prior context required; TA-Lib CDLDRAGONFLYDOJI Definition: A candle with a negligible real body positioned at the very top of its range, leaving a long lower wick and almost no upper one. It is the limiting case of a hammer: the same silhouette with the body shrunk to nothing. Traditional claim: Traditionally read as a bullish reversal signal, and usually said to carry more weight than an ordinary doji because of where the body sits. How the detection is wrong: Overlaps with hammer by construction — a hammer with a small enough body satisfies both, and both detections are reported rather than arbitrated. The range floor exists because a near-flat illiquid bar also satisfies the body test. Detection thresholds: maxBodyPct = 0.05 (body at most this share of the range); minLowerPct = 0.6 (lower wick at least this share of the range); maxUpperPct = 0.1 (upper wick at most this share of the range); minRangeAtr = 0.1 (bar range at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxBodyPct 0.02, minLowerPct 0.75 | loose: maxBodyPct 0.1, minLowerPct 0.5 | no-liquidity-filter: minRangeAtr 0 Confusable with: doji, hammer, gravestone-doji, takuri Measured outcome: not published — see the withheld-study note above. ### Dumpling Top URL: https://customtradingplatform.com/patterns/dumpling-top Type: candlestick; 5 bars; bearish; reversal; requires a prior uptrend Definition: Five candles of small bodies whose highs rise and then fall, tracing a dome, with the last candle black and opening a window below the one before it. The rounding is the setup and the window is the confirmation; without the window it is only a quiet patch. Traditional claim: Read as a top, and one of the few classical formations that requires its own confirmation bar rather than leaving it to the reader. How the detection is wrong: The falling window is mandatory. A rounded shape alone is the most subjective formation in the vocabulary and, tested without the gap, fires constantly in any quiet range. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); maxSmallAtr = 0.5; minGapAtr = 0.1 (gap between bars at least this, in ATR); minPriorSlope = 0 (prior slope must be above this) Variants: strict: maxSmallAtr 0.35, minGapAtr 0.3 | loose: maxSmallAtr 0.7, minGapAtr 0.03 | no-context: minPriorSlope not applied Confusable with: tower-top, falling-window, stalled-pattern Measured outcome: not published — see the withheld-study note above. ### Evening Doji Star URL: https://customtradingplatform.com/patterns/evening-doji-star Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLEVENINGDOJISTAR Definition: The mirror: a long up candle, a doji gapping above it, then a down candle closing back through the first body. Traditional claim: Traditionally read as a stronger evening star. How the detection is wrong: Every evening doji star is also an evening star. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.6; maxDojiBodyPct = 0.05 (body small enough to count as a doji); penetration = 0.5 (how far the close must push into the previous body); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: minPriorSlope -0.5 | no-context: minPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: evening-star, bearish-abandoned-baby, bearish-doji-star Measured outcome: not published — see the withheld-study note above. ### Evening Star URL: https://customtradingplatform.com/patterns/evening-star Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLEVENINGSTAR Definition: The mirror of the morning star: a long up candle, a small-bodied candle clear above it, then a down candle closing back through at least half the first body. Traditional claim: Traditionally read as a bearish reversal formation, and usually paired with the morning star as its counterpart. How the detection is wrong: Mirror of morning-star. Same gap and penetration semantics. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.6; maxStarBodyRatio = 0.4; penetration = 0.5 (how far the close must push into the previous body); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5, minFirstBodyAtr 1, maxStarBodyRatio 0.3, penetration 0.6 | loose: minPriorSlope 0.5, minFirstBodyAtr 0.4, maxStarBodyRatio 0.5, penetration 0.35 | no-gap: minGapAtr not applied | no-context: minPriorSlope not applied Confusable with: morning-star, three-inside-down, bearish-abandoned-baby, evening-doji-star, upside-gap-two-crows, two-crows Measured outcome: not published — see the withheld-study note above. ### Falling Three Methods URL: https://customtradingplatform.com/patterns/falling-three-methods Type: candlestick; 5 bars; bearish; continuation; requires a prior downtrend; TA-Lib CDLRISEFALL3METHODS Definition: The mirror: a long down candle, three contained small candles, then a down candle closing below the first candle’s close. Traditional claim: Traditionally read as a bearish continuation formation. How the detection is wrong: See rising-three-methods — the same containment strictness and the same rarity. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minFirstBodyAtr = 0.6; maxMidBodyRatio = 0.6; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5, minFirstBodyAtr 1, maxMidBodyRatio 0.4 | loose: maxPriorSlope -0.5, minFirstBodyAtr 0.3, maxMidBodyRatio 0.8 | no-context: maxPriorSlope not applied Confusable with: rising-three-methods Measured outcome: not published — see the withheld-study note above. ### Falling Window URL: https://customtradingplatform.com/patterns/falling-window Type: candlestick; 2 bars; bearish; continuation; requires a prior downtrend Definition: The mirror of the rising window. The high of the second candle sits strictly below the low of the first, leaving an untraded band that classical reading treats as resistance. The pattern is considered negated when price closes back up through the window. Traditional claim: Read as a continuation signal in a downtrend, with the window acting as resistance on any rally. How the detection is wrong: Same floor as the rising window: without minGapAtr this counts tick-sized separations and measures the instrument rather than the formation. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minGapAtr = 0.15 (gap between bars at least this, in ATR); maxPriorSlope = -0.5 (prior slope must be below this) Variants: strict: minGapAtr 0.4, maxPriorSlope -1 | loose: minGapAtr 0.05, maxPriorSlope 0 | no-context: maxPriorSlope not applied Confusable with: downside-tasuki-gap, downside-gap-three-methods, bearish-island-reversal Measured outcome: not published — see the withheld-study note above. ### Fry Pan Bottom URL: https://customtradingplatform.com/patterns/fry-pan-bottom Type: candlestick; 5 bars; bullish; reversal; requires a prior downtrend Definition: The mirror of the dumpling top. Five small-bodied candles whose lows fall and then rise, tracing a bowl, with the final candle white and opening a window above the one before it. The window is the confirmation the formation requires. Traditional claim: Read as a bottom, with the gap up treated as the moment the accumulation ends and the advance starts. How the detection is wrong: The rising window is mandatory, for the same reason the dumpling top demands its falling one. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); maxSmallAtr = 0.5; minGapAtr = 0.1 (gap between bars at least this, in ATR); maxPriorSlope = 0 (prior slope must be below this) Variants: strict: maxSmallAtr 0.35, minGapAtr 0.3 | loose: maxSmallAtr 0.7, minGapAtr 0.03 | no-context: maxPriorSlope not applied Confusable with: tower-bottom, rising-window, ladder-bottom Measured outcome: not published — see the withheld-study note above. ### Gravestone Doji URL: https://customtradingplatform.com/patterns/gravestone-doji Type: candlestick; 1 bar; bearish; reversal; no prior context required; TA-Lib CDLGRAVESTONEDOJI Definition: The mirror of the dragonfly: a negligible body at the very bottom of the range, a long upper wick and almost no lower one. It is the limiting case of a shooting star. Traditional claim: Traditionally read as a bearish reversal signal, on the reasoning that everything gained during the session was given back. How the detection is wrong: Overlaps with shooting star for the same reason dragonfly overlaps with hammer. Both are reported. Detection thresholds: maxBodyPct = 0.05 (body at most this share of the range); minUpperPct = 0.6 (upper wick at least this share of the range); maxLowerPct = 0.1 (lower wick at most this share of the range); minRangeAtr = 0.1 (bar range at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxBodyPct 0.02, minUpperPct 0.75 | loose: maxBodyPct 0.1, minUpperPct 0.5 | no-liquidity-filter: minRangeAtr 0 Confusable with: doji, shooting-star, dragonfly-doji Measured outcome: not published — see the withheld-study note above. ### Hammer URL: https://customtradingplatform.com/patterns/hammer Type: candlestick; 1 bar; bullish; reversal; requires a prior downtrend; TA-Lib CDLHAMMER Definition: A single candle with a small real body sitting at the top of its range and a lower wick at least twice the body, appearing after a run of falling prices. During the session price was driven well below where it eventually closed. Traditional claim: Traditionally read as a bullish reversal signal, on the reasoning that sellers pushed price down and failed to hold it there. How the detection is wrong: Geometrically identical to a hanging man; only the prior trend separates them, which is why maxPriorSlope is a parameter rather than a hard assumption. A hammer with a near-zero body also satisfies dragonfly-doji. Both detections are reported rather than arbitrated. Detection thresholds: maxBodyPct = 0.33 (body at most this share of the range); minLowerPct = 0.5 (lower wick at least this share of the range); maxUpperPct = 0.12 (upper wick at most this share of the range); minLowerToBody = 2 (lower wick as a multiple of the body); trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this) Variants: strict: maxBodyPct 0.25, minLowerPct 0.6, maxUpperPct 0.08, maxPriorSlope -1.5 | loose: maxBodyPct 0.4, minLowerPct 0.45, maxUpperPct 0.2, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: hanging-man, inverted-hammer, dragonfly-doji, takuri Measured outcome: not published — see the withheld-study note above. ### Hanging Man URL: https://customtradingplatform.com/patterns/hanging-man Type: candlestick; 1 bar; bearish; reversal; requires a prior uptrend; TA-Lib CDLHANGINGMAN Definition: Geometrically identical to a hammer — small body at the top of the range, long lower wick — but occurring after a run of rising prices rather than falling ones. Nothing about the candle itself distinguishes the two. Traditional claim: Traditionally read as a bearish reversal signal. That the same shape is given opposite meanings depending on what preceded it is a claim the conditioning grid can test directly. How the detection is wrong: Identical geometry to a hammer. The only difference is minPriorSlope. If the conditioning grid shows no measurable difference between the two, that finding belongs on both pages. Detection thresholds: maxBodyPct = 0.33 (body at most this share of the range); minLowerPct = 0.5 (lower wick at least this share of the range); maxUpperPct = 0.12 (upper wick at most this share of the range); minLowerToBody = 2 (lower wick as a multiple of the body); trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this) Variants: strict: maxBodyPct 0.25, minLowerPct 0.6, maxUpperPct 0.08, minPriorSlope 1.5 | loose: maxBodyPct 0.4, minLowerPct 0.45, maxUpperPct 0.2, minPriorSlope 0.5 | no-context: minPriorSlope not applied Confusable with: hammer, shooting-star Measured outcome: not published — see the withheld-study note above. ### High Wave URL: https://customtradingplatform.com/patterns/high-wave Type: candlestick; 1 bar; neutral; indecision; no prior context required; TA-Lib CDLHIGHWAVE Definition: A small real body marooned between two long wicks on a bar whose range is large relative to recent volatility. Unlike a spinning top, the range itself has to be extended — that is what makes it a high wave rather than an ordinary small candle. Traditional claim: Traditionally read as a loss of direction, and often said to be more meaningful after a sustained move. How the detection is wrong: The range floor is doing the work. Without minRangeAtr this is just a spinning top, and every quiet bar qualifies. Detection thresholds: maxBodyPct = 0.15 (body at most this share of the range); minWickPct = 0.32 (either wick at least this share of the range); minRangeAtr = 1.2 (bar range at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxBodyPct 0.1, minRangeAtr 1.6 | loose: maxBodyPct 0.25, minRangeAtr 0.9 | no-range-floor: minRangeAtr 0 Confusable with: long-legged-doji, spinning-top Measured outcome: not published — see the withheld-study note above. ### Homing Pigeon URL: https://customtradingplatform.com/patterns/homing-pigeon Type: candlestick; 2 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLHOMINGPIGEON Definition: Two down candles where the second body sits wholly within the first. Structurally a harami, except that the second candle is also a down candle rather than an up one — the decline continues, but on a much reduced range. Traditional claim: Traditionally read as a bullish reversal despite both candles being down candles, on the reasoning that selling pressure visibly contracted. How the detection is wrong: A bullish harami requires the second candle to close up; a homing pigeon requires it to close down. The two are mutually exclusive, and a pattern set that reports only harami misses every one of these. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minPriorBodyAtr = 0.5; maxBodyRatio = 0.6 (body at most this, relative to the bar before); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxBodyRatio 0.4, maxPriorSlope -1.5 | loose: maxBodyRatio 0.8, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: bullish-harami, inside-bar Measured outcome: not published — see the withheld-study note above. ### Identical Three Crows URL: https://customtradingplatform.com/patterns/identical-three-crows Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLIDENTICAL3CROWS Definition: Three consecutive down candles, each closing lower, and each opening at the previous candle’s close rather than inside its body. The decline is continuous with no overnight recovery at all. Traditional claim: Traditionally read as a more severe three black crows, on the reasoning that there was never a bid to open higher. How the detection is wrong: Three black crows requires each open to sit inside the previous body; this requires it to sit at the previous close. The two are close but not nested — a crow opening mid-body is not identical. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); matchTolAtr = 0.05 (how closely two levels must match, in ATR); minBodyAtr = 0.3 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.02, minPriorSlope 1.5 | loose: matchTolAtr 0.12, minPriorSlope 0.5 | no-context: minPriorSlope not applied Confusable with: three-black-crows Measured outcome: not published — see the withheld-study note above. ### In-Neck URL: https://customtradingplatform.com/patterns/in-neck Type: candlestick; 2 bars; bearish; continuation; requires a prior downtrend; TA-Lib CDLINNECK Definition: A long down candle followed by an up candle opening below its low and closing barely at the previous close — a recovery that stops almost immediately. The weakest of the piercing family. Traditional claim: Traditionally read as a continuation, because the rally failed to reclaim anything meaningful. How the detection is wrong: Four formations share these two candles and differ only in where the second closes: on-neck at the prior low, in-neck at the prior close, thrusting inside the lower half of the body, piercing above the midpoint. Only one can be true at a time. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minPriorBodyAtr = 0.5; matchTolAtr = 0.08 (how closely two levels must match, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.04, maxPriorSlope -1.5 | loose: matchTolAtr 0.15, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: on-neck, thrusting, piercing-line Measured outcome: not published — see the withheld-study note above. ### Inside Bar URL: https://customtradingplatform.com/patterns/inside-bar Type: candlestick; 2 bars; neutral; indecision; no prior context required Definition: A candle whose entire high-to-low range falls within the previous candle’s. This is a price-action construct rather than a Japanese candlestick formation, and it is not the same thing as a harami: a harami constrains the bodies, an inside bar constrains the ranges. Neither implies the other. Traditional claim: Traditionally read as consolidation — a pause in which neither side extended the previous session’s range. How the detection is wrong: Not a Japanese candlestick formation — it is a price-action construct, and it is included because it is the range-based sibling of harami and the comparison settles a confusion the literature never addresses. An inside bar constrains high and low; a harami constrains only the bodies. Neither implies the other. Detection thresholds: minPriorRangeAtr = 0.5; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorRangeAtr 1 | no-range-floor: minPriorRangeAtr 0 Confusable with: bullish-harami, bearish-harami, outside-bar, bullish-hikkake, bearish-hikkake, homing-pigeon Measured outcome: not published — see the withheld-study note above. ### Inverted Hammer URL: https://customtradingplatform.com/patterns/inverted-hammer Type: candlestick; 1 bar; bullish; reversal; requires a prior downtrend; TA-Lib CDLINVERTEDHAMMER Definition: A single candle with a small real body at the bottom of its range and an upper wick at least twice the body, appearing after falling prices. Price reached well above the close during the session and gave the move back. Traditional claim: Traditionally read as a bullish reversal signal, though weaker than a hammer and usually said to require confirmation on the following candle. How the detection is wrong: Identical geometry to a shooting star. The pair hammer/hanging-man and the pair inverted-hammer/shooting-star are the clearest available demonstration that context, not shape, is what the classical literature is actually claiming. Detection thresholds: maxBodyPct = 0.33 (body at most this share of the range); minUpperPct = 0.5 (upper wick at least this share of the range); maxLowerPct = 0.12 (lower wick at most this share of the range); minUpperToBody = 2 (upper wick as a multiple of the body); trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this) Variants: strict: maxBodyPct 0.25, minUpperPct 0.6, maxLowerPct 0.08, maxPriorSlope -1.5 | loose: maxBodyPct 0.4, minUpperPct 0.45, maxLowerPct 0.2, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: hammer, shooting-star Measured outcome: not published — see the withheld-study note above. ### Ladder Bottom URL: https://customtradingplatform.com/patterns/ladder-bottom Type: candlestick; 5 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLLADDERBOTTOM Definition: Five candles: three consecutive down candles each closing lower, a fourth down candle that finally shows an upper wick, then an up candle that opens above the fourth candle’s open. The first sign of a bid appears in the fourth candle’s wick. Traditional claim: Traditionally read as a bullish reversal built rung by rung, with the fourth candle’s wick as the turn. How the detection is wrong: The fourth candle’s upper wick is the pattern. Without it this is four down candles and a bounce. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minBodyAtr = 0.3 (body at least this, in ATR); minFourthUpperPct = 0.15; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minFourthUpperPct 0.25, maxPriorSlope -1.5 | loose: minFourthUpperPct 0.08, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: concealing-baby-swallow Measured outcome: not published — see the withheld-study note above. ### Last Engulfing Bottom URL: https://customtradingplatform.com/patterns/last-engulfing-bottom Type: candlestick; 2 bars; bullish; reversal; requires a prior downtrend Definition: A white body fully covered by the black body after it, occurring after a fall rather than after a rise. Same shape as a bearish engulfing, opposite location, and by classical reading opposite meaning: the last selling rather than the first. Traditional claim: Read as a bottom signal, the mirror of the last engulfing top. How the detection is wrong: Shares its shape with bearish-engulfing and is separated only by the prior trend; the same warning applies as for the last engulfing top. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); maxPriorSlope = -0.5 (prior slope must be below this); minPriorBodyAtr = 0.3 Variants: strict: maxPriorSlope -1, minPriorBodyAtr 0.5 | loose: maxPriorSlope 0, minPriorBodyAtr 0.1 | no-context: maxPriorSlope not applied Confusable with: bearish-engulfing, three-outside-down, outside-bar Measured outcome: not published — see the withheld-study note above. ### Last Engulfing Top URL: https://customtradingplatform.com/patterns/last-engulfing-top Type: candlestick; 2 bars; bearish; reversal; requires a prior uptrend Definition: Mechanically identical to a bullish engulfing — a black body fully covered by the white body after it — but occurring after a rise instead of a decline. The classical reading is that the same shape carries the opposite meaning depending on where it sits: at a top it marks the last buying rather than the first. Traditional claim: Read as a top signal, and it is the clearest case in the whole vocabulary of context deciding meaning rather than shape. How the detection is wrong: This shares its shape with bullish-engulfing and is separated from it ONLY by the prior trend, so its no-context variant is meaningless by construction and it is the one formation here whose count is entirely a statement about the trend filter. Read the two together or neither. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minPriorSlope = 0.5 (prior slope must be above this); minPriorBodyAtr = 0.3 Variants: strict: minPriorSlope 1, minPriorBodyAtr 0.5 | loose: minPriorSlope 0, minPriorBodyAtr 0.1 | no-context: minPriorSlope not applied Confusable with: bullish-engulfing, three-outside-up, outside-bar Measured outcome: not published — see the withheld-study note above. ### Long-Legged Doji URL: https://customtradingplatform.com/patterns/long-legged-doji Type: candlestick; 1 bar; neutral; indecision; no prior context required; TA-Lib CDLLONGLEGGEDDOJI Definition: A candle whose body is negligible and whose wicks extend well above and below it. Price covered substantial ground in both directions and finished level. Traditional claim: Traditionally read as sharper indecision than a plain doji, on the reasoning that both sides committed and neither won. How the detection is wrong: Every long-legged doji is also a doji; the wick minimums are the only difference. A doji with one long wick and one short one is a dragonfly or gravestone instead. Detection thresholds: maxBodyPct = 0.05 (body at most this share of the range); minWickPct = 0.3 (either wick at least this share of the range); minRangeAtr = 0.5 (bar range at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxBodyPct 0.02, minWickPct 0.4 | loose: maxBodyPct 0.1, minWickPct 0.2 | no-range-floor: minRangeAtr 0 Confusable with: doji, high-wave, spinning-top, rickshaw-man Measured outcome: not published — see the withheld-study note above. ### Mat Hold URL: https://customtradingplatform.com/patterns/mat-hold Type: candlestick; 5 bars; bullish; continuation; requires a prior uptrend; TA-Lib CDLMATHOLD Definition: Five candles: a long up candle, then three small candles that drift lower but never close below the first candle’s low, then an up candle closing above the whole formation. Close kin to rising three methods, distinguished by the first pullback candle gapping up rather than opening inside. Traditional claim: Traditionally read as a strong continuation, and often cited as more reliable than rising three methods. How the detection is wrong: The difference from rising three methods is the gap on the second candle and the looser containment afterwards. If both fire on the same bars, the distinction is not doing any work. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.6; maxMidBodyRatio = 0.5; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: maxMidBodyRatio 0.8, minPriorSlope 0.5 | no-context: minPriorSlope not applied Confusable with: rising-three-methods Measured outcome: not published — see the withheld-study note above. ### Matching High URL: https://customtradingplatform.com/patterns/matching-high Type: candlestick; 2 bars; bearish; reversal; requires a prior uptrend Definition: Two consecutive up candles whose closes land within a small ATR-scaled tolerance of each other. The mirror of matching low, and like it, the repeated level is a close rather than a wick. Traditional claim: Traditionally read as resistance confirmed by two closes rather than two probes. How the detection is wrong: Matches closes, not highs. A tweezer top matches highs, and the two catch different things — this one is not in TA-Lib, which carries only the bullish half of the pair. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); matchTolAtr = 0.05 (how closely two levels must match, in ATR); minPriorBodyAtr = 0.3; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.02 | loose: matchTolAtr 0.12, minPriorSlope 0.5 | no-context: minPriorSlope not applied Confusable with: matching-low, tweezer-top Measured outcome: not published — see the withheld-study note above. ### Matching Low URL: https://customtradingplatform.com/patterns/matching-low Type: candlestick; 2 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLMATCHINGLOW Definition: Two consecutive down candles whose closes land within a small ATR-scaled tolerance of each other. Unlike a tweezer bottom, which matches lows, this matches closes — the level that held is where the market settled, not where it was probed. Traditional claim: Traditionally read as a support level confirmed by two closes rather than two wicks. How the detection is wrong: Matching closes, not matching lows. The two patterns catch different things and are frequently conflated. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); matchTolAtr = 0.05 (how closely two levels must match, in ATR); minPriorBodyAtr = 0.3; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.02, maxPriorSlope -1.5 | loose: matchTolAtr 0.12, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: tweezer-bottom, stick-sandwich, bullish-counterattack, matching-high Measured outcome: not published — see the withheld-study note above. ### Morning Doji Star URL: https://customtradingplatform.com/patterns/morning-doji-star Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLMORNINGDOJISTAR Definition: A long down candle, a doji gapping below it, then an up candle closing back through the first body. The stricter form of the morning star. Traditional claim: Traditionally read as a stronger morning star, because the middle session showed outright indecision rather than a small continuation. How the detection is wrong: Every morning doji star is also a morning star. If the third candle gaps as well, it is an abandoned baby. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minFirstBodyAtr = 0.6; maxDojiBodyPct = 0.05 (body small enough to count as a doji); penetration = 0.5 (how far the close must push into the previous body); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: maxPriorSlope -0.5 | no-context: maxPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: morning-star, bullish-abandoned-baby, bullish-doji-star Measured outcome: not published — see the withheld-study note above. ### Morning Star URL: https://customtradingplatform.com/patterns/morning-star Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLMORNINGSTAR Definition: Three candles: a long down candle, a small-bodied candle whose body sits clear of it, then an up candle that closes back through at least half of the first candle’s body. The gap between the first and second bodies is part of the classical definition and is a parameter here, because most intraday series rarely gap. Traditional claim: Traditionally read as one of the stronger bullish reversal formations, on the reasoning that selling stalled and then reversed across three sessions. How the detection is wrong: TA-Lib requires a real-body gap between the first and second candles, which minGapAtr reproduces at its default of 0. Most intraday series rarely gap, so the no-gap variant exists and the difference between the two counts is itself a publishable number. penetration is the fraction of the first body the third candle must close back through; the classical requirement is one half. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minFirstBodyAtr = 0.6; maxStarBodyRatio = 0.4; penetration = 0.5 (how far the close must push into the previous body); minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5, minFirstBodyAtr 1, maxStarBodyRatio 0.3, penetration 0.6 | loose: maxPriorSlope -0.5, minFirstBodyAtr 0.4, maxStarBodyRatio 0.5, penetration 0.35 | no-gap: minGapAtr not applied | no-context: maxPriorSlope not applied Confusable with: evening-star, three-inside-up, bullish-abandoned-baby, morning-doji-star, unique-three-river Measured outcome: not published — see the withheld-study note above. ### Northern Doji URL: https://customtradingplatform.com/patterns/northern-doji Type: candlestick; 1 bar; bearish; indecision; requires a prior uptrend Definition: One candle whose open and close are effectively equal, appearing after a rise. Nison separates northern from southern doji precisely because a doji is a statement about balance, and balance means something different after a rise than after a fall. The shape carries no direction; the location does. Traditional claim: Read as a warning at a top rather than a signal: indecision after an advance, and classically said to matter more the longer the advance. How the detection is wrong: Identical in shape to `doji` and separated from it only by the trend filter, so it must never be counted alongside plain doji as though the two were independent observations — they are the same bars, partitioned. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); maxDojiPct = 0.05 (body small enough to count as a doji); minPriorSlope = 0.5 (prior slope must be above this) Variants: strict: maxDojiPct 0.02, minPriorSlope 1 | loose: maxDojiPct 0.1, minPriorSlope 0 | no-context: minPriorSlope not applied Confusable with: doji, long-legged-doji, rickshaw-man, southern-doji Measured outcome: not published — see the withheld-study note above. ### On-Neck URL: https://customtradingplatform.com/patterns/on-neck Type: candlestick; 2 bars; bearish; continuation; requires a prior downtrend; TA-Lib CDLONNECK Definition: A long down candle followed by an up candle opening below it and closing back only as far as the previous candle’s low — less of a recovery than the in-neck. Traditional claim: Traditionally read as a continuation, and as the weakest of the four piercing-family outcomes. How the detection is wrong: Closes at the prior low rather than the prior close. See in-neck for the full family. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minPriorBodyAtr = 0.5; matchTolAtr = 0.08 (how closely two levels must match, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.04, maxPriorSlope -1.5 | loose: matchTolAtr 0.15, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: in-neck, thrusting Measured outcome: not published — see the withheld-study note above. ### Outside Bar URL: https://customtradingplatform.com/patterns/outside-bar Type: candlestick; 2 bars; neutral; reversal; no prior context required Definition: The opposite of an inside bar: this candle’s high is above the previous high and its low below the previous low. A price-action construct rather than a Japanese formation, and not the same as an engulfing, which constrains the bodies. Traditional claim: Traditionally read as a volatility expansion, with the direction taken from where the bar closes rather than from the shape itself. How the detection is wrong: An outside bar need not be an engulfing and an engulfing need not be an outside bar — one is about ranges, the other about bodies. Neither implies the other, and the counts differ substantially. Detection thresholds: minPriorRangeAtr = 0.5; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorRangeAtr 1 | no-range-floor: minPriorRangeAtr 0 Confusable with: inside-bar, bullish-engulfing, bearish-engulfing Measured outcome: not published — see the withheld-study note above. ### Piercing Line URL: https://customtradingplatform.com/patterns/piercing-line Type: candlestick; 2 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLPIERCING Definition: Two candles. The first is a long down candle. The second opens below the first candle’s low and closes back above the midpoint of the first body — but not above its open, which is what separates it from a bullish engulfing. Traditional claim: Traditionally read as a bullish reversal, weaker than an engulfing because the recovery is partial rather than complete. How the detection is wrong: If the second candle closes above the first candle’s open it is an engulfing, not a piercing line. The two are mutually exclusive by definition, and penetration is the parameter that sets the boundary. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minPriorBodyAtr = 0.5; penetration = 0.5 (how far the close must push into the previous body); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5, penetration 0.6, minPriorBodyAtr 0.8 | loose: maxPriorSlope -0.5, penetration 0.35, minPriorBodyAtr 0.3 | no-context: maxPriorSlope not applied Confusable with: bullish-engulfing, dark-cloud-cover, thrusting, in-neck, bullish-counterattack Measured outcome: not published — see the withheld-study note above. ### Rickshaw Man URL: https://customtradingplatform.com/patterns/rickshaw-man Type: candlestick; 1 bar; neutral; indecision; no prior context required; TA-Lib CDLRICKSHAWMAN Definition: A doji with long wicks on both sides where the body falls near the midpoint of the whole range. The extra constraint over a long-legged doji is the centring — the session ended precisely where it balanced. Traditional claim: Traditionally read as the most complete form of indecision available in a single candle. How the detection is wrong: Every rickshaw man is a long-legged doji; the centring test is the only difference, and it is what the maxOffsetPct parameter controls. Detection thresholds: maxBodyPct = 0.05 (body at most this share of the range); minWickPct = 0.3 (either wick at least this share of the range); maxOffsetPct = 0.1; minRangeAtr = 0.5 (bar range at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxBodyPct 0.02, maxOffsetPct 0.05 | loose: maxBodyPct 0.1, maxOffsetPct 0.18 | no-range-floor: minRangeAtr 0 Confusable with: long-legged-doji, doji Measured outcome: not published — see the withheld-study note above. ### Rising Three Methods URL: https://customtradingplatform.com/patterns/rising-three-methods Type: candlestick; 5 bars; bullish; continuation; requires a prior uptrend; TA-Lib CDLRISEFALL3METHODS Definition: Five candles: a long up candle, then three small candles that stay entirely within its high-low range, then a final up candle closing above the first candle’s close. A pause that never threatens the move. Traditional claim: Traditionally read as one of the few genuine continuation formations rather than a reversal signal. How the detection is wrong: The containment requirement is strict: if any of the three middle candles breaks the first candle’s range, it is not this pattern. Five-candle formations are rare by construction, so expect small counts. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.6; maxMidBodyRatio = 0.6; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5, minFirstBodyAtr 1, maxMidBodyRatio 0.4 | loose: minPriorSlope 0.5, minFirstBodyAtr 0.3, maxMidBodyRatio 0.8 | no-context: minPriorSlope not applied Confusable with: falling-three-methods, mat-hold Measured outcome: not published — see the withheld-study note above. ### Rising Window URL: https://customtradingplatform.com/patterns/rising-window Type: candlestick; 2 bars; bullish; continuation; requires a prior uptrend Definition: Two candles with no overlap of their ranges. The low of the second is strictly above the high of the first, leaving an untraded price band — the window. Nison treats the window as support: the classical reading is that a rising window holds and price resumes upward, and that the pattern is negated when price closes back through it. Traditional claim: Read as a continuation signal in an uptrend, with the window itself acting as support on any pullback. How the detection is wrong: A one-tick separation is not a window on any instrument with a meaningful spread, so minGapAtr floors the gap against ATR. Without that floor this fires on essentially every bar of a thin session and the count is dominated by the instrument's tick size rather than by anything a reader would call a gap. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minGapAtr = 0.15 (gap between bars at least this, in ATR); minPriorSlope = 0.5 (prior slope must be above this) Variants: strict: minGapAtr 0.4, minPriorSlope 1 | loose: minGapAtr 0.05, minPriorSlope 0 | no-context: minPriorSlope not applied Confusable with: upside-tasuki-gap, upside-gap-three-methods, bullish-island-reversal Measured outcome: not published — see the withheld-study note above. ### Shooting Star URL: https://customtradingplatform.com/patterns/shooting-star Type: candlestick; 1 bar; bearish; reversal; requires a prior uptrend; TA-Lib CDLSHOOTINGSTAR Definition: The mirror of the hammer pair: small real body at the bottom of the range, long upper wick, appearing after rising prices. Geometrically identical to an inverted hammer, and separated from it only by what came before. Traditional claim: Traditionally read as a bearish reversal signal — buyers pushed price up during the session and could not hold it. How the detection is wrong: Identical geometry to an inverted hammer; separated only by minPriorSlope. TA-Lib additionally requires a gap up from the prior body; this definition omits that requirement, because most modern intraday series rarely gap and the classical constraint would suppress most detections outside daily equities data. Detection thresholds: maxBodyPct = 0.33 (body at most this share of the range); minUpperPct = 0.5 (upper wick at least this share of the range); maxLowerPct = 0.12 (lower wick at most this share of the range); minUpperToBody = 2 (upper wick as a multiple of the body); trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this) Variants: strict: maxBodyPct 0.25, minUpperPct 0.6, maxLowerPct 0.08, minPriorSlope 1.5 | loose: maxBodyPct 0.4, minUpperPct 0.45, maxLowerPct 0.2, minPriorSlope 0.5 | no-context: minPriorSlope not applied Confusable with: hanging-man, inverted-hammer, gravestone-doji Measured outcome: not published — see the withheld-study note above. ### Southern Doji URL: https://customtradingplatform.com/patterns/southern-doji Type: candlestick; 1 bar; bullish; indecision; requires a prior downtrend Definition: The mirror of the northern doji: an open and close effectively equal, appearing after a fall. Classically read as the weaker of the pair, on the argument that a market can fall of its own weight while a rise needs buying. Traditional claim: Read as a possible bottom warning, and traditionally given less weight than the northern doji. How the detection is wrong: Same partition warning as the northern doji: these are `doji` bars split by trend, not additional observations. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); maxDojiPct = 0.05 (body small enough to count as a doji); maxPriorSlope = -0.5 (prior slope must be below this) Variants: strict: maxDojiPct 0.02, maxPriorSlope -1 | loose: maxDojiPct 0.1, maxPriorSlope 0 | no-context: maxPriorSlope not applied Confusable with: doji, long-legged-doji, rickshaw-man, northern-doji Measured outcome: not published — see the withheld-study note above. ### Spinning Top URL: https://customtradingplatform.com/patterns/spinning-top Type: candlestick; 1 bar; neutral; indecision; no prior context required; TA-Lib CDLSPINNINGTOP Definition: A candle with a small real body — small, but not negligible — and meaningful wicks above and below it. Price travelled in both directions and settled near the middle. Traditional claim: Traditionally read as indecision, and distinguished from a doji by having a body at all. How the detection is wrong: The lower body bound is what separates this from a doji; without it every doji is also a spinning top. The two wick minimums are what separate it from a hammer or shooting star, which have one long wick and one short one. Detection thresholds: minBodyPct = 0.05 (body at least this share of the range); maxBodyPct = 0.3 (body at most this share of the range); minWickPct = 0.25 (either wick at least this share of the range); minRangeAtr = 0.1 (bar range at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxBodyPct 0.2, minWickPct 0.35 | loose: maxBodyPct 0.4, minWickPct 0.15 | include-dojis: minBodyPct 0 Confusable with: doji, bullish-marubozu, bearish-marubozu, long-legged-doji, high-wave, bullish-short-line, bearish-short-line Measured outcome: not published — see the withheld-study note above. ### Stalled Pattern URL: https://customtradingplatform.com/patterns/stalled-pattern Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLSTALLEDPATTERN Definition: Three up candles, each closing higher, where the third body is a fraction of the second. The advance did not stop, it ran out of energy — which is what distinguishes it from three white soldiers. Traditional claim: Traditionally read as deliberation before a top. How the detection is wrong: Three white soldiers, advance block and stalled pattern are the same three rising candles graded by how the bodies behave: growing, shrinking gradually, or collapsing on the third. Comparing their counts on the same data is the cleanest available test of whether the distinctions carry information. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.5; maxThirdBodyRatio = 0.3; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxThirdBodyRatio 0.2, minPriorSlope 1.5 | loose: maxThirdBodyRatio 0.45, minPriorSlope 0.5 | no-context: minPriorSlope not applied Confusable with: three-white-soldiers, advance-block Measured outcome: not published — see the withheld-study note above. ### Stick Sandwich URL: https://customtradingplatform.com/patterns/stick-sandwich Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLSTICKSANDWICH Definition: Three candles — down, up, down — where the first and third close within a small tolerance of each other. The middle candle is sandwiched, and the repeated close marks a level tested twice. Traditional claim: Traditionally read as support confirmed by two identical closes either side of a failed rally. How the detection is wrong: Matching low uses two adjacent closes; stick sandwich uses the first and third of three. The tolerance parameter does the same work in both, and a generous setting makes either meaningless. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); matchTolAtr = 0.05 (how closely two levels must match, in ATR); minBodyAtr = 0.3 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.02, maxPriorSlope -1.5 | loose: matchTolAtr 0.12, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: matching-low Measured outcome: not published — see the withheld-study note above. ### Takuri Line URL: https://customtradingplatform.com/patterns/takuri Type: candlestick; 1 bar; bullish; reversal; requires a prior downtrend; TA-Lib CDLTAKURI Definition: The extreme form of the hammer: a negligible body at the top and a lower wick running most of the candle. The distinction is quantitative rather than structural, which is what makes it worth separating and testing. Traditional claim: Traditionally read as a stronger hammer, on the reasoning that a deeper rejection means a firmer floor. How the detection is wrong: Every takuri is also a hammer. If the two produce the same forward behaviour, the distinction is decorative — and that is a testable claim. Detection thresholds: maxBodyPct = 0.1 (body at most this share of the range); minLowerPct = 0.75 (lower wick at least this share of the range); maxUpperPct = 0.1 (upper wick at most this share of the range); trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this) Variants: strict: minLowerPct 0.85, maxPriorSlope -1.5 | loose: minLowerPct 0.65, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: hammer, dragonfly-doji Measured outcome: not published — see the withheld-study note above. ### Three Black Crows URL: https://customtradingplatform.com/patterns/three-black-crows Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDL3BLACKCROWS Definition: The mirror of three white soldiers: three consecutive down candles, each opening within the previous real body, each closing below the previous close, each with a short lower wick. Traditional claim: Traditionally read as a bearish signal, and often cited as one of the more reliable multi-candle formations — a claim with a sample size attached to it, which is what makes it testable. How the detection is wrong: Mirror of three-white-soldiers, including maxOpenOutsideAtr. maxLowerPct enforces the 'shaven bottom' requirement. The any-three-down-days variant exists to quantify exactly how much of the published effect survives the classical constraints. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minBodyAtr = 0.4 (body at least this, in ATR); maxLowerPct = 0.25 (lower wick at most this share of the range); atrPeriod = 14 (bars of ATR used to size the thresholds below); maxOpenOutsideAtr = 0 Variants: strict: minPriorSlope 1.5, minBodyAtr 0.7, maxLowerPct 0.15 | loose: minPriorSlope 0.5, minBodyAtr 0.2, maxLowerPct 0.4 | no-context: minPriorSlope not applied | any-three-down-days: maxLowerPct 1, minBodyAtr 0, minPriorSlope not applied, maxOpenOutsideAtr not applied Confusable with: three-white-soldiers, identical-three-crows, bearish-three-line-strike, three-stars-in-the-south Measured outcome: not published — see the withheld-study note above. ### Three Gaps URL: https://customtradingplatform.com/patterns/three-gaps Type: candlestick; 4 bars; bearish; reversal; requires a prior uptrend Definition: Four candles separated by three windows, each low above the previous high. The classical Japanese reading inverts the obvious one: three gaps in a row is not triple strength but a market that has run out of sellers to absorb, and sanku is treated as the point to take profit rather than to buy. Traditional claim: Read as exhaustion after an advance — the rare formation whose direction is the opposite of its appearance. How the detection is wrong: All three windows must clear the ATR floor. This is by construction one of the rarest formations in the set, and on any instrument that trades continuously it may not occur at all — an occurrence of zero here is a property of the market, not a failure of the rule. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minGapAtr = 0.1 (gap between bars at least this, in ATR); minPriorSlope = 0 (prior slope must be above this) Variants: strict: minGapAtr 0.3 | loose: minGapAtr 0.03 | no-context: minPriorSlope not applied Confusable with: rising-window, bearish-island-reversal, upside-gap-three-methods Measured outcome: not published — see the withheld-study note above. ### Three Inside Down URL: https://customtradingplatform.com/patterns/three-inside-down Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDL3INSIDE Definition: The mirror: a bearish harami followed by a third down candle closing below the second candle’s close. Traditional claim: Traditionally read as a confirmed bearish harami. How the detection is wrong: Overlaps with bearish-harami by construction, as three inside up does with its harami. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.5; maxBodyRatio = 0.6 (body at most this, relative to the bar before); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5, minFirstBodyAtr 0.8, maxBodyRatio 0.4 | loose: minPriorSlope 0.5, minFirstBodyAtr 0.3, maxBodyRatio 0.8 | no-context: minPriorSlope not applied Confusable with: bearish-harami, evening-star, three-outside-down Measured outcome: not published — see the withheld-study note above. ### Three Inside Up URL: https://customtradingplatform.com/patterns/three-inside-up Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDL3INSIDE Definition: A bullish harami — long down candle, small up candle contained inside it — followed by a third up candle that closes above the second candle’s close. The third candle is the confirmation the harami on its own does not have. Traditional claim: Traditionally read as a confirmed version of the harami, and usually said to be more reliable for that reason. Whether the confirmation is worth what it costs in delayed entry is exactly the kind of question a test answers. How the detection is wrong: Every three inside up contains a bullish harami, so the two detections overlap by construction. Comparing the two counts on the same data is how you price the confirmation candle. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minFirstBodyAtr = 0.5; maxBodyRatio = 0.6 (body at most this, relative to the bar before); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5, minFirstBodyAtr 0.8, maxBodyRatio 0.4 | loose: maxPriorSlope -0.5, minFirstBodyAtr 0.3, maxBodyRatio 0.8 | no-context: maxPriorSlope not applied Confusable with: bullish-harami, morning-star, three-outside-up Measured outcome: not published — see the withheld-study note above. ### Three Outside Down URL: https://customtradingplatform.com/patterns/three-outside-down Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDL3OUTSIDE Definition: The mirror: a bearish engulfing followed by a third down candle closing below the second candle’s close. Traditional claim: Traditionally read as a confirmed bearish engulfing. How the detection is wrong: Contains a bearish engulfing by construction. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minPriorBodyAtr = 0.3; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5, minPriorBodyAtr 0.5 | loose: minPriorSlope 0.5, minPriorBodyAtr 0.1 | no-context: minPriorSlope not applied Confusable with: bearish-engulfing, three-inside-down Measured outcome: not published — see the withheld-study note above. ### Three Outside Up URL: https://customtradingplatform.com/patterns/three-outside-up Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDL3OUTSIDE Definition: A bullish engulfing followed by a third up candle closing above the second candle’s close — the engulfing plus its confirmation. Traditional claim: Traditionally read as a confirmed engulfing, and often cited as one of the stronger three-candle formations. How the detection is wrong: Contains a bullish engulfing by construction. The gap between the engulfing count and this count, on the same data, is the price of waiting for confirmation. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minPriorBodyAtr = 0.3; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5, minPriorBodyAtr 0.5 | loose: maxPriorSlope -0.5, minPriorBodyAtr 0.1 | no-context: maxPriorSlope not applied Confusable with: bullish-engulfing, three-inside-up Measured outcome: not published — see the withheld-study note above. ### Three Stars in the South URL: https://customtradingplatform.com/patterns/three-stars-in-the-south Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDL3STARSINSOUTH Definition: Three consecutive down candles that shrink as they go: the first has a long body and a long lower wick, the second is smaller with a higher low, the third smaller still and contained within the second’s range. The decline continues while running out of room. Traditional claim: Traditionally read as a bullish reversal — described as one of the rarest formations in the classical set. How the detection is wrong: Three black crows makes progressively LOWER lows; this makes progressively higher ones. The two look alike at a glance and are opposites in what they claim. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minFirstBodyAtr = 0.6; minFirstLowerPct = 0.15; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: minFirstLowerPct 0.08, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: three-black-crows, concealing-baby-swallow Measured outcome: not published — see the withheld-study note above. ### Three White Soldiers URL: https://customtradingplatform.com/patterns/three-white-soldiers Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDL3WHITESOLDIERS Definition: Three consecutive up candles, each opening within the previous candle’s real body and closing above the previous close, each with a short upper wick. The opening constraint matters: three rising candles that gap apart are a different formation, and dropping it turns this into any three up days. Traditional claim: Traditionally read as a bullish reversal or continuation signal depending on where it appears, and treated as a sign of steady rather than erratic buying. How the detection is wrong: Each open must sit inside the prior real body — three rising candles that gap apart are a different formation. maxOpenOutsideAtr is how far outside the prior body an open may sit, in ATR units; at its default of 0 the classical rule is reproduced exactly. maxUpperPct enforces the classical 'shaven head' requirement; without it the pattern degenerates into any three up days, which is how most published counts are produced. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minBodyAtr = 0.4 (body at least this, in ATR); maxUpperPct = 0.25 (upper wick at most this share of the range); atrPeriod = 14 (bars of ATR used to size the thresholds below); maxOpenOutsideAtr = 0 Variants: strict: maxPriorSlope -1.5, minBodyAtr 0.7, maxUpperPct 0.15 | loose: maxPriorSlope -0.5, minBodyAtr 0.2, maxUpperPct 0.4 | no-context: maxPriorSlope not applied | any-three-up-days: maxUpperPct 1, minBodyAtr 0, maxPriorSlope not applied, maxOpenOutsideAtr not applied Confusable with: three-black-crows, advance-block, stalled-pattern, bullish-three-line-strike Measured outcome: not published — see the withheld-study note above. ### Thrusting URL: https://customtradingplatform.com/patterns/thrusting Type: candlestick; 2 bars; bearish; continuation; requires a prior downtrend; TA-Lib CDLTHRUSTING Definition: A long down candle, then an up candle that opens below its low and closes back into the body — but below the halfway mark. That single difference is what separates it from a piercing line, and it flips the traditional reading from reversal to continuation. Traditional claim: Traditionally read as a failed recovery and therefore a continuation of the decline — the same shape as a piercing line, stopped short. How the detection is wrong: Piercing line and thrusting are the same two candles distinguished only by where the second close lands. They are mutually exclusive, and the boundary is the penetration parameter. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minPriorBodyAtr = 0.5; penetration = 0.5 (how far the close must push into the previous body); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5, minPriorBodyAtr 0.8 | loose: maxPriorSlope -0.5, minPriorBodyAtr 0.3 | no-context: maxPriorSlope not applied Confusable with: piercing-line, in-neck, on-neck Measured outcome: not published — see the withheld-study note above. ### Tower Bottom URL: https://customtradingplatform.com/patterns/tower-bottom Type: candlestick; 5 bars; bullish; reversal; requires a prior downtrend Definition: The mirror of the tower top. A tall black body, three small bodies, and a tall white body of comparable size. The decline stops, the market goes quiet at the low, and a single bar takes the loss back. Traditional claim: Read as a bottom, on the reading that the quiet bars are accumulation and the closing tower is the result. How the detection is wrong: Same ATR framing as the tower top, and the same reason for testing the largest of the middle bodies rather than their average. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minTallAtr = 0.8; maxSmallAtr = 0.35; maxPriorSlope = -0.5 (prior slope must be below this) Variants: strict: minTallAtr 1.2, maxSmallAtr 0.25 | loose: minTallAtr 0.5, maxSmallAtr 0.5 | no-context: maxPriorSlope not applied Confusable with: fry-pan-bottom, morning-star, ladder-bottom Measured outcome: not published — see the withheld-study note above. ### Tower Top URL: https://customtradingplatform.com/patterns/tower-top Type: candlestick; 5 bars; bearish; reversal; requires a prior uptrend Definition: Five candles. The first is a tall white body, the last a tall black body of comparable size, and the three between them are small. The shape is a flat top bracketed by two long bars: the advance stalls, goes quiet, and is then given back in a single bar. Traditional claim: Read as a top: the market spent the quiet bars distributing, and the closing tower gives back what the opening tower gained. How the detection is wrong: Tall and small are both measured against ATR, not against each other, so the formation cannot be satisfied by five equally mediocre bars in a quiet stretch. The middle bars are tested by their largest body — testing the mean would let one long bar hide among two doji. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minTallAtr = 0.8; maxSmallAtr = 0.35; minPriorSlope = 0.5 (prior slope must be above this) Variants: strict: minTallAtr 1.2, maxSmallAtr 0.25 | loose: minTallAtr 0.5, maxSmallAtr 0.5 | no-context: minPriorSlope not applied Confusable with: dumpling-top, evening-star, stalled-pattern Measured outcome: not published — see the withheld-study note above. ### Tweezer Bottom URL: https://customtradingplatform.com/patterns/tweezer-bottom Type: candlestick; 2 bars; bullish; reversal; requires a prior downtrend Definition: Two consecutive candles whose lows sit within a small tolerance of each other, following a decline. The tolerance is expressed in ATR units rather than price, so the same definition works on any instrument. Traditional claim: Traditionally read as a support level being tested twice and holding. How the detection is wrong: Not a TA-Lib formation, and “the same low” is never exactly the same on real data — which is why the tolerance is an explicit parameter rather than an equality test. Set it too wide and every pair of candles qualifies. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); matchTolAtr = 0.05 (how closely two levels must match, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.02, maxPriorSlope -1.5 | loose: matchTolAtr 0.12, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: tweezer-top, matching-low Measured outcome: not published — see the withheld-study note above. ### Tweezer Top URL: https://customtradingplatform.com/patterns/tweezer-top Type: candlestick; 2 bars; bearish; reversal; requires a prior uptrend Definition: The mirror of the tweezer bottom: two consecutive candles whose highs sit within a small ATR-scaled tolerance of each other, following a rise. Traditional claim: Traditionally read as resistance being tested twice and rejected. How the detection is wrong: See tweezer-bottom — the tolerance parameter does all the work, and a generous setting turns this into noise. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); matchTolAtr = 0.05 (how closely two levels must match, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: matchTolAtr 0.02, minPriorSlope 1.5 | loose: matchTolAtr 0.12, minPriorSlope 0.5 | no-context: minPriorSlope not applied Confusable with: tweezer-bottom, matching-high Measured outcome: not published — see the withheld-study note above. ### Two Black Gapping URL: https://customtradingplatform.com/patterns/two-black-gapping Type: candlestick; 3 bars; bearish; continuation; requires a prior downtrend Definition: Three candles. Price gaps down into the second candle, which closes black, and the third also closes black without recovering above the second's high. The window stays open, which is the whole point: the formation is a failure to fill. Traditional claim: Read as continuation — the gap is not being repaired and the sellers who created it are still in control. How the detection is wrong: The third bar must not exceed the second's high, or the window is being repaired and the formation is a failed gap rather than a confirmed one. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); atrPeriod = 14 (bars of ATR used to size the thresholds below); minGapAtr = 0.15 (gap between bars at least this, in ATR); maxPriorSlope = -0.5 (prior slope must be below this) Variants: strict: minGapAtr 0.4 | loose: minGapAtr 0.05 | no-context: maxPriorSlope not applied Confusable with: falling-window, downside-gap-three-methods, two-crows Measured outcome: not published — see the withheld-study note above. ### Two Crows URL: https://customtradingplatform.com/patterns/two-crows Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDL2CROWS Definition: Three candles: a long up candle, a down candle whose body gaps above it, then a second down candle that opens inside the first crow and closes back down inside the original up candle’s body. The gap is opened and then closed. Traditional claim: Traditionally read as a bearish reversal — the advance gapped, failed and was retraced within two sessions. How the detection is wrong: The only thing separating this from upside gap two crows is where the third candle closes: inside the first body here, still above it there. The gap is filled in one and survives in the other, and they are mutually exclusive. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.5; minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: minPriorSlope 0.5 | no-context: minPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: upside-gap-two-crows, evening-star Measured outcome: not published — see the withheld-study note above. ### Unique Three River URL: https://customtradingplatform.com/patterns/unique-three-river Type: candlestick; 3 bars; bullish; reversal; requires a prior downtrend; TA-Lib CDLUNIQUE3RIVER Definition: Three candles: a long down candle, then a down candle whose body sits inside the first but whose low undercuts it, then a small up candle closing below the second candle’s close. The new low is made and immediately abandoned. Traditional claim: Traditionally read as a bullish reversal, and one of the more precisely specified formations in the classical set. How the detection is wrong: The second candle must undercut the first candle’s low while keeping its body inside — a combination that is easy to state and rare to find. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); maxPriorSlope = -1 (prior slope must be below this); minFirstBodyAtr = 0.6; maxThirdBodyRatio = 0.5; atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: maxPriorSlope -1.5 | loose: maxThirdBodyRatio 0.8, maxPriorSlope -0.5 | no-context: maxPriorSlope not applied Confusable with: bullish-harami, morning-star Measured outcome: not published — see the withheld-study note above. ### Upside Gap Side-by-Side White Lines URL: https://customtradingplatform.com/patterns/upside-gap-side-by-side-white-lines Type: candlestick; 3 bars; bullish; continuation; requires a prior uptrend; TA-Lib CDLGAPSIDESIDEWHITE Definition: Three candles: any candle, then an up candle gapping clear above it, then a second up candle opening at almost exactly the same price as the first. The pair sit side by side above the gap. Traditional claim: Traditionally read as a continuation — the gap held and the market consolidated above it rather than filling it. How the detection is wrong: The matching opens are what make them "side by side". Without that constraint this is just two up candles after a gap. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minGapAtr = 0 (gap between bars at least this, in ATR); matchTolAtr = 0.08 (how closely two levels must match, in ATR); minBodyAtr = 0.3 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: minPriorSlope 0.5 | no-context: minPriorSlope not applied | no-gap: minGapAtr not applied | tight: matchTolAtr 0.04 Confusable with: downside-gap-side-by-side-white-lines Measured outcome: not published — see the withheld-study note above. ### Upside Gap Three Methods URL: https://customtradingplatform.com/patterns/upside-gap-three-methods Type: candlestick; 3 bars; bullish; continuation; requires a prior uptrend; TA-Lib CDLXSIDEGAP3METHODS Definition: Three candles: two up candles with a gap between them, then a down candle that opens inside the second and closes inside the first — filling the gap exactly. Distinct from an upside tasuki gap, where the third candle stops short and the gap survives. Traditional claim: Traditionally read as a continuation: the gap was filled and the uptrend is expected to resume regardless. How the detection is wrong: Tasuki gap and gap three methods are the same three candles distinguished only by whether the gap survives. Comparing the two counts on the same data is a direct test of whether filling the gap matters at all. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minGapAtr = 0 (gap between bars at least this, in ATR); minBodyAtr = 0.3 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: minPriorSlope 0.5 | no-context: minPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: upside-tasuki-gap, downside-gap-three-methods Measured outcome: not published — see the withheld-study note above. ### Upside Gap Two Crows URL: https://customtradingplatform.com/patterns/upside-gap-two-crows Type: candlestick; 3 bars; bearish; reversal; requires a prior uptrend; TA-Lib CDLUPSIDEGAP2CROWS Definition: Three candles: a long up candle, a down candle whose body gaps above it, then a second down candle that engulfs the first crow’s body but still closes above the original up candle’s close. The gap survives; the enthusiasm does not. Traditional claim: Traditionally read as a bearish reversal in which two failed sessions above a gap signal exhaustion. How the detection is wrong: The third candle must close above the first candle’s close — if it closes below, the gap is filled and this is a different formation. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minFirstBodyAtr = 0.5; minGapAtr = 0 (gap between bars at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: minPriorSlope 0.5 | no-context: minPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: bearish-engulfing, evening-star, two-crows Measured outcome: not published — see the withheld-study note above. ### Upside Tasuki Gap URL: https://customtradingplatform.com/patterns/upside-tasuki-gap Type: candlestick; 3 bars; bullish; continuation; requires a prior uptrend; TA-Lib CDLTASUKIGAP Definition: Three candles: an up candle, a second up candle gapping clear above it, then a down candle that opens inside the second body and closes back into the gap — but not through it. The gap survives. Traditional claim: Traditionally read as a continuation, on the reasoning that an unfilled gap is unfinished business in the direction of the trend. How the detection is wrong: If the third candle closes below the first candle’s high the gap is filled and this is not the pattern. That single condition is what the whole formation rests on. Detection thresholds: trendPeriod = 5 (bars of prior trend inspected); minPriorSlope = 1 (prior slope must be above this); minGapAtr = 0 (gap between bars at least this, in ATR); minBodyAtr = 0.3 (body at least this, in ATR); atrPeriod = 14 (bars of ATR used to size the thresholds below) Variants: strict: minPriorSlope 1.5 | loose: minPriorSlope -0.5 | no-context: minPriorSlope not applied | no-gap: minGapAtr not applied Confusable with: downside-tasuki-gap, upside-gap-three-methods Measured outcome: not published — see the withheld-study note above. ## Chart formations (18) ### Ascending Triangle URL: https://customtradingplatform.com/chart-patterns/ascending-triangle Type: chart formation; 120 bars; bullish; continuation; requires a prior uptrend Definition: The two most recent confirmed swing highs sit within a tolerance band (the flat ceiling) while the two most recent swing lows are rising by at least minSepAtr. Traditional claim: Read as a bullish continuation, resolving through the horizontal ceiling. How the detection is wrong: The rising-floor floor is load-bearing: two equal highs with flat lows is a rectangle and carries no direction. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: rectangle, symmetrical-triangle, rising-wedge Firing rate: 18.04 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Bear Flag URL: https://customtradingplatform.com/chart-patterns/bear-flag Type: chart formation; 120 bars; bearish; continuation; requires a prior downtrend Definition: A falling pole followed by a consolidation whose swing highs and swing lows are both drifting UP, shallow against the pole. Traditional claim: Read as a bearish continuation, resolving downward. How the detection is wrong: As the bull flag, inverted. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR); poleBars = 20; minPoleSlope = 2; maxFlagAtr = 6 Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: bearish-pennant, rising-wedge Firing rate: 1.70 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Bearish Pennant URL: https://customtradingplatform.com/chart-patterns/bearish-pennant Type: chart formation; 120 bars; bearish; continuation; requires a prior downtrend Definition: A falling pole, then a symmetrical narrowing small against it. Traditional claim: Read as a bearish continuation. How the detection is wrong: As the bullish pennant, inverted. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR); poleBars = 20; minPoleSlope = 2; maxFlagAtr = 6 Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: symmetrical-triangle, bear-flag Firing rate: 6.81 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Bull Flag URL: https://customtradingplatform.com/chart-patterns/bull-flag Type: chart formation; 120 bars; bullish; continuation; requires a prior uptrend Definition: A pole — the prior advance measured by trendSlope — followed by a consolidation whose swing highs and swing lows are both drifting DOWN, and whose depth is small against the pole. Traditional claim: Read as a bullish continuation, resolving upward out of the drift. How the detection is wrong: The pole requirement is what makes this a flag rather than a downtrend. The drift must also stay shallow: a deep pullback is a reversal, not a flag. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR); poleBars = 20; minPoleSlope = 2; maxFlagAtr = 6 Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: bullish-pennant, falling-wedge Firing rate: 1.02 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Bullish Pennant URL: https://customtradingplatform.com/chart-patterns/bullish-pennant Type: chart formation; 120 bars; bullish; continuation; requires a prior uptrend Definition: A pole, then a symmetrical narrowing — falling highs and rising lows — small against the pole. A pennant differs from a flag only in that the consolidation CONVERGES rather than drifting. Traditional claim: Read as a bullish continuation. How the detection is wrong: Without the pole this is a symmetrical triangle, which carries no direction. The pole is the entire difference. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR); poleBars = 20; minPoleSlope = 2; maxFlagAtr = 6 Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: symmetrical-triangle, bull-flag Firing rate: 5.79 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Cup and Handle URL: https://customtradingplatform.com/chart-patterns/cup-and-handle Type: chart formation; 120 bars; bullish; continuation; requires a prior uptrend Definition: A bowl — the middle of the last three swing lows is the deepest — whose two rim highs sit within a tolerance band, followed by a handle: the most recent swing low is ABOVE both outer bowl lows and within maxHandleAtr of the rim. Traditional claim: Read as a bullish continuation, resolving above the rim. How the detection is wrong: The handle is what distinguishes this from a rounding bottom, and requiring it to sit near the rim is what stops any pullback qualifying. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR); maxHandleAtr = 8 Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: rounding-bottom, double-bottom Firing rate: 31.65 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Descending Triangle URL: https://customtradingplatform.com/chart-patterns/descending-triangle Type: chart formation; 120 bars; bearish; continuation; requires a prior downtrend Definition: The two most recent confirmed swing lows sit within a tolerance band (the flat floor) while the two most recent swing highs are falling by at least minSepAtr. Traditional claim: Read as a bearish continuation, resolving through the horizontal floor. How the detection is wrong: As the ascending triangle, inverted. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: rectangle, symmetrical-triangle, falling-wedge Firing rate: 11.23 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Double Bottom URL: https://customtradingplatform.com/chart-patterns/double-bottom Type: chart formation; 120 bars; bullish; reversal; requires a prior downtrend Definition: The two most recent confirmed swing lows sit within a tolerance band of one another, and the swing high between them stands at least minSepAtr above both. Traditional claim: Read as a bullish reversal once price closes above the peak between the two troughs. How the detection is wrong: Same as the double top inverted: without the peak-height floor this fires on any flat base. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: triple-bottom, rectangle, inverse-head-and-shoulders Firing rate: 38.12 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Double Top URL: https://customtradingplatform.com/chart-patterns/double-top Type: chart formation; 120 bars; bearish; reversal; requires a prior uptrend Definition: The two most recent confirmed swing highs sit within a tolerance band of one another, and the swing low between them is at least minSepAtr below both. The tradition reads the second failure at the same level as demand exhausting. Traditional claim: Read as a bearish reversal once price closes below the trough between the two peaks. How the detection is wrong: Two highs at the same level are not rare; the trough depth floor is what separates a double top from a flat range. A pattern with no meaningful trough is a rectangle, not a reversal. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: triple-top, rectangle, head-and-shoulders Firing rate: 49.69 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Falling Wedge URL: https://customtradingplatform.com/chart-patterns/falling-wedge Type: chart formation; 120 bars; bullish; reversal; requires a prior downtrend Definition: Both the last two swing highs and the last two swing lows are falling, but the decline in the highs exceeds the decline in the lows, so the wedge converges downward. Traditional claim: Read as a bullish reversal despite falling price. How the detection is wrong: As the rising wedge: without the convergence test this is a downtrend. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: descending-triangle, bear-flag Firing rate: 8.17 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Head and Shoulders URL: https://customtradingplatform.com/chart-patterns/head-and-shoulders Type: chart formation; 120 bars; bearish; reversal; requires a prior uptrend Definition: Of the three most recent confirmed swing highs the MIDDLE one (the head) stands at least minSepAtr above both neighbours, and the two shoulders sit within a tolerance band of each other. The neckline is the trough level between them. Traditional claim: Read as a bearish reversal once price closes below the neckline. How the detection is wrong: Requiring the shoulders to match is what stops this firing on any three descending peaks. Without it, every downtrend contains a head and shoulders. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: triple-top, double-top Firing rate: 4.08 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Inverse Head and Shoulders URL: https://customtradingplatform.com/chart-patterns/inverse-head-and-shoulders Type: chart formation; 120 bars; bullish; reversal; requires a prior downtrend Definition: Of the three most recent confirmed swing lows the MIDDLE one is at least minSepAtr below both neighbours, and the two shoulders sit within a tolerance band of each other. Traditional claim: Read as a bullish reversal once price closes above the neckline. How the detection is wrong: As the head and shoulders, inverted. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: triple-bottom, double-bottom, rounding-bottom Firing rate: 3.40 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Rectangle URL: https://customtradingplatform.com/chart-patterns/rectangle Type: chart formation; 120 bars; neutral; continuation; no prior context required Definition: The last two swing highs sit within a tolerance band of each other AND the last two swing lows do too, with the ceiling at least minSepAtr above the floor. Traditional claim: Read as a continuation, resolving in the direction of the break. How the detection is wrong: Filed neutral deliberately. A rectangle that 'predicts' the prior trend is the prior trend being measured. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: double-top, double-bottom, triple-top Firing rate: 9.87 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Rising Wedge URL: https://customtradingplatform.com/chart-patterns/rising-wedge Type: chart formation; 120 bars; bearish; reversal; requires a prior uptrend Definition: Both the last two swing highs and the last two swing lows are rising, but the advance in the lows exceeds the advance in the highs, so the wedge converges upward. Traditional claim: Read as a bearish reversal despite rising price — the tradition treats the narrowing as buying exhausting. How the detection is wrong: Convergence is the whole pattern. Rising highs and rising lows WITHOUT it is simply an uptrend, and a rule that omits the comparison labels every uptrend a wedge. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: ascending-triangle, bull-flag Firing rate: 12.25 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Rounding Bottom URL: https://customtradingplatform.com/chart-patterns/rounding-bottom Type: chart formation; 120 bars; bullish; reversal; requires a prior downtrend Definition: Like the inverse head and shoulders in skeleton — middle trough lowest — but WITHOUT the requirement that the outer two match, and with the descent and recovery required to be gradual: neither outer trough may stand more than maxBowlAtr above the middle. Traditional claim: Read as a gradual bullish reversal. How the detection is wrong: The shallowness cap is what separates a saucer from a V. Drop it and this becomes a superset of the inverse head and shoulders rather than a different shape. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR); maxBowlAtr = 6 Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: inverse-head-and-shoulders, triple-bottom, cup-and-handle Firing rate: 14.64 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Symmetrical Triangle URL: https://customtradingplatform.com/chart-patterns/symmetrical-triangle Type: chart formation; 120 bars; neutral; continuation; no prior context required Definition: The two most recent confirmed swing highs are falling and the two most recent swing lows are rising, each by at least minSepAtr, so the range is narrowing from both sides. Traditional claim: Read as a continuation of the prior trend, direction taken from the breakout rather than the shape. How the detection is wrong: Direction is NOT implied by this shape, which is why it is filed neutral. A study that assigns it one is measuring the prior trend, not the formation. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: bullish-pennant, bearish-pennant, ascending-triangle, descending-triangle Firing rate: 7.49 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Triple Bottom URL: https://customtradingplatform.com/chart-patterns/triple-bottom Type: chart formation; 120 bars; bullish; reversal; requires a prior downtrend Definition: The three most recent confirmed swing lows all sit within a tolerance band of one another, with peaks between them. Traditional claim: Read as a bullish reversal; the tradition treats it as a stronger double bottom. How the detection is wrong: As the triple top, inverted. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: double-bottom, rectangle Firing rate: 6.47 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Triple Top URL: https://customtradingplatform.com/chart-patterns/triple-top Type: chart formation; 120 bars; bearish; reversal; requires a prior uptrend Definition: The three most recent confirmed swing highs all sit within a tolerance band of one another, with troughs between them. Traditional claim: Read as a bearish reversal; the tradition treats it as a stronger double top. How the detection is wrong: Three highs within tolerance is also the definition of the upper edge of a rectangle. The distinguishing feature is the trough depth, not the peak count. Detection thresholds: pivotLeft = 3 (bars to the left of a swing); pivotRight = 3 (bars to the right before a swing is confirmed); lookback = 120 (bars searched for the swings); atrPeriod = 14 (bars of ATR used to size the thresholds below); flatTol = 0.02 (how level two points must be); minSepAtr = 1 (separation required between swings, in ATR) Variants: strict: flatTol 0.008, minSepAtr 2, pivotLeft 4, pivotRight 4 | loose: flatTol 0.05, minSepAtr 0.3, pivotLeft 2, pivotRight 2 Confusable with: double-top, rectangle Firing rate: 12.25 per 1,000 bars (BTCUSD D1) Measured outcome: not published — see the withheld-study note above. ### Pennant (parent page) URL: https://customtradingplatform.com/chart-patterns/pennant The detector has no rule for a pennant on its own: the pole it measures has a direction, so it is tested as Bullish Pennant and Bearish Pennant, each with its own page.