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

Han Yue - 다중 EMA, ATR 및 RSI를 기반으로 한 트렌드 다음 거래 전략

저자:차오장, 날짜: 2024-05-14 16:37:52
태그:EMAATRRSI

img

전반적인 설명

이 전략은 시장 트렌드를 결정하기 위해 서로 다른 기간을 가진 세 개의 기하급수적인 이동 평균 (EMA) 을 사용하며, 상대 강도 지수 (RSI) 와 평균 진정한 범위 (ATR) 를 결합하여 엔트리 포인트, 스톱 손실 및 영리 수준을 식별합니다. 가격이 세 개의 EMA가 형성 한 채널을 뚫고 RSI도 이동 평균을 뚫고 갈 때 전략은 엔트리 신호를 유발합니다. ATR은 포지션 크기를 제어하고 스톱 손실 수준을 설정하는 데 사용되며 리스크-어워드 비율 (RR) 은 영리 수준을 결정하는 데 사용됩니다. 이 전략의 주요 장점은 시장 추세를 따라 엄격한 리스크 관리 조치를 통해 잠재적 인 손실을 제한 할 수 있기 때문에 단순성과 효과에 있습니다.

전략 원칙

  1. 전체 시장 추세를 결정하기 위해 다른 기간 (단기, 중기 및 장기) 을 가진 세 개의 EMA를 계산하십시오.
  2. RSI 인디케이터를 사용하여 트렌드의 강도와 지속 가능성을 확인합니다. RSI가 이동 평균을 깨면 트렌드의 변화를 나타냅니다.
  3. 가격과 EMA 채널 사이의 관계, 그리고 RSI 신호를 기반으로 입력 신호를 생성합니다. 가격이 EMA 채널을 통과하고 RSI가 이동 평균을 통과 할 때 트렌드 방향으로 포지션을 열십시오.
  4. ATR을 사용하여 포지션 크기와 스톱 로스 수준을 결정하고 각 거래의 위험 노출을 제어합니다.
  5. 전략의 수익성을 보장하기 위해 미리 정의된 위험과 수익 비율 (예를 들어, 1.5:1) 을 기반으로 수익을 취하는 수준을 설정하십시오.

이점 분석

  1. 단순하고 효과적: 전략은 몇 가지 일반적인 기술적 지표만을 사용하며, 명확한 논리를 가지고 있으며 이해하기 쉽고 실행하기 쉽습니다.
  2. 트렌드 추적: EMA 채널과 RSI를 결합함으로써 전략은 시장 트렌드를 추적하고 더 큰 가격 움직임을 포착 할 수 있습니다.
  3. 리스크 제어: ATR을 사용하여 스톱 로스 레벨을 설정하고 포지션 사이즈를 제어하면 각 거래의 리스크 노출을 효과적으로 제한합니다.
  4. 유연성: 전략 매개 변수 (EMA 기간, RSI 기간, ATR 멀티플리커 등) 는 성과를 최적화하기 위해 다른 시장과 거래 스타일에 따라 조정할 수 있습니다.

위험 분석

  1. 매개 변수 최적화: 전략의 성능은 크게 매개 변수 선택에 달려 있으며, 잘못된 매개 변수 설정은 전략 실패 또는 저성능으로 이어질 수 있습니다.
  2. 시장 위험: 전략은 예상치 못한 사건이나 극단적인 시장 조건, 특히 트렌드 반전 또는 변동성 시장에서 상당한 손실을 입을 수 있습니다.
  3. 과잉 조정: 매개 변수 최적화 과정에서 전략이 역사적 데이터에 과잉 조정되면 실제 거래에서 낮은 성과를 낼 수 있습니다.

최적화 방향

  1. 동적 매개 변수: 시장 조건의 변화에 따라 전략 매개 변수를 동적으로 조정합니다. 예를 들어 추세가 강한 경우 더 긴 EMA 기간과 불안정한 시장에서 더 짧은 기간을 사용하십시오.
  2. 다른 지표를 결합: 입력 신호의 신뢰성 및 정확성을 향상시키기 위해 다른 기술적 지표 (볼린저 밴드, MACD 등) 를 도입하십시오.
  3. 시장 정서를 포함: 시장 정서 지표 (두려움과 탐욕 지표와 같은) 를 결합하여 전략의 위험 노출과 위치 관리를 조정합니다.
  4. 다중 시간 프레임 분석: 더 포괄적인 시장 관점을 얻고 더 탄탄한 거래 결정을 내리기 위해 다른 시간 프레임에서 시장 추세와 신호를 분석합니다.

