
La estrategia se llama “Estrategia de comercio de seguimiento de tendencias de varios períodos basada en EMA y RSI aleatorio” y utiliza el promedio móvil del índice (EMA) y el indicador RSI aleatorio de dos períodos diferentes para capturar la tendencia a medio y largo plazo del mercado. La idea central de la estrategia es determinar la dirección de la tendencia a través de la intersección de EMA, mientras que combina el RSI aleatorio como señal de advertencia de confirmación y reversión de tendencia para establecer posiciones al inicio de la formación de la tendencia y cerrar las posiciones al final de la tendencia.
Cálculo de EMA rápido y EMA lento. El parámetro predeterminado de EMA rápido es 12, el parámetro predeterminado de EMA lento es 25, que en aplicaciones reales se puede ajustar según las características del mercado y la frecuencia de negociación.
En la actualidad, la mayoría de las personas no tienen acceso a internet.
Confirmación de la tendencia: después de que aparezca la señal de ver más / ver menos, se requieren 2 líneas de ver más / ver menos K para confirmar la formación de la tendencia. Esto ayuda a filtrar las señales falsas.
Utilizando el RSI aleatorio como un criterio auxiliar:
El uso simultáneo de dos EMA de diferentes períodos permite un mejor equilibrio entre la sensibilidad y la fiabilidad de la captura de tendencias. El análisis muestra que la combinación de EMA del ciclo 12⁄25 es mejor para la captura de tendencias a medio y largo plazo.
El mecanismo de confirmación de tendencias puede filtrar eficazmente la mayoría de las señales falsas y aumentar la probabilidad de éxito de la estrategia.
El RSI aleatorio sirve como un juicio auxiliar para ayudar a determinar la fuerza de la tendencia al comienzo de la tendencia y para prevenir una posible reversión de la tendencia al final de la tendencia.
La lógica de la estrategia es simple, con pocos parámetros, fácil de entender e implementar, y se aplica a una variedad de mercados y variedades.
El EMA es un indicador de retraso, y puede tener un deslizamiento más grande al comienzo de la reversión de la tendencia.
Las estrategias de tendencia se presentan generalmente en las ciudades convulsionadas. Esta estrategia carece de un juicio especializado sobre las ciudades convulsionadas.
El RSI aleatorio puede distorsionarse en momentos de fuerte volatilidad en el mercado, lo que afecta la calidad del juicio.
Es posible que los parámetros fijos no se adapten a todas las condiciones del mercado y que se necesiten ajustes en función de las características y la dinámica del mercado.
Introducción de indicadores de volatilidad como el ATR, para ajustar los parámetros de EMA en función de la dinámica de la volatilidad para adaptarse a los diferentes ritmos del mercado.
Aumentar el conocimiento de mercados convulsivos, como la dirección de la apertura de la franja de Brin, para evitar el comercio frecuente en mercados convulsivos.
La integración de más datos auxiliares, como los cambios en el volumen de tráfico, en la base del RSI aleatorio mejora la fiabilidad de la señal.
Tener en cuenta la relevancia del mercado, introducir señales de interconexión de múltiples variedades y aumentar la resistencia al riesgo del sistema.
La estrategia aprovecha al máximo las ventajas de la EMA y el RSI aleatorio para formar una estrategia de negociación a medio y largo plazo basada en el seguimiento de la tendencia y la reversión de la dinámica. A través de la captura de la tendencia de la captura de la tendencia, la confirmación de la fuerza de la tendencia y la reversión de la advertencia aleatoria, el mecanismo de confirmación de la tendencia mejora la calidad de la señal, los tres se combinan orgánicamente para formar un marco de estrategia de negociación cuantitativa simple y eficaz.
/*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')