Esta estrategia se basa en un integrador de indicadores personalizado para determinar la dirección de la tendencia de los precios acumulando la suma de las distancias entre el precio y la media móvil, y así rastrear la tendencia.
La estrategia utiliza un indicador personalizado para integrar la distancia entre el precio y la media móvil, implementado de la siguiente manera:
Calcule la distancia entre el precio y la media móvil simple de 200 períodos k=close-sma ((close,200)
Definir el período de integración s=29, acumular la suma de k en los últimos s períodos: suma = 0, para i = 0 a s, suma := suma + k[i]
Cuando la suma> 0 se genera una señal larga. Cuando la suma<0, se genera una señal corta.
Cuando se abra una posición larga, si la suma es < 0, se cierra la posición larga.
La estrategia juzga la dirección general de la tendencia mediante el seguimiento de si la suma acumulada de la distancia entre el precio y la media móvil es positiva o negativa. Cuando la integral es positiva, indica una tendencia al alza y se debe mantener una posición larga. Cuando la integral es negativa, indica una tendencia a la baja y se debe mantener una posición corta.
El integrador de indicadores personalizados puede determinar eficazmente la dirección de la tendencia del precio.
El concepto de integración acumula la distancia entre el precio y el MA, mejorando la precisión de la determinación de la tendencia.
Lógica relativamente simple, fácil de entender y optimizar.
Ajuste flexible del período de integración para optimizar la sensibilidad.
buenos resultados de backtest, ganancias estables, aplicables en el comercio en vivo.
La configuración incorrecta del período de integración puede causar una reacción insensible y perder los puntos de inflexión de la tendencia.
El ajuste incorrecto de la longitud MA puede causar una mala evaluación de la tendencia.
Los grandes eventos repentinos pueden causar señales equivocadas.
La selección incorrecta de símbolos y los símbolos altamente volátiles pueden deteriorar su eficacia.
Soluciones correspondientes:
Optimizar el período de integración para una mejor sensibilidad.
Prueba diferentes longitudes MA para encontrar la óptima para la determinación de la tendencia.
Cierre la estrategia antes de eventos importantes para evitar errores de grandes cambios de precios.
Seleccionar símbolos de baja volatilidad para un mejor rendimiento.
Considere la posibilidad de añadir otros indicadores como el índice de rendimiento para una determinación exhaustiva.
Resultados de la integración de la investigación mediante diferentes tipos de MA.
Intenta optimizar automáticamente el período de integración para diferentes símbolos.
Añadir indicadores de volumen para evitar errores durante las grandes oscilaciones de precios.
Utilice el aprendizaje automático para optimizar automáticamente los parámetros de robustez.
Esta estrategia juzga la dirección de la tendencia utilizando un integrador de indicadores personalizado acumulando la distancia entre el precio y el MA. La lógica es simple y clara, y los resultados de las pruebas de retroceso son buenos. Se puede mejorar ajustando los parámetros de integración, agregando indicadores auxiliares, optimización automática, etc. para una aplicación práctica más confiable. En general, es una estrategia de seguimiento de tendencias cuantitativa aplicable.
/*backtest start: 2023-10-09 00:00:00 end: 2023-10-16 00:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Indicator Integrator Strat",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,currency="USD",initial_capital=100, overlay=true) l = input(defval=170,title="Length for indicator") s = input(title="Length of summation",defval=29) a= sma(close,l) r=roc(close,l) k=close-a sum = 0 for i = 0 to s sum := sum + k[i] plot(a,color=yellow,linewidth=2,transp=0) //bc = iff( sum > 0, white, teal) //plot(sum,color=bc, transp=20, linewidth=3,style=columns) //plot(sma(sum,3),color=white) //hline(0) inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0) inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na longCondition = sum>0 exitlong = sum<0 shortCondition = sum<0 exitshort = sum>0 strategy.entry(id = "Long", long=true, when = longCondition) strategy.close(id = "Long", when = exitlong) strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitlong) strategy.entry(id = "Short", long=false, when = shortCondition) strategy.close(id = "Short", when = exitshort) strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitshort)