Estrategia de avance de oscilación

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

img

Resumen general

Esta estrategia se basa en la idea clásica de Larry Connors, utilizando el sistema de media móvil doble para capturar la oscilación a mediano plazo del mercado y obtener ganancias cuando está sobrecomprado o sobrevendido.

Estrategia lógica

  1. Utilice el RSI de 2 períodos para determinar si el precio está en la región de sobreventa.

  2. Utilice la media móvil de largo periodo (200 períodos) para determinar la dirección de la tendencia principal.

  3. Cuando el precio esté por encima del MA largo y el RSI esté por debajo de la línea de sobreventa, abrir una posición larga al precio de mercado.

  4. Cuando el precio se rompe a través del período corto de MA (5 períodos) hacia arriba, cierre la posición larga al precio de mercado para obtener ganancias.

Además, la estrategia incluye las siguientes opciones configurables:

  • Los parámetros del RSI: duración del período, niveles de sobrecompra/sobreventa.

  • Parámetros del MA: período largo y corto.

  • Filtro RSI MA: añadir RSI MA para evitar las fluctuaciones del RSI.

  • Pérdida de parada: configurable para añadir o no pérdida de parada.

Análisis de ventajas

  1. El sistema de doble MA puede hacer un seguimiento eficaz de las tendencias a medio y largo plazo.

  2. RSI evita perder el mejor momento de entrada durante las violentas fluctuaciones.

  3. Configuración flexible adecuada para la optimización de parámetros.

  4. Es una estrategia innovadora, no es probable que pierda señales.

Análisis de riesgos

  1. La estrategia de doble MA es sensible a los parámetros y requiere optimización para lograr el mejor rendimiento.

  2. No hay stop loss conlleva el riesgo de expandir las pérdidas.

  3. Si el riesgo de ruptura es falso, el riesgo de pérdidas en el mercado oscilante.

  4. Requiere una validación a través de mercados y períodos de tiempo.

Direcciones de optimización

  1. Prueba y optimiza las combinaciones de parámetros RSI y MA para encontrar el óptimo.

  2. Prueba filtros de entrada adicionales como picos de volumen para reducir las señales falsas.

  3. Añadir pérdidas de parada de seguimiento para controlar las pérdidas de una sola operación.

  4. Evaluar el impacto de los diferentes períodos de retención para determinar el óptimo.

  5. Prueba la robustez en períodos de tiempo más largos como diariamente.

Resumen de las actividades

Esta estrategia combina el seguimiento de tendencias de doble MA y el RSI sobrecomprado / sobrevendido para formar un sistema de ruptura típico. Con la optimización de parámetros, la gestión estricta del riesgo y la validación de la robustez, puede convertirse en una poderosa herramienta de negociación cuantitativa. Pero los operadores deben tener cuidado con el sobreajuste de las pruebas de retroceso y seguir mejorando la estrategia para adaptarse a las cambiantes condiciones del mercado.


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

//@version=3
strategy("RSI Strategy", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Starter Parameters

length = input(title="RSI Lenght", defval=2)
overBoughtRSI = input(title="OverBought Level for RSI",  defval=10)
shortLength = input(title="Short MA Length",  defval=5)
longLength = input(title="Long MA Length",  defval=200)

RuleMRSI=input(title="RSI Moving Average Filter", defval= true)
lengthmrsi=input(title="RSI Moving Average Length",  defval=4)
overBoughtMRSI=input(title="OverBought Level for the Moving Average of the RSI",  defval=30)

Rulestop=input(title="Apply Stop Loss", defval=false)
stop_percentual=input(title="% Stop Loss",  defval=10)

//RSI

vrsi = rsi(close, length)

//Moving Averages

longma = sma(close,longLength)
shortma = sma(close,shortLength)
mrsi=sma(vrsi,lengthmrsi)

//Stop Loss

stop_level = strategy.position_avg_price*((100-stop_percentual)/100)

//Backtest Period
testStartYear = input(2009, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
    
//Strategy

if testPeriod() and (not na(vrsi))
    if  (RuleMRSI==false) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==false) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

Más.