Estrategia de seguimiento de tendencias basado en inversiones periódicas

El autor:¿ Qué pasa?, Fecha: 2023-10-31 15:09:22
Las etiquetas:

img

Resumen general

Esta estrategia utiliza modelos de promedio móvil para determinar la dirección de la tendencia del mercado. Cuando se identifica una tendencia alcista, abrirá periódicamente posiciones largas con cantidades fijas para rastrear la tendencia alcista de la cruz dorada en el mercado.

Estrategia lógica

La estrategia se basa principalmente en los siguientes principios técnicos:

  1. Cuando la línea EMA rápida cruza la línea EMA lenta, se juzga como una tendencia alcista y se prepara para entrar en posiciones largas.

  2. Cuando el MACD pasa de positivo a negativo, indica que el poder adquisitivo comienza a debilitarse, por lo que es hora de entrar en posiciones largas.

  3. Limitarse a ingresar una vez al mes para evitar perseguir los máximos.

  4. Permite establecer una fecha de inicio y una fecha de finalización para limitar el período de backtest.

Específicamente, la estrategia primero calcula la línea EMA rápida y la línea EMA lenta, y detecta la cruz dorada entre ellos para determinar la tendencia del mercado. Al mismo tiempo, calcula el indicador MACD para determinar el punto de entrada específico. Cuando se cumplen ambos criterios, se genera una señal larga. De acuerdo con la regla de solo ingresar una vez al mes, se determinan las órdenes de entrada reales. La cantidad de capital para cada entrada se puede preestablecer. Cuando termina la prueba de retroceso, la estrategia cerrará activamente todas las posiciones.

Ventajas

Se trata de una estrategia de tendencia simple y directa con las siguientes ventajas:

  1. El uso de líneas EMA para determinar la tendencia principal es simple y práctico.

  2. El indicador MACD puede identificar el punto de inflexión cuando el poder adquisitivo comienza a debilitarse con relativa precisión, lo que hace que las entradas sean más seguras.

  3. Limitarse a perseguir la tendencia alcista una vez al mes puede evitar perseguir máximos y matar la tendencia alcista en un mercado alcista.

  4. Permitir la personalización de la cantidad de entrada cada mes proporciona flexibilidad en el tamaño de la posición.

  5. El backtest puede utilizarse para evaluar el rendimiento de la estrategia estableciendo una fecha de inicio y una fecha de finalización.

  6. Cerrará todas las posiciones automáticamente cuando termine la prueba de retroceso, evitando posiciones restantes incómodas.

Riesgos y mitigaciones

Hay algunos riesgos potenciales de esta estrategia:

  1. La determinación de la tendencia a través de medias móviles puede perder oportunidades durante retrocesos temporales o reaccionar lentamente a la inversión de tendencia.

  2. Considerar la posibilidad de relajar la frecuencia o añadir otra entrada cuando se rompan los máximos recientes.

  3. Hay riesgos de ajuste en curva: se debe permitir más espacio para ajustar los parámetros y se debe probar la robustez en todos los mercados y períodos de tiempo.

  4. El valor de entrada mensual debe controlarse para evitar posiciones de gran tamaño.

Oportunidades de mejora

Esta tendencia periódica a la inversión que sigue la estrategia puede ampliarse y reforzarse aún más en los siguientes aspectos:

  1. Agregue una lógica de stop loss para recortar activamente las pérdidas cuando surja un patrón de reversión bajista.

  2. Considere agregar otra compra cuando el histograma MACD muestre divergencia alcista para obtener más exposición a la tendencia alcista.

  3. Introduzca la comparación de los nuevos máximos del mes actual con el mes anterior para evaluar la fuerza del impulso.

  4. Añadir la lógica de dimensionamiento de la posición. La cantidad de entrada mensual se puede hacer adaptable en función de porcentaje en lugar de valor fijo.

  5. Evaluar el impacto de diferentes combinaciones de MA y parámetros MACD.

  6. Agregue un stop loss que sigue el precio a cierta distancia después de alcanzar nuevos máximos, lo que permite que las ganancias se ejecuten.

Resumen de las actividades

Esta estrategia representa un enfoque de tendencia simple y limpio utilizando inversiones periódicas y promedios móviles. Es fácil de entender e implementar, sirviendo como un buen punto de partida para aprender trading algorítmico.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-30 00:00:00
period: 1d
basePeriod: 1h
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/
// © runescapeyttanic

//@version=4
// strategy("Buy and Hold entry finder Strategy",pyramiding=10000, overlay=true,initial_capital=0,default_qty_type=strategy.cash,default_qty_value=1000,currency = currency.EUR,commission_type=strategy.commission.cash_per_order,commission_value=0)

//INPUTS##################################################################################################################

maxEmaDistance = input(title="Maximum EMA Distance", type=input.float, step=0.01, defval=50000)
emalength = input(title="EMA Length", type=input.integer,defval=200)

// Make input options that configure backtest date range
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=2020, minval=1800, maxval=2100)

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

endDate1=endDate-1
//starttag
//startmonat
//MACD########################################################################################################################

fast_length=12
slow_length=26
src=close
col_macd=#0094ff
fast_ma = ema(src, fast_length)
slow_ma = ema(src, slow_length)
macd = fast_ma - slow_ma

//EMA Distance CALC########################################################################################################

ma1 =ema(close,emalength)
distFromMean = close - ma1

inDateRange = true

longCondition = (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0 and inDateRange)
longnow=false

if(longCondition and strategy.position_size == 0)
    strategy.entry("My Long Entry Id", strategy.long)
    longnow:=true

if(longCondition and strategy.position_size > 0)
    longnow:=true
    

if(longCondition and strategy.position_size > 0 and month>valuewhen(longnow, month ,1) or longCondition and strategy.position_size > 0 and year>valuewhen(longnow, year ,1) and inDateRange)
    strategy.entry("My Long Entry Id", strategy.long)

plotchar(minute, "Minuten", "", location = location.top)

plotchar(hour, "Stunden", "", location = location.top)    

plotchar(dayofmonth, "Tage", "", location = location.top)

plotchar(month, "Monat", "", location = location.top)

plotchar(year, "Jahr", "", location = location.top)

plotchar(strategy.position_size, "Positionen", "", location = location.top)

plotchar(longCondition, "Long Condition", "", location = location.top)

if true
    strategy.close_all()

//#########################################################################################################################

plotArrow = if (distFromMean<=maxEmaDistance and distFromMean>=distFromMean[1] and macd<=0)
    1
else
    0
    
plotarrow(series=plotArrow)



Más.