Tendencia de margen de tiempo múltiple basada en el EMA y el RSI estocástico

El autor:¿ Qué pasa?, Fecha: 2024-03-08 17:32:38
Las etiquetas:

img

Resumen de la estrategia

La estrategia, llamada EMA y Estocástico RSI basada en la estrategia de trading de tendencia de seguimiento de tendencia de múltiples marcos de tiempo, utiliza dos promedios móviles exponenciales (EMA) con diferentes períodos y el indicador Estocástico RSI para capturar las tendencias de mercado a medio y largo plazo.

Principios de estrategia

  1. Calcular una EMA rápida y una EMA lenta. El parámetro predeterminado para la EMA rápida es 12 y 25 para la EMA lenta. Estos pueden ajustarse en función de las características del mercado y la frecuencia de negociación.

  2. Determinar la tendencia alcista/bajista:

  • Cuando la EMA rápida cruza por encima de la EMA lenta, genera una señal alcista
  • Cuando la EMA rápida cruza por debajo de la EMA lenta, genera una señal bajista
  1. Confirmación de tendencia: Después de que aparece una señal alcista/bajista, se requieren 2 velas alcistas/bajistas consecutivas para confirmar la tendencia.

  2. Utilice el RSI estocástico como un juicio auxiliar:

  • Cuando la línea %K del RSI estocástico cruza por encima de la línea %D, y %K está por debajo de 20, genera una señal de sobreventa, lo que indica una posible inversión alcista
  • Cuando la línea %K del RSI estocástico cruza por debajo de la línea %D, y %K está por encima de 80, genera una señal de sobrecompra, lo que indica una posible inversión bajista.
  1. Reglas de negociación:
  • Abrir una posición larga cuando las EMA generen una señal alcista y el RSI estocástico no esté en territorio sobrecomprado
  • Abrir una posición corta cuando las EMA generen una señal bajista y el RSI estocástico no esté en territorio de sobreventa

Ventajas estratégicas

  1. El análisis muestra que la combinación de EMA de período 12/25 tiene un buen rendimiento para las tendencias a medio y largo plazo.

  2. El mecanismo de confirmación de tendencia puede filtrar efectivamente la mayoría de las señales falsas y mejorar la tasa de ganancia.

  3. El RSI estocástico sirve como un juicio auxiliar, ayudando a evaluar la fuerza de la tendencia en la etapa inicial y advirtiendo previamente de posibles reversiones en la etapa tardía.

  4. La lógica de la estrategia es sencilla, con pocos parámetros, lo que hace que sea fácil de entender e implementar.

Análisis de riesgos

  1. Las EMA son indicadores con retraso y pueden dar lugar a un deslizamiento significativo al comienzo de las inversiones de tendencia.

  2. Las estrategias de seguimiento de tendencias suelen tener un rendimiento inferior en mercados agitados.

  3. El RSI estocástico puede producir señales engañosas durante la volatilidad extrema del mercado, lo que afecta a la calidad del juicio.

  4. Es posible que los parámetros fijos no se adapten a todas las condiciones del mercado, lo que requiere ajustes dinámicos basados en las características del mercado.

Direcciones de optimización

  1. Introducir indicadores de volatilidad como el ATR para ajustar dinámicamente los parámetros de la EMA y adaptarse a los diferentes ritmos del mercado.

  2. Añadir juicio para los mercados de rango limitado, como combinar el ancho de las bandas de Bollinger, para evitar operaciones frecuentes en condiciones agitadas.

  3. Incorporar más criterios auxiliares además del RSI estocástico, como cambios en el volumen, para mejorar la confiabilidad de la señal.

  4. Considerar las correlaciones de mercado e introducir señales intermercados de varios activos para mejorar la resistencia al riesgo del sistema.

Resumen de las actividades

Esta estrategia aprovecha eficazmente las fortalezas de los EMA y el RSI estocástico para formar un enfoque de negociación a medio y largo plazo basado en el seguimiento de tendencias e inversión de impulso. Captura las tendencias a través de cruces de EMA, confirma la fuerza de la tendencia y advierte de reversiones con el RSI estocástico, y mejora la calidad de la señal con mecanismos de confirmación de tendencias. Los tres componentes se combinan orgánicamente para crear un marco de estrategia de negociación cuantitativa simple y eficaz. Sus principales ventajas se encuentran en su lógica concisa, pocos parámetros, baja dificultad de implementación y amplia aplicabilidad. Sin embargo, la estrategia también tiene limitaciones inherentes como gran deslizamiento e incapacidad para adaptarse a mercados agitados. Las mejoras futuras pueden centrarse en la optimización de parámetros dinámicos, la introducción de criterios más auxiliares y la construcción de mecanismos de enlace entre mercados. En general, esta es una estrategia de negociación cuantitativa con amplia capacidad de aplicación y ampli


