
La estrategia se basa en un indicador de tendencia súper, en combinación con el ATR para establecer dinámicamente una línea de stop loss y así beneficiarse de la fuerte tendencia de Ethereum. Se puede ejecutar en el par de operaciones ETH/USD en el intercambio Coinbase.
La estrategia utiliza un clásico indicador de seguimiento de tendencias y un indicador de tendencias súper para determinar la dirección de la tendencia. El indicador de tendencias súper se compone de dos curvas, respectivamente:
Cuando los precios cambian de una tendencia ascendente a una tendencia descendente, se abre una posición en blanco; cuando los precios cambian de una tendencia descendente a una tendencia ascendente, se abre una posición en blanco.
Además, la estrategia también utiliza el indicador ATR para ajustar dinámicamente la posición de la línea de parada. En concreto, la posición de la línea de parada ascendente es el promedio de los precios más altos y más bajos menos ATR multiplicado por un factor; la posición de la línea de parada descendente es el promedio de los precios más altos y más bajos más ATR multiplicado por un factor.
Después de entrar en la señal de salida, si el precio vuelve a romper la línea de parada, se realiza una salida de parada.
Se trata de una estrategia de seguimiento de tendencias más madura, con las siguientes ventajas:
La estrategia también tiene sus riesgos:
Para reducir los riesgos mencionados anteriormente, se puede ajustar adecuadamente el coeficiente ATR, o en combinación con otros indicadores para filtrar las señales de negociación. También se puede considerar que la posición de stop loss tenga un cierto amortiguador.
La estrategia tiene espacio para ser optimizada aún más:
Esta estrategia en su conjunto es una estrategia de seguimiento de tendencias bien probada y confiable. Utiliza indicadores de tendencias súper para determinar la dirección de la tendencia y utiliza el ATR para ajustar la posición de parada para controlar el riesgo y obtener ganancias. La estrategia se aplica a las operaciones de monedas digitales de alta volatilidad y funciona mejor en monedas principales como Ethereum.
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("SuperTrend Strategy",
overlay=true,
initial_capital=2e3,
process_orders_on_close=true,
commission_type=strategy.commission.percent,
commission_value=0.1
)
length = input(title="ATR Period", type=input.integer, defval=21)
mult = input(title="ATR Multiplier", type=input.float, step=.25, defval=6.2)
wicks = input(title="Take Wicks into Account ?", type=input.bool, defval=false)
useDate = input(title="Start from Specific Date ?", defval=false)
yearStart = input(title="Start Year", defval=2019)
monthStart = input(title="Start Month", minval=1, maxval=12, defval=1)
dayStart = input(title="Start Day", minval=1, maxval=31, defval=1)
startTime = timestamp(yearStart, monthStart, dayStart, 0, 0)
startFrom = useDate ? time(timeframe.period) >= startTime : true
atr = mult * ta.atr(length)
longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := (wicks ? low[1] : close[1]) > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (wicks ? high[1] : close[1]) < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (wicks ? high : close) > shortStopPrev ? 1 : dir == 1 and (wicks ? low : close) < longStopPrev ? -1 : dir
longColor = color.green
shortColor = color.red
plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
plotshape(dir == 1 and dir[1] == -1 ? longStop : na, title="Long Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
plotshape(dir == -1 and dir[1] == 1 ? shortStop : na, title="Short Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
longCondition = dir[1] == -1 and dir == 1
if longCondition and startFrom
strategy.entry("Long", strategy.long, stop=longStop)
else
strategy.cancel("Long")
shortCondition = dir[1] == 1 and dir == -1
if shortCondition and startFrom
strategy.entry("Short", strategy.short, stop=shortStop)
else
strategy.cancel("Short")