La estrategia de cambio de estructura de mercado (ICT_MSS) es una estrategia de seguimiento de tendencias que identifica cambios en la estructura del mercado utilizando las relaciones entre diferentes marcos de tiempo.
La lógica central de esta estrategia es utilizar patrones de engulfamiento hacia abajo y hacia arriba de corto plazo como señales para cambios en la estructura del mercado de mayor duración. Específicamente, la estrategia monitorea simultáneamente un marco de tiempo más largo (por ejemplo, barras de 60m) y un marco de tiempo más corto (por ejemplo, barras de 15m). Cuando aparece una barra roja engulfante hacia abajo en el marco de tiempo más corto mientras que la barra del marco de tiempo más largo es verde, se determina que se ha producido una estructura del mercado y se toma una posición larga. Cuando aparece una barra verde engulfante hacia arriba en el marco de tiempo más corto mientras que la barra del marco de tiempo más largo es roja, se determina que se ha producido un cambio en la estructura del mercado y se toma una posición corta.
Después de entrar en una posición direccional, la estrategia utiliza el corto marco de tiempo alto/bajo para establecer un stop loss con el fin de controlar el riesgo.
Las ventajas de esta estrategia son:
El uso de relaciones de marco de tiempo evita ser engañado por el ruido de un solo marco de tiempo.
Determina automáticamente la nueva dirección de la tendencia. Los cambios en la estructura del mercado desencadenan automáticamente entradas largas / cortas sin necesidad de juicio manual.
Control eficaz del riesgo: el corto plazo alto/bajo utilizado para el control del riesgo ayuda a limitar las pérdidas de una sola operación.
El uso de extremos de corto plazo para la entrada y la parada de pérdidas puede ayudar a controlar las reducciones hasta cierto punto.
Los principales riesgos de esta estrategia son:
Riesgo de una evaluación incorrecta de la estructura del mercado. Las señales pueden fallar cuando el ruido de los plazos cortos es elevado. Es necesario ajustar los parámetros de los plazos.
Riesgo de reversión de tendencia. La estrategia lucha por controlar la caída durante las reversiones en forma de V. El algoritmo de stop loss necesita ser ajustado.
Riesgo de desajuste de parámetros: la combinación incorrecta de marcos de tiempo largo / corto conduce a una mala calidad de la señal y necesita pruebas de optimización.
Entre las direcciones de optimización adicionales de la estrategia se incluyen:
Añadir filtros de tendencia para evitar señales incorrectas durante la inversión de tendencia.
Optimizar la coincidencia de parámetros de tiempo para mejorar la calidad de la señal.
Utilice el aprendizaje automático para obtener ganancias óptimas / detener pérdidas.
Añadir filtros suplementarios como tendencia de mayor marco de tiempo.
Ampliar las variantes de estrategia para formar un conjunto de estrategias.
La estrategia ICT_MSS es una estrategia de seguimiento de tendencias confiable en general. Determina automáticamente una nueva dirección de tendencia basada en cambios en la estructura del mercado y también tiene un buen control de riesgos incorporado.
/*backtest start: 2022-11-28 00:00:00 end: 2023-12-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © jl01794 //@version=5 strategy(title="ICT_MSS[PROTOTYPE]", overlay=true, initial_capital=10000, currency="USD", margin_long=15, margin_short=15, max_lines_count=500) // INPUTS Time_Frame = input.timeframe("60", title="Focused Time Frame") FTF_LTF = input.timeframe("15", title="Focused Time Frame(LTF)") // // SECURITY DATA [FOR ONE TIMEFRAME REFERENCE] FTF_Close = request.security(syminfo.tickerid, Time_Frame, close) FTF_Open = request.security(syminfo.tickerid, Time_Frame, open) FTFLTF_High = request.security(syminfo.tickerid, FTF_LTF, ta.highest(2)) FTFLTF_Low = request.security(syminfo.tickerid, FTF_LTF, ta.lowest(2)) FTFLTF_Close = request.security(syminfo.tickerid, FTF_LTF, close) FTFLTF_Open = request.security(syminfo.tickerid, FTF_LTF, open) // TIME BASED CLOSE AND OPEN _close = FTF_Close _open = FTF_Open _LTFclose = FTFLTF_Close _LTFopen = FTFLTF_Open // CANDLE STATE greenCandle = close > open redCandle = close < open LTFgreenCandle = FTFLTF_Close > FTFLTF_Open LTFredCandle = FTFLTF_Close < FTFLTF_Open // ENGULFING TIMEFRAME REFERENCE FTF_greenCandle = request.security(syminfo.tickerid, Time_Frame, greenCandle) FTF_redCandle = request.security(syminfo.tickerid, Time_Frame, redCandle) FTFLTF_greenCandle = request.security(syminfo.tickerid, FTF_LTF, LTFgreenCandle) FTFLTF_redCandle = request.security(syminfo.tickerid, FTF_LTF, LTFredCandle) //-------------------------------------------------------------------------------------------------------------- //ENGULFING_FTF_LTF B_EnP_mss = FTFLTF_redCandle[1] and // 1E PIVOT BUY FTFLTF_greenCandle // B_EnPs_mss = FTFLTF_greenCandle[1] and // 1E PIVOT SELL FTFLTF_redCandle // //-------------------------------------------------------------------------------------------------------------- display_LTF = timeframe.isintraday and timeframe.multiplier <= 15 //-------------------------------------------------------------------------------------------------------------- // STORED DATAS var float EH_MSS1 = na var float EL_MSS1 = na var bool can_draw = false var line l1_mss = na var line l1s_mss = na //-------------------------------------------------------------------------------------------------------------- // MSS BUY if (B_EnPs_mss) and (display_LTF) EH_MSS1 := FTFLTF_High can_draw := true l1_mss := line.new(bar_index, EH_MSS1, bar_index -3, EH_MSS1, color=color.purple) else if (can_draw) if (FTFLTF_High > EH_MSS1) can_draw := false else line.set_x2(l1_mss, bar_index) // // MSS SELL if (B_EnP_mss) and (display_LTF) EL_MSS1 := FTFLTF_Low can_draw := true l1s_mss := line.new(bar_index, EL_MSS1, bar_index -3, EL_MSS1, color=color.purple) else if (can_draw) if (FTFLTF_Low < EL_MSS1) can_draw := false else line.set_x2(l1s_mss, bar_index) //-------------------------------------------------------------------------------------------------------------- // ORDER // BUY longCondition_mssB = B_EnPs_mss and FTFLTF_High and close and high[1] openOr = FTFLTF_High //SELL shortCondition_mssS = B_EnP_mss and FTFLTF_Low and close and low[1] openOrs = FTFLTF_Low if (longCondition_mssB) strategy.entry("Buy", strategy.long, 1, stop = openOr, when = longCondition_mssB) // if (shortCondition_mssS) strategy.entry("Sell", strategy.short, 1, stop = openOrs, when = shortCondition_mssS) // // EXIT long_tp = open < FTFLTF_Close[1] short_tp = open > FTFLTF_Close[1] //if (long_tp) //strategy.close("Buy", qty_percent = 100, when = long_tp) // //if (short_tp) //strategy.close("Sell", qty_percent = 100, when = short_tp) //