
La estrategia de cruce de línea media RSI es una estrategia aplicada a la negociación de criptomonedas. La estrategia aplica el promedio móvil al indicador RSI y emite señales de compra y venta según el cruce del RSI con su promedio móvil.
La estrategia primero calcula el indicador RSI. El indicador RSI se basa en cambios de alza y bajada en un período de tiempo determinado, lo que refleja la fortaleza de los precios. El RSI mayor a 70 es un área de sobrecompra y menor a 30 es una zona de sobreventa.
Luego, la estrategia aplica un promedio móvil basado en el indicador RSI. El promedio móvil puede filtrar las fluctuaciones aleatorias y determinar la dirección de la tendencia. Aquí se establece un promedio móvil RSI de 10 ciclos.
Cuando el RSI está por encima de su promedio móvil, se considera una señal de compra; cuando el RSI está por debajo de su promedio móvil, se considera una señal de venta. Se negocia de acuerdo con estas dos señales.
En el código, primero se calcula el indicador RSI de los períodos de longitud. Luego se calcula el promedio móvil de los períodos de 10 RSI ma. Cuando ma pasa por rsi, se compra; cuando ma pasa por rsi, se vende.
Además, el código traza un gráfico lineal de rsi, ma, y un gráfico columnar de rsi-ma. Traza una línea divisoria de rsi=70, rsi=30 y marca la correspondiente flecha de señal en el gráfico al comprar y vender.
En función del riesgo, se pueden ajustar los parámetros para optimizar el efecto del indicador, reducir adecuadamente las posiciones, establecer líneas de stop loss y filtrar las señales con el análisis de tendencias.
La estrategia de cruce de línea media RSI combina las ventajas de los indicadores de tendencia y los indicadores de filtración, es relativamente madura y confiable. La lógica de la estrategia es simple y fácil de entender, la implementación del código es completa y, en general, es una mejor estrategia de comercio de criptomonedas. Pero cualquier estrategia tiene lugares que necesitan ser optimizados, que necesitan ser constantemente probados y ajustados, y complementados con el juicio de tendencia, para obtener un mejor efecto de la estrategia.
/*backtest
start: 2022-10-31 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("RSI w MA Strategy", shorttitle="RSI w MA Strategy", overlay=false, initial_capital=10000, currency='USD',process_orders_on_close=true)
//TIME FRAME AND BACKGROUND CONTROL/////////////////////////////////////////////
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(01, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)
testStopYear = input(2022, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ?
color.teal : na
//bgcolor(testPeriodBackgroundColor, transp=50)
testPeriod() => true
////////////////////////////////////////////////////////////////////////////////
src = close, len = input(27, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
window = input(10, "RSI MA Window")
ma = sma(rsi,window)
plot(rsi, color=color.orange)
colorr= ma > rsi ? color.red : color.green
plot(ma,color=colorr)
band1 = hline(70)
band0 = hline(30)
fill(band1, band0, color=color.purple, transp=90)
diff = rsi - ma
plot(diff,style= plot.style_columns,transp=50,color = colorr)
plotshape(crossunder(rsi,ma)?rsi:na,title="top",style=shape.triangledown,location=location.absolute,size=size.tiny,color=color.red,transp=0)
plotshape(crossover(rsi,ma)?rsi:na,title="bottom",style=shape.triangleup,location=location.absolute,size=size.tiny,color=color.lime,transp=0)
buySignal = crossover(rsi,ma)
sellSignal = crossunder(rsi,ma)
//TRADE CONTROL/////////////////////////////////////////////////////////////////
if testPeriod()
if buySignal
strategy.close("Short", qty_percent = 100, comment = "Close Short")
strategy.entry("Long", strategy.long, qty=.1)
if sellSignal
strategy.close("Long", qty_percent = 100, comment = "Close Long")
strategy.entry("Short", strategy.short, qty=.1)
////////////////////////////////////////////////////////////////////////////////