Estrategia de seguimiento de tendencias basada en la media móvil


Fecha de creación: 2023-10-07 15:04:00 Última modificación: 2023-10-07 15:04:00
Copiar: 0 Número de Visitas: 626
1
Seguir
1617
Seguidores

Descripción general

Esta estrategia calcula los promedios móviles de diferentes períodos, identifica la dirección de la tendencia actual y en combinación con el indicador RSI envía una señal de compra y venta. Cuando el promedio móvil de corto plazo atraviesa el promedio móvil de largo plazo, considera que la tendencia es hacia arriba y realiza una operación de compra.

Principio de estrategia

  1. Calcule las medias móviles simples de 10, 20, 50, 100 y 200 días.

  2. Calcula el RSI de 14 días.

  3. Se compra cuando el SMA de 10 días supera el SMA de 50 días y el RSI es mayor que 30 y el SMA de 20 días es superior o igual al SMA de 100 días o el SMA de 50 días es superior o igual al SMA de 100 días.

  4. Establezca el precio de parada como el punto de compra multiplicado por 1 menos el porcentaje de parada.

  5. La venta se realiza cuando:

    • El SMA del día 10 cruza el SMA del día 50 y el precio de cierre es inferior al SMA del día 20: la tendencia se invierte y se vende
    • El precio de cierre fue inferior al 95% del precio de compra: Stop loss y venta
    • El precio de cierre es inferior al precio de parada: la tendencia sigue la parada de pérdidas.

La estrategia determina la dirección de la tendencia del mercado a través de las medias móviles y establece un stop loss para controlar el riesgo. El indicador RSI se utiliza para filtrar brechas falsas. Comprar cuando el SMA corto atraviesa el SMA largo, lo que indica una tendencia alcista, y establecer una línea de stop loss para controlar el riesgo.

Análisis de las ventajas

  • El uso de medias móviles para determinar la dirección de la tendencia, comprar en la fase de la tendencia al alza, puede evitar que las operaciones de liquidación de los mercados de la oscilación
  • El uso de medias móviles multi-periódicas para evitar ser engañados por las fluctuaciones de precios a corto plazo
  • El indicador RSI se utiliza para filtrar las señales falsas
  • Establezca un límite de pérdidas para controlar el riesgo de pérdidas individuales
  • La adopción de trends tracking para bloquear las ganancias

Análisis de riesgos

  • Los promedios móviles están rezagados y pueden haber perdido el mejor momento para que los precios se inviertan
  • La configuración de stop loss demasiado flexible puede generar grandes pérdidas individuales
  • La configuración de parada de pérdidas demasiado apretada puede causar parada de pérdidas demasiado frecuente
  • Los que siguen la tendencia pueden perder más dinero si se retiran prematuramente

Se puede optimizar mediante el ajuste del ciclo de las medias móviles, el ajuste de los puntos de parada, etc. También se puede considerar la combinación de otros indicadores para mejorar la precisión de la toma de decisiones.

Dirección de optimización

  • Ajustar el ciclo de las medias móviles para que se ajusten mejor a los diferentes entornos del mercado
  • Optimización de los parámetros del RSI para mejorar la precisión de los juicios sobre sobrecompra y sobreventa
  • Establezca un nivel de parada estática y una amplitud de parada de rastro razonables según las características de las diferentes variedades
  • Añadir otros indicadores para evitar falsas señales
  • Se puede ajustar el punto de parada de acuerdo con la dinámica de los indicadores como la volatilidad
  • Parámetros optimizados automáticamente mediante métodos de aprendizaje automático

Resumir

Esta estrategia tiene una idea general clara, utiliza un promedio móvil para juzgar la tendencia y establece un stop loss para controlar el riesgo, es una estrategia de seguimiento de tendencias más típica. Se puede mejorar aún más el rendimiento de la estrategia de retroalimentación y el mercado real mediante la optimización de los parámetros y la adición de otros indicadores de juicio.

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

