
이 전략은 RSI 지표와 EMA 평균의 교차 상황을 계산하여 다공평한 상황을 판단하고 RSI와 가격의 오차를 결합하여 잠재적인 매매점을 찾기 위해 트렌드 추적 전략에 속한다.
길이는 14의 RSI 지표로 계산되며, RSI 위쪽이 50 분기선을 통과하면 더 많은 신호를 보며, 아래쪽은 더 많은 신호를 보며.
RSI의 20주기 EMA 평균선과 14주기 EMA 평균선을 계산하여, 빠른 선이 느린 선을 통과하면 구매 신호로, 낮은 선이 판매 신호로 니다.
RSI와 가격의 오차를 탐지하는 방법:
다중이 이탈: 가격 혁신이 낮지만 RSI는 혁신이 낮지 않아 구매 신호를 제공합니다.
숨겨진 다중 돌림: 가격 혁신이 높지만 RSI는 혁신이 높지 않아 구매 신호
공백이 떨어져: 가격이 혁신적이지만 RSI는 혁신적이지 않습니다.
숨겨진 공백: 가격 혁신이 낮지만 RSI는 혁신이 낮지 않아 판매 신호를 제공합니다.
RSI 지표의 장점은 과매매를 감지할 수 있다는 것입니다. EMA 평균의 장점은 부드러운 역할을 할 수 있다는 것입니다.
RSI와 가격의 오차는 트렌드 반전 전에 미리 신호를 줄 수 있다.
두 가지 지표 신호를 통합하여 상호 검증하여 전략의 안정성을 높일 수 있습니다.
손해 방지 메커니즘은 단일 손실을 제어합니다.
RSI는 가격 변동에 따른 지수 지표로서, 가격이 급격히 변동할 때 RSI 지표의 효용은 할인된다.
EMA 평행선에는 시간 지연 문제가 있으며, 전환점을 정확하게 결정할 수 없다.
신호에서 벗어난 경우, 가짜 신호가 발생할 수 있으며, 가격이 원래의 추세를 계속 실행하는 경우.
부적절한 스톱포인트 설정으로 불필요한 스톱포인트가 발생할 수 있습니다.
이 철수에는 상당한 재정적 지원이 필요할 것입니다.
RSI와 EMA의 계산에 대해 다양한 변수를 테스트하여 최적의 변수 조합을 찾을 수 있습니다.
조합 최적화를 위해 MACD와 같은 다른 지표로 EMA 평균선을 대체하는 것을 고려할 수 있다.
확인 메커니즘을 설정할 수 있으며, 가짜 이탈의 발생을 방지할 수 있다. 필요한 경우 연속적으로 여러 개의 이탈 신호가 트리거된다.
수익을 고정하기 위한 차단 전략을 추가하십시오.
캔들리스틱 패턴과 같은 단기 신호를 기반으로 입장이 가능하며, 이 전략과 함께 트렌드를 판단한다.
이 전략은 RSI 지표의 과매매 판단, EMA의 트렌드 판단 및 기각 신호의 예측을 통합하여 비교적 완전한 트렌드 추적 시스템을 형성한다. 변수 조정 및 조합 최적화의 기반에서 더 나은 전략 효과를 얻을 수 있다. 그러나 여전히 트렌드 시장의 충격과 가짜 신호의 방해를 방지하는 데 주의를 기울여야 한다. 엄격한 자금 관리를 통해 이 전략은 중장선에서 안정적인 초과 수익을 얻을 수 있다.
/*backtest
start: 2023-11-08 00:00:00
end: 2023-11-15 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="RSI Divergence Indicator", overlay=false,pyramiding=2, default_qty_value=2, default_qty_type=strategy.fixed, initial_capital=10000, currency=currency.USD)
len = input(title="RSI Period", minval=1, defval=14)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=3)
lbL = input(title="Pivot Lookback Left", defval=1)
takeProfitRSILevel = input(title="Take Profit at RSI Level", minval=70, defval=80)
rangeUpper = input(title="Max of Lookback Range", defval=60)
rangeLower = input(title="Min of Lookback Range", defval=5)
plotBull = input(title="Plot Bullish", defval=true)
plotHiddenBull = input(title="Plot Hidden Bullish", defval=true)
plotBear = input(title="Plot Bearish", defval=true)
plotHiddenBear = input(title="Plot Hidden Bearish", defval=false)
sl_type = input("NONE", title="Trailing StopLoss Type", options=['ATR','PERC', 'NONE'])
stopLoss = input(title="Stop Loss%", defval=5, minval=1)
atrLength=input(14, title="ATR Length (for Trailing stop loss)")
atrMultiplier=input(3.5, title="ATR Multiplier (for Trailing stop loss)")
bearColor = color.red
bullColor = color.green
hiddenBullColor = color.new(color.green, 80)
hiddenBearColor = color.new(color.red, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = rsi(src, len)
plot(osc, title="RSI", linewidth=2, color=color.white)
hline(50, title="Middle Line", linestyle=hline.style_dotted)
obLevel = hline(70, title="Overbought", linestyle=hline.style_dotted)
osLevel = hline(30, title="Oversold", linestyle=hline.style_dotted)
fill(obLevel, osLevel, title="Background", color=color.gray, transp=90)
plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
bars = barssince(cond == true)
rangeLower <= bars and bars <= rangeUpper
//------------------------------------------------------------------------------
// Regular Bullish
// Osc: Higher Low
oscHL = osc[lbR] > valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])
// Price: Lower Low
priceLL = low[lbR] < valuewhen(plFound, low[lbR], 1)
bullCond = plotBull and priceLL and oscHL and plFound
plot(
plFound ? osc[lbR] : na,
offset=-lbR,
title="Regular Bullish",
linewidth=2,
color=(bullCond ? bullColor : noneColor),
transp=0
)
plotshape(
bullCond ? osc[lbR] : na,
offset=-lbR,
title="Regular Bullish Label",
text=" Bull ",
style=shape.labelup,
location=location.absolute,
color=bullColor,
textcolor=textColor,
transp=0
)
//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low
oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])
// Price: Higher Low
priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)
hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound
plot(
plFound ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bullish",
linewidth=2,
color=(hiddenBullCond ? hiddenBullColor : noneColor),
transp=0
)
plotshape(
hiddenBullCond ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bullish Label",
text=" H Bull ",
style=shape.labelup,
location=location.absolute,
color=bullColor,
textcolor=textColor,
transp=0
)
longCondition=bullCond or hiddenBullCond
//? osc[lbR] : na
//hiddenBullCond
strategy.entry(id="RSIDivLE", long=true, when=longCondition)
//Trailing StopLoss
////// Calculate trailing SL
/////////////////////////////////////////////////////
sl_val = sl_type == "ATR" ? stopLoss * atr(atrLength) :
sl_type == "PERC" ? close * stopLoss / 100 : 0.00
trailing_sl = 0.0
trailing_sl := strategy.position_size>=1 ? max(low - sl_val, nz(trailing_sl[1])) : na
//draw initil stop loss
//plot(strategy.position_size>=1 ? trailing_sl : na, color = color.blue , style=plot.style_linebr, linewidth = 2, title = "stop loss")
//plot(trailing_sl, title="ATR Trailing Stop Loss", style=plot.style_linebr, linewidth=1, color=color.purple, transp=30)
//Trailing StopLoss
////// Calculate trailing SL
/////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// Regular Bearish
// Osc: Lower High
oscLH = osc[lbR] < valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])
// Price: Higher High
priceHH = high[lbR] > valuewhen(phFound, high[lbR], 1)
bearCond = plotBear and priceHH and oscLH and phFound
plot(
phFound ? osc[lbR] : na,
offset=-lbR,
title="Regular Bearish",
linewidth=2,
color=(bearCond ? bearColor : noneColor),
transp=0
)
plotshape(
bearCond ? osc[lbR] : na,
offset=-lbR,
title="Regular Bearish Label",
text=" Bear ",
style=shape.labeldown,
location=location.absolute,
color=bearColor,
textcolor=textColor,
transp=0
)
//------------------------------------------------------------------------------
// Hidden Bearish
// Osc: Higher High
oscHH = osc[lbR] > valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])
// Price: Lower High
priceLH = high[lbR] < valuewhen(phFound, high[lbR], 1)
hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound
plot(
phFound ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bearish",
linewidth=2,
color=(hiddenBearCond ? hiddenBearColor : noneColor),
transp=0
)
plotshape(
hiddenBearCond ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bearish Label",
text=" H Bear ",
style=shape.labeldown,
location=location.absolute,
color=bearColor,
textcolor=textColor,
transp=0
)
longCloseCondition=crossover(osc,takeProfitRSILevel) or bearCond
strategy.close(id="RSIDivLE", comment="Close All="+tostring(close - strategy.position_avg_price, "####.##"), when= abs(strategy.position_size)>=1 and sl_type == "NONE" and longCloseCondition)
//close all on stop loss
strategy.close(id="RSIDivLE", comment="TSL="+tostring(close - strategy.position_avg_price, "####.##"), when=abs(strategy.position_size)>=1 and (sl_type == "PERC" or sl_type == "ATR" ) and crossunder(close, trailing_sl) ) //close<ema55 and rsi5Val<20 //ema34<ema55 //close<ema89
src1 = close,
len6 = input(14, minval=1, title="RSI Length")
len7 = input(20, minval=1, title="EMA of RSI Length")
len8 = input(14,minval=1, title="Fast EMA")
up = rma(max(change(src1), 0), len6)
down = rma(-min(change(src1), 0), len6)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
emaRSI = ema(rsi,len7)
fastEmaRSI=ema(rsi,len8)
plot(emaRSI, title="EMA of RSI", linewidth=1, color=color.red)
plot(fastEmaRSI,title="Fast EMA of RSI", linewidth=1,color = color.lime)
band1 = hline(80, title="Upper Line", linewidth=1, color=color.red)
band0 = hline(20, title="Lower Line", linewidth=1, color=color.lime)
fill(band1, band0, color=color.purple)