Estrategia híbrida de tortuga mediana de cierre MACD


Fecha de creación: 2023-10-30 12:16:20 Última modificación: 2023-10-30 12:16:20
Copiar: 1 Número de Visitas: 630
1
Seguir
1617
Seguidores

Estrategia híbrida de tortuga mediana de cierre MACD

Descripción general

La estrategia combina el uso de la señal de la horquilla dorada del indicador MACD, la relación entre el precio de cierre de la línea K y la línea media, y las características de la oscilación de los precios para juzgar el momento de entrada y salida, al tiempo que establece mecanismos de reentrada y modificación de la entrada, con el objetivo de obtener más oportunidades de negociación y controlar al mismo tiempo el riesgo para lograr ganancias estables.

Principio de estrategia

La estrategia se basa principalmente en los siguientes principios:

  1. Utiliza el análisis de la MACD de las líneas rápidas y lentas para juzgar los mercados de más y de menos capitales, así como los puntos de entrada específicos.

  2. Utilice la relación entre el precio de cierre de la línea K y la línea media para determinar si la tendencia de la zona de mayor amplitud ha terminado y cuál es el punto de partida.

  3. Establecer un mecanismo de reingreso para aumentar las oportunidades de ganancias si continúan en línea con la tendencia después de que finalice el MACD.

  4. Establece un mecanismo de entrada de corrección, que agrega posiciones si el precio se ajusta parcialmente pero aún no se ha invertido, lo que se considera un ajuste dentro de la tendencia.

  5. Combinando los puntos anteriores, ajuste su posición dinámicamente para obtener el mayor beneficio posible en la tendencia y salir rápidamente cuando la tendencia termina.

Concretamente, la estrategia primero determina si la línea rápida y la línea lenta del MACD tienen un horno de oro o un horno muerto, si el horno de oro hace más, si el horno muerto hace nada; luego determina si la línea K cerrada toca la línea media, y si toca se juzga que es el final de la tendencia y la posición plana.

Además, la estrategia también establece un mecanismo de reentrada, es decir, después de la finalización de la tendencia en la dirección original, si el MACD continúa mostrando señales en la misma dirección, la estrategia abrirá nuevamente la posición para seguir la tendencia; al mismo tiempo, también se establece un mecanismo de entrada de corrección, si el precio se ajusta ligeramente pero no se invierte completamente, la estrategia aumenta la posición adecuadamente, lo que es un comportamiento normal de reajuste en la tendencia.

A través de estas configuraciones, la estrategia puede ajustar dinámicamente su posición en la tendencia, entrar y salir más veces y obtener mayores ganancias con el riesgo controlado.

Ventajas estratégicas

Esta estrategia combina varios indicadores y tiene las siguientes ventajas principales:

  1. El MACD puede identificar tendencias y puntos de inflexión para determinar puntos de entrada específicos.

  2. La relación entre el precio de cierre y la línea media permite determinar con precisión el final de la tendencia.

  3. El mecanismo de reingreso ha aumentado el número de operaciones y la eficiencia en la utilización de los fondos.

  4. El mecanismo de entrada fue modificado para reponer a tiempo y capturar las tendencias.

  5. Las estrategias operativas tienen una alta frecuencia pero un riesgo controlado y un factor de rentabilidad más alto.

  6. Los parámetros son ajustables y se pueden optimizar para diferentes variedades y situaciones.

  7. La estrategia es clara y fácil de entender, el código es sencillo y el disco duro es fácil de manejar.

  8. Los datos de detección son abundantes, de alta fiabilidad, y los resultados son fáciles de verificar en el disco físico.

Riesgo estratégico

La estrategia también presenta los siguientes riesgos principales:

  1. La probabilidad de que el MACD emita una señal falsa, que requiere una combinación de otros indicadores para su verificación.

  2. El alto nivel de los parados es demasiado pequeño y puede ser eliminado por el movimiento de la bola.

  3. El reingreso y el ingreso rectificado aumentan la frecuencia de las operaciones, lo que requiere un control de la utilización de los fondos.

  4. La entrada de correcciones en la tendencia de repunte podría generar mayores pérdidas.

  5. Las variedades de comercio y la configuración de los parámetros requieren optimización y no se aplican a todas las variedades.

  6. Se requiere de un seguimiento y optimización continuos, ajustando los parámetros según el mercado.

  7. El impacto de los costos de los puntos de deslizamiento en el disco físico debe ser considerado.

Las medidas de gestión de riesgos para responder a esta situación incluyen: establecer un stop loss para asegurar que las pérdidas individuales sean limitadas; evaluar la utilización de los fondos y mantener una reserva de efectivo razonable; realizar un reajuste de la combinación de parámetros adecuados para la selección de variedades; prestar atención constante a los cambios en las características del mercado para optimizar los parámetros; considerar el impacto de los costos de deslizamiento en el reajuste y la simulación.

Dirección de optimización de la estrategia

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Combinar otros indicadores para verificar la señal y mejorar la precisión de la señal.

  2. Configuración de paradas automáticas para detener el daño.

  3. Optimización de la lógica condicional de reingreso y modificación de la admisión.

  4. Optimización de los parámetros de subvariedad, estableciendo la combinación óptima de parámetros.

  5. Optimizar la tasa de utilización de fondos y establecer límites de fondos para la reingreso y la admisión modificada.

  6. Indicador de la capacidad de combinación para evitar pérdidas de recaudación en un contexto de rebote.

  7. Aumentar los mecanismos de salida, como el establecimiento de paradas móviles, etc.

  8. Considere la posibilidad de convertir el envase de estrategias en un robot de negociación para automatizar las transacciones.

  9. Aumentar los factores de consideración del disco, como el costo del punto de deslizamiento.

