La estrategia, llamada
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.
Determinar la tendencia alcista/bajista:
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.
Utilice el RSI estocástico como un juicio auxiliar:
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.
El mecanismo de confirmación de tendencia puede filtrar efectivamente la mayoría de las señales falsas y mejorar la tasa de ganancia.
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.
La lógica de la estrategia es sencilla, con pocos parámetros, lo que hace que sea fácil de entender e implementar.
Las EMA son indicadores con retraso y pueden dar lugar a un deslizamiento significativo al comienzo de las inversiones de tendencia.
Las estrategias de seguimiento de tendencias suelen tener un rendimiento inferior en mercados agitados.
El RSI estocástico puede producir señales engañosas durante la volatilidad extrema del mercado, lo que afecta a la calidad del juicio.
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.
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.
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.
Incorporar más criterios auxiliares además del RSI estocástico, como cambios en el volumen, para mejorar la confiabilidad de la señal.
Considerar las correlaciones de mercado e introducir señales intermercados de varios activos para mejorar la resistencia al riesgo del sistema.
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')