Estrategia de cruce de medias móviles siguiendo tendencias


Fecha de creación: 2024-01-29 16:52:46 Última modificación: 2024-01-29 16:52:46
Copiar: 3 Número de Visitas: 657
1
Seguir
1664
Seguidores

Estrategia de cruce de medias móviles siguiendo tendencias

Descripción general

Esta estrategia se basa en una sencilla estrategia de medias móviles, que puede tener un buen efecto en diferentes pares de divisas. Traza una media de apertura y una media de cierre, y decide establecer o abandonar una posición cuando las dos líneas se cruzan. Su principio es establecer una posición cuando el precio de cierre promedio aumenta, lo que puede indicar que el precio futuro aumentará.

Principio de estrategia

Esta estrategia comienza con la selección de los tipos de promedios móviles según la configuración, que incluyen EMA, SMA, RMA, WMA y VWMA. Luego se establece el ciclo para el cálculo de los promedios móviles, generalmente de 10 a 250 líneas K. La elección de diferentes tipos de promedios móviles y el número de ciclos puede obtener un efecto completamente diferente según los diferentes pares de monedas.

La lógica de negociación de esta estrategia es la siguiente:

  1. Calcula el promedio móvil entre el precio de apertura y el precio de cierre.
  2. Comparación entre el promedio de cierre y el promedio de apertura;
  3. Si el precio de cierre se cruza con el precio de apertura, se establece una posición de más.
  4. Si el precio de apertura se encuentra por debajo de la media de cierre, se cancela la posición.

Cuando se establece una posición se considera un presagio de aumento de precios, y cuando se cierra una posición se considera un presagio de caída de precios.

Análisis de las ventajas estratégicas

La estrategia tiene las siguientes ventajas:

  1. La configuración de los parámetros es flexible y permite seleccionar los parámetros óptimos de acuerdo con las diferentes monedas, lo que permite una gran orientación.
  2. La lógica es simple, fácil de entender y de implementar.
  3. En algunos pares de monedas se obtienen muy altas tasas de rendimiento y, en general, una mejor estabilidad.
  4. Se pueden mostrar diferentes indicadores según las necesidades, con un alto grado de personalización.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. En algunos pares y parámetros, la rentabilidad y la estabilidad son bajas.
  2. No puede responder eficazmente a los movimientos de precios a corto plazo y es ineficaz para las monedas altamente volátiles.
  3. La base para elegir el ciclo de la media móvil no es lo suficientemente científica y es algo subjetivo.

La respuesta y el camino a seguir:

  1. La elección de períodos de tiempo tan largos como 12 horas y 1 día reduce las transacciones innecesarias y aumenta la estabilidad.
  2. La función de optimización de parámetros se ha añadido para probar automáticamente diferentes combinaciones de parámetros para encontrar los mejores.
  3. Se ha añadido la función de adaptarse a los ciclos de medias móviles para que el sistema decida automáticamente el mejor ciclo.

Resumir

Esta estrategia es simple en su lógica general, y utiliza un indicador de promedio móvil para determinar la tendencia de los precios y los puntos de inflexión. Puede obtener muy buenos resultados mediante el ajuste de los parámetros, y es una estrategia de seguimiento de tendencias efectiva que vale la pena perfeccionar y aplicar aún más. Pero también debe tenerse en cuenta el control de los riesgos y la selección de los pares y parámetros adecuados para que tengan la máxima eficacia.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Close v Open Moving Averages Strategy', shorttitle = 'Close v Open', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

bars = input.int(66, "Moving average length (number of bars)", minval=1, group='Strategy') //66 bars and VWMA for BTCUSD on 12 Hours.. 35 bars and VWMA for BTCUSD on 1 Day
strategy = input.string("VWMA", "Moving Average type", options = ["EMA", "SMA", "RMA", "WMA", "VWMA"], group='Strategy')

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, bars) > ta.ema(open, bars)) ? 1 : -1
    "SMA" => (ta.sma(close, bars) > ta.sma(open, bars)) ? 1 : -1
    "RMA" => (ta.rma(close, bars) > ta.rma(open, bars)) ? 1 : -1
    "WMA" => (ta.wma(close, bars) > ta.wma(open, bars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, bars) > ta.vwma(open, bars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

openMA = switch strategy
    "EMA" => ta.ema(open, bars)
    "SMA" => ta.sma(open, bars)
    "RMA" => ta.rma(open, bars)
    "WMA" => ta.wma(open, bars)
    "VWMA" => ta.vwma(open, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
closeMA = switch strategy
    "EMA" => ta.ema(close, bars)
    "SMA" => ta.sma(close, bars)
    "RMA" => ta.rma(close, bars)
    "WMA" => ta.wma(close, bars)
    "VWMA" => ta.vwma(close, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? openMA : na, title = "Open moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
plot(series = maOn == "On" ? closeMA : na, title = "Close Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)