Estrategia de negociación de promedio móvil de tendencia

El autor:¿ Qué pasa?, Fecha: 2023-09-21 20:34:43
Las etiquetas:

Resumen general

Esta estrategia utiliza una combinación de promedios móviles rápidos y lentos para determinar la dirección de la tendencia y capturar las tendencias a medio y largo plazo para el comercio de tendencias.

Estrategia lógica

La estrategia se basa principalmente en la cruz de oro y la cruz de muerte de las medias móviles para determinar las tendencias del mercado.

Cuando el MA rápido cruza por encima del MA lento, indica una tendencia alcista en el mercado, y la estrategia será larga en la apertura de la siguiente barra.

Además, el parámetro bars está configurado para filtrar las falsas rupturas. El valor predeterminado es 2, lo que significa que el MA rápido debe cerrar por encima del MA lento durante 2 barras consecutivas antes de activar una señal larga. Esto evita las falsas rupturas de manera efectiva.

Para el comercio de criptomonedas, la estrategia también incorpora una lógica de valor extremo: solo cuando los MA rápidos y lentos alcanzan áreas extremas se activarán las señales comerciales. Esto evita aún más las señales falsas.

La regla de salida es simple y directa: posición cerrada cuando se alcanza el stop loss.

Ventajas

  • El sistema de doble MA puede realizar un seguimiento eficaz de las tendencias
  • El rápido MA reacciona rápidamente a los cambios de tendencia
  • El MA lento determina la dirección general
  • El parámetro bars filtra algunas fallas
  • Los protectores de valor extremo evitan señales falsas esporádicas alrededor de puntos críticos
  • El movimiento del stop loss gestiona los riesgos

Los riesgos

  • Los sistemas de doble MA tienden a perder en torno a las inversiones de tendencia
  • Las pérdidas de parada de movimiento pueden detenerse prematuramente
  • El filtro bars puede perder algunas señales válidas
  • Los guardias de valores extremos a veces pierden buenas entradas
  • La estrategia funciona mejor en mercados con tendencias fuertes

Los riesgos pueden reducirse:

  • Optimización del parámetro bars
  • Añadir otros filtros como MACD
  • Ajuste de los niveles de stop loss para evitar una parada prematura
  • Considerando las reingresas

Direcciones de optimización

La estrategia puede mejorarse en los siguientes aspectos:

  1. Ajuste de los parámetros MA

Prueba más combinaciones de MA para encontrar los parámetros óptimos para el mercado actual, por ejemplo, MA rápida de 10 períodos y MA lenta de 50 períodos.

  1. Adición de otros indicadores

Prueba agregando MACD, KDJ y otros indicadores para establecer reglas de entrada más estrictas y evitar señales falsas.

  1. Optimización de las entradas

Se puede mejorar la entrada simple actual de doble MA:

  • Introducir largo solo si MACDDIFF también cruza por encima de 0 cuando el MA rápido cruza por encima del MA lento
  • Introduzca largo sólo si KDJ da cruz de oro cuando el MA rápido cruza el MA lento
  1. Optimización de las paradas

Prueba otros mecanismos de detención, como la detención trasera, para evitar una detención prematura.

  1. Añadir nuevas entradas

Permitir la reentrada después de las paradas, para evitar perder tendencias.

Resumen de las actividades

En resumen, esta estrategia básica de seguimiento de tendencias tiene una lógica simple y directa: usar dos MAs para la dirección de la tendencia y paradas móviles para la gestión de riesgos. Los pros son fáciles de entender, pueden beneficiarse de las tendencias y gestionar los riesgos. Pero también existen limitaciones, como malas señales durante las consolidaciones, paradas prematuras, etc. Se necesita sintonización y optimización en vivo, como agregar filtros, ajustar paradas, para que sea adaptable a diferentes entornos de mercado. Como estrategia de trading de tendencias introductoria, es adecuada para que los principiantes aprendan y apliquen. Pero se deben tener en cuenta sus limitaciones y se deben explorar estrategias más avanzadas.


/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.3", shorttitle = "Trend MAs str 2.3", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

src = close

//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2

//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2

//Trend
trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Fast RSI
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//CryptoBottom
mac = sma(close, 10)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)

//Signals
up1 = trend == 1 and (low < center2 or usefastsma == false) and redbars == 1
dn1 = trend == -1 and (high > center2 or usefastsma == false) and greenbars == 1
up2 = high < center and high < center2 and bar == -1 and needex
dn2 = low > center and low > center2 and bar == 1 and needex
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0

//Lines
plot(center2, color = red, linewidth = 3, transp = 0, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Trading
stoplong = up1 == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn1 == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

if up1 or up2 or up3
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.exit("Stop Long", "Long", stop = stoplong)

if dn1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.exit("Stop Short", "Short", stop = stopshort)
    
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    

Más.