
La estrategia es una estrategia de seguimiento de tendencias basada en el indicador de la vía de Tongan, combinada con el stop loss dinámico del indicador ATR para bloquear ganancias, y pertenece a la clase de estrategias de seguimiento de tendencias.
La estrategia utiliza un indicador de la vía de Dongxian de 20 ciclos de longitud, donde la línea media de la vía es el promedio de los precios más altos y más bajos. Cuando el precio cruza la línea media de la vía por encima, hace más, y cuando el precio cruza la línea media de la vía por debajo, hace un vacío. La condición de equilibrio es que el precio toque la línea de parada dinámica, y la línea de parada se calcula con el precio más bajo de las 3 líneas K más recientes, menos un tercio del valor del indicador ATR, como una parada adicional, y el precio más alto de las 3 líneas K más recientes, más un tercio del valor del indicador ATR, como un vacío.
La estrategia tiene las siguientes ventajas:
El principal riesgo de esta estrategia es:
La estrategia puede ser optimizada en los siguientes aspectos:
La estrategia en su conjunto es una estrategia de seguimiento de tendencias sencilla y práctica, que determina la dirección de la tendencia a través del canal de Dongxian y utiliza un stop loss dinámico para bloquear las ganancias. La estrategia es muy práctica, pero se puede optimizar aún más de varias maneras, lo que permite que la estrategia mantenga un rendimiento estable en un entorno de mercado más complejo.
/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title = "dc", overlay = true)
atrLength = input(title="ATR Length:", defval=20, minval=1)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12)
testEndDay = input(31, "Backtest Start Day")
testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0)
testPeriod() =>
true
//time >= testPeriodStart ? true : false
dcPeriod = input(20, "Period")
dcUpper = highest(close, dcPeriod)[1]
dcLower = lowest(close, dcPeriod)[1]
dcAverage = (dcUpper + dcLower) / 2
atrValue=atr(atrLength)
useTakeProfit = na
useStopLoss = na
useTrailStop = na
useTrailOffset = na
//@version=1
Buy_stop = lowest(low[1],3) - atr(20)[1] / 3
plot(Buy_stop, color=red, title="buy_stoploss")
Sell_stop = highest(high[1],3) + atr(20)[1] / 3
plot(Sell_stop, color=green, title="sell_stoploss")
plot(dcLower, style=line, linewidth=3, color=red, offset=1)
plot(dcUpper, style=line, linewidth=3, color=aqua, offset=1)
plot(dcAverage, color=black, style=line, linewidth=3, title="Mid-Line Average")
strategy.entry("simpleBuy", strategy.long, when=(close > dcAverage) and cross(close,dcAverage))
strategy.close("simpleBuy",when= ( close< Buy_stop))
strategy.entry("simpleSell", strategy.short,when=(close < dcAverage) and cross(close,dcAverage) )
strategy.close("simpleSell",when=( close > Sell_stop))
//strategy.exit("Exit simpleBuy", from_entry = "simpleBuy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit simpleSell", from_entry = "simpleSell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)