Matching Low Candlestick Pattern: How Equal Is Equal?
The matching low candlestick pattern is two black candles closing at the same price. How equal they have to be, and the one published tolerance.
The matching low candlestick pattern is two black candles in a row that close at the same price, drawing a flat line under a fall. It is read as a bullish reversal: sellers pushed to the same level twice and could not get through it.
That "same price" has to mean the same price to within something, and almost nobody says what. On 16,520 EURUSD 15-minute bars, matching to the tick gives 39 hits and matching within twenty ticks gives 2,027. One source does publish a tolerance, and on the same bars it puts the answer at 215.
What is a matching low candlestick pattern?
Two bearish candles, one after the other, closing level. TA-Lib implements it as CDLMATCHINGLOW and prints the rule as a formula:
Two candles i-1, i. Candle i-1: black (close<open). Candle i: black (close<open). Equal closes: close[i-1]-E <= close[i] <= close[i-1]+E, where E = the Equal average. No shadow, body-size, or gap conditions are checked.
Shadows do not matter, body sizes do not matter, there is no gap condition. Two black candles and one price level is the whole pattern.
thinkorswim states it in three lines and adds a condition. Its description is "Matching Low is a bullish trend reversal candlestick pattern consisting of two candles." Its two recognition rules are "The first candle is long and bearish and continues the downtrend" and "The second candle is also bearish and its Close price is equal to that of the first candle."
CandleScanner is stricter again. Its construction list requires both candles to have no lower shadow, candle 1 to appear "as a long line", and candle 2's "opening price is below the previous opening price". Two of those are conditions TA-Lib says out loud it does not check.
How equal do the two closes have to be?
Within 0.05 times the mean high-to-low range of the previous five candles, on TA-Lib's defaults. That number is published.
The function page names E and never defines it. The definition sits on the library's Candlestick Settings page, which explains the model in one sentence, "A candle characteristic is measured against an average of a chosen range over the previous avgPeriod bars, scaled by factor", and gives the Equal setting as:
| Setting | Range type | avgPeriod | factor |
|---|---|---|---|
| Equal | HighLow | 5 | 0.05 |
So E is one twentieth of the recent range: take the mean high-to-low range of the last five candles and multiply by 0.05. It moves with the instrument and with the timeframe, which is the point of it.
On 16,520 EURUSD 15-minute bars, counting the pairs of consecutive black candles that close level, first at flat tolerances in whole ticks and then at the library's own default:
| Tolerance | Pairs closing level |
|---|---|
| 0 ticks, to the tick | 39 |
| 1 tick | 124 |
| 2 ticks | 236 |
| 5 ticks | 565 |
| 10 ticks | 1,128 |
| 20 ticks | 2,027 |
| TA-Lib's Equal default | 215 |
The flat ladder spans 52 times from end to end. The default lands at 215, which on this series works out to a mean E of 2.93 ticks and a median of 2.51, so it behaves like a tolerance of two to three tenths of a pip rather than like an exact match.
Two other ways of scaling it, both ours: 10 per cent of ATR(14) gives 516 and 1 per cent of ATR(14) gives 44.
Does ChartLabs mark the matching low?
At that tolerance, and only once you switch it on. Matching Low is one of the 61 pattern switches in the Candlestick Patterns indicator, which you add from the chart's Indicators menu under the Patterns heading, and it draws on the price pane over your candles. It is one of the switches that starts off, so open the indicator's settings and turn Matching Low on after you add it.
It then uses the Equal default above, 0.05 times the mean high-to-low range of the previous five candles, and that tolerance cannot be changed in the indicator. Each hit gets an ML beside the bar, below the low, because the pattern only ever reads bullish. Bearish and neutral patterns in the same indicator put their code above the bar's high.
Why a scaled tolerance beats a tick count
Because a tick count tells you about the quote convention and a scaled threshold tells you about the pattern. At the tick, a German index looks thirteen times rarer than EURUSD on roughly the same number of bars. At TA-Lib's tolerance it is slightly more common.
| Cell | Bars | Level to the tick | At TA-Lib's Equal default | Mean E, in ticks |
|---|---|---|---|---|
| EURUSD M15 | 16,520 | 39 | 215 | 2.93 |
| EURUSD H1 | 4,130 | 6 | 74 | 6.00 |
| EURUSD H4 | 1,068 | 1 | 19 | 12.01 |
| EURUSD D1 | 208 | 0 | 3 | 30.02 |
| German index M15 | 15,181 | 3 | 273 | 185.14 |
| German index H1 | 3,897 | 0 | 63 | 367.06 |
| German index H4 | 1,041 | 0 | 8 | 756.45 |
| German index D1 | 207 | 0 | 1 | 1,775.64 |
The inputs behind that table and every other count here: EURUSD and a euro-quoted German index, 1 January to 31 August 2026, aggregated from 1-minute bars to the four timeframes shown, prices compared in whole ticks. The two series are 246,778 and 225,951 one-minute bars, 472,729 together. Both come from our cleaned data, sourced from Dukascopy at tick level where it is available, cleaned to remove anomalies and converted to 1-minute candles as the lowest timeframe. The daily rows are 208 and 207 bars, which is eight months, so a zero there is a small sample rather than a finding. Daily bars cut at 00:00 UTC, which is where ChartLabs cuts them. Counted on that cut, the EURUSD daily series holds 62 pairs of consecutive black candles.
Nobody else gives you a number. thinkorswim says "equal". StockGro says "identical, or almost identical". CandleScanner says both closes need to be "exactly at the same level", and in the same breath notes that Bulkowski "relaxed this requirement what resulted in a significantly higher number of recognized patterns" without saying how much higher. On these bars, relaxing from the tick to TA-Lib's default is 39 to 215, and relaxing to twenty ticks is 39 to 2,027. Whichever you pick, write it down before you count anything.
Is the matching low bullish or bearish?
Bullish, in TA-Lib, thinkorswim and CandleScanner alike, and TA-Lib never emits a bearish signal: its output is "+100 when the pattern is present, 0 otherwise. Only +100 is ever emitted (matching low is always bullish); never -100".
The explainer pages are split, and two of them are split inside themselves. India Infoline opens one page with "A Matching Low candlestick pattern is a bearish reversal pattern that occurs on a candlestick chart" and then describes a bullish event underneath it: "The main assumption behind the Matching Low candlestick pattern is that the current selling is going to end, indicating that the stock has hit its bottom price or the support level." Kotak Neo carries the same pair of claims, calling it "A bullish trend reversal pattern with two bearish candlesticks" in the body and "The bearish reversal provides traders with hidden information" in its answers section. Several of these pages are close paraphrases of each other, so what looks like independent agreement is partly one text with the label changed.
The construction is something a backtest can check and the label is not. Count the pattern, record what you counted, and leave the direction to the context you found it in.
Is the matched close support or resistance?
Support. Two closes at the same price under a decline are a level sellers reached twice and did not break, which is a floor. TA-Lib calls a hit a "shared support close after two down candles", and StockGro says the matching closes create "a clear horizontal line of support".
Two pages call it resistance in the same sentence as they call the pattern bullish. CandleScanner: "The pattern is a bullish reversal one and appears in a downtrend. It should be confirmed on the following candles. Its first line acts as a resistance area." Cryptohopper: the second candle "closes at the same level as the previous candle, therefore, generating a resistance." A bullish reversal off a floor does not rest on resistance, so take the support reading and move on.
Do the candles need to have no lower shadow?
Not in either formula.
CandleScanner requires it on both candles and names the family: "Having two candles without lower shadows in a row (i.e. Closing Black Marubozu or Black Marubozu), closing at the same price, is an unusually rare situation." StockGro describes the requirement as history: a classic matching low has no lower shadow on either candle, and "in practice, many analysts accept patterns with small lower shadows, as long as the two closing prices match." TA-Lib excludes it in writing, in the sentence quoted above.
On the same EURUSD 15-minute bars, counted across every pair of consecutive black candles:
| Condition | Pairs |
|---|---|
| No lower shadow on candle 1 | 258 |
| No lower shadow on candle 2 | 261 |
| No lower shadow on both | 20 |
| Closes level to the tick | 39 |
| Both of the above at once | 0 |
Twenty pairs with no lower shadows, thirty-nine pairs closing level, and not one pair in both sets. CandleScanner's full rule set, which also wants candle 1 long and candle 2 opening below candle 1's open, is 0 on this cell and 0 in all eight cells. Loosen only the tolerance, to ten ticks, and it reaches 1.
thinkorswim's extra condition costs less but still costs half: requiring candle 1 to be long takes the 39 exact ties to 20. Cryptohopper's addition, that candle 2 "has a smaller body", costs almost nothing, 39 to 35.
Is there a matching high?
It depends which tool you ask. CandleScanner names it as this pattern's mirror, listing "Opposite pattern: Matching High", and carries a Matching High entry on its supported-patterns page. TA-Lib does not have the function: its own index of every CDL function lists CDLMATCHINGLOW and no CDLMATCHINGHIGH, and the See Also link on the matching low page points at a page that does not exist.
How often does a matching low print?
Rarely, and the exact answer depends entirely on your tolerance.
Ours, from the table above: 39 exact ties on the EURUSD 15-minute series, down to zero on both daily series, and 215 once TA-Lib's own tolerance is applied.
CandleScanner is the only source here that counts. It ran its scanner on daily candles for 502 S&P 500 symbols from 1 July 1995 to 30 June 2015, 2,236,421 candles in all, and found 100 occurrences, an average of one every 22,364.2 candles. On the five-year window from 1 July 2010 it found 2 in 614,034 candles. Those are daily US stock bars from a window that ended eleven years ago, so they cannot be pooled with intraday forex, but they give you the order of magnitude.
All of these are occurrence counts under a published rule. They say nothing about what the market did next.
Does the matching low only happen in illiquid markets?
CandleScanner says so: "Such configuration is possible only in the markets that are not liquid. In practice, the Matching Low is so rare and occurring almost exclusively in illiquid markets, that its further analysis would be rather theoretical."
Tested on EURUSD, that claim holds for the pattern it describes and does not transfer to the one TA-Lib ships.
The configuration CandleScanner means is two candles with no lower shadows closing at exactly the same price. On eight months of EURUSD, across four timeframes, that happened zero times. Its claim survives the test.
The pattern TA-Lib implements is two black candles closing within E. That happened 215 times on the EURUSD 15-minute series alone, in a market nobody calls illiquid. The two sentences describe two different patterns under one name.
How do you test the matching low?
Four decisions, as numbers, before you count:
- The tolerance on the two closes: a flat tick count or a threshold scaled to the recent range, and which. On the EURUSD 15-minute series that choice runs from 39 to 2,027.
- Whether candle 1 must be long, and over what window its average body is taken. That is 39 to 20 at the tick.
- Whether lower shadows are allowed. Forbidding them on both candles takes the count to zero.
- Whether candle 2 must open below candle 1's open.
The first decision moves the count more than the other three together, so keep the chain rather than one total: black pairs, then level closes, then each extra rule, each with its symbol, timeframe, date range and series length beside it. Record the direction label you are testing against too, since the sources do not agree on one.
The built-in Matching Low switch gives you TA-Lib's tolerance and nothing else, and there is no scanner and no price alerts. For any other tolerance, write the rule yourself as an indicator in the Pine Script editor, starting from "Example: Mark bars by a rule" on the Pine Scripts tab. That works as long as the script spells the pattern out: it can compare the two closes against whichever tolerance you set and mark the bar with plotshape or a label, and the tick tolerance and the scaled one can sit in the same pane as two separate plots. Pine does not backtest. The bar-by-bar replay on cleaned data underneath is what lets two readings of one rule be counted on identical bars. For a pattern this rare, stepping through it by hand is the only way to see one at all, which is the argument in manual backtesting builds better traders. Why the same tolerance behaves differently on a pair and on an index is covered in the forex backtesting guide, and the method underneath all of it is in the beginner's guide to backtesting a strategy.
Which source gives you what
| Source | What you get from it |
|---|---|
| TA-Lib | The formula, and the only published number for "equal", on its Candlestick Settings page. It does not verify the downtrend its bullish reading assumes. |
| thinkorswim | A three-line rule set filed under bullish only, with no default for its length or trend setup inputs, so its own "long" is unquantified. |
| CandleScanner | The strictest construction list, a named opposite pattern and a published occurrence count with its date range. No tolerance for "the same level", and it calls the matched close resistance in the same breath as a bullish reversal. |
Facts there come from each vendor's own page. Which one fits depends on whether you want a formula, a rule set or the reps.
The two neighbours worth knowing
The same equal-close condition on two opposite-coloured candles is the counterattack line, and three black candles with the middle one closing level is the stick sandwich. Both carry their own arguments about tolerance.
Next step
Pick your tolerance, write it next to the count, and run it on a stretch of history you have not studied. Then run it again at TA-Lib's default and look at both numbers together.
Start a free trial and count it on bars you have never seen.
Related Topics
Related
Backtesting a Trading Strategy: A Beginner's Guide
What backtesting is, why it matters, and how to run one step by step: defining your rules, choosing clean historical data, stepping through the chart trade by trade, logging results, and reading the metrics that tell you whether your strategy has a real edge.
Forex Backtesting: Test Your Strategy on Real Data
A practical guide to backtesting forex strategies: why session dynamics, spread variation, and pair-specific behavior change your results, what clean historical data actually means, and a five-step process for testing a strategy before you risk real capital.
Manual Backtesting Builds Better Traders
Stepping through historical charts by hand teaches what an automated backtest report cannot: pattern recognition, what a normal drawdown feels like, and the discipline to follow your own rules when it is uncomfortable.