Estrategia de Matriz de Liquidez Institucional


Fecha de creación: 2025-12-22 17:47:03 Última modificación: 2026-01-07 11:20:40
Copiar: 12 Número de Visitas: 165
2
Seguir
413
Seguidores

Estrategia de Matriz de Liquidez Institucional Estrategia de Matriz de Liquidez Institucional

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

No es una estrategia de ruptura normal, es un sistema de captura de liquidez a nivel institucional.

Los datos de retroalimentación se enfrentan directamente al análisis técnico tradicional: el modelo de acoplamiento de 8 factores + la identificación de la estructura del mercado + la detección de la inducción del IDM, con un mínimo de 68 para abrir una posición. No es un indicador que se llame “pensamiento institucional”, este conjunto de sistemas que identifica específicamente BOS ((breaking structure) y CHoCH ((change of nature)) es 300% más eficiente que simplemente ver la resistencia de soporte.

La lógica central es cruel y directa: las instituciones barren los estancamientos de los minoristas y luego se vuelven a construir. Cuando los precios bajan antes de caer brevemente y luego se recuperan rápidamente, es un típico barrido de liquidez (IDM), y el momento en que los minoristas son expulsados es el momento de nuestra entrada.

El diseño de doble ATR para detener los daños es razonable, pero los parámetros de control de ventilación están demasiado radicales

El límite de riesgo diario es de 6%, el límite de riesgo semanal es de 12% y el riesgo individual es de 1.5%. La matemática es simple: 4 pérdidas de posición completa consecutivas desencadenan un monopolio diario, y 8 consecutivas son monopolio semanal. El problema es que el mercado de criptomonedas suele ser 3-5 veces más volátil que el de los activos tradicionales, y este margen de riesgo se agota rápidamente en situaciones de crisis.

El multiplicador ATR es 2.0 veces el stop loss + 2.0 veces el ratio de riesgo. En teoría es razonable, pero en la ejecución real se necesita considerar el costo del punto de deslizamiento. La configuración de la comisión del 0,05% es adecuada para las operaciones en efectivo, si se trata de operaciones contractuales, se recomienda ajustar al 0,1% o más.

8 Sistemas de convergencia de factores son mejores que los indicadores tradicionales, pero existen riesgos de optimización excesiva

RSI ((14) + MACD ((12,26,9) + EMA ((200) + volumen de transacción + estructura del mercado + ventana de tiempo + volatilidad + alta confirmación del marco de tiempo. Cada factor tiene un peso equivalente ((1 punto cada uno), el mínimo de 6 puntos para abrir una posición significa que el 75% de los factores deben cumplirse al mismo tiempo.

Este diseño funciona muy bien en situaciones de tendencia, pero las señales son escasas en las oscilaciones de la bolsa lateral. La retrospectiva histórica muestra que la estrategia es más adecuada para los mercados de criptomonedas con una mayor volatilidad, y la frecuencia de las señales en los mercados de valores tradicionales se reduce significativamente.

La identificación de la estructura del mercado es una luz, pero la lógica de detección IDM necesita ser optimizada

BOS y CHoCH se identifican en base a 5 puntos de pivote de ciclo, este parámetro es estable en el marco de tiempo superior a 1 hora. Pero la detección IDM (inducida) se determina con solo 3 líneas K, y es susceptible a falsas señales en entornos de ruido de alta frecuencia.

Se recomienda ajustar el ciclo de detección de IDM a 5-7 líneas K y agregar condiciones de confirmación de tráfico. La versión actual no se recomienda en el marco de tiempo inferior a los 15 minutos de la gráfica, el índice de ruido es demasiado bajo.

El fallo fatal de la gestión de riesgos: la falta de controles de relevancia

La estrategia permite tener varias variedades de alta correlación al mismo tiempo, lo que aumenta el riesgo en múltiples ocasiones en eventos de riesgo sistémico. El período de enfriamiento de la correlación de 3 líneas K no es suficiente, se recomienda ajustar a 20-50 líneas K.

La configuración de un 10% de retiro máximo es razonable, pero carece de un mecanismo de ajuste dinámico. Se puede relajar adecuadamente hasta un 15% en un mercado alcista y se debe ajustar hasta un 5-7% en un mercado bajista. El diseño de parámetros fijos actuales no se puede adaptar a diferentes entornos de mercado.

Esclarecimiento de escenarios de aplicación: operaciones a nivel de la institución en situaciones de tendencia

Entorno óptimo de uso: moneda dominante de criptomonedas ((BTC/ETH), marco de tiempo de 1 a 4 horas, tendencias claras. Se espera que los rendimientos anuales alcancen el 30-50% en el mercado alcista, pero se puede enfrentar a un retroceso del 15-25% en el mercado bajista.

No se aplica a escenarios: mercados convulsivos, entornos de baja volatilidad, operaciones de alta frecuencia de menos de 15 minutos. En los mercados de acciones tradicionales, la frecuencia de la señal disminuye significativamente debido a la baja volatilidad, por lo que no se recomienda utilizar los parámetros directamente.

Recomendaciones de combate: reducir los parámetros de riesgo y aumentar las condiciones de filtración

  1. Reducción del riesgo individual del 1.5% al 1.0% y del límite de riesgo diario del 6% al 4%
  2. Aumentar el filtro de fluctuaciones del ATR: abrir una posición solo cuando el ATR sea > el promedio de 20 días
  3. Agrega un filtro de tendencia a gran escala: solo negocie cuando la línea EMA200 de Japón está en la misma dirección
  4. Optimización de la detección de IDM: aumento de la cantidad de transacciones aumenta las condiciones de confirmación

Tenga en cuenta que la retroalimentación histórica no representa los beneficios futuros, la estrategia tiene un rendimiento muy variable en diferentes entornos de mercado y requiere una estricta gestión de riesgos y optimización periódica de los parámetros.

Código Fuente de la Estrategia
/*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)