Esta estrategia se llama
El núcleo de la estrategia consiste en identificar
El valor razonable se define como el precio
La liquidez también es un factor clave, ya que los operadores institucionales tienden a ejecutar operaciones en zonas de alta liquidez.
La estrategia determina el valor razonable mediante el cálculo de una media móvil simple. Luego identifica bloques de órdenes potenciales de longitud de 20 períodos. Si la diferencia entre el precio de cierre y el valor razonable es inferior al 38,2% de la altura total del rango del bloque de órdenes, se determina un bloque de órdenes.
Los bloques de órdenes alcistas se consideran señales de compra. Los bloques de órdenes bajistas se consideran señales de venta.
Las principales ventajas de la estrategia son el uso de los patrones de negociación de los operadores institucionales que pueden permitirle superar a las estrategias más basadas en indicadores mecanicistas.
Otras ventajas incluyen:
La estrategia también se enfrenta a algunos riesgos potenciales, tales como:
Para mitigar estos riesgos, se recomienda considerar:
Aquí hay algunas optimizaciones potenciales para la estrategia:
En resumen, la estrategia ofrece un enfoque único para aprovechar el comportamiento del operador institucional. Combina múltiples elementos y tiene ciertas ventajas. Pero como la mayoría de las estrategias comerciales, también enfrenta riesgos cuando cambian las condiciones del mercado o ocurre un comportamiento de precios inesperado. Con pruebas continuas, optimización y gestión de riesgos, la estrategia puede convertirse en una valiosa herramienta de negociación cuantitativa.
/*backtest start: 2024-01-23 00:00:00 end: 2024-02-22 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("ICT Strategy", overlay=true) // Input variables length = input.int(20, minval=1, title="Order Block Length") fairValuePeriod = input.int(60, minval=1, title="Fair Value Period") // Calculate fair value fairValue = ta.sma(close, fairValuePeriod) // Determine order blocks isOrderBlock(high, low) => highestHigh = ta.highest(high, length) lowestLow = ta.lowest(low, length) absHighLowDiff = highestHigh - lowestLow absCloseFairValueDiff = (close - fairValue) (absCloseFairValueDiff <= 0.382 * absHighLowDiff) isBuyBlock = isOrderBlock(high, low) and close > fairValue isSellBlock = isOrderBlock(high, low) and close < fairValue // Plot fair value and order blocks plot(fairValue, color=color.blue, title="Fair Value") plotshape(isBuyBlock, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small) plotshape(isSellBlock, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small) // Strategy logic if (isBuyBlock) strategy.entry("Buy", strategy.long) if (isSellBlock) strategy.entry("Sell", strategy.short)