이 전략은 시장의 변동성에 적응하기 위해 수익을 취하고 손실을 중지하는 수준을 동적으로 조정하기 위해 ATR (평균 진정한 범위) 및 EMA (비례 이동 평균) 라는 두 지표를 사용합니다. 전략의 주요 아이디어는 시장 변동성을 측정하고 변동성의 크기에 따라 수익을 취하고 손실을 중지하는 수준을 설정하기 위해 ATR 지표를 사용하는 것입니다. 동시에 EMA 지표는 거래 방향을 결정하는 데 사용됩니다. 가격이 EMA를 넘을 때 긴 포지션을 열고 가격이 EMA를 넘을 때 짧은 포지션을 열 수 있습니다. 이 전략은 시장 변동성의 변화에 따라 수익을 취하고 손실을 중지하는 수준을 자동으로 조정하여 동적 위험 통제의 목적을 달성 할 수 있습니다.
이 전략은 시장 변동성의 변화에 적응하기 위해 ATR 및 EMA 지표를 동적으로 조정하고 EMA 지표를 사용하여 거래 방향을 결정합니다. 이 전략은 강력한 적응력과 트렌드 추적 기능을 가지고 있지만 매개 변수 설정, 오스실레이션 시장 및 트렌드 역전에서 특정 위험에 직면 할 수 있습니다. 미래에 더 많은 기술적 지표를 도입하고, 수익을 취하고, 손실을 멈추는 알고리즘을 최적화하고, 매개 변수 최적화 및 위치 관리 모듈을 추가함으로써 전략의 성능을 향상시킬 수 있습니다.
/*backtest start: 2024-04-27 00:00:00 end: 2024-05-27 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}] */ //@version=5 strategy(title='UT MB&SS Bot', overlay=true) // Inputs a = input(1, title='Key Value. \'This changes the sensitivity\'') c = input(10, title='ATR Period') h = input(false, title='Signals from Heikin Ashi Candles') stoploss = input(2.0, title='Stop Loss (ATR Multiples)') xATR = ta.atr(c) nLoss = a * xATR src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close var xATR_trailing_stop = 0.0 iff_1 = src > nz(xATR_trailing_stop[1], 0) ? src - nLoss : src + nLoss iff_2 = src < nz(xATR_trailing_stop[1], 0) and src[1] < nz(xATR_trailing_stop[1], 0) ? math.min(nz(xATR_trailing_stop[1]), src + nLoss) : iff_1 xATR_trailing_stop := src > nz(xATR_trailing_stop[1], 0) and src[1] > nz(xATR_trailing_stop[1], 0) ? math.max(nz(xATR_trailing_stop[1]), src - nLoss) : iff_2 pos = 0 iff_3 = src[1] > nz(xATR_trailing_stop[1], 0) and src < nz(xATR_trailing_stop[1], 0) ? -1 : nz(pos[1], 0) pos := src[1] < nz(xATR_trailing_stop[1], 0) and src > nz(xATR_trailing_stop[1], 0) ? 1 : iff_3 xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue ema = ta.ema(src, 1) above = ta.crossover(ema, xATR_trailing_stop) below = ta.crossover(xATR_trailing_stop, ema) buy = src > xATR_trailing_stop and above sell = src < xATR_trailing_stop and below barbuy = src > xATR_trailing_stop barsell = src < xATR_trailing_stop plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) barcolor(barbuy ? color.green : na) barcolor(barsell ? color.red : na) stop_level = pos == 1 ? xATR_trailing_stop - stoploss * xATR : xATR_trailing_stop + stoploss * xATR stop_level := math.max(stop_level, nz(stop_level[1])) if pos == 1 strategy.exit('Exit Long', 'UT Long', stop=stop_level) else if pos == -1 strategy.exit('Exit Short', 'UT Short', stop=stop_level) if buy strategy.entry("Enter Long", strategy.long) else if sell strategy.entry("Enter Short", strategy.short)