Estrategia de cambio de estructura de mercado de ruptura oscilante


Fecha de creación: 2023-12-05 15:17:01 Última modificación: 2023-12-05 15:17:01
Copiar: 0 Número de Visitas: 699
1
Seguir
1619
Seguidores

Estrategia de cambio de estructura de mercado de ruptura oscilante

Descripción general

La Oscillation Breakthrough - Market Structure Shift Strategy es una estrategia de seguimiento de tendencias que utiliza las relaciones entre diferentes períodos de tiempo para identificar los cambios en la estructura del mercado. La estrategia utiliza las relaciones entre diferentes períodos de tiempo como señales de cambios en la estructura del mercado para capturar la dirección de las nuevas tendencias.

Principio de estrategia

La lógica central de esta estrategia es utilizar las formas de absorción hacia abajo y hacia arriba de los períodos de tiempo de corto período como señales de cambios en la estructura del mercado de medio y largo período. En concreto, la estrategia monitoreará simultáneamente las líneas K de los períodos de medio largo período (por ejemplo, la línea de 60 minutos) y los períodos de corto período (por ejemplo, la línea de 15 minutos).

Una vez en la dirección, la estrategia utiliza el precio más alto o más bajo de un período corto como punto de parada para controlar el riesgo. Cuando el precio de cierre de la línea K de un período medio-largo dispara el punto de parada, la estrategia se apaga el punto de parada.

Análisis de las ventajas estratégicas

La estrategia tiene las siguientes ventajas:

  1. Una señal de cambio fiable de la estructura del mercado. Utiliza las relaciones entre los diferentes ciclos para juzgar la estructura del mercado y evitar ser engañado por el ruido de un solo ciclo.

  2. La dirección de las nuevas tendencias se determina automáticamente. Cuando se producen señales de cambio en la estructura del mercado, se hace automáticamente más cautela, sin necesidad de un juicio manual.

  3. El control de riesgos está en su lugar. El uso de precios máximos y mínimos en períodos cortos para el control de riesgos ayuda a controlar las pérdidas individuales.

  4. El control de retiro es relativamente bueno. El uso de los máximos de corto período para abrir posiciones y detener pérdidas permite controlar el retiro hasta cierto punto.

Análisis de riesgos estratégicos

Los principales riesgos de esta estrategia son los siguientes:

  1. Riesgo de error en el juicio de la estructura del mercado. Cuando el ruido de los ciclos cortos es demasiado grande, las señales de cambio de la estructura del mercado pueden fallar y es necesario ajustar los parámetros del ciclo.

  2. El riesgo de reversión de la tendencia. Cuando el mercado presenta una reversión de tipo V, la estrategia es difícil de controlar. Se puede ajustar adecuadamente el algoritmo de stop loss.

  3. Riesgo de que los parámetros no coincidan. Si los parámetros de los ciclos medianos y cortos no se establecen a tiempo, la señal puede no tener un buen efecto y necesitará pruebas de optimización repetidas.

Dirección de optimización de la estrategia

La estrategia también puede ser optimizada en las siguientes direcciones:

  1. Aumentar los indicadores acumulativos o el juicio de tendencias para evitar señales erróneas en la reversión de tendencias.

  2. Optimización de la correspondencia de parámetros de ciclo largo y corto para mejorar la calidad de la señal.

  3. Utilizando tecnologías como el aprendizaje automático para optimizar los algoritmos de stop-loss.

  4. Añadir filtros de condiciones adicionales para señales engañosas, como el juicio de tendencias de gran escala.

  5. Enriquecer los tipos de estrategias, desarrollar estrategias derivadas y formar un portafolio de estrategias.

Resumir

La estrategia de cambio de estructura de mercado es una estrategia de seguimiento más confiable en general. Puede utilizar los cambios en la estructura del mercado para determinar automáticamente la dirección de las nuevas tendencias, y el control del riesgo también se hace bien. A continuación, la estrategia puede optimizarse en profundidad para mejorar la calidad de la señal, optimizar los puntos de parada y evitar la reversión, etc., lo que la convierte en una estrategia de nivel comercial.

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