요약

이 전략은 EMA, RSI 및 ATR와 같은 여러 일반적인 기술적 지표를 결합하여 간단하고 효과적인 트렌드 추적 거래 시스템을 구축합니다. 시장 트렌드를 결정하기 위해 EMA 채널, 트렌드 강도를 확인하기 위해 RSI 및 위험을 제어하기 위해 ATR을 사용합니다. 전략의 장점은 트렌드와 거래를 다른 시장 조건 하에서 따라갈 수 있기 때문에 단순성과 적응력입니다. 그러나 전략의 성능은 크게 매개 변수 선택에 달려 있으며 부적절한 매개 변수 설정은 전략 실패 또는 열악한 성과를 초래할 수 있습니다. 또한 전략은 예상치 못한 사건 또는 극단적인 시장 조건에서 상당한 위험에 직면 할 수 있습니다. 전략을 더 이상 최적화하기 위해 동적 매개 변수 조정, 다른 지표를 결합, 시장 정서 분석을 통합하고 멀티 타임프레임 거래를 수행하는 것을 고려할 수 있습니다. 이 전략은 실제 트렌드 추적을위한 좋은 기초를 제공하지만 전체적인 시장 조건에 따라 최적화되어야합니다.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © hatnxkld

//@version=4
strategy("Win ha", overlay=true)

ss2 = input("0300-1700", title = "Khung thời gian")

t2 = time(timeframe.period,ss2)
c2 = #cacae6

bgcolor(t2 ? c2 : na, transp = 70)


//3ema
emangan=input(title="Ema ngắn", defval = 12)
ngan=ema(close, emangan)
a= plot(ngan, title="EMA ngắn", color=color.yellow)
ematb=input(title="Ema trung bình", defval = 100)
tb=ema(close, ematb)
b= plot(tb, title="EMA trung bình", color=color.blue)
//emadai=input(title="Ema dai", defval = 288)
//dai=ema(close,emadai)
//c= plot(dai, title="EMA dai", color=color.red)




// nhập hệ số nhân ATR
i=input(title="Hệ số nhân với ATR", defval=1.25)

// RSI
rsi=rsi(close, emangan)
marsi=sma(rsi, emangan)

// Kênh keltler
//heso=input(defval=1, title="Hệ số Kênh Keltler")
//atr=atr(emangan)
//tren=ngan+atr*heso
//d=plot(tren, title="Kênh trên", color=color.white)
//duoi=ngan-atr*heso
//e=plot(duoi, title="Kênh dưới", color=color.white)
//fill(d,e, color=color.rgb(48, 58, 53))

ban = ( close[1]>open[1] and (high[1]-close[1])>(close[1]-low[1]) and open>close and close<low[1]   ) 


