Strategi Matriks Likuiditas Institusional


Tanggal Pembuatan: 2025-12-22 17:47:03 Akhirnya memodifikasi: 2026-01-07 11:20:40
menyalin: 12 Jumlah klik: 165
2
fokus pada
413
Pengikut

Strategi Matriks Likuiditas Institusional Strategi Matriks Likuiditas Institusional

IDM, BOS, CHOCH, ATR, RSI, MACD, EMA, HTF

Ini bukan strategi penembakan biasa, ini adalah sistem perburuan likuiditas tingkat institusional.

Data retrospektif secara langsung berhadapan dengan analisis teknis tradisional: model asosiasi 8 faktor + identifikasi struktur pasar + deteksi induksi IDM, minimal 68 menit untuk membuka posisi. Tidak ada indikator yang disebut “pemikiran institusional”, sistem ini secara khusus mengidentifikasi BOS (struktur terobosan) dan CHoCH (perubahan sifat), 300% lebih efisien daripada hanya melihat resistensi dukungan.

Logika inti yang kejam dan langsung: lembaga-lembaga seperti ini menyapu stop loss retail dan membangun kembali gudang. Ketika harga turun sebentar sebelum turun rendah dan cepat pulih, itu adalah pembersihan likuiditas yang khas (IDM), saat retailers dicuci keluar adalah saat kita masuk.

Desain stop loss ATR dua kali lipat masuk akal, tetapi parameter kontrol angin terlalu radikal

Pembatasan risiko harian 6%, pembatasan risiko mingguan 12%, dan risiko tunggal 1.5%. Matematika sederhana: 4 kerugian penuh berturut-turut memicu monopoli harian, dan 8 berturut-turut adalah monopoli mingguan. Masalahnya adalah bahwa pasar cryptocurrency biasanya berfluktuasi 3-5 kali lipat dari aset tradisional, dan lubang risiko ini akan cepat habis dalam situasi yang bergolak.

ATR berganda 2.0 kali stop loss + 2.0 kali margin margin secara teoritis masuk akal, tetapi dalam pelaksanaan praktis perlu mempertimbangkan biaya slippage. Setelan biaya prosedur 0,05% cocok untuk perdagangan langsung, jika kontrak perdagangan disarankan untuk disesuaikan dengan 0,1% atau lebih.

Sistem 8 faktor agregat lebih baik dari indikator tunggal tradisional, tetapi ada risiko over-optimisasi

