Estrategia de negociación del RSI y de la media móvil de varios plazos

El autor:¿ Qué pasa?, Fecha: 2024-01-22 11:00:20
Las etiquetas:

img

Resumen general

Esta estrategia combina el indicador RSI, la media móvil simple (SMA) y la media móvil ponderada (WMA) para identificar las señales de negociación.

Estrategia lógica

La estrategia primero calcula la WMA de 144 períodos y la SMA de 5 períodos en los marcos de tiempo de 1 hora y 5 minutos. Un mercado alcista se identifica solo cuando la SMA de 5 minutos está por encima de la WMA. La estrategia luego calcula el oscilador RSI y las líneas K y D correspondientes. Las señales de venta se generan cuando la línea K cruza por debajo de la línea D desde el área de sobrecompra. Las señales de compra se generan cuando la línea K cruza la línea D desde el área de sobreventa.

Análisis de ventajas

Esta es una estrategia de seguimiento de tendencias muy efectiva. Al incorporar dos marcos de tiempo para determinar la tendencia, reduce significativamente las señales falsas. Además, combina múltiples filtros, incluidos RSI, SMA y WMA, para hacer que las señales sean más confiables. Al conducir KDJ con RSI, también evita algunas señales falsas inherentes a la estrategia normal de KDJ. Además, la configuración adecuada de stop loss y take profit ayuda a bloquear las ganancias y controlar los riesgos.

Análisis de riesgos

El mayor riesgo de esta estrategia radica en el juicio erróneo de la tendencia. En los puntos de inflexión, los promedios móviles a corto y largo plazo pueden invertirse hacia arriba o hacia abajo juntos, lo que resulta en señales erróneas. Además, el RSI puede generar señales más ruidosas durante los mercados de rango. Sin embargo, estos riesgos pueden reducirse ajustando adecuadamente los períodos de los parámetros SMA, WMA y RSI.

Direcciones de optimización

La estrategia puede mejorarse en los siguientes aspectos:

  1. Prueba diferentes longitudes de SMA, WMA y RSI para encontrar la combinación óptima
  2. Incorporar otros indicadores como el MACD, las bandas de Bollinger para verificar la fiabilidad de la señal
  3. Optimizar los mecanismos de stop loss y take profit mediante la prueba de paradas de ratio fijo, paradas de trailing, etc.
  4. Añadir módulos de gestión de capital para controlar el tamaño de las operaciones y la exposición al riesgo global
  5. Introducir modelos de aprendizaje automático para encontrar los mejores parámetros de rendimiento a través de backtesting a gran escala

Resumen de las actividades

La estrategia utiliza plenamente las fortalezas de las medias móviles y osciladores para establecer un sistema de seguimiento de tendencias relativamente sólido. Al confirmar señales en múltiples marcos de tiempo e indicadores, puede capturar sin problemas tendencias a medio y largo plazo. La configuración de stop loss y take profit también lo hace resistir las fluctuaciones normales del mercado hasta cierto punto. Sin embargo, todavía hay margen de mejora, como probar más combinaciones de indicadores, aprovechar el aprendizaje automático para la optimización de parámetros. En general, esta es una estrategia de trading muy prometedora.


/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 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/
// © bufirolas

// Works well with a wide stop with 20 bars lookback
// for the SL level and a 2:1 reward ratio Take Profit .
// These parameters can be modified in the Inputs section of the strategy panel.

// "an entry signal it's a cross down or up on
// the stochastics. if you're in a downtrend
// on the hourly time frame you
// must also be in a downtrend on the five
// minute so the five period has to be below the 144
// as long as the five period is still trading below
// the 144 period on both the hourly and the five minutes
// we are looking for these short signals crosses down
// in the overbought region of the stochastic. Viceversa for longs"

//@version=4
strategy("Stoch + WMA + SMA strat", overlay=true)

//SL & TP Inputs
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=10, step=1, title="SL Expander")
i_TPExpander=input(defval=30, step=1, title="TP Expander")
i_reverse=input(false, title="Reverse Trades")
i_TStop =input(false, title="Use Trailing Stop")

//Strategy Inputs
src4 = input(close, title="RSI Source")
stochOS=input(defval=20, step=5, title="Stochastics Oversold Level")
stochOB=input(defval=80, step=5, title="Stochastics Overbought Level")

//Stoch rsi Calculations
smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
rsi1 = rsi(src4, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
h0 = hline(80, linestyle=hline.style_dotted)
h1 = hline(20, linestyle=hline.style_dotted)

//MA
wmalen=input(defval=144, title="WMA Length")
WMA = security(syminfo.tickerid, "60", wma(close, wmalen))
SMA = security(syminfo.tickerid, "60", sma(close, 5))
minWMA = wma(close, wmalen)
minSMA = sma(close, 5)

//Entry Logic
stobuy = crossover(k, d) and k < stochOS
stosell = crossunder(k, d) and k > stochOB
mabuy = minSMA > minWMA
daymabuy = SMA > WMA

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
lTP=(strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0)))+((valuewhen(bought, atr(14), 0)/5)*i_TPExpander))
sTP=(strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price))-((valuewhen(bought, atr(14), 0)/5)*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0

//TrailingStop
dif=(valuewhen(strategy.position_size>0 and strategy.position_size[1]<=0, high,0))
 -strategy.position_avg_price
trailOffset     = strategy.position_avg_price - LSL
var tstop = float(na)
if strategy.position_size > 0
    tstop := high- trailOffset - dif
    if tstop<tstop[1]
        tstop:=tstop[1]
else
    tstop := na
StrailOffset     = SSL - strategy.position_avg_price
var Ststop = float(na)
Sdif=strategy.position_avg_price-(valuewhen(strategy.position_size<0 
 and strategy.position_size[1]>=0, low,0))
if strategy.position_size < 0
    Ststop := low+ StrailOffset + Sdif
    if Ststop>Ststop[1]
        Ststop:=Ststop[1]
else
    Ststop := na
    
//Stop Selector
SL= islong ? LSL : isshort ? SSL : na
if i_TStop 
    SL:= islong ? tstop : isshort ? Ststop : na
TP= islong ? lTP : isshort ? sTP : na


//Entries
if stobuy and mabuy and daymabuy
    strategy.entry("long", long=not i_reverse?true:false)
if stosell and not mabuy and not daymabuy
    strategy.entry("short", long=not i_reverse?false:true)


//Exit
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross)
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross)
plot(minWMA)
plot(minSMA, color=color.green)




Más.