
Esta estrategia utiliza la identificación de tendencias en el indicador RSI acumulado para realizar operaciones de compra y venta cuando el indicador RSI acumulado supera el umbral crítico. La estrategia puede filtrar eficazmente el ruido del mercado y bloquear las oportunidades de negociación de tendencias en las líneas más largas.
La estrategia se basa principalmente en el indicador RSI acumulado para tomar decisiones comerciales. El indicador RSI acumulado es el valor acumulado del indicador RSI. Al configurar el parámetro cumlen, se pueden agregar los valores del indicador RSI en días cumlen para obtener el indicador RSI acumulado.
Cuando el indicador RSI acumulado atraviesa la banda de Bollinger, se realiza una operación de compra y apertura de posiciones; cuando el indicador RSI acumulado atraviesa la banda de Bollinger, se realiza una operación de venta de posiciones cerradas. La banda de Bollinger se calcula a través de datos históricos de varios años y es el precio de referencia para el cambio dinámico.
Además, la estrategia también añade la opción de filtro de tendencia. La compra y apertura de la posición se realiza solo cuando el precio está por encima de la media móvil de 100 días, es decir, en el canal de la tendencia ascendente. Este filtro evita las transacciones erróneas cuando los precios oscilan.
La estrategia de ruptura RSI acumulada funciona de manera fluida y lógica, aumenta el juicio de la tendencia mediante el filtrado efectivo de los indicadores RSI acumulados, capta con precisión la tendencia de la línea media y larga y tiene un excelente rendimiento de retroalimentación histórica. Sin embargo, todavía hay espacio para optimizar, se puede comenzar a partir de la configuración de parámetros de ajuste, aumentar los indicadores de juicio y enriquecer las condiciones de posición en equilibrio, etc., para crear una estrategia de tendencia más sólida y completa.
/*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()