Estrategia clásica de negociación de media móvil con cruces doradas


Fecha de creación: 2023-12-11 11:37:36 Última modificación: 2023-12-11 11:37:36
Copiar: 0 Número de Visitas: 606
1
Seguir
1621
Seguidores

Estrategia clásica de negociación de media móvil con cruces doradas

Descripción general

La estrategia de comercio de la media móvil de la cruz de oro es una estrategia de comercio cuantitativa más clásica. La estrategia utiliza una media móvil de diferentes períodos para determinar la tendencia del mercado a hacer más descubiertos. Se considera una señal de compra cuando se atraviesa una media móvil de período más largo sobre una media móvil de corto plazo; se considera una señal de venta cuando se atraviesa una media móvil de largo plazo por debajo de una media móvil de corto plazo.

Principio de estrategia

La estrategia se basa en promedios móviles simples (SMA) de tres períodos diferentes: línea de 50 días, línea de 100 días y línea de 200 días. La lógica de negociación específica es la siguiente:

  1. Señales de entrada: cuando se usa la media móvil de 100 días sobre la media móvil de 50 días, se hace una entrada adicional.

  2. Señales de salida: cuando el movimiento de 50 días debajo de la media móvil de 100 días, la salida de la posición de salida; o cuando el precio de cierre es inferior a la media móvil de 100 días, la salida; o cuando la media móvil de 100 días debajo de la media móvil de 200 días, la salida.

  3. Detención de pérdidas: configuración de paradas móviles y paradas fijas.

Esta estrategia aprovecha las características de los promedios móviles para poder juzgar eficazmente el precio medio del mercado. Cuando los promedios cortos cruzan los promedios largos, se considera una señal de que el mercado está entrando en una tendencia alcista, por lo tanto, hace más; cuando los promedios cortos cruzan los promedios largos, se considera que el mercado está entrando en una tendencia descendente, por lo tanto, sale de juego. De esta manera, se puede capturar eficazmente la tendencia del mercado.

Ventajas estratégicas

  1. La operación es simple y fácil de implementar. La lógica de la estrategia se puede construir con solo tres promedios móviles de diferentes períodos.

  2. Tiene una gran estabilidad. La media móvil tiene una función de desactivación de ruido que elimina eficazmente el impacto de las fluctuaciones aleatorias del mercado en las operaciones, lo que hace que la señal sea más estable y confiable.

  3. Los promedios móviles son capaces de reflejar eficazmente la tendencia de los cambios en los precios promedio del mercado y de juzgar los grandes cambios en el mercado a través de cruces de líneas de tiempo largas y cortas.

  4. Alta personalización. Se puede determinar por sí mismo la combinación periódica de las medias móviles para lograr diferentes niveles de control de riesgo.

Riesgo estratégico

  1. Puede generar una gran cantidad de señales falsas. Cuando las medias móviles a corto y largo plazo se acercan demasiado, puede producirse un cruce frecuente, que produce una gran cantidad de señales no válidas.

  2. La media móvil es más lenta para responder a los cambios de precios y no puede reaccionar en tiempo real a las noticias inesperadas y eventos importantes del mercado.

  3. La ausencia de fluctuaciones menores en el mercado. La ausencia de ruido de las medias móviles también significa que no se puede capturar fluctuaciones menores en el mercado para obtener ganancias.

  4. La configuración de los parámetros es más subjetiva. La elección del ciclo de la media móvil es más subjetiva y se necesita determinar el mejor parámetro en función de los diferentes mercados.

Dirección de optimización de la estrategia

  1. Aumentar las condiciones de filtración para evitar la generación de demasiadas señales falsas. Por ejemplo, configurar un rango de fluctuación de precios como filtro, generando una señal de negociación solo cuando se rompe un cierto ancho.

  2. La combinación con otros indicadores, como el índice de fluctuación, el índice de volumen de intercambio, puede mejorar la precisión de la señal.

  3. Añadir módulos de optimización de adaptación. Optimizar dinámicamente los parámetros periódicos de las medias móviles a través de tecnologías como el aprendizaje automático para que puedan adaptarse a los cambios en el entorno del mercado externo.

  4. Combinado con modelos de aprendizaje profundo. Utiliza modelos de aprendizaje profundo más avanzados que reemplazan a las medias móviles y tienen una mayor capacidad de extracción y modelado de características.

Resumir

La estrategia de comercio de línea de paridad cruzada de oro es una estrategia de seguimiento de tendencias más típica. Refleja la tendencia de los cambios promedio en los precios del mercado, es sencilla y práctica y es adecuada para los principiantes. Al mismo tiempo, la estrategia también tiene ciertas deficiencias que pueden optimizarse en varios aspectos, como mejorar la calidad de la señal, combinarse con otros indicadores técnicos e introducir mecanismos de adaptación, para adaptar la estrategia a un entorno de mercado más complejo.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-03 00:00:00
end: 2023-12-10 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © CJDeegan

//@version=4
strategy(title = "[LIVE] Golden Cross", overlay=true)

// ------------Functions------------

//Percent to Decimal Conversion
perToDec(a) => a * 0.01
//Price Difference to Tick
diffToTick(a,b) => (a - b) / syminfo.mintick 

    
// ------------Strategy Inputs------------
takeProfitInput = input(300, "Take Profit Price (% Gain)")
stopLossInput = input(25, "Stop Loss (% Loss)")


startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
     defval=2018, minval=1800, maxval=2100)

endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
endMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12)
endYear = input(title="End Year", type=input.integer,
     defval=2031, minval=1800, maxval=2100)

inDateRange = (time >= timestamp(syminfo.timezone, startYear,
         startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))
     

// ------------Populate Indicators------------

//EMA
sma50 = sma(close,50)
sma100 = sma(close,100)
sma200 = sma(close,200)


// ------------Entry Logic------------
//Guards
entryGuard = true
//Triggers
entryTrigger = crossover(sma50,sma100)
//Conditions
entryCondition = entryGuard and entryTrigger
//Calculations
//Execution
if (inDateRange and entryCondition)
    strategy.entry("Long", strategy.long, when = entryCondition, comment = "Entry")

//------------Exit Logic------------

//Guards
//Triggers
exitTrigger = crossunder(sma50,sma100) or close < sma100 or crossunder(sma100,sma200)
//Conditions
exitCondition = exitTrigger

//Calculations
//Take Profit
takeProfitPrice = strategy.position_avg_price + (strategy.position_avg_price * perToDec(takeProfitInput))
//Take Profit Ticks
takeProfitTicks = diffToTick(takeProfitPrice, strategy.position_avg_price)
//StopLoss
stopLossPrice = strategy.position_avg_price - (strategy.position_avg_price * perToDec(stopLossInput))

//Execution
if (inDateRange)
    strategy.close("Long", when = exitCondition, comment = "Sell Trigger")
    strategy.exit("Exit", "Long", comment="Stop", profit=takeProfitTicks, stop=stopLossPrice)

//Plots
plot(sma50, "SMA 50", color = color.blue)
plot(sma100, "SMA 100", color = color.green)
plot(sma200, "SMA 200", color = color.yellow)
entry = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, "Entry Price", color = color.yellow, style = plot.style_linebr)
profit = plot(strategy.position_size <= 0 ? na : takeProfitPrice, "Take Profit (Price)", color = color.green, style = plot.style_linebr)
stop = plot(strategy.position_size <= 0 ? na : stopLossPrice, "Stop Loss", color = color.red, style = plot.style_linebr)
fill(entry,profit, color=color.green)
fill(entry,stop, color=color.red)