
La estrategia se basa en la combinación de los indicadores de alto y bajo, el indicador de la línea media y el indicador de la tendencia súper para determinar la tendencia del mercado.
El indicador de alzas y bajas determina si el precio ha creado un nuevo alto o un nuevo bajo en el último período determinado, y acumula un puntaje. Cuando el puntaje aumenta, representa un aumento de la fuerza de los más altos; cuando el puntaje disminuye, representa un aumento de la fuerza de los más bajos.
A través del indicador de la línea media, se determina si el precio está en una tendencia ascendente escalonada desde arriba hacia abajo, o en una tendencia descendente escalonada desde arriba hacia abajo. Cuando la línea media presenta una tendencia ascendente escalonada, representa un aumento de las fuerzas de múltiples cabezas; cuando la línea media presenta una tendencia descendente escalonada, representa un aumento de las fuerzas de la cabeza.
En particular, cuando el indicador de la tendencia alta y baja y el indicador de la tendencia media muestran un aumento de la fuerza de la cabeza, y la dirección del indicador de la tendencia súper es hacia abajo, se realiza una posición larga; cuando el indicador de la tendencia alta y baja y el indicador de la tendencia media muestran un aumento de la fuerza de la cabeza, y la dirección del indicador de la tendencia súper es hacia arriba, se realiza una posición vacía.
Los indicadores de alza y bajada son eficaces para determinar el movimiento de los precios y los cambios de fuerza, mientras que los indicadores de línea media son eficaces para determinar la tendencia de los precios, y la combinación de ambos permite determinar con mayor precisión la dirección del mercado.
La combinación de los indicadores de supertrend para la construcción de la bodega evita la construcción de la bodega demasiado temprana o demasiado tarde. El indicador de supertrend puede identificar eficazmente los puntos de reversión de los precios.
Los indicadores se verifican entre sí para reducir las señales falsas.
Si los indicadores de alto, bajo y promedio emiten señales erróneas, puede causar pérdidas en la construcción de la posición.
Si la participación no es alta, los parámetros del indicador de tendencia súper pueden estar mal configurados y emitir una señal errónea.
Si la tendencia se invierte demasiado rápido, el stop loss incorrecto puede causar grandes pérdidas.
Se puede reducir el riesgo mediante la optimización de los parámetros de los indicadores, el ajuste de los puntos de parada, etc.
Se pueden probar diferentes tipos de indicadores de medias para encontrar la combinación óptima de parámetros.
Se pueden optimizar los parámetros de los indicadores de alto y bajo y de la media para que la señal sea más estable y confiable.
Se puede combinar con otros indicadores para verificar, como MACD, KD, etc., para reducir las señales falsas.
Se puede combinar algoritmos de aprendizaje automático para optimizar los parámetros y el peso de la señal.
El análisis de sentimientos se puede combinar con el análisis de la calidez del mercado, evitando el comercio de variedades de baja calidez.
La estrategia utiliza indicadores altos y bajos y medianos para evaluar la tendencia y la fuerza del mercado, y se combina con una señal de filtración de indicadores de tendencias súper, para establecer posiciones cuando se enfrentan a fuerzas en el espacio y los indicadores de tendencias súper se invierten, para realizar operaciones de bajo riesgo. La ventaja de la estrategia reside en la verificación de múltiples indicadores y la construcción de posiciones a tiempo, para controlar el riesgo de manera efectiva.
/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 00:00:00
period: 1h
basePeriod: 15m
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/
// © HeWhoMustNotBeNamed
//@version=4
strategy("AlignedMA and Cumulative HighLow Strategy", overlay=true, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)
MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
includePartiallyAligned = input(true)
HighLowPeriod = input(50, minval=1,step=1)
LookbackPeriod = input(10, minval=1,step=1)
supertrendMult = input(2, minval=1, maxval=10, step=0.5)
supertrendLength = input(10, minval=1)
tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
backtestYears = input(10, minval=1, step=1)
f_getMovingAverage(source, MAType, length)=>
ma = sma(source, length)
if(MAType == "ema")
ma := ema(source,length)
if(MAType == "hma")
ma := hma(source,length)
if(MAType == "rma")
ma := rma(source,length)
if(MAType == "vwma")
ma := vwma(source,length)
if(MAType == "wma")
ma := wma(source,length)
ma
f_getMaAlignment(MAType, includePartiallyAligned)=>
ma5 = f_getMovingAverage(close,MAType,5)
ma10 = f_getMovingAverage(close,MAType,10)
ma20 = f_getMovingAverage(close,MAType,20)
ma30 = f_getMovingAverage(close,MAType,30)
ma50 = f_getMovingAverage(close,MAType,50)
ma100 = f_getMovingAverage(close,MAType,100)
ma200 = f_getMovingAverage(close,MAType,200)
upwardScore = 0
upwardScore := close > ma5? upwardScore+1:upwardScore
upwardScore := ma5 > ma10? upwardScore+1:upwardScore
upwardScore := ma10 > ma20? upwardScore+1:upwardScore
upwardScore := ma20 > ma30? upwardScore+1:upwardScore
upwardScore := ma30 > ma50? upwardScore+1:upwardScore
upwardScore := ma50 > ma100? upwardScore+1:upwardScore
upwardScore := ma100 > ma200? upwardScore+1:upwardScore
upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0
f_getHighLowValue(HighLowPeriod)=>
currentHigh = highest(high,HighLowPeriod) == high
currentLow = lowest(low,HighLowPeriod) == low
currentHigh?1:currentLow?-1:0
inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0)
maAlignment = f_getMaAlignment(MAType,includePartiallyAligned)
alignedMaIndex = sum(maAlignment,LookbackPeriod)
maAlignmentDirection = alignedMaIndex > alignedMaIndex[1] ? 1 : alignedMaIndex < alignedMaIndex[1] ? -1 : 0
maAlignmentDirection := maAlignmentDirection == 0? nz(maAlignmentDirection[1],0):maAlignmentDirection
highLowIndex = f_getHighLowValue(HighLowPeriod)
cumulativeHighLowIndex = sum(highLowIndex,LookbackPeriod)
hlDirection = cumulativeHighLowIndex > cumulativeHighLowIndex[1] ? 1 : cumulativeHighLowIndex < cumulativeHighLowIndex[1] ? -1 : 0
hlDirection := hlDirection == 0? nz(hlDirection[1],0):hlDirection
[superTrend, dir] = supertrend(supertrendMult, supertrendLength)
buyEntry = (dir == -1 and maAlignmentDirection == 1 and hlDirection == 1)
sellEntry = (dir == 1 and maAlignmentDirection == -1 and hlDirection == -1)
barColor = buyEntry?color.lime:sellEntry?color.orange:color.gray
barcolor(barColor)
// strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when=barColor == color.lime and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=dir == 1)
strategy.entry("Sell", strategy.short, when=barColor == color.orange and inDateRange, oca_name="oca_sell")
strategy.close("Sell", when=dir == -1)