Con estas optimizaciones, se puede mejorar aún más la estabilidad, adaptabilidad, automatización y efectividad de las estrategias.

Resumir

Esta estrategia integra el uso de señales de negociación del indicador MACD, análisis de precios de cierre de la línea K y mecanismo de entrada múltiple, control de riesgo al mismo tiempo que captura la tendencia, es una estrategia de estrategia de comercio cuantitativa de alta eficiencia. La estrategia tiene ventajas como alta frecuencia de operación, buena utilización de capital y baja dificultad para lograr, pero también requiere atención al control de riesgo y optimización de la estrategia, con un gran valor práctico y espacio para ampliar.

Código Fuente de la Estrategia
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 2h
basePeriod: 15m
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/
// © Puckapao

//@version=4
// strategy(title="MACD", shorttitle="MACD", overlay=true, initial_capital=10000.00, currency="USD", default_qty_type=strategy.cash, default_qty_value=10000.00)
// Getting inputs
reenter_delay = input(title="Re-enter Delay", type=input.integer, defval=2)
sculp_delay = input(title="Sculp Delay", type=input.integer, defval=4)
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=true)
ema_period = input(title="EMA Period", type=input.integer, defval=21)

// Get date
startDate = input(title="Start Date", type=input.integer,
     defval=19, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=09, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2017, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=31, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=3, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2021, minval=1800, maxval=2100)
     
// STEP 2:
// Look if the close time of the current bar
// falls inside the date range
inDateRange =  true

reenter_cnt = 0
reenter_cnt := nz(reenter_cnt[1])

sculp_cnt = 0
sculp_cnt := nz(sculp_cnt[1])

close_cnt = 0
close_cnt := nz(close_cnt[1])

on_long = false
on_long := nz(on_long[1])

on_short = false
on_short := nz(on_short[1])

sculp = false
reenter = false
slowdown = false

ema = ema(close, ema_period)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
// plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
// plot(macd, title="MACD", color=col_macd, transp=0)
// plot(signal, title="Signal", color=col_signal, transp=0)

cross_up = crossover(macd, signal)
cross_down = crossunder(macd, signal)

if (inDateRange)

    over_macd = macd > 0 and signal > 0 ? true : false
    under_macd = macd < 0 and signal < 0 ? true : false
    over_water = close > ema ? true : false
    under_water = close < ema ? true : false
    slowdown := hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] > hist ? false : true)
    reenter := hist >= 0 ? (hist[1] < hist ? true : false) : (hist[1] > hist ? true : false)
    sculp := (hist >= 0 ? (hist[1] > hist ? true : false) : (hist[1] < hist ? true : false))
    
    if(reenter == true)
        if(reenter_cnt < reenter_delay)
            reenter_cnt := reenter_cnt + 1
    else
        if(reenter_cnt > 0)
            reenter_cnt := reenter_cnt - 1
                    
    if(sculp == true)
        if(sculp_cnt < sculp_delay)
            sculp_cnt := sculp_cnt + 1
    else
        if(sculp_cnt > 0)
            sculp_cnt := sculp_cnt - 1
        
    if(slowdown == false)
        if(close_cnt < 2)
            close_cnt := close_cnt + 1
        else
            close_cnt := 0
    
    // plotchar(fork_cnt, "fork count", "")
    // plotchar(spoon_cnt, "spoon count", "")

    // Entry
    if (cross_up == true)
        strategy.entry("long", strategy.long, comment = "long", alert_message = "long")
        on_long := true
        on_short := false
    if (cross_down == true)
        strategy.entry("short", strategy.short, comment = "short", alert_message = "short")
        on_short := true
        on_long := false
        
    // Sculp bottom / top
    if (sculp == true and sculp_cnt >= sculp_delay)
        if (hist >= 0)
            strategy.entry("sculp-short", strategy.short, comment = "sculp-short", alert_message = "sculp-short")
        else
            strategy.entry("sculp-long", strategy.long, comment = "sculp-long", alert_message = "sculp-long")
        
        sculp_cnt := 0
        sculp := false
            
    // Re-Entry
    if (reenter == true and reenter_cnt >= reenter_delay)
        if (hist >= 0)
            strategy.entry("re-long", strategy.long, comment = "re-long", alert_message = "re-long")
        else
            strategy.entry("re-short", strategy.short, comment = "re-short", alert_message = "re-short")
            
        reenter_cnt := 0
        reenter := false
            
    // Close
    strategy.close("long", when = slowdown, comment = "close long", alert_message = "close long")
    strategy.close("short", when = slowdown, comment = "close short", alert_message = "close short")
    strategy.close("re-long", when = slowdown, comment = "close re-long", alert_message = "close re-long")
    strategy.close("re-short", when = slowdown, comment = "close re-short", alert_message = "close re-short")
    strategy.close("sculp-long", when = slowdown, comment = "close sculp-long", alert_message = "close sculp-long")
    strategy.close("sculp-short", when = slowdown, comment = "close sculp-short", alert_message = "close sculp-short")
    
    if (slowdown)
        if (hist >= 0)
            on_long := false
        else
            on_short := false


plotchar(slowdown, "close", "")
plotchar(reenter, "reenter", "")
plotchar(reenter_cnt, "reenter count", "")
plotchar(sculp, "sculp", "")
plotchar(sculp_cnt, "sculp count", "")