Esta estratégia é baseada no indicador SuperTrend e usa o ATR para definir linhas de stop loss dinamicamente para lucrar com fortes tendências no Ethereum.
A estratégia utiliza um indicador clássico de tendência - o indicador SuperTrend para determinar a direção da tendência.
Quando o preço passa de tendência de alta para tendência de baixa, abra uma posição curta.
Além disso, a estratégia utiliza o indicador ATR para ajustar dinamicamente a linha de stop loss. Especificamente, a posição da linha de stop loss de tendência ascendente é a média da maior alta e menor baixa menos ATR multiplicada por um coeficiente; a posição da linha de stop loss de tendência descendente é a média da maior alta e menor baixa mais ATR multiplicada por um coeficiente. Isso permite ajustar a perda de stop baseada na volatilidade do mercado.
Depois que os sinais de entrada forem acionados, se o preço voltar acima da linha de stop loss, pare com a perda.
Trata-se de uma tendência relativamente madura que segue uma estratégia com as seguintes vantagens:
Há também alguns riscos com esta estratégia:
Para mitigar os riscos acima referidos, o coeficiente ATR pode ser ajustado ou adicionar filtros com outros indicadores.
Há ainda espaço para melhorias:
Em geral, esta é uma estratégia madura e confiável de tendência. Ele usa o indicador SuperTrend para determinar a direção da tendência e adapta o stop loss com ATR para controlar riscos enquanto lucrando. A estratégia funciona bem para criptomoedas de alta volatilidade como o 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")