Avance de la oscilación - Estrategia de cambio de la estructura del mercado

El autor:¿ Qué pasa?, Fecha: 2023-12-05 15:17:01
Las etiquetas:

img

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.

Estrategia lógica

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.

Análisis de ventajas

Las ventajas de esta estrategia son:

  1. El uso de relaciones de marco de tiempo evita ser engañado por el ruido de un solo marco de tiempo.

  2. 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.

  3. 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.

  4. 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.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. 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.

  2. 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.

  3. 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.

Direcciones de optimización

Entre las direcciones de optimización adicionales de la estrategia se incluyen:

  1. Añadir filtros de tendencia para evitar señales incorrectas durante la inversión de tendencia.

  2. Optimizar la coincidencia de parámetros de tiempo para mejorar la calidad de la señal.

  3. Utilice el aprendizaje automático para obtener ganancias óptimas / detener pérdidas.

  4. Añadir filtros suplementarios como tendencia de mayor marco de tiempo.

  5. Ampliar las variantes de estrategia para formar un conjunto de estrategias.

Conclusión

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)
//

Más.