Esta estrategia utiliza cruces de promedio móvil y el indicador ATR para implementar la tendencia automatizada después de la negociación. Va largo cuando la EMA rápida cruza por encima de la EMA lenta, y va corto cuando la EMA rápida cruza por debajo de la EMA lenta. Al mismo tiempo, utiliza el indicador ATR para juzgar la dirección de la tendencia y solo envía señales de negociación cuando la ATR indica que hay una tendencia.
La estrategia se basa principalmente en dos indicadores técnicos:
Líneas EMA: utiliza dos líneas EMA con parámetros diferentes, rápida y lenta. Cuando la EMA rápida cruza por encima de la EMA lenta, se considera una señal larga. Cuando la EMA rápida cruza por debajo de la EMA lenta, se considera una señal corta.
Indicador ATR: El indicador ATR mide la magnitud y la fuerza de las fluctuaciones de precios para juzgar la tendencia del movimiento actual.
Al combinar los cruces de la EMA para identificar oportunidades comerciales y el filtro ATR para evitar regímenes de baja tendencia, la estrategia tiene como objetivo evitar ser golpeado durante la agitación del mercado.
Las ventajas de esta estrategia incluyen:
Solo se negocia cuando el ATR identifica una tendencia, lo que ayuda a evitar ser golpeado durante los regímenes no direccionales.
Utilizando una lógica de cruce de EMA rápida vs lenta para identificar las señales de negociación.
Sensibilidad y suavidad de la EMA personalizables mediante ajustes de parámetros.
Completo sistema de negociación automatizado construido con sólo dos indicadores simples, fácilmente implementado en el editor Pine.
Necesidad mínima de ajustes continuos de parámetros, enfoque
Algunos riesgos a tener en cuenta incluyen:
Los cruces de EMA pueden generar señales falsas, lo que conduce a pérdidas innecesarias.
El juicio de tendencia del ATR también puede ser propenso a errores, perdiendo oportunidades comerciales.
No hay consideración de los fundamentos de los marcos de tiempo más altos. Los acontecimientos de noticias importantes pueden desencadenar reversiones que los cruces rápidos de la EMA pueden perder, requiriendo intervención manual.
Estos riesgos pueden reducirse mediante optimizaciones.
Las principales direcciones de optimización incluyen:
Añadir otros indicadores para crear un sistema combinado y mejorar la precisión de la señal.
Selección de parámetros EMA y ATR más adecuados para el mercado en particular en función del símbolo y el marco temporal negociado.
Implementación de la optimización de parámetros dinámicos mediante aprendizaje automático para ajustar los indicadores en función de las condiciones actuales del mercado en lugar de utilizar valores estáticos fijos.
En general, esta es una estrategia de seguimiento de tendencias muy práctica. Con solo una simple combinación de dos indicadores, se construye un sistema comercial relativamente completo. A través de ajustes de parámetros, se puede adaptar a los operadores con diferentes preferencias y estilos. Al mismo tiempo, una mayor expansión y optimización puede mejorar aún más el rendimiento de la estrategia. La lógica comercial simple pero efectiva junto con un fuerte potencial de optimización hace que esta sea una estrategia cuantitativa valiosa para investigar y aplicar a largo plazo.
/*backtest start: 2022-12-05 00:00:00 end: 2023-12-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This strategy has been created for GMT trade 4h by Zhukov //@version=5 strategy('ZhukovTrade', overlay=true, calc_on_every_tick=true, currency=currency.USD) // INPUT: // Options to enter fast and slow Exponential Moving Average (EMA) values emaFast = input.int(title='Fast EMA', defval=100, minval=1, maxval=9999) emaSlow = input.int(title='Slow EMA', defval=200, minval=1, maxval=9999) // Option to select trade directions tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both') // Options that configure the backtest date range startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00')) endDate = input(title='End Date', defval=timestamp('31 Dec 2023 23:59')) // CALCULATIONS: // Use the built-in function to calculate two EMA lines fastEMA = ta.ema(close, emaFast) slowEMA = ta.ema(close, emaSlow) emapos = ta.ema(close,200) // PLOT: // Draw the EMA lines on the chart plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2) plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2) plot(series=emapos, color=color.new(color.red, 0), linewidth=2) // CONDITIONS: // Check if the close time of the current bar falls inside the date range inDateRange = true // Translate input into trading conditions longOK = tradeDirection == 'Long' or tradeDirection == 'Both' shortOK = tradeDirection == 'Short' or tradeDirection == 'Both' // Decide if we should go long or short using the built-in functions longCondition = ta.crossover(fastEMA, slowEMA) shortCondition = ta.crossunder(fastEMA, slowEMA) // ORDERS: // Set take profit and stop loss percentages take_profit_percent = input(0, title="Take Profit Percent") stop_loss_percent = input(0, title="Stop Loss Percent") // Submit entry (or reverse) orders atrPeriod = input(12, "ATR Length") factor = input.float(3.0, "Factor", step = 0.01) [supertrend, direction] = ta.supertrend(factor, atrPeriod) bodyMiddle = plot((open + close) / 2, display=display.none) upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr) downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr) fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false) fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false) if longCondition and inDateRange if longOK and direction<0 strategy.entry(id='long', direction=strategy.long, alert_message = "LONG") if shortCondition and inDateRange if shortOK and direction>0 strategy.entry(id='short', direction=strategy.short, alert_message = "SHORT") // Submit exit orders in the cases where we trade only long or only short if strategy.position_size > 0 and take_profit_percent strategy.exit(id='tp long',from_entry ="long",profit = take_profit_percent) if strategy.position_size > 0 and stop_loss_percent strategy.exit(id='sl long',from_entry="long",loss=stop_loss_percent) if strategy.position_size < 0 and stop_loss_percent strategy.exit(id='sl short',from_entry="short",loss=stop_loss_percent) if strategy.position_size < 0 and take_profit_percent strategy.exit(id='tp short',from_entry="short",profit = take_profit_percent)