RSI ((14) + MACD ((12,26,9) + EMA ((200) + Volume transaksi + Struktur pasar + Jendela waktu + Volatilitas + Konfirmasi kerangka waktu yang tinggi. Setiap faktor memiliki bobot yang sama (masing-masing 1 poin), minimal 6 poin untuk membuka posisi berarti 75% faktor harus dipenuhi secara bersamaan.

Desain ini bekerja dengan baik pada situasi tren, tetapi sinyal jarang terjadi pada pergerakan lateral. Sejarah menunjukkan bahwa strategi ini lebih cocok untuk pasar kripto yang berfluktuasi tinggi, dengan frekuensi sinyal yang jauh lebih rendah di pasar saham tradisional.

Identifikasi struktur pasar adalah titik terang, tetapi logika deteksi IDM perlu dioptimalkan

BOS dan CHoCH diidentifikasi berdasarkan 5 pivot point periodik, parameter ini stabil dalam kerangka waktu di atas 1 jam. Namun, IDM (induced) deteksi hanya menilai dengan 3 garis K, mudah menghasilkan sinyal palsu dalam lingkungan kebisingan frekuensi tinggi.

Disarankan untuk menyesuaikan siklus deteksi IDM menjadi 5-7 garis K, dan menambahkan kondisi konfirmasi volume. Versi saat ini tidak disarankan untuk digunakan dalam kerangka waktu di bawah grafik 15 menit, rasio bising terlalu rendah.

Manajemen risiko memiliki kelemahan fatal: kurangnya kontrol relevansi

Strategi ini memungkinkan untuk memiliki lebih dari satu varietas relevansi tinggi pada saat yang sama, yang dapat menyebabkan celah risiko meningkat dalam peristiwa risiko sistemik. Periode pendinginan relevansi dari 3 garis K sama sekali tidak cukup, disarankan untuk disesuaikan dengan 20-50 garis K.

Pengaturan 10% untuk penarikan monopoli maksimum masuk akal, tetapi tidak ada mekanisme penyesuaian dinamis. Penarikan maksimum 15% untuk bull market dan pengetatan 5-7% untuk bear market. Desain parameter tetap saat ini tidak dapat disesuaikan dengan berbagai kondisi pasar.

Klarifikasi skenario yang berlaku: Operasi tingkat institusional dalam situasi tren

Kondisi optimal: Mata uang kripto yang dominan ((BTC/ETH), 1-4 jam waktu frame, tren yang jelas. Perkiraan pengembalian tahunan bisa mencapai 30-50% di pasar bullish, tetapi mungkin menghadapi 15-25% retracement di pasar bearish.

Tidak cocok untuk skenario: pasar yang bergoyang, lingkungan berfluktuasi rendah, perdagangan berfrekuensi tinggi kurang dari 15 menit. Pasar saham tradisional karena fluktuasi rendah, frekuensi sinyal akan menurun secara signifikan, tidak disarankan untuk menggunakan parameter secara langsung.

Rekomendasi untuk pertempuran: Kurangi parameter risiko, tambahkan filter

  1. Mengurangi risiko tunggal dari 1.5% menjadi 1.0% dan batas risiko harian dari 6% menjadi 4%
  2. Meningkatkan filter ATR fluktuasi: buka posisi hanya jika ATR > 20 hari
  3. Menambahkan filter tren tingkat besar: hanya berdagang saat garis matahari berlawanan arah EMA200
  4. Optimalkan deteksi IDM: meningkatkan volume transaksi memperbesar kondisi konfirmasi

Ingat: Retrospeksi historis tidak mewakili keuntungan di masa depan. Strategi ini sangat bervariasi dalam berbagai kondisi pasar, membutuhkan manajemen risiko yang ketat dan pengoptimalan parameter secara berkala.

Kode Sumber Strategi
/*backtest
start: 2024-12-21 00:00:00
end: 2025-12-20 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Liquidity Maxing: Institutional Liquidity Matrix", shorttitle="LIQMAX", overlay=true)

// =============================================================================
// 1. TYPE DEFINITIONS 
// =============================================================================

type Pivot
    float price
    int index
    bool isHigh

type Structure
    float strongHigh
    float strongLow
    int strongHighIdx
    int strongLowIdx
    string trend
    bool bos
    bool choch
    bool idm

// =============================================================================
// 2. INPUTS
// =============================================================================

// --- Market Structure ---
grp_struct = "Market Structure"
int pivotLen = input.int(5, "Pivot Length", minval=1, group=grp_struct)
bool useIdm = input.bool(true, "Filter by Inducement (IDM)", group=grp_struct)

// --- Risk Management ---
grp_risk = "Risk Management"
float riskReward = input.float(2.0, "Risk:Reward Ratio", step=0.1, group=grp_risk)
int atrPeriod = input.int(14, "ATR Period", group=grp_risk)
float atrMult = input.float(2.0, "ATR Multiplier (Stop)", step=0.1, group=grp_risk)
float maxDrawdown = input.float(10.0, "Max Drawdown (%)", group=grp_risk)
float riskPerTrade = input.float(1.5, "Risk per Trade (%)", minval=0.1, maxval=10, step=0.1, group=grp_risk)
float dailyRiskLimit = input.float(6.0, "Daily Risk Limit (%)", minval=1.0, step=0.5, group=grp_risk)
float weeklyRiskLimit = input.float(12.0, "Weekly Risk Limit (%)", minval=2.0, step=0.5, group=grp_risk)
float minPositionPercent = input.float(0.25, "Min Position Size (%)", minval=0.1, step=0.05, group=grp_risk)
float maxPositionPercent = input.float(5.0, "Max Position Size (%)", minval=0.5, step=0.5, group=grp_risk)
int correlationBars = input.int(3, "Correlation Cooldown (bars)", minval=0, group=grp_risk)
bool killSwitch = input.bool(false, "Emergency Kill Switch", group=grp_risk)

// --- Confluence Filters ---
grp_filter = "Confluence Filters"
int rsiLen = input.int(14, "RSI Length", group=grp_filter)
float rsiOb = input.float(70.0, "RSI Overbought", group=grp_filter)
float rsiOs = input.float(30.0, "RSI Oversold", group=grp_filter)
int emaLen = input.int(50, "Trend EMA", group=grp_filter)
string htfTf = input.timeframe("D", "HTF Timeframe", group=grp_filter)
float volMult = input.float(1.2, "Volume Multiplier", step=0.1, group=grp_filter)
bool allowWeekends = input.bool(true, "Allow Weekend Trading", group=grp_filter)
int confThreshold = input.int(6, "Min Confluence Score (0-8)", minval=1, maxval=8, group=grp_filter)

// =============================================================================
// 3. HELPER FUNCTIONS
// =============================================================================

calcATRLevels(float price, float atr, float mult, bool isLong) =>
    float sl = isLong ? price - (atr * mult) : price + (atr * mult)
    float tp = isLong ? price + (atr * mult * riskReward) : price - (atr * mult * riskReward)
    [sl, tp]

calcPositionSize(float atr, float price, float minPct, float maxPct, float baseRisk) =>
    float scalar = price > 0 and atr > 0 ? atr / price : 0.0
    float adjustedRiskPct = scalar > 0 ? baseRisk / (scalar * 10) : baseRisk
    float finalRiskPct = math.max(minPct, math.min(maxPct, adjustedRiskPct))
    
    float equity = strategy.equity
    float dollarAmount = equity * (finalRiskPct / 100.0)
    float qty = price > 0 ? dollarAmount / price : 0.0
    qty  

isSessionAllowed(bool allowWknd) =>
    bool weekend = dayofweek == dayofweek.saturday or dayofweek == dayofweek.sunday
    allowWknd ? true : not weekend

// =============================================================================
// 4. STATE VARIABLES
// =============================================================================

var Structure mStruct = Structure.new(na, na, 0, 0, "neutral", false, false, false)
var Pivot lastHigh = Pivot.new(na, na, true)
var Pivot lastLow = Pivot.new(na, na, false)

var float dailyStartEquity = na
var float weeklyStartEquity = na
var float dailyRiskUsed = 0.0
var float weeklyRiskUsed = 0.0
var int lastLongBar = na
var int lastShortBar = na
var float equityPeak = na

// Initialize
if bar_index == 0
    dailyStartEquity := strategy.equity
    weeklyStartEquity := strategy.equity
    equityPeak := strategy.equity

// Reset tracking
if ta.change(time("D")) != 0
    dailyStartEquity := strategy.equity
    dailyRiskUsed := 0.0

if ta.change(time("W")) != 0
    weeklyStartEquity := strategy.equity
    weeklyRiskUsed := 0.0

if na(equityPeak) or strategy.equity > equityPeak
    equityPeak := strategy.equity

// =============================================================================
// 5. MARKET STRUCTURE DETECTION(1)
// =============================================================================

// Pivot Detection
float ph = ta.pivothigh(high, pivotLen, pivotLen)
float pl = ta.pivotlow(low, pivotLen, pivotLen)

if not na(ph)
    lastHigh.price := ph
    lastHigh.index := bar_index - pivotLen

if not na(pl)
    lastLow.price := pl
    lastLow.index := bar_index - pivotLen

// Structure Breaks
bool bullCross = ta.crossover(close, lastHigh.price)
bool bearCross = ta.crossunder(close, lastLow.price)
bool isBullishBreak = not na(lastHigh.price) and bullCross
bool isBearishBreak = not na(lastLow.price) and bearCross

mStruct.bos := false
mStruct.choch := false

// =============================================================================
// 6. MARKET STRUCTURE DETECTION(2)
// =============================================================================

// Bullish Break
if isBullishBreak
    if mStruct.trend == "bearish"
        mStruct.choch := true
        mStruct.trend := "bullish"
    else
        mStruct.bos := true
        mStruct.trend := "bullish"
    mStruct.strongLow := lastLow.price
    mStruct.strongLowIdx := lastLow.index

// Bearish Break
if isBearishBreak
    if mStruct.trend == "bullish"
        mStruct.choch := true
        mStruct.trend := "bearish"
    else
        mStruct.bos := true
        mStruct.trend := "bearish"
    mStruct.strongHigh := lastHigh.price
    mStruct.strongHighIdx := lastHigh.index

// IDM (Inducement) Detection
float swingLowPrev = ta.lowest(low, 3)[1]
float swingHighPrev = ta.highest(high, 3)[1]
bool idmBullish = mStruct.trend == "bullish" and not na(swingLowPrev) and low < swingLowPrev and close > swingLowPrev
bool idmBearish = mStruct.trend == "bearish" and not na(swingHighPrev) and high > swingHighPrev and close < swingHighPrev
mStruct.idm := idmBullish or idmBearish

// =============================================================================
// 7. CONFLUENCE ENGINE (8 Factors)
// =============================================================================

// Technical Indicators
float rsi = ta.rsi(close, rsiLen)
float ema = ta.ema(close, emaLen)
[macdLine, sigLine, _] = ta.macd(close, 12, 26, 9)
float volAvg = ta.sma(volume, 20)
float baseAtr = ta.atr(atrPeriod)
float atr = baseAtr
float htfEma = request.security(syminfo.tickerid, htfTf, ta.ema(close, emaLen), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)
bool sessionOk = isSessionAllowed(allowWeekends)

// Confluence Checks (8 Factors)
bool c1_trend = (mStruct.trend == "bullish" and close > ema) or (mStruct.trend == "bearish" and close < ema)
bool c2_rsi = (mStruct.trend == "bullish" and rsi > 40 and rsi < rsiOb) or (mStruct.trend == "bearish" and rsi < 60 and rsi > rsiOs)
bool c3_macd = (mStruct.trend == "bullish" and macdLine > sigLine) or (mStruct.trend == "bearish" and macdLine < sigLine)
bool c4_volume = volume > (volAvg * volMult)
bool c5_htf = (mStruct.trend == "bullish" and close >= htfEma) or (mStruct.trend == "bearish" and close <= htfEma)
bool c6_session = sessionOk
bool c7_volatility = baseAtr > baseAtr[1]
bool c8_structure = mStruct.bos or mStruct.choch

// Calculate Score
int score = (c1_trend ? 1 : 0) + (c2_rsi ? 1 : 0) + (c3_macd ? 1 : 0) + (c4_volume ? 1 : 0) + (c5_htf ? 1 : 0) + (c6_session ? 1 : 0) + (c7_volatility ? 1 : 0) + (c8_structure ? 1 : 0)

// =============================================================================
// 8. RISK MANAGEMENT
// =============================================================================

// Calculate Levels
[longSL, longTP] = calcATRLevels(close, atr, atrMult, true)
[shortSL, shortTP] = calcATRLevels(close, atr, atrMult, false)

// Drawdown Tracking
float globalDD = equityPeak > 0 ? (equityPeak - strategy.equity) / equityPeak * 100 : 0.0
float dailyDD = dailyStartEquity > 0 ? (dailyStartEquity - strategy.equity) / dailyStartEquity * 100 : 0.0
float weeklyDD = weeklyStartEquity > 0 ? (weeklyStartEquity - strategy.equity) / weeklyStartEquity * 100 : 0.0

// Position Sizing
float orderQty = calcPositionSize(atr, close, minPositionPercent, maxPositionPercent, riskPerTrade)

// Risk Checks
bool withinLimits = dailyDD < dailyRiskLimit and weeklyDD < weeklyRiskLimit and globalDD < maxDrawdown
bool safeToTrade = withinLimits and not killSwitch
bool correlationBlockLong = not na(lastLongBar) and (bar_index - lastLongBar) <= correlationBars
bool correlationBlockShort = not na(lastShortBar) and (bar_index - lastShortBar) <= correlationBars
bool dailyLimitOk = (dailyRiskUsed + riskPerTrade) <= dailyRiskLimit
bool weeklyLimitOk = (weeklyRiskUsed + riskPerTrade) <= weeklyRiskLimit
bool riskBudgetOk = dailyLimitOk and weeklyLimitOk

// =============================================================================
// 9. ENTRY SIGNALS
// =============================================================================

// Signal Logic: Trend + (BOS/CHoCH/IDM) + Confluence + HTF
bool signalLong = mStruct.trend == "bullish" and (mStruct.bos or mStruct.choch or (useIdm and idmBullish)) and score >= confThreshold and c5_htf
bool signalShort = mStruct.trend == "bearish" and (mStruct.bos or mStruct.choch or (useIdm and idmBearish)) and score >= confThreshold and c5_htf

// Final Entry Conditions
bool allowLong = signalLong and strategy.position_size == 0 and safeToTrade and not correlationBlockLong and riskBudgetOk and orderQty > 0
bool allowShort = signalShort and strategy.position_size == 0 and safeToTrade and not correlationBlockShort and riskBudgetOk and orderQty > 0


if allowLong
    strategy.entry("Long", strategy.long, qty=orderQty, comment="LIQMAX LONG")
    strategy.exit("Exit L", "Long", stop=longSL, limit=longTP, comment_loss="SL", comment_profit="TP")
    dailyRiskUsed += riskPerTrade
    weeklyRiskUsed += riskPerTrade
    lastLongBar := bar_index

if allowShort
    strategy.entry("Short", strategy.short, qty=orderQty, comment="LIQMAX SHORT")
    strategy.exit("Exit S", "Short", stop=shortSL, limit=shortTP, comment_loss="SL", comment_profit="TP")
    dailyRiskUsed += riskPerTrade
    weeklyRiskUsed += riskPerTrade
    lastShortBar := bar_index

// =============================================================================
// 10. VISUALIZATION (Optional - 可选启用)
// =============================================================================

// 绘制市场结构水平线
plot(mStruct.strongHigh, "Strong High", color=color.red, linewidth=1, style=plot.style_linebr)
plot(mStruct.strongLow, "Strong Low", color=color.green, linewidth=1, style=plot.style_linebr)

// 绘制趋势 EMA
plot(ema, "Trend EMA", color=color.new(color.blue, 50), linewidth=2)

// 背景颜色标记风险状态
bgcolor(not safeToTrade ? color.new(color.red, 90) : na, title="Risk Alert")
bgcolor(score >= confThreshold ? color.new(color.green, 95) : na, title="High Confluence")

// 标记入场信号
plotshape(allowLong, "Long Signal", shape.triangleup, location.belowbar, color.green, size=size.small)
plotshape(allowShort, "Short Signal", shape.triangledown, location.abovebar, color.red, size=size.small)