Estrategia de negociación de media de movimiento doble lenta y rápida

El autor:¿ Qué pasa?, Fecha: 2023-10-27 16:41:24
Las etiquetas:

img

Resumen general

La estrategia de negociación de media móvil doble genera señales de negociación mediante el cálculo de medias móviles rápidas y lentas y la vigilancia de cruces. Cuando el promedio móvil rápido cruza por encima del promedio móvil lento, se toma una posición larga. Cuando el promedio móvil rápido cruza por debajo del promedio móvil lento, se toma una posición corta. La estrategia se puede utilizar tanto para el comercio de tendencias como para el comercio de contratrends.

Estrategia lógica

La estrategia establece primero las longitudes de la media móvil rápida maFastLength y la media móvil lenta maSlowLength. Luego calcula la media móvil rápida fastMA y la media móvil lenta slowMA. La media móvil rápida reacciona más rápidamente a los cambios de precios y se utiliza para juzgar la tendencia actual, mientras que la media móvil lenta reacciona más lentamente y se utiliza para determinar la dirección de la tendencia.

Cuando el promedio móvil rápido cruza por encima del promedio móvil lento, se genera una señal de entrada larga goLong ((). Cuando el promedio móvil rápido cruza por debajo del promedio móvil lento, las posiciones largas existentes se cierran con la señal killLong (().

La estrategia se puede configurar solo para el largo, solo para el corto o permitir operaciones largas y cortas.

En el modo solo largo, las posiciones largas se ingresan en la señal goLong() y se salen en la señal killLong().

En el modo sólo corto, las posiciones cortas se ingresan en la señal killLong() y se salen en la señal goLong().

En el modo de intercambio, las posiciones largas se ingresan en goLong ((), se cierran e invierten a corto en killLong (().

La estrategia también incluye stop loss, trailing stop, mensajería y otras características opcionales.

Ventajas

  1. Simple y fácil de implementar.

  2. Flexibilidad para ir largo, corto o ambos.

  3. Funciones opcionales de stop loss y trailing stop.

  4. Mensajes personalizables para alertar las operaciones.

  5. Sensible a los cambios de tendencia en el mercado.

  6. Los parámetros ajustables se adaptan a los diferentes mercados.

Los riesgos

  1. Puede generar intercambios excesivos en mercados agitados o variados.

  2. Lento para reaccionar a eventos repentinos de noticias.

  3. La selección de parámetros afecta el rendimiento de la estrategia.

  4. Debe seguir las señales estrictamente, evitar el comercio discrecional.

  5. Los costos de negociación pueden erosionar las ganancias si no se consideran.

Mejoras

  1. Añadir filtros como RSI para evitar señales falsas.

  2. Implementar la optimización de parámetros para encontrar los mejores ajustes.

  3. Utilice paradas dinámicas para bloquear las ganancias y ajustarse.

  4. Incorporar aprendizaje automático para ayudar a la predicción de tendencias.

  5. Optimizar la mensajería para los hábitos comerciales individuales.

Conclusión

La estrategia de la media móvil dual es relativamente simple y útil para detectar tendencias fuertes. Sin embargo, se debe tener cuidado de evitar los golpes en entornos de baja tendencia. Los parámetros de ajuste fino y la adición de indicadores auxiliares o mejoras pueden mejorar aún más la robustez y la adaptabilidad.


/*backtest
start: 2022-10-20 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy("SMA Strategy", shorttitle="SMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === Inputs ===
// short ma
maFastSource = input(defval=close, title="Fast MA Source")
maFastLength = input(defval=3, title="Fast MA Period", minval=1)

// long ma
maSlowSource = input(defval=close, title="Slow MA Source")
maSlowLength = input(defval=9, title="Slow MA Period", minval=1)

// Trade direction
shorting = input(defval=false, title="Short only?")
longonly = input(defval=true, title="Long only?")
swapping = input(defval=false, title="Swap orders?")
// risk management
useStop = input(defval=false, title="Use Initial Stop Loss?")
slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1)
useTS = input(defval=false, title="Use Trailing Stop?")
tslPoints = input(defval=120, title="Trail Points", minval=1)
useTSO = input(defval=false, title="Use Offset For Trailing Stop?")
tslOffset = input(defval=20, title="Trail Offset Points", minval=1)

// Messages for buy and sell
message_long_entry  = input("Long entry message", title="Long entry message")
message_long_exit   = input("Long exit message", title="Long exit message")
message_short_entry = input("Short entry message", title="Short entry message")
message_short_exit  = input("Short exit message", title="Short exit message")

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-01T00:00:00"), type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time)
 
time_cond  = true
// === Vars and Series ===
fastMA = sma(maFastSource, maFastLength)
slowMA = sma(maSlowSource, maSlowLength)

plot(fastMA, color=color.blue)
plot(slowMA, color=color.purple)

goLong() =>
    crossover(fastMA, slowMA)
killLong() =>
    crossunder(fastMA, slowMA)
    
// Long only
if longonly
    strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry)
    strategy.close("Buy", when=killLong() and time_cond, alert_message = message_long_exit)

// Short only
if shorting
    strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry)
    strategy.close("Sell", when=goLong() and time_cond, alert_message = message_short_exit)
    
// Order Swapping
if swapping
    strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry)
    strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry)

if useStop
    strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08, alert_message = message_long_exit)
    strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08, alert_message = message_short_exit)



Más.