Tendencia cruzada de la media móvil de Zhukov siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2023-12-12 12:24:11
Las etiquetas:

img

Resumen general

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.

Estrategia lógica

La estrategia se basa principalmente en dos indicadores técnicos:

  1. 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.

  2. 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.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. Solo se negocia cuando el ATR identifica una tendencia, lo que ayuda a evitar ser golpeado durante los regímenes no direccionales.

  2. Utilizando una lógica de cruce de EMA rápida vs lenta para identificar las señales de negociación.

  3. Sensibilidad y suavidad de la EMA personalizables mediante ajustes de parámetros.

  4. Completo sistema de negociación automatizado construido con sólo dos indicadores simples, fácilmente implementado en el editor Pine.

  5. Necesidad mínima de ajustes continuos de parámetros, enfoque set and forget.

Análisis de riesgos

Algunos riesgos a tener en cuenta incluyen:

  1. Los cruces de EMA pueden generar señales falsas, lo que conduce a pérdidas innecesarias.

  2. El juicio de tendencia del ATR también puede ser propenso a errores, perdiendo oportunidades comerciales.

  3. 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.

Direcciones de optimización

Las principales direcciones de optimización incluyen:

  1. Añadir otros indicadores para crear un sistema combinado y mejorar la precisión de la señal.

  2. 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.

  3. 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.

Conclusión

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)


Más.