/*backtest
start: 2023-03-02 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('[Jacky] Trader XO Macro Trend Scanner', overlay=true)

// Variables
var ok = 0
var countBuy = 0
var countSell = 0
src = input(close, title='OHLC Type')
i_fastEMA = input(12, title='Fast EMA')
i_slowEMA = input(25, title='Slow EMA')
i_defEMA = input(25, title='Consolidated EMA')

// Allow the option to show single or double EMA
i_bothEMAs = input(title='Show Both EMAs', defval=true)

// Define EMAs
v_fastEMA = ta.ema(src, i_fastEMA)
v_slowEMA = ta.ema(src, i_slowEMA)
v_biasEMA = ta.ema(src, i_defEMA)

// Color the EMAs
emaColor = v_fastEMA > v_slowEMA ? color.green : v_fastEMA < v_slowEMA ? color.red : #FF530D

// Plot EMAs
plot(i_bothEMAs ? na : v_biasEMA, color=emaColor, linewidth=3, title='Consolidated EMA')
plot(i_bothEMAs ? v_fastEMA : na, title='Fast EMA', color=emaColor)
plot(i_bothEMAs ? v_slowEMA : na, title='Slow EMA', color=emaColor)

// Colour the bars
buy = v_fastEMA > v_slowEMA
sell = v_fastEMA < v_slowEMA

if buy
    countBuy += 1
    countBuy

if buy
    countSell := 0
    countSell

if sell
    countSell += 1
    countSell

if sell
    countBuy := 0
    countBuy

buysignal = countBuy < 2 and countBuy > 0 and countSell < 1 and buy and not buy[1]
sellsignal = countSell > 0 and countSell < 2 and countBuy < 1 and sell and not sell[1]

barcolor(buysignal ? color.green : na)
barcolor(sellsignal ? color.red : na)

// Strategy backtest
if (buysignal)
    strategy.entry("Buy", strategy.long)

if (sellsignal)
    strategy.entry("Sell", strategy.short)

// Plot Bull/Bear

plotshape(buysignal, title='Bull', text='Bull', style=shape.triangleup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.black, 0), size=size.tiny)
plotshape(sellsignal, title='Bear', text='Bear', style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.black, 0), size=size.tiny)

bull = countBuy > 1
bear = countSell > 1

barcolor(bull ? color.green : na)
barcolor(bear ? color.red : na)

// Set Alerts

alertcondition(ta.crossover(v_fastEMA, v_slowEMA), title='Bullish EMA Cross', message='Bullish EMA crossover')
alertcondition(ta.crossunder(v_fastEMA, v_slowEMA), title='Bearish EMA Cross', message='Bearish EMA Crossover')

// Stoch RSI code

smoothK = input.int(3, 'K', minval=1)
smoothD = input.int(3, 'D', minval=1)
lengthRSI = input.int(14, 'RSI Length', minval=1)
lengthStoch = input.int(14, 'Stochastic Length', minval=1)

rsi1 = ta.rsi(src, lengthRSI)
k = ta.sma(ta.stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = ta.sma(k, smoothD)

bandno0 = input.int(80, minval=1, title='Upper Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno2 = input.int(50, minval=1, title='Middle Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')
bandno1 = input.int(20, minval=1, title='Lower Band', group='Bands (change this instead of length in Style for Stoch RSI colour to work properly)')

// Alerts

crossoverAlertBgColourMidOnOff = input.bool(title='Crossover Alert Background Colour (Middle Level) [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourOBOSOnOff = input.bool(title='Crossover Alert Background Colour (OB/OS Level) [ON/OFF]', group='Crossover Alerts', defval=false)

crossoverAlertBgColourGreaterThanOnOff = input.bool(title='Crossover Alert >input [ON/OFF]', group='Crossover Alerts', defval=false)
crossoverAlertBgColourLessThanOnOff = input.bool(title='Crossover Alert <input [ON/OFF]', group='Crossover Alerts', defval=false)

maTypeChoice = input.string('EMA', title='MA Type', group='Moving Average', options=['EMA', 'WMA', 'SMA', 'None'])
maSrc = input.source(close, title='MA Source', group='Moving Average')
maLen = input.int(200, minval=1, title='MA Length', group='Moving Average')

maValue = if maTypeChoice == 'EMA'
    ta.ema(maSrc, maLen)
else if maTypeChoice == 'WMA'
    ta.wma(maSrc, maLen)
else if maTypeChoice == 'SMA'
    ta.sma(maSrc, maLen)
else
    0

crossupCHECK = maTypeChoice == 'None' or open > maValue and maTypeChoice != 'None'
crossdownCHECK = maTypeChoice == 'None' or open < maValue and maTypeChoice != 'None'

crossupalert = crossupCHECK and ta.crossover(k, d) and (k < bandno2 or d < bandno2)
crossdownalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno2 or d > bandno2)
crossupOSalert = crossupCHECK and ta.crossover(k, d) and (k < bandno1 or d < bandno1)
crossdownOBalert = crossdownCHECK and ta.crossunder(k, d) and (k > bandno0 or d > bandno0)

aboveBandalert = ta.crossunder(k, bandno0)
belowBandalert = ta.crossover(k, bandno1)

bgcolor(color=crossupalert and crossoverAlertBgColourMidOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert Background Colour (Middle Level)', transp=70)
bgcolor(color=crossupOSalert and crossoverAlertBgColourOBOSOnOff ? #fbc02d : crossdownOBalert and crossoverAlertBgColourOBOSOnOff ? #000000 : na, title='Crossover Alert Background Colour (OB/OS Level)', transp=70)

bgcolor(color=aboveBandalert and crossoverAlertBgColourGreaterThanOnOff ? #ff0014 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K > Upper level', transp=70)
bgcolor(color=belowBandalert and crossoverAlertBgColourLessThanOnOff ? #4CAF50 : crossdownalert and crossoverAlertBgColourMidOnOff ? #FF0000 : na, title='Crossover Alert - K < Lower level', transp=70)

alertcondition(crossupalert or crossdownalert, title='Stoch RSI Crossover', message='STOCH RSI CROSSOVER')





Más.