//@version=4
strategy("MA_Script", overlay=true)

// STEP 1:
// Configure trail stop level with input options (optional)
longTrailPerc=input(title="Trail Long Loss (%)", type=input.float, minval=0.0, step=0.05, defval=0.1)

// Configure backtest start date with inputs
startDate=input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31)
startMonth=input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12)
startYear=input(title="Start Year", type=input.integer, defval=2020, minval=1800, maxval=2100)

// See if this bar's time happened on/after start date
afterStartDate=(time >=timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))

// Calculate Relative Strength Index
rsiValue=rsi(close, 14)

// Calculate moving averages
MA10_Val =sma(close, 10)
//plot(MA10_Val, color=color.yellow, linewidth=1)

MA20_Val =sma(close, 20)
plot(MA20_Val, color=color.green, linewidth=1)

MA50_Val =sma(close, 50)
plot(MA50_Val, color=color.red, linewidth=1)

MA100_Val =sma(close, 100)
plot(MA100_Val, color=color.blue, linewidth=1) 

MA200_Val =sma(close, 200)
plot(MA200_Val, color=color.purple, linewidth=1) 

// Calculate candlestick
C_BodyHi = max(close, open)
C_BodyLo = min(close, open)
C_Body = C_BodyHi - C_BodyLo
C_UpShadow = high - C_BodyHi
C_DnShadow = C_BodyLo - low

// STEP 2:
// Calculate entry trading conditions
buyCondition_1=crossover(MA10_Val, MA50_Val) and (rsiValue > 30) and ((MA20_Val >=  MA100_Val) or (MA50_Val >=  MA100_Val))
avg_price = (close + open)/2

// First Entry
if (afterStartDate)
    strategy.entry(id="Entry_Trade_1", long=true, limit=avg_price, when=buyCondition_1)

plotchar(afterStartDate and crossover(MA10_Val, MA50_Val), textcolor = color.blue, text = 'MA\n')

// Determine trail stop loss prices
longStopPrice=0.0

longStopPrice :=if (strategy.position_size > 0)
    stopValue=C_BodyHi * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0
plot(longStopPrice, color=color.orange, linewidth=1)

bought_1=strategy.position_size[0] > strategy.position_size[1]
entry_Point_1=valuewhen(bought_1, avg_price, 0)

// STEP 3:
// Calculate exit trading conditions
sellCondition_2=crossunder(MA10_Val, MA50_Val) and (close < MA20_Val)
sellCondition_3_temp=valuewhen((C_BodyHi >= entry_Point_1*1.2), 1, 0)
sellCondition_1=(entry_Point_1*0.95 > close) and (sellCondition_3_temp != 1)
sellCondition_3=(sellCondition_3_temp == 1) and (strategy.position_size > 0) and close <= longStopPrice
plotchar((sellCondition_3 == 1) and (strategy.position_size > 0) and close <= longStopPrice, textcolor = color.red, text = 'TS\n', show_last = 11)
plotchar(crossunder(MA10_Val, MA50_Val), textcolor = color.red, text = 'MA\n')

id_val = ""
stop_val = close
condition = false

if sellCondition_1
    id_val := "Exit By Stop Loss At 7%"
    stop_val := entry_Point_1*0.93
    condition := true
else if sellCondition_2
    id_val := "Exit By Take Profit based on MA"
    stop_val := close
    condition := true
else if sellCondition_3
    id_val := "Exit By Trailing Stop"
    stop_val := longStopPrice
    condition := true

// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
    //strategy.exit(id="Exit By Stop Loss At 7%", from_entry="Entry_Trade_1", stop=entry_Point_1*0.93, when=sellCondition_1)
    //strategy.exit(id="Exit By Take Profit based on MA", from_entry="Entry_Trade_1", stop=close, when=sellCondition_2)
    strategy.exit(id=id_val, from_entry="Entry_Trade_1", stop=stop_val, when=condition)