IndicatorOpen sourceBands and levels

Liquidity Clusters

Builds support and resistance from swing highs and lows that held more than once, and tracks how breaks of them end on this symbol.

Liquidity ClustersLiveBinance data
Loading chart…

Where are stops likely to be resting on this symbol, how much has traded at those levels, and when price breaks one, does the break usually fail or hold? Liquidity Clusters answers those three questions on the chart.

How it works

Swing highs that sit close together are grouped into a single resistance level, and nearby swing lows into a single support level. The level is the most extreme point of the group, and every swing point that formed it is marked with a dot, so you can see why the level is there.

In front of each level, the area where price traded and turned away is shaded. The two levels nearest to price get a small volume profile at their right end: the zone is cut into six slices, each as long as the volume that traded in it.

When price trades beyond a level, the level counts as broken. The indicator waits a few bars for the outcome and marks it with a small arrow on the bar where it was decided. Nothing on the chart is redrawn later.

Reading the chart

  • Red level and zone: resistance above price.
  • Green level and zone: support below price.
  • Labels describe the nearest levels. "Resistance · tested twice · 57% selling" means a resistance formed by two swing highs, where an estimated 57% of the volume traded was selling.
  • Amber arrow: a failed break. Price pushed past the level but closed back inside.
  • Blue arrow: a confirmed break. Price closed beyond the level several bars in a row.
  • The table in the top right counts how often breaks failed or held on this symbol and timeframe, split by level strength and by the volume of the breaking bar.
ExampleOn BTCUSDT 1h price is approaching a resistance tested three times, and its zone lights up. The table shows that on this chart, breaks of strong resistance have mostly failed. Price closes above the level for one bar, then back below it, and an amber arrow appears: the behaviour the table described has played out again.

Settings

Swing size (bars each side)
6
Bars needed on each side for a high or low to count as a swing point. Larger values find fewer, more significant levels.
Level width (× ATR)
0.3
How close swing points must be to join the same level.
Tests needed to draw a level
1
The minimum number of tests before a level is drawn.
Levels per side
5
The maximum number of active levels kept above and below price.
Lookback (bars)
1000
How many recent bars the levels are built from.
Bars to confirm a break
10
How long the indicator waits for the outcome after a break.
Closes beyond to confirm
2
Consecutive closes beyond the level needed to confirm a break.
Min. breaks for a percentage
5
Breaks needed before the table shows a percentage.
Proximity (× ATR)
0.5
How close price has to come before a level's zone lights up.

Limitations

The buy and sell share is estimated from where each bar closed within its own range, not from order book data. Treat it as a hint about direction, not a measurement.

The table only counts past breaks on this symbol and timeframe. Percentages are hidden until there are enough breaks, and even a pattern seen often in the past does not have to repeat on the next break.


Stoplar bu sembolde nerede birikmiş olabilir, o seviyelerde ne kadar işlem dönmüş ve fiyat bir seviyeyi kırdığında kırılım genellikle tutuyor mu, yoksa geri mi dönüyor? Liquidity Clusters bu üç soruya grafikte cevap verir.

Nasıl çalışır

Birbirine yakın tepeler tek bir direnç, birbirine yakın dipler tek bir destek seviyesinde toplanır. Seviye, o tepelerin ya da diplerin en uç noktasıdır; seviyeyi oluşturan her dönüş noktası küçük bir noktayla işaretlenir. Böylece seviyenin neden orada olduğunu görürsünüz.

Her seviyenin önünde, o dönüşte fiyatın işlem görüp geri döndüğü bölge boyanır. Fiyata en yakın iki seviyenin sağ ucunda küçük bir hacim dağılımı durur: bölge altı dilime ayrılır ve her dilim, orada dönen hacim kadar uzundur.

Fiyat bir seviyenin ötesinde işlem görünce seviye kırılmış sayılır. Gösterge sonucu birkaç bar bekler ve sonucu kırılımın karar verildiği barda küçük bir okla işaretler. Hiçbir şey sonradan yeniden çizilmez.

Nasıl okunur

  • Kırmızı seviye ve bölge: fiyatın üstündeki direnç.
  • Yeşil seviye ve bölge: fiyatın altındaki destek.
  • Etiket, en yakın seviyeleri anlatır. Grafikteki etiketler İngilizcedir: "Resistance · tested twice · 57% selling" yazıyorsa bu, iki kez sınanmış bir direnç demektir ve orada dönen hacmin tahminen %57'si satıştır.
  • Sarı ok: başarısız kırılım. Fiyat seviyeyi aştı ama yeniden içeride kapandı.
  • Mavi ok: onaylı kırılım. Fiyat seviyenin ötesinde üst üste kapandı.
  • Sağ üstteki tablo, bu sembol ve periyotta kırılımların ne sıklıkla başarısız olduğunu ve ne sıklıkla tuttuğunu, seviye gücüne ve kırılım barının hacmine göre ayrı ayrı sayar.
