
Стратегия основана на супер трендовом индикаторе, который в сочетании с ATR динамически устанавливает линию остановки, чтобы получить прибыль в сильных тенденциях Ethereum. Она может работать на торговой паре ETH/USD на бирже Coinbase.
Стратегия использует классический индикатор отслеживания тенденций и индикатор супертенденции для определения направления тенденции. Супертенденционный индикатор состоит из двух кривых:
Открытие позиции с открытым лицом происходит, когда цена переходит от восходящей тенденции к нисходящей; открытие позиции с открытым лицом происходит, когда цена переходит от нисходящей тенденции к восходящей.
Кроме того, стратегия также использует показатель ATR для динамического регулирования положения стоп-линий. В частности, положение восходящей стоп-линии равняется средней величине наивысшей цены за вычетом ATR, умноженной на один коэффициент; положение нисходящей стоп-линии равняется средней величине наивысшей цены за вычетом ATR, умноженной на один коэффициент.
После входа в сигнал, если цена вновь пересечет линию стоп-лосса, то будет произведен стоп-лосс.
Это более зрелая стратегия отслеживания тенденций, которая имеет следующие преимущества:
Однако эта стратегия также несет в себе некоторые риски:
Чтобы снизить вышеупомянутый риск, можно соответствующим образом скорректировать коэффициент ATR, или в сочетании с другими показателями фильтровать торговые сигналы. Стоп-позиции также могут быть рассмотрены с некоторой буферной защитой.
В этой стратегии есть место для дальнейшей оптимизации:
Эта стратегия в целом является проверенной и надежной стратегией отслеживания тенденций. Она использует индикаторы супертенденции для определения направления тенденции и использует ATR для корректировки стоп-позиции, чтобы контролировать риск и получать прибыль. Эта стратегия применима к торговле цифровыми валютами с высокой волатильностью и лучше всего работает на основных валютах, таких как 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")