리소스 로딩... 로딩...

ATR 및 EMA 기반의 동적 취득 및 손실 중지 적응 전략

저자:차오장, 날짜: 2024-05-28 14:15:56
태그:ATREMA

img

전반적인 설명

이 전략은 시장의 변동성에 적응하기 위해 수익을 취하고 손실을 중지하는 수준을 동적으로 조정하기 위해 ATR (평균 진정한 범위) 및 EMA (비례 이동 평균) 라는 두 지표를 사용합니다. 전략의 주요 아이디어는 시장 변동성을 측정하고 변동성의 크기에 따라 수익을 취하고 손실을 중지하는 수준을 설정하기 위해 ATR 지표를 사용하는 것입니다. 동시에 EMA 지표는 거래 방향을 결정하는 데 사용됩니다. 가격이 EMA를 넘을 때 긴 포지션을 열고 가격이 EMA를 넘을 때 짧은 포지션을 열 수 있습니다. 이 전략은 시장 변동성의 변화에 따라 수익을 취하고 손실을 중지하는 수준을 자동으로 조정하여 동적 위험 통제의 목적을 달성 할 수 있습니다.

전략 원칙

  1. 시장 변동의 크기를 측정하기 위해 ATR 지표를 계산합니다.
  2. 동적 스톱 로스 레벨은 ATR 값과 입력 멀티플러스 매개 변수를 기준으로 계산합니다.
  3. EMA 지표를 필터 조건으로 사용하십시오. 가격이 EMA를 넘어서면 긴 포지션을 열고 가격이 EMA를 넘어서면 짧은 포지션을 열십시오.
  4. 포지션을 보유하는 동안, 가격 변화와 동적 스톱 로스 레벨 변화에 따라 영업 및 스톱 로스 레벨을 지속적으로 조정합니다.
  5. 가격이 동적 스톱 로스 레벨에 도달하면 포지션을 닫고 리버스 포지션을 개척합니다.

전략적 장점

  1. 강력한 적응력: 수익을 취하고 손실을 멈추는 수준을 동적으로 조정함으로써 전략은 다른 시장 조건에서 변동성의 변화에 적응하고 위험을 제어 할 수 있습니다.
  2. 강한 트렌드 추적 능력: EMA 지표는 거래 방향을 결정하는 데 사용됩니다. 이는 시장 추세를 효과적으로 파악 할 수 있습니다.
  3. 조정 가능한 매개 변수: ATR 기간과 여러 매개 변수를 조정함으로써 전략의 위험과 수익을 유연하게 제어할 수 있습니다.

전략 위험

  1. 매개 변수 설정 위험: ATR 기간 및 여러 매개 변수 설정은 전략의 성능에 직접 영향을 미칩니다. 잘못된 매개 변수 설정은 전략 실패로 이어질 수 있습니다.
  2. 변동성 시장 위험: 변동성 시장에서 포지션의 빈번한 개점 및 폐쇄는 큰 미끄러짐과 거래 수수료 손실로 이어질 수 있습니다.
  3. 트렌드 역전 위험: 시장 트렌드가 역전되면 전략은 연속적인 손실을 겪을 수 있습니다.

전략 최적화 방향

  1. 트렌드 판단의 정확성을 높이기 위해 MACD와 RSI와 같은 더 많은 기술 지표를 도입하십시오.
  2. 트래일링 스톱 로스 및 동적 비율 스톱 로스 방법을 도입하는 것과 같은 수익 및 스톱 로스 레벨의 계산 방법을 최적화합니다.
  3. 전략의 안정성과 수익성을 높이기 위해 ATR 기간과 여러 매개 변수를 최적화하여 최적의 조합을 찾습니다.
  4. 포지션 관리 모듈을 추가하여 시장 변동성과 계정 위험 수준에 따라 포지션 크기를 동적으로 조정합니다.

요약

이 전략은 시장 변동성의 변화에 적응하기 위해 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)

관련

더 많은