Esta estrategia genera el indicador MACD mediante el cálculo de la diferencia entre las líneas de promedio móvil rápido y lento, y juzga la tendencia y las áreas de sobrecompra / sobreventa de los mercados financieros junto con la línea de señal.
La lógica básica es usar el indicador MACD generado a partir de la diferencia de MA rápida y lenta para determinar la dirección de la tendencia del mercado, y la línea de señal para juzgar los niveles de sobrecompra / sobreventa. Cuando el MACD y la línea de señal forman una cruz de oro, es una señal larga para ir largo. Cuando se forma una cruz muerta, es una señal corta para ir corto. Mientras tanto, utiliza la relación del precio con el MA de 200 días para filtrar las señales, tomando solo señales largas cuando el precio está por encima de la MA de 200 días y señales cortas cuando el precio está por debajo de la MA de 200 días, para evitar golpes durante las tendencias fuertes.
El método específico de cálculo es el siguiente:
Cuando el MACD cruza por encima de la línea de señal mientras ambos están por debajo de 0, es una señal larga de cruz dorada. Cuando el MACD cruza por debajo de la línea de señal mientras ambos están por encima de 0, es una señal corta de cruz muerta. Mientras tanto, solo toma mucho tiempo cuando el precio está por encima del MA de 200 días, y corto cuando el precio está por debajo del MA de 200 días.
Los riesgos pueden reducirse acortando los períodos de MA, añadiendo otros indicadores y añadiendo stop loss.
1.Probados en diferentes plazos de tiempo, desde 15m hasta 1D, resultados óptimos en 4H en rendimientos ajustados al riesgo
2.Optimizar el MA rápido y lento para que el MACD capte ciclos, 7-21 bueno para 15m
3.La media global del MACD ha dado buenos resultados
4.La reducción de las pérdidas de seguimiento mejora la gestión del riesgo
Esta es en general una estrategia muy simple y práctica, generando señales de comercio de alta probabilidad a través de un sistema de indicadores duales y filtrado de precios. Tiene un margen de ganancia relativamente alto, utiliza la combinación de parámetros MACD clásicos para evitar la sobre-optimización. Todavía hay un gran espacio para la optimización ajustando los parámetros MA, agregando otros indicadores y mecanismos de stop loss para mejorar aún más el rendimiento. En general, es una estrategia cuantitativa típica basada en los fundamentos.
/*backtest start: 2024-02-14 00:00:00 end: 2024-02-21 00:00:00 period: 1h 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/ // © Hurmun //@version=4 strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100) 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=false) // 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 movinga2 = input(title="movinga 2", type=input.integer, defval=200) movinga200 = sma(close, movinga2) plot(movinga200, "MA", color.orange) longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200 if (longCondition) strategy.entry("My Long Entry Id", strategy.long) shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200 if (shortCondition) strategy.entry("My Short Entry Id", strategy.short) shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100 longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100 stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100 longStoploss = strategy.position_avg_price * (1 - stoploss) longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc) shortStoploss = strategy.position_avg_price * (1 + stoploss) if (strategy.position_size > 0 ) strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss) if (strategy.position_size < 0 ) strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)