Estrategia de seguimiento del equilibrio entre posiciones largas y cortas del MACD


Fecha de creación: 2023-10-17 16:15:53 Última modificación: 2023-10-17 16:15:53
Copiar: 0 Número de Visitas: 704
1
Seguir
1617
Seguidores

Estrategia de seguimiento del equilibrio entre posiciones largas y cortas del MACD

Descripción general

La estrategia es una estrategia de seguimiento de tendencias que utiliza el indicador MACD para identificar las direcciones de los polígonos. Se genera una línea principal MACD calculando la diferencia entre las medias móviles rápidas y las medias móviles lentas. La estrategia utiliza una cruz dorada de la línea principal MACD y la línea de señal para generar una señal de compra y una cruz muerta para generar una señal de venta, lo que permite un seguimiento de equilibrio polígono.

Principio de estrategia

El código primero establece el tiempo de inicio de la retroalimentación para probar el rendimiento histórico de la estrategia.

Luego se calcula el indicador MACD, que incluye la configuración de la longitud de las medias móviles rápidas, las medias móviles lentas y la línea media MACD. Las líneas rápidas son más sensibles y las líneas lentas son más estables. Sus diferencias forman la línea principal de MACD, y luego la línea media forma la línea de señal MACD.

De acuerdo con las señales de más y de menos, se registra la última vez que se produjo la señal. Cuando la línea rápida y la línea lenta se cruzan, se confirma y se registra la señal de compra/venta, y entonces se puede abrir la posición.

Después de entrar en el mercado, sigue el precio más alto y más bajo de la posición. Establece un porcentaje de stop loss y se retira cuando los perdedores alcanzan ese porcentaje.

Ventajas estratégicas

  1. El indicador MACD es un indicador de tendencias y es uno de los indicadores clásicos del análisis técnico.

  2. El diseño diferencial de las medias rápidas y lentas permite capturar la dinámica y la dirección de los cambios en los precios antes de que ocurra.

  3. El efecto de filtración de la línea uniforme puede filtrar algunas señales falsas.

  4. La estrategia incluye un mecanismo de suspensión de pérdidas para controlar el riesgo.

Riesgo estratégico

  1. Los indicadores MACD son propensos a generar falsas señales y tienen un espacio limitado para la optimización.

  2. La configuración incorrecta del punto de parada puede ser demasiado activa o conservadora y debe optimizarse individualmente para las diferentes variedades.

  3. Las posiciones de cantidad fija son propensas a un exceso de apalancamiento y se puede considerar establecer un umbral de riesgo en función del tamaño del capital.

  4. La racionalidad de la elección de la ventana de tiempo de retracción debe ser verificada para evitar una sobreadaptación.

Optimización de la estrategia

  1. Optimización de la combinación de parámetros de la línea media rápida y lenta para encontrar los mejores parámetros para la adaptación de diferentes variedades.

  2. Añadir filtros de otros indicadores, como K-line, Blink, RSI, etc. para verificar la señal.

  3. Se puede evaluar la eficacia de los diferentes puntos de parada en función de indicadores como la retirada y el índice de Sharpe.

  4. Optimización de las estrategias de detención de pérdidas, como el movimiento de la detención de pérdidas, la suspensión de la detención de pérdidas.

  5. Trate de establecer posiciones dinámicas en función de los cambios en el capital, la volatilidad, etc.

Resumir

La estrategia de equilibrio MACD es una estrategia de seguimiento de tendencias basada en indicadores técnicos clásicos. Tiene una capacidad de captura sensible a la dinámica de los cambios en los precios, que se puede adaptar bien a las diferentes variedades mediante la optimización de los parámetros. Combinado con más indicadores de fluctuación, métodos de stop loss y gestión de posiciones dinámicas, puede continuar mejorando la estabilidad y la rentabilidad de la estrategia.

Código Fuente de la Estrategia
/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("MACD BF", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Component Code Start ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true

///////////////  MACD Component - Default settings for one day. /////////////// 
fastLength = input(12) // 72 for 4hr
slowlength = input(26) // 156 for 4 hr
MACDLength = input(12)  // 12 for 4hr

MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

long = crossover(delta, 0) 
short = crossunder(delta, 0) 

last_long = long ? time : nz(last_long[1])
last_short = short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal = short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = long_signal ? time : nz(last_long_signal[1])
last_short_signal = short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low = not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

sl_inp = input(5.0, title='Stop Loss %', type=float)/100

/////////////// Strategy Component /////////////// 
// Strategy Entry
if testPeriod()
    strategy.entry("Long Entry",  strategy.long, when=long_signal)
    strategy.entry("Short Entry", strategy.short, when=short_signal)

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) // LONG SL
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) // SHORT SL

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

// Strategy SL Exit
if testPeriod()
    strategy.exit("Long SL", "Long Entry", stop=long_sl, when=since_longEntry > 1)
    strategy.exit("Short SL", "Short Entry", stop=short_sl, when=since_shortEntry > 1)

//plot(strategy.equity, title="equity", color=blue, linewidth=2, style=areabr)