Trik paling ngebut buat nangkap breakout yang baru mau meledak itu simpel: pantau fase kompresi volatilitas ekstrem yang diiringi akumulasi volume tersembunyi, persis sebelum harganya terbang.
Masalah Klasik: Kenapa Lu Selalu Beli di Pucuk?
Semua trader pasti pernah ngalamin momen apes ini. Pas buka exchange, kelihatan ada koin lagi pom-pom +25% dalam dua jam terakhir. Tanpa mikir panjang lu langsung HAKI/FOMO buka posisi long, dan… tepat tiga menit kemudian grafiknya langsung terjun bebas. Selamat, lu resmi jadi likuiditas buat paus yang udah masuk diam-diam dari bawah.
Kebanyakan ritel itu geraknya kayak domba: baru bereaksi pas barangnya udah jalan. Pas koinnya udah terbang tinggi, notifikasi bot berisik, dan grup-grup Telegram udah rame teriak "To the moon!", smart money justru lagi sibuk jualan alias *dumping* barang mereka ke market order lu. Biar lu gak terus-terusan jadi "donatur" profit orang lain, lu wajib belajar cara masuk ke aset pas grafiknya lagi kelihatan ngebosenin banget dan volatilitasnya bener-bener "mati".
Mekanisme Pasar: Apa yang Sebenarnya Terjadi Sebelum Pump Impulsif?
Market itu siklusnya cuma muter di dua fase: akumulasi (kompresi) dan distribusi (ekspansi). Ibarat per, lu gak bisa meres per itu terus-menerus—sekali lepas pasti mental kenceng.
Pas market maker atau big fund lagi nyicil muatan di suatu altcoin, mereka gak bakal ngebiarin harganya naik dulu. Kalau naik, *average entry* mereka jadi jelek. Makanya, mereka bakal "nyapu" semua *supply* dengan halus di *range* harga yang sangat sempit. Di momen ini, struktur chart bakal nunjukin tanda-tanda berikut:
- Penyempitan Amplitudo: Selisih antara harga tertinggi (high) dan terendah (low) harian makin mengecil drastis.
- Historical Volatility (HV) Anjlok: Chart berubah jadi kayak "gergaji" datar atau *sideways* super tipis.
- Order Book Kering: Antrean bid/ask dari ritel makin tipis atau di-cancel, pasar bener-bener hening.
- Anomali Volume Delta: Harga kelihatan diam di tempat, tapi di dalam candle yang sempit itu tiba-tiba ada *market buy* segede gaban atau lonjakan tajam pada Relative Volume (RVOL).
Begitu *circulating float* (koin bebas di pasar) habis diserap dari order book, bakal terjadi vakum likuiditas. Dorongan belian cuma $50k–$100k via market order aja udah sanggup bikin harganya meroket ke langit, gara-gara udah gak ada tembok limit order tebal yang menahan.
Analisis Komparatif Metrik buat Screening
Daripada gempor mantau 500 chart satu per satu secara manual, mending kita set filter berdasarkan deviasi teknikal berikut:
| Metrik | Nilai "Per Tertekan" (Kompresi) | Nilai "Ledakan" (Breakout) | Bahaa Cuan-nya (Artinya Apa Bang Messi?) |
|---|---|---|---|
| BB Width (20, 2) | < 0.03 - 0.05 | > 0.15 | Volatilitas udah mampet maksimal, lebar pita Bollinger Bands berada di titik terendah dalam 14–30 hari. |
| RVOL (Relative Vol) | > 2.2 saat squeeze | > 5.0 | Harga lagi *sideways* parah, tapi volume 2-3x lipat lebih rame dari biasanya. Ada yang lagi "nyedot" order book diem-diem. |
| Keltner / BB Ratio | Di dalam kanal | Tembus batas kanal | Bands Bollinger masuk sepenuhnya ke dalam Keltner Channel (pola klasik TTM Squeeze). |
| Funding Rate | Sekitar 0.00% atau negatif | Lonjakan ekstrem (+) atau (-) | Ritel belum ngeh apa yang lagi terjadi. Belum ada penumpukan leverage ke salah satu sisi. |
| Open Interest (OI) | Stabil atau naik perlahan | Meroket tajam | OI terus bertambah padahal harga flat — ini tandanya duit gede lagi masuk, bukan sekadar ritel iseng. |
Algoritma Screening Cepat 30 Detik
Buat lu yang pake screener pro (TradingView, Coinglass, ScalpStation, atau bikin script sendiri), begini checklist ringkasnya:
- Sortir berdasarkan BBW (Bollinger Bands Width): Pakai timeframe 15m atau 1h. Urutkan list dari nilai terkecil ke terbesar.
- Filter Volume (24h): Buang koin-koin micin/shitcoin mati yang volume harian di bawah $5M–$10M (likuiditasnya ampas, lu bisa kena slippage parah pas mau exit).
- Cek Konfirmasi RVOL / OI: Cari koin yang BBW-nya ada di jajaran teratas (paling mampet), tapi RVOL di TF 1h atau 15m mendadak melonjak di atas 200-300%.
- Evaluasi Struktur Chart: Buka chart-nya. Kalau kelihatan *sideways* super ketat di rentang 1-1.5% diiringi perataan mendadak pada *cumulative volume delta*—koin itu fix dalam kondisi siap meledak.
Python Aggregator Pro (Production-Ready)
Ni script Python siap pakai buat nge-scan anomali secara otomatis. Script ini nge-fetch data futures via ccxt, ngitung TTM Squeeze + RVOL, terus nge-print list koin yang udah mateng dan siap breakout langsung ke konsol lu.
import asyncio
import ccxt.async_support as ccxt
import pandas as pd
import numpy as np
# Ограничение количества одновременных запросов
MAX_CONCURRENT_REQUESTS = 20
async def analyze_market(exchange, symbol, semaphore):
async with semaphore:
try:
# Запрашиваем 100 свечей на 15-минутном таймфрейме
ohlcv = await exchange.fetch_ohlcv(
symbol,
timeframe='15m',
limit=100
)
if not ohlcv or len(ohlcv) < 50:
return None
df = pd.DataFrame(
ohlcv,
columns=['time', 'open', 'high', 'low', 'close', 'volume']
)
# ===== Bollinger Bands (20, 2) =====
df['sma'] = df['close'].rolling(window=20).mean()
df['std'] = df['close'].rolling(window=20).std()
df['bb_upper'] = df['sma'] + (df['std'] * 2)
df['bb_lower'] = df['sma'] - (df['std'] * 2)
# Защита от деления на 0
df['bb_width'] = np.where(
df['sma'] != 0,
(df['bb_upper'] - df['bb_lower']) / df['sma'],
np.nan
)
# ===== Relative Volume (RVOL) =====
df['vol_sma'] = df['volume'].rolling(window=20).mean()
# Защита от деления на 0
df['rvol'] = np.where(
df['vol_sma'] != 0,
df['volume'] / df['vol_sma'],
np.nan
)
# Заменяем inf на NaN
df.replace([np.inf, -np.inf], np.nan, inplace=True)
# Проверяем, что данных достаточно
if len(df) < 52:
return None
# Последняя закрытая свеча
last_width = df['bb_width'].iloc[-2]
last_rvol = df['rvol'].iloc[-2]
last_close = df['close'].iloc[-2]
# Проверка на NaN
if pd.isna(last_width) or pd.isna(last_rvol):
return None
# Минимальная ширина полос за предыдущие 50 свечей
# НЕ включая анализируемую свечу
historical_widths = df['bb_width'].iloc[-52:-2]
if historical_widths.isna().all():
return None
min_width_50 = historical_widths.min()
# Условия поиска
is_squeezed = last_width <= (min_width_50 * 1.15)
has_volume_spike = last_rvol >= 2.5
if is_squeezed and has_volume_spike:
return {
'symbol': symbol,
'close': float(last_close),
'bb_width': round(float(last_width), 4),
'rvol': round(float(last_rvol), 2)
}
except Exception as e:
print(f"[ERROR] {symbol}: {e}")
return None
async def main():
exchange = ccxt.binance({
'enableRateLimit': True,
'options': {
'defaultType': 'future'
}
})
semaphore = asyncio.Semaphore(MAX_CONCURRENT_REQUESTS)
try:
await exchange.load_markets()
# Только USDT perpetual futures
symbols = [
symbol
for symbol in exchange.symbols
if symbol.endswith('/USDT:USDT')
]
print(f"[*] Сканирование {len(symbols)} пар на фьючерсном рынке...")
tasks = [
analyze_market(exchange, symbol, semaphore)
for symbol in symbols
]
results = await asyncio.gather(*tasks)
hot_targets = [
result
for result in results
if result is not None
]
# Сортировка по RVOL
hot_targets.sort(
key=lambda x: x['rvol'],
reverse=True
)
print("\n=== НАЙДЕННЫЕ МОНЕТЫ ПОД ИМПУЛЬС ===")
if not hot_targets:
print("Совпадений не найдено.")
return
print(
f"{'Символ':<18} | "
f"{'Цена':<15} | "
f"{'BB Width':<10} | "
f"{'RVOL':<8}"
)
print("-" * 65)
for target in hot_targets:
print(
f"{target['symbol']:<18} | "
f"{target['close']:<15.8f} | "
f"{target['bb_width']:<10} | "
f"{target['rvol']:<8}"
)
finally:
await exchange.close()
if __name__ == '__main__':
asyncio.run(main())Risk Management & Eksekusi Entry: Biar Gak Rungkad Kena Fakeout
Nemu pola kompresi itu baru separuh jalan. Separuh perjuangan lagi tuh gimana caranya biar gak kena *stop loss* konyol pas paus lagi bikin *Shakeout* (fake breakout buat nge-sweep likuiditas sebelum jalan aslinya).
Jangan *HAKI/Market Order* Sebelum Ada Konfirmasi: Nungguin squeeze bukan berarti main hajar kanan membabi buta. Masuklah pake limit order di area bawah range *sideways* (kalau buat spot akumulasi), atau tunggu konfirmasi (candle 5m/15m *close* sempurna DI LUAR pita Bollinger Bands barengan sama lonjakan volume).
Perhitungan Stop Loss:
- Jangan asal pasang SL pake perasaan atau sekadar saklek fixed 1%.
- Manfaatin indikator ATR (Average True Range). Pasang SL di jarak 1.5 * ATR dari titik *entry*, di balik area batas akumulasi lawan.
Take Profit (TP) Berjenjang:
- TP1 (50% Posisi): Amankan di jarak impuls pertama yang setara sama lebar area akumulasi (RR minimal 1:2). Sisanya pasang Stop Loss in Profit (BEP).
- TP2 (50% Posisi): Biarin sisanya *run* pake *trailing stop* ikutan EMA9/EMA21 di TF 15m selama tren aslinya masih jalan.
Antisipasi Fake Squeeze: Kalau harga sempet jebol area konsolidasi tapi volumenya mendadak loyo dan candle berikutnya balik lagi masuk ke dalam *range*—itu murni manipulasi. Gak usah sok-sokan *average down*, langsung *cut loss* aja tanpa nyesel.
Inget baik-baik: impuls asli habis squeeze tuh geraknya instan dan gak ngasih waktu buat mikir. Kalau harga udah breakout tapi malah *stuck* dan ragu-ragu, mending buang posisinya.
Layer "Alpha" Lanjutan: Sinyal Tersembunyi yang Gagal Dilihat 95% Trader
Mayoritas screener cuma nyari kompresi harga biasa. Tapi sekadar kompresi doang seringnya bikin kita kena whipsaw alias choppy—stop loss kesapu bolak-balik di kedua sisi. Buat ndongkrak winrate ke level 75-80%, lu butuh lapisan filter kedua: analisis konteks dari pasar derivatif.
1. Ketidakseimbangan Open Interest (OI) & Funding Rate
"Piringan per" yang sempurna terbentuk pas harga kejebak di area konsolidasi super sempit, tapi ada aktivitas anomali di pasar futures:
- Skenario Short Squeeze: Harga ngendap di range tipis 1%. Open Interest (OI) melonjak 15-20% cuma dalam hitungan jam. Funding Rate minus parah (misal: -0.04%). Artinya, ritel lagi kebelet ngeshort di area sideway karena ngira harga bakal jebol ke bawah. Market Maker ngeliat tembok stop loss dan likuidasi bertumpuk di atas, lalu nembakin impuls ke arah sebaliknya.
- Skenario Long Squeeze: Kebalikan total. OI naik, funding rate bengkak ke area positif (+0.05% ke atas), tapi harga malah jalan di tempat. Di atas udah nggak ada likuiditas—impuls bakal banting ke bawah buat nyapu posisi long yang keteledoran.
2. Kaskade Kompresi Multi-Timeframe (MTF Cascade)
Impuls di timeframe M15 paling cuma ngasih gerak 2-4%. Tapi impuls yang barengan sama kompresi di H1 dan H4 bisa ngasilin reli tanpa koreksi sebesar 15% sampai 50%.
Cari koin yang indikator BB Width-nya ada di persentil 5% terbawah selama 30 hari terakhir di H4, tapi di M15 detik ini juga lagi ada lonjakan volume signifikan (RVOL > 3.0). Ini momen pas timeframe kecil ngelepas pin granat milik timeframe besar.
Script Pine Script Siap Pakai (TradingView v5)
Kalau lu lebih suka memvisualisasikan sinyal screener langsung di chart TradingView, langsung rakit indikator ini. Indikator ini nggarisbawahi area kompresi volatilitas (pas Bollinger Bands masuk ke dalam Keltner Channel) dan ngasih alert tiap ada anomali volume.
//@version=5
indicator("Quant Squeeze & Volume Trigger [EXPERT v2]", overlay=true, max_labels_count=500)
// ======================================================
// Pengaturan
// ======================================================
groupBB = "Bollinger Bands"
groupKC = "Keltner Channels"
groupVOL = "Volume"
groupTREND = "Trend Filter"
bbLength = input.int(20, "Panjang BB", minval=1, group=groupBB)
bbMult = input.float(2.0, "Pengali BB", minval=0.1, group=groupBB)
kcLength = input.int(20, "Panjang KC", minval=1, group=groupKC)
kcMult = input.float(1.5, "Pengali KC", minval=0.1, group=groupKC)
rvolThreshold = input.float(2.2, "Ambang Batas RVOL (x)", minval=0.1, group=groupVOL)
emaLength = input.int(200, "EMA Tren", minval=1, group=groupTREND)
showLongs = input.bool(true, "Tampilkan LONG", group=groupTREND)
showShorts = input.bool(true, "Tampilkan SHORT", group=groupTREND)
// ======================================================
// Bollinger Bands
// ======================================================
[bbMiddle, bbUpper, bbLower] = ta.bb(close, bbLength, bbMult)
// Proteksi pembagian dengan 0
bbWidth = bbMiddle != 0 ? (bbUpper - bbLower) / bbMiddle : na
// ======================================================
// Keltner Channels
// ======================================================
kcMa = ta.ema(close, kcLength)
// ATR lebih handal untuk Keltner
kcAtr = ta.atr(kcLength)
kcUpper = kcMa + (kcAtr * kcMult)
kcLower = kcMa - (kcAtr * kcMult)
// ======================================================
// Relative Volume
// ======================================================
volSma = ta.sma(volume, 20)
rvol = (not na(volSma) and volSma > 0) ? volume / volSma : na
// ======================================================
// Logika TTM Squeeze
// ======================================================
// Bollinger sepenuhnya di dalam Keltner
isSqueezed = bbUpper < kcUpper and bbLower > kcLower
// Apakah baru saja squeeze
wasSqueezed = isSqueezed[1]
// Lepas dari squeeze
squeezeReleased = wasSqueezed and not isSqueezed
// ======================================================
// Filter Tren
// ======================================================
emaTrend = ta.ema(close, emaLength)
bullTrend = close > emaTrend
bearTrend = close < emaTrend
// ======================================================
// Konfirmasi Breakout
// ======================================================
// Konfirmasi volume
volumeConfirmed = not na(rvol) and rvol >= rvolThreshold
// Konfirmasi harga
bullBreakout = close > bbUpper
bearBreakout = close < bbLower
// ======================================================
// Logika Anti-Spam
// ======================================================
// Mencegah sinyal beruntun
var int lastLongBar = na
var int lastShortBar = na
cooldownBars = 10
canLong =
na(lastLongBar) or
(bar_index - lastLongBar > cooldownBars)
canShort =
na(lastShortBar) or
(bar_index - lastShortBar > cooldownBars)
// ======================================================
// Sinyal Akhir
// ======================================================
longSignal =
showLongs and
barstate.isconfirmed and
squeezeReleased and
volumeConfirmed and
bullBreakout and
bullTrend and
canLong
shortSignal =
showShorts and
barstate.isconfirmed and
squeezeReleased and
volumeConfirmed and
bearBreakout and
bearTrend and
canShort
if longSignal
lastLongBar := bar_index
if shortSignal
lastShortBar := bar_index
// ======================================================
// Visualisasi
// ======================================================
// Warna latar saat squeeze
bgcolor(
isSqueezed
? color.new(color.orange, 88)
: na,
title="Squeeze Background"
)
// EMA Tren
plot(
emaTrend,
title="EMA Trend",
color=color.blue,
linewidth=2
)
// LONG
plotshape(
longSignal,
title="Sinyal LONG",
style=shape.triangleup,
location=location.belowbar,
color=color.lime,
size=size.small,
text="LONG"
)
// SHORT
plotshape(
shortSignal,
title="Sinyal SHORT",
style=shape.triangledown,
location=location.abovebar,
color=color.red,
size=size.small,
text="SHORT"
)
// ======================================================
// Alert
// ======================================================
alertcondition(
longSignal,
title="LONG Breakout",
message="LONG breakout detected on {{ticker}}"
)
alertcondition(
shortSignal,
title="SHORT Breakout",
message="SHORT breakout detected on {{ticker}}"
)Anatomi Jebakan: Membedakan Breakout Valid dan Shakeout Fakeout
Bandar / Smart Money paham betul di mana area stop loss para pemula yang ngedagangin squeeze volatilitas. Makanya sekitar 40% kasus sebelum pergerakan asli dimulai, mereka ngebikin "fakery" alias tusukan jahat (Spring/Upthrust).