ÖrnekBTCUSDT 1 saatlikte fiyat, üç kez sınanmış bir dirence yaklaşıyor ve bölge parlıyor. Tablo, bu grafikte güçlü dirençlerin kırılımlarının çoğunun başarısız olduğunu söylüyor. Fiyat seviyeyi bir bar aşıp yeniden altında kapanınca sarı ok çıkar; tablonun anlattığı davranış bu kez de gerçekleşmiştir.

Ayarlar

Swing size (bars each side)
6
Bir tepenin ya da dibin dönüş noktası sayılması için iki yanında kaç bar olması gerektiği. Büyük değer daha az ama daha önemli seviye bulur.
Level width (× ATR)
0,3
Dönüş noktalarının aynı seviyede toplanması için birbirine ne kadar yakın olması gerektiği.
Tests needed to draw a level
1
Bir seviyenin çizilmesi için gereken en az sınama sayısı.
Levels per side
5
Fiyatın üstünde ve altında tutulan en çok seviye.
Lookback (bars)
1000
Seviyelerin kaç barlık geçmişten kurulduğu.
Bars to confirm a break
10
Kırılımdan sonra sonucun kaç bar beklendiği.
Closes beyond to confirm
2
Kırılımın onaylanması için seviyenin ötesinde üst üste kaç kapanış gerektiği.
Min. breaks for a percentage
5
Tabloda yüzde gösterilmeden önce gereken en az kırılım sayısı.
Proximity (× ATR)
0,5
Fiyat bir seviyeye bu kadar yaklaşınca bölge parlar.

Sınırlar

Alış ve satış payı emir defterinden değil, barın kendi aralığında nerede kapandığından tahmin edilir. Yön için bir ipucudur, kesin veri değildir.

Tablo yalnız bu sembol ve periyottaki geçmiş kırılımları sayar. Az sayıda kırılımla yüzde gösterilmez; yine de geçmişte sık görülen bir davranış bir sonraki kırılımda tekrarlanmak zorunda değildir.

Liquidity Clusters749 linesVersion 1View full code
indicator("Liquidity Clusters", "Clusters", overlay = true, max_lines_count = 500, max_labels_count = 500, max_boxes_count = 500) // ── Inputs: what is shown, then sensitivity, then style ──var showNotes = inputBool(true, "Level labels", group = "On the chart", tooltip = "Labels the two nearest levels above and below price: support or resistance, how many times price tested it, and the estimated buy or sell share of the volume traded there.")var keepSwept = inputBool(true, "Keep broken levels", group = "On the chart", tooltip = "When off, broken levels disappear from the chart but still count in the table.")var keptBroken = inputInt(6, "Broken zones kept", min = 1, max = 50, step = 1, group = "On the chart", tooltip = "How many of the latest broken zones stay on the chart, each with its outcome arrow. Older ones leave the chart but still count in the table.")var markOutcomes = inputBool(true, "Mark break outcomes", group = "On the chart", tooltip = "A small arrow where a break failed or was confirmed, pointing the way price went. Move the cursor over it for details.")var showProfile = inputBool(true, "Outcome table", group = "On the chart", tooltip = "Counts, for this symbol and timeframe, how often breaks of a level failed and how often they were confirmed.")var swingSize = inputInt(6, "Swing size (bars each side)", min = 2, max = 50, step = 1, group = "Sensitivity", tooltip = "A high or low counts as a swing point when no bar within this many bars on either side goes beyond it. It is confirmed, and drawn, this many bars after it forms. Smaller values find more, smaller levels.")var tolerance = inputFloat(0.3, "Level width (× ATR)", min = 0.05, max = 2.0, step = 0.05, group = "Sensitivity", tooltip = "Swing points closer than this join the same level. Measured in average bar ranges (ATR), so one value fits any price.")var minTouches = inputInt(1, "Tests needed to draw a level", min = 1, max = 10, step = 1, group = "Sensitivity", tooltip = "A level is drawn and counted only after this many swing points have formed it.")var perSide = inputInt(5, "Levels per side", min = 1, max = 25, step = 1, group = "Sensitivity", tooltip = "The most live levels kept above and below price. When full, the weakest and oldest one is dropped.")var lookback = inputInt(1000, "Lookback (bars)", min = 300, max = 5000, step = 100, group = "Sensitivity", tooltip = "Levels are built from the most recent bars only. More bars mean more history in the table and a slower run.")var decisionBars = inputInt(10, "Bars to confirm a break", min = 2, max = 100, step = 1, group = "Sensitivity", tooltip = "How many bars after a break the indicator waits to see whether the break fails or is confirmed.")