Estrategia de cruce de la media móvil del MACD

El autor:¿ Qué pasa?, Fecha: 14 de septiembre de 2023 17:03:47
Las etiquetas:

Estrategia lógica

Esta estrategia combina el indicador MACD con promedios móviles, yendo largo cuando ambos dan señales alineadas.

La lógica es:

  1. Computación del MACD FAST, por lo general una EMA de 12 días

  2. Computación del MACD lento, normalmente la EMA de 26 días

  3. El MACD es rápido menos lento.

  4. La línea de señal es típicamente un MA de 9 días del MACD

  5. Calcular las MAs de 9 y 26 días

  6. Considera largo cuando el MACD cruza por encima de la línea de señal

  7. Venga largo cuando el MA de 9 días cruce el MA de 26 días

  8. Cierre largo cuando el MACD cruza por debajo de la línea de señal y el MA de 9 días cruza por debajo del MA de 26 días

La estrategia aprovecha el indicador de sobrecompra y sobreventa del MACD y la capacidad de seguimiento de tendencia del MA, combinando ambos para operaciones de probabilidades más altas.

Ventajas

  • El MACD juzga sobrecomprado/sobrevendido, el MA determina la tendencia

  • La combinación proporciona oportunidades de largo plazo de alta probabilidad

  • Reglas claras y fáciles de aplicar

Los riesgos

  • Requiere optimización para determinar los mejores parámetros

  • LONGO sólo incapaz de utilizar las oportunidades de corta duración

  • Las operaciones contra tendencia pueden aumentar las pérdidas

Resumen de las actividades

Esta estrategia utiliza las fortalezas del MACD y del MA para juzgar el ritmo del mercado.


/*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="หนีตาย")

Más.