
La estrategia se basa en el cálculo de la diferencia entre la media móvil rápida y la media móvil lenta para formar el indicador MACD, y luego se combina con la línea de señal para determinar la tendencia del mercado financiero y la zona de sobreventa y sobreventa. Se hace más cuando el MACD y la línea de señal forman un forzador múltiple y el precio está por encima de la media de 200 días, y se forma un forzador vacío y el precio está por debajo de la media de 200 días.
El principio básico es calcular el diferencial entre la media móvil rápida y la media móvil lenta para formar el indicador MACD y determinar la dirección de la tendencia del mercado, y luego usar la línea de señal para determinar la zona de sobreventa y sobreventa. Cuando la MACD y la línea de señal forman un tenedor de oro, la señal de más cabezas es más, y cuando se forma un tenedor de muertos, la señal de vacío está vacía. Al mismo tiempo, la relación de los precios con la media de 200 días para filtrar la señal, solo se hace un tenedor de oro cuando el precio está por encima de la media de 200 días, y se hace un tenedor de muertos cuando el precio está por debajo de la media de 200 días.
El método de cálculo es el siguiente:
Cuando el MACD está por encima de la línea de señal y el MACD y la línea de señal están al mismo tiempo por debajo de 0, haga una señal de más para el tenedor de oro. Cuando el MACD está por debajo de la línea de señal y el MACD y la línea de señal están por encima de 0, haga una señal de vacío para el tenedor de oro.
Se puede reducir el riesgo mediante la reducción adecuada del ciclo promedio, la adición de otros indicadores de juicio y la adición de medidas de deterioro.
1.tested on different timeframes from 15m upto 1D, where optimal results where on 4H timeframe in terms of risk adjusted returns
2.optimize fast ma and slow ma so that macd represents cycle, I found 7-21 performs good for 15m chart
3.also tested hull moving average for MACD which gave good results
4.stoploss can also be trailed for better risk management
En general, esta estrategia es muy sencilla y práctica, produce una señal de negociación de alta probabilidad a través de un doble criterio de juicio y filtración de precios, una alta tasa de ganancias marginales, utiliza el conjunto de parámetros clásicos de MACD y no se optimiza en exceso. El espacio para la optimización es grande, y se puede mejorar aún más el rendimiento de la estrategia mediante el ajuste del conjunto de parámetros promedio, la adición de otros indicadores de juicio y medidas de detención de pérdidas. 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)