Estrategia de cruce de medias móviles MACD


Fecha de creación: 2023-09-14 17:03:47 Última modificación: 2023-09-14 17:03:47
Copiar: 0 Número de Visitas: 725
1
Seguir
1617
Seguidores

Principio de estrategia

La estrategia combina el MACD con el indicador de las medias móviles, para realizar múltiples operaciones cuando ambos dan una señal de sincronización.

La lógica de la transacción es la siguiente:

  1. Calcula el valor de FAST MACD, generalmente tomando el promedio móvil del índice de 12 días

  2. Calcula el valor de SLOW MACD, que generalmente toma una media móvil de 26 días

  3. El MACD es FAST menos SLOW

  4. Para calcular la línea de señal del MACD, se toma una media móvil de 9 días.

  5. Calcular las medias móviles de 9 y 26 días

  6. Considere hacer más cuando se cruza la línea de señal en MACD

  7. Cuando el promedio de 9 días está en el promedio de 26 días, haz más.

  8. Cuando el MACD pasa por debajo de la línea de señal y la línea promedio de 9 días pasa por debajo de la línea promedio de 26 días, la posición está cerrada

Esta estrategia aprovecha al máximo la capacidad de seguimiento de tendencias de los juicios de sobreventa y sobreventa del MACD y de la línea de paridad, combinando ambos para operar con mayor éxito.

Ventajas estratégicas

  • El MACD juzga sobrecompra y sobreventa, y la línea media juzga la tendencia

  • La combinación de ambas pruebas ofrece una alta probabilidad de que haya más oportunidades

  • Las reglas de operación son claras y fáciles de implementar

Riesgo estratégico

  • Las pruebas repetidas para determinar los parámetros óptimos

  • No se puede aprovechar la oportunidad de un trabajo vacío

  • La tendencia es que hacer más puede aumentar las pérdidas

Resumir

Esta estrategia aprovecha al máximo las ventajas del MACD y el indicador de la línea media, combinando los dos para determinar el ritmo del mercado. Sin embargo, solo hay que tener en cuenta los problemas de hacer más y optimizar los parámetros.

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


//@version=4
strategy("MACD Cross+MA", overlay=true)
//@version=4
// Getting inputs
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)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 2009)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"


// 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
plot(sma(close,9),color=color.red)
plot(sma(close,26),color=color.green)
//Condition
BMacdcondition= (macd>signal)
SMacdcondition= (macd<signal)
longCondition = crossover(sma(close, 9), sma(close, 26))
shortCondition = crossunder(sma(close, 9), sma(close, 26))
//entry
if (BMacdcondition) and window()
    (longCondition)
    strategy.entry("LONG", strategy.long)
if (shortCondition) and window()
    (SMacdcondition)
    strategy.close("LONG", qty_percent=100 , comment="หนีตาย")