Cara biar lu nggak kena jebakan betmen ini:
Pantau Delta pada candle tusukan tersebut. Kalau harga nembus batas bawah akumulasi tapi candlenya ngebentuk ekor panjang di bawah, sementara Cumulative Delta ngeliatin dorongan beli agresif via market order (candle merah tapi deltanya hijau)—ini namanya Absorpsi Pasif (Absorption). Buyer limit besar lagi nampung semua jualan stop loss ritel.
Rule 3 Candle: Impuls asli nggak bakal balik lagi ke dalam range squeeze. Kalau habis breakout ternyata di candle pertama atau kedua harganya malah ambles masuk balik ke area sideway, langsung cutloss tanpa alasan. Itu murni sweeping likuiditas.
Checklist Pra-Trading (5 Detik Sebelum Eksekusi)
Sebelum lu asal hajar kanan/kiri ngikutin sinyal screener, skrining kilat koin tersebut lewat checklist ini:
| Langkah | Item Pengecekan | Kondisi Aman (Entry) | Sinyal Bahaya (Abort) |
|---|---|---|---|
| 1 | Volume 24 Jam (24h Vol) | > $10,000,000 | < $2,000,000 (Slippage mending ngebunuh profit lu) |
| 2 | Korelasi terhadap BTC | Bitcoin lagi sideway atau ngekor altcoin | Bitcoin lagi nge-pump/dump keras >1.5% pas detik ini |
| 3 | Orderbook Spot/Futures | Nggak ada tembok limit order tebel di depan | Ada tembok limit berjarak cuma 0.5% dari harga running |
| 4 | Spread (Bid/Ask) | < 0.05% | > 0.2% (Likuiditas kering) |
| 5 | Jarak ke Key Level Terdekat | Masih ada ruang gerak buat Risk:Reward minimal 1:3 | Harga udah mentok pas di level Support/Resistance Weekly (W1) |
Kesimpulan Pragmatis
Screener volatilitas itu bukan bola kristal ramalan masa depan. Alat ini murni pemangkas waktu biar lu bisa mengeliminasi 98% noise pasar cuma dalam waktu setengah menit, lalu fokus ke 2% aset yang emang lagi disiapin skenario gede sama bandar.
Nggak usah tebak-tebakan arah di dalam area squeeze tanpa konfirmasi volume dan delta. Biarkan market buka kartu duluan, masuk pas impuls terkonfirmasi, lalu amankan 3-8% profit gerakan dengan risiko seminimal mungkin.