Estrategia de ruptura acumulada de los índices de volatilidad

El autor:¿ Qué pasa?, Fecha: 2023-10-27 11:20:50
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el indicador de RSI acumulativo para identificar tendencias y tomar decisiones de compra y venta cuando el valor acumulado de RSI rompe los niveles clave de umbral.

Estrategia lógica

La estrategia se basa principalmente en el indicador de RSI acumulativo para las decisiones comerciales. El indicador de RSI acumulativo es la acumulación de valores de RSI. Al establecer el parámetro cumlen, los valores de RSI durante los últimos días cumlen se suman para derivar el indicador de RSI acumulativo. Este indicador puede filtrar el ruido del mercado a corto plazo.

Cuando el indicador de RSI acumulativo cruza por encima del carril superior de la banda de Bollinger, se abrirá una posición larga. Cuando el RSI acumulativo cruza por debajo del carril inferior de la banda de Bollinger, la posición abierta se cerrará.

Además, se agrega una opción de filtro de tendencia. Las operaciones largas solo se abrirán cuando el precio esté por encima del promedio móvil de 100 días, lo que significa que está en un canal de tendencia al alza. Este filtro evita operaciones erróneas durante las fluctuaciones del mercado.

Ventajas

  • Filtrar eficazmente el ruido y capturar las tendencias a medio y largo plazo utilizando el RSI acumulativo
  • Evite operaciones irrazonables con el filtro de tendencia
  • Utilizar niveles de referencia dinámicos en lugar de valores fijos para la toma de decisiones
  • Parámetros altamente configurables para ajustes basados en diferentes mercados
  • Resultados excepcionales de pruebas de retroceso durante 10 años, superando significativamente el rendimiento de compra y retención

Riesgos y mejoras

  • Las decisiones basadas únicamente en un indicador pueden añadir otros indicadores o filtros.
  • Ratio de apalancamiento fijo y elevado, puede ajustarse en función de las reducciones
  • Sólo las operaciones largas, pueden buscar oportunidades de cortocircuito
  • Optimizar las combinaciones de parámetros que varían significativamente entre los mercados
  • Enriquecer las condiciones de salida con stop loss, movimiento de stop loss, etc.
  • Considere combinarlo con otras estrategias para obtener efectos sinérgicos

Resumen de las actividades

La estrategia de ruptura del RSI acumulativo tiene un flujo lógico suave e identifica con precisión las tendencias a medio y largo plazo mediante el filtrado con el RSI acumulativo y la adición de juicio de tendencia. Los resultados de las pruebas de retroceso son excepcionales en la última década. Todavía hay margen para mejoras en áreas como el ajuste de parámetros, la adición de indicadores, el enriquecimiento de las condiciones de salida para hacer que la estrategia sea más robusta.


/*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"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// @version=5
// Author = TradeAutomation


strategy(title="Cumulative RSI Strategy", shorttitle="CRSI Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_contract, commission_value=.0035, slippage = 1, margin_long = 75, initial_capital = 25000, default_qty_type=strategy.percent_of_equity, default_qty_value=110)


// Cumulative RSI Indicator Calculations //
rlen  = input.int(title="RSI Length", defval=3, minval=1)
cumlen = input(3, "RSI Cumulation Length")
rsi = ta.rsi(close, rlen)
cumRSI = math.sum(rsi, cumlen)
ob = (100*cumlen*input(94, "Oversold Level")*.01)
os = (100*cumlen*input(20, "Overbought Level")*.01)


// Operational Function //
TrendFilterInput = input(false, "Only Trade When Price is Above EMA?")
ema = ta.ema(close, input(100, "EMA Length"))
TrendisLong = (close>ema)
plot(ema)


// Backtest Timeframe Inputs // 
startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31)
startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12)
startYear = input.int(title="Start Year", defval=2010, minval=1950, maxval=2100)
endDate = input.int(title="End Date", defval=1, minval=1, maxval=31)
endMonth = input.int(title="End Month", defval=1, minval=1, maxval=12)
endYear = input.int(title="End Year", defval=2099, minval=1950, maxval=2100)
InDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))


// Buy and Sell Functions //
if (InDateRange and TrendFilterInput==true)
    strategy.entry("Long", strategy.long, when = ta.crossover(cumRSI, os) and TrendisLong, comment="Buy", alert_message="buy")
    strategy.close("Long", when = ta.crossover(cumRSI, ob) , comment="Sell", alert_message="Sell")
if (InDateRange and TrendFilterInput==false)
    strategy.entry("Long", strategy.long, when = ta.crossover(cumRSI, os), comment="Buy", alert_message="buy")
    strategy.close("Long", when = ta.crossover(cumRSI, ob), comment="Sell", alert_message="sell")
if (not InDateRange)
    strategy.close_all()

Más.