//or (    open[1] > close[1] and (high[1]-open[1])>(open[1]-low[1]) and (open[1]-close[1])>(close[1]-low[1]) and open>close and close <low[1]     )   )  //and time(timeframe.period,"2200-1300")
//and (close[1]-open[1])>(open[1]-low[1]) 
//high > ngan and close < ngan and ngan<tb and 
// and time(timeframe.period,"1000-2300")
bgcolor(color = ban ? color.rgb(235, 106, 123) : na)
//bgcolor(color.rgb(82, 255, 154),transp = 100, offset = 1, show_last = 2)
//and time(timeframe.period,"2300-1500") and ((open>ngan and close<ngan) or (open>tren and close<tren))
plotshape(ban , style=shape.arrowdown, location=location.abovebar, color=#ff00ff, size=size.tiny, textcolor=color.rgb(255, 59, 213))
alertcondition(ban, "Ban", "Ban")

mua=  (  open[1]>close[1] and (close[1]-low[1])>(high[1]-close[1]) and close > open and close > high[1]  )  //and time(timeframe.period,"2200-1300")


//or  (  close[1]>open[1] and (open[1]-low[1]) > (high[1]-open[1]) and (close[1]-open[1])>(high[1]-close[1]) and close>open and close>high[1]      ) )
//and (open[1]-close[1])>(high[1]-open[1])
//low < ngan and close > ngan and ngan>tb and
//or  (  close[1]>open[1] and (open[1]-low[1]) > (high[1]-open[1]) and (close[1]-open[1])>(high[1]-close[1]) and close>open and close>high[1]      )

// and time(timeframe.period,"1000-2300")
bgcolor(color= mua? color.rgb(108, 231, 139):na)
//and time(timeframe.period,"2300-1500") and ((open<ngan and close>ngan)or (open<duoi and close>duoi) )
plotshape(mua , style=shape.arrowup, location=location.belowbar, color=#00ff6a, size=size.tiny, textcolor=color.rgb(83, 253, 60))
alertcondition(mua , "Mua", "Mua")


//len1 = ban==true and (high-low)>2*atr
//plotshape(len1 , style=shape.flag, location=location.abovebar, color=#ff00ff, size=size.tiny, title="Sell Signal", text="Xuong 1", textcolor=color.rgb(255, 59, 213))

//bann= ban==true and rsi < marsi and marsi[2]>marsi[1]
//plotshape(bann , style=shape.labeldown, location=location.abovebar, color=#ff00ff, size=size.tiny, title="Sell Signal", text="BAN 2", textcolor=color.rgb(240, 234, 239))

//bannn = mua==true and rsi>marsi and marsi[2]<marsi[1]
//plotshape(bannn , style=shape.labelup, location=location.belowbar, color=#00ff6a, size=size.tiny, title="Buy Signal", text="Mua 2", textcolor=color.rgb(237, 241, 236))

//a1= ban==true and (high - low)<atr 
//plotshape(a1 , style=shape.xcross, location=location.bottom, color=#00ff6a, size=size.tiny, title="Sell", text="<atr", textcolor=color.rgb(240, 95, 76))

//a2 = ban ==true and (high - low)>atr and (high - low)<(2*atr) 
//plotshape(a2 , style=shape.xcross, location=location.bottom, color=#00ff6a, size=size.tiny, title="Sell", text="<2atr", textcolor=color.rgb(237, 241, 236))

//a3= ban==true and (high - low)>(2*atr) 
//plotshape(a3 , style=shape.xcross, location=location.bottom, color=#00ff6a, size=size.tiny, title="Sell", text=">2atr", textcolor=color.rgb(234, 252, 74))


//b1= mua==true and (high - low)<atr 
//plotshape(b1 , style=shape.xcross, location=location.bottom, color=#00ff6a, size=size.tiny, title="Buy", text="<atr", textcolor=color.rgb(237, 241, 236))

//b2 = mua ==true and (high - low)>atr and (high - low)<(2*atr) 
//plotshape(b2 , style=shape.xcross, location=location.bottom, color=#00ff6a, size=size.tiny, title="Buy", text="<2atr", textcolor=color.rgb(237, 241, 236))

//b3= mua==true and (high - low)>(2*atr) 
//plotshape(b3 , style=shape.xcross, location=location.bottom, color=#00ff6a, size=size.tiny, title="Buy", text=">2atr", textcolor=color.rgb(237, 241, 236))

// Đặt SL TP ENTRY
risk= input(title="Rủi ro % per Trade", defval=0.5)
rr= input(title="RR", defval=1.5)
onlylong= input(defval=false)
onlyshort=input(defval=false)

stlong = mua and strategy.position_size<=0 ? low[1]:na
stoplong= fixnan(stlong)

stshort = ban and strategy.position_size>=0 ? high[1]:na
stopshort= fixnan(stshort)

enlong = mua and strategy.position_size<=0 ? close:na
entrylong =fixnan(enlong)

enshort = ban and strategy.position_size>=0 ? close:na
entryshort = fixnan(enshort)

amountL = risk/100* strategy.initial_capital / (entrylong - stoplong)
amountS = risk/100* strategy.initial_capital / (stopshort - entryshort)

TPlong= mua and strategy.position_size<=0? entrylong + (entrylong -stoplong)*rr:na
takeprofitlong =fixnan(TPlong)
TPshort = ban and strategy.position_size>=0? entryshort - (stopshort - entryshort)*rr:na 
takeprofitshort = fixnan(TPshort)

strategy.entry("Long", strategy.long , when = enlong and not onlyshort, qty= amountL )
strategy.exit("exitL", "Long", stop = stoplong, limit= takeprofitlong)

strategy.entry("Short", strategy.short , when = enshort and not onlylong, qty= amountS )
strategy.exit("exitS", "Short", stop = stopshort, limit= takeprofitshort)



관련

더 많은