La estrategia es una estrategia de seguimiento de tendencias que combina indicadores de media móvil de índices triples y indicadores de media móvil de índices aleatorios para generar señales de negociación. La estrategia también introduce indicadores de media móvil de índices aleatorios como indicadores de juicio auxiliares.
Usando medias móviles de índices triples de 8, 14 y 50 días. Cuando una media móvil de índices de 8 días atraviesa una media móvil de índices de 14 días, una media móvil de índices de 14 días atraviesa una media móvil de índices de 50 días y produce más señales de ver; por el contrario, una señal de mirar hacia abajo.
Utilizando un indicador de media móvil aleatorio (Stochastic RSI) como indicador de juicio auxiliar. Específicamente: primero se calcula el RSI del día 14, luego se calcula el indicador Stochastic sobre la base del indicador RSI, y finalmente se calcula el indicador Stochastic para obtener la línea K de la media móvil simple de 3 días y la línea D de la media móvil simple de 3 días.
En el momento de generar la señal de negociación, si el precio está por encima de la media móvil del índice de 8 días, se entra más; si el precio está por debajo de la media móvil del índice de 8 días, se entra en blanco.
El stop loss está situado a una distancia ATR de 1x por debajo/por encima del precio de entrada. El stop loss está situado a una distancia ATR de 4x por debajo/por debajo del precio de entrada.
Las medias móviles como indicadores básicos pueden ser eficaces para seguir las tendencias del mercado. Las medias móviles de triple índice utilizan múltiples ciclos en combinación para garantizar la sensibilidad a las tendencias a corto y mediano plazo.
La adición del RSI estocástico como indicador de juicio auxiliar puede filtrar las falsas señales y mejorar la precisión de las entradas.
La posición de stop loss stop loss se puede ajustar según el ATR, lo que permite un seguimiento dinámico de la volatilidad del mercado y evitar que el stop loss stop loss sea demasiado grande o demasiado pequeño.
La configuración de los parámetros de la estrategia es razonable y se desempeña bien en grandes tendencias. Las retracciones son pequeñas, las ganancias son más estables y son adecuadas para operaciones largas.
Las estrategias de combinación de múltiples indicadores aumentan el riesgo de reversión. Puede producirse un error de señal de negociación cuando la media móvil y el RSI estocástico emiten señales opuestas.
Los parámetros de stop loss y stop caps son más conservadores, y pueden romperse cuando el mercado fluctúa fuertemente, perdiendo oportunidades de tendencia.
Debido a que se utilizan tres medias móviles, hay un cierto retraso cuando la línea rápida y la línea media se invierten. En este caso, se necesita prestar atención a si el precio se invierte para decidir si entrar o no.
Esta estrategia es especialmente adecuada para mercados tendenciales, que no funcionan bien en los mercados consolidados. En este caso, puede considerarse optimizar los parámetros de ciclo de las medias móviles o usar otros indicadores de determinación.
Se puede considerar la incorporación de otros indicadores, como el MACD, para optimizar aún más el tiempo de entrada. También se pueden probar combinaciones de medias móviles con diferentes parámetros.
Se pueden optimizar los parámetros de la inspección de aire libre de ATR. Por ejemplo, ajustar el stop loss de 1ATR a 1.5ATR y el stop brake de 4ATR a 3ATR para ver si se obtienen mejores ganancias.
Se puede probar usando solo las medias móviles, eliminando el indicador Stochastic RSI, para ver si se puede filtrar más ruido y obtener ganancias más estables.
Se puede considerar la posibilidad de añadir más condiciones para determinar la tendencia, como aumentar el indicador de volumen de transacción y asegurar que se opera en tendencias a gran escala.
La estrategia se basa en el uso integral de la media móvil de tres índices y el indicador Stochastic RSI para determinar la dirección de la tendencia. Las señales de entrada son más estrictas, lo que reduce eficazmente las operaciones sin sentido. Se establece un ATR de seguimiento dinámico para detener las pérdidas, lo que permite que los parámetros de la estrategia sean adaptables.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // 3ESRA // v0.2a // Coded by Vaida Bogdan // 3ESRA consists of a 3 EMA cross + a close above (for longs) the quickest EMA // or below (for shorts). Note that I've deactivated the RSI Cross Over/Under // (you can modify the code and activate it). The strategy also uses a stop loss // that's at 1 ATR distance from the entry price and a take profit that's at // 4 times the ATR distance from the entry price. // Feedback: // Tested BTCUSDT Daily // 1. Stoch-RSI makes you miss opportunities. // 2. Changing RR to 4:1 times ATR works better. //@version=4 strategy(title="3 EMA + Stochastic RSI + ATR", shorttitle="3ESRA", overlay=true, pyramiding=1, process_orders_on_close=true, calc_on_every_tick=true, initial_capital=1000, currency = currency.USD, default_qty_value=10, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.1, slippage=2) startDate = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Backtesting range") startMonth = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Backtesting range") startYear = input(title="Start Year", type=input.integer, defval=1900, minval=1800, maxval=2100, group="Backtesting range") endDate = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=31, group="Backtesting range") endMonth = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Backtesting range") endYear = input(title="End Year", type=input.integer, defval=2040, minval=1800, maxval=2100, group="Backtesting range") // Date range filtering inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 23, 59)) fast = input(8, minval=8, title="Fast EMA", group="EMAs") medium = input(14, minval=8, title="Medium EMA", group="EMAs") slow = input(50, minval=8, title="Slow EMA", group="EMAs") src = input(close, title="Source") smoothK = input(3, "K", minval=1, group="Stoch-RSI", inline="K&D") smoothD = input(3, "D", minval=1, group="Stoch-RSI", inline="K&D") lengthRSI = input(14, "RSI Length", minval=1, group="Stoch-RSI", inline="length") lengthStoch = input(14, "Stochastic Length", minval=1, group="Stoch-RSI", inline="length") rsiSrc = input(close, title="RSI Source", group="Stoch-RSI") length = input(title="Length", defval=14, minval=1, group="ATR") smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR") // EMAs fastema = ema(src, fast) mediumema = ema(src, medium) slowema = ema(src, slow) // S-RSI rsi1 = rsi(rsiSrc, lengthRSI) k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = sma(k, smoothD) sRsiCrossOver = k[1] < d[1] and k > d sRsiCrossUnder = k[1] > d[1] and k < d // ATR ma_function(source, length) => if smoothing == "RMA" rma(source, length) else if smoothing == "SMA" sma(source, length) else if smoothing == "EMA" ema(source, length) else wma(source, length) atr = ma_function(tr(true), length) // Trading Logic longCond1 = (fastema > mediumema) and (mediumema > slowema) longCond2 = true // longCond2 = sRsiCrossOver longCond3 = close > fastema longCond4 = strategy.position_size <= 0 longCond = longCond1 and longCond2 and longCond3 and longCond4 and inDateRange shortCond1 = (fastema < mediumema) and (mediumema < slowema) shortCond2 = true // shortCond2 = sRsiCrossUnder shortCond3 = close < fastema shortCond4 = strategy.position_size >= 0 shortCond = shortCond1 and shortCond2 and shortCond3 and shortCond4 and inDateRange var takeProfit = float(na), var stopLoss = float(na) if longCond and strategy.position_size <= 0 takeProfit := close + 4*atr stopLoss := close - 1*atr // takeProfit := close + 2*atr // stopLoss := close - 3*atr else if shortCond and strategy.position_size >= 0 takeProfit := close - 4*atr stopLoss := close + 1*atr // takeProfit := close - 2*atr // stopLoss := close + 3*atr // Strategy calls strategy.entry("3ESRA", strategy.long, comment="Long", when=longCond and strategy.position_size <= 0) strategy.entry("3ESRA", strategy.short, comment="Short", when=shortCond and strategy.position_size >= 0) strategy.exit(id="TP-SL", from_entry="3ESRA", limit=takeProfit, stop=stopLoss) if (not inDateRange) strategy.close_all() // Plot EMAs plot(fastema, color=color.purple, linewidth=2, title="Fast EMA") plot(mediumema, color=color.teal, linewidth=2, title="Medium EMA") plot(slowema, color=color.yellow, linewidth=2, title="Slow EMA") // Plot S-RSI // plotshape((strategy.position_size > 0) ? na : sRsiCrossOver, title="StochRSI Cross Over", style=shape.triangleup, location=location.belowbar, color=color.teal, text="SRSI", size=size.small) // Plot trade bgcolor(strategy.position_size > 0 ? color.new(color.green, 75) : strategy.position_size < 0 ? color.new(color.red,75) : color(na)) // Plot Strategy plot((strategy.position_size != 0) ? takeProfit : na, style=plot.style_linebr, color=color.green, title="TP") plot((strategy.position_size != 0) ? stopLoss : na, style=plot.style_linebr, color=color.red, title="SL")