RSI 트렌드 역전 전략

저자:차오장, 날짜: 2023-10-23 17:04:13
태그:

img

전반적인 설명

RSI 트렌드 역전 전략은 잠재적인 트렌드 역전 지점을 식별하고 긴 또는 짧은 거래를하기 위해 RSI 지표의 역전 신호를 활용합니다. 이 전략은 가격 역전과 RSI 역전 신호를 결합하여 잘못된 역전 신호를 효과적으로 필터링합니다.

전략 논리

이 전략은 RSI 반전 신호와 가격 반전 신호의 조합에 기반하고 있으며, 주로 네 가지 상황을 포함합니다.

  1. 규칙적인 상승률 반전: RSI가 더 높은 하위치를 형성할 때 (RSI 트렌드가 상향에서 하향으로 역전되는 것을 의미) 그리고 가격이 더 낮은 하위치를 형성할 때 (가격 트렌드가 하위에서 상향으로 역전되는 것을 의미) 규칙적인 상승률 반전 신호가 생성됩니다.

  2. 숨겨진 상승률 반전: RSI가 낮은 하위치를 형성할 때 (RSI 추세가 상향에서 하향으로 계속되는 것을 의미) 하지만 가격이 더 높은 하위치를 형성할 때 (가격 추세가 하위에서 상향으로 역전되는 것을 의미) 숨겨진 상승률 반전 신호가 생성됩니다.

  3. 규칙적인 하향 반전: RSI가 낮은 최고치를 형성하고 (RSI 트렌드가 하향에서 상향으로 역전되는 것을 의미) 가격이 더 높은 최고치를 형성하면 (가격 트렌드가 하향으로 상향으로 역전되는 것을 의미) 규칙적인 하향 반전 신호가 생성됩니다.

  4. 숨겨진 하향 반전: RSI가 더 높은 최고치를 형성할 때 (RSI 추세가 아래에서 위로 계속되는 것을 의미) 그러나 가격이 더 낮은 최고치를 형성할 때 (가격 추세가 위에서 아래로 역전되는 것을 의미) 숨겨진 하향 반전 신호가 생성됩니다.

이것은 RSI 역전 및 가격 역전 신호를 결합하여 거래 신호를 생성하여 잘못된 신호가 RSI 또는 가격 역전에만 의존하는 것을 방지하여 전략을 더 견고하게 만듭니다.

이점 분석

RSI 트렌드 역전 전략은 다음과 같은 장점을 가지고 있습니다.

  1. RSI와 가격 반전을 결합하면 많은 잘못된 반전 신호를 필터링하고 신호 품질을 향상시킵니다. RSI만으로는 반전을 식별하는 데 완전히 신뢰할 수 없으며 가격으로부터 확인이 필요합니다.

  2. 숨겨진 상승 및 하락 패턴을 식별하는 것은 종종 강력한 가격 트렌드를 앞두고 초기 진입을 허용합니다.

  3. 사용자 정의 가능한 RSI 매개 변수와 룩백 기간은 다양한 시장에 맞게 조정할 수 있으며 유연성을 제공합니다.

  4. 지표 패턴과 신호를 시각화하면 직관적인 시장 상태 판단이 가능합니다.

  5. 간단하고 명확한 전략 논리는 알고 트레이딩을 이해하기 쉽고 구현하기 쉽습니다.

위험 분석

RSI 트렌드 역전 전략은 또한 다음과 같은 위험을 가지고 있습니다.

  1. 결합된 RSI와 가격 역전도 가끔 잘못된 판단을 할 수 있습니다. 지표는 가격의 통계적 측정이며 완전히 신뢰할 수 없습니다.

  2. 숨겨진 상승 및 하락 패턴은 식별하기가 어렵고 경험이없는 기회는 놓칠 수 있습니다.

  3. 부적절한 뷰백 기간 설정은 전환 지점을 놓치고 판단을 늦추게 할 수 있습니다. 기간은 다른 시장에 따라 조정해야합니다.

  4. 하향 회전 후 손실이 증가하는 것을 피하기 위해 스톱 로스 전략이 적용되어야 합니다.

위험은 매개 변수를 최적화하고, 엄격한 스톱 로스, 신중하게 숨겨진 반전 신호 등을 통해 관리 될 수 있습니다.

최적화 방향

RSI 트렌드 역전 전략은 다음 측면에서 최적화 될 수 있습니다:

  1. 다양한 시장에서 최적의 RSI 기간을 찾기 위해 RSI 매개 변수와 테스트 감수성을 조정합니다.

  2. 리크백 기간 매개 변수를 최적화하여 초기 반전을 파악하고 잘못된 신호를 방지합니다.

  3. 부피 분석을 추가합니다. 가격 반전을 일으키는 높은 부피의 풀기를 감지하는 것과 같은 것입니다.

  4. MACD, 볼링거 밴드 같은 다른 지표 신호를 결합하여 판단의 정확성을 향상시킵니다.

  5. 손실 크기를 제한하기 위해 스톱 로스 전략을 추가하십시오. 가격이 새로운 최고 / 하락을 깨면 스톱 로스를 설정할 수 있습니다.

  6. 수익 요인을 개선하기 위해 백테스트 결과를 기반으로 전략 논리를 정제합니다. 논리 관계를 조정하고 최적의 조합을 찾습니다.

요약

RSI 트렌드 역전 전략은 RSI 역전과 가격 역전을 결합하여 잠재적 인 트렌드 전환점을 식별합니다. 가격 정보로 잘못된 신호를 필터하는 동안 RSI의 트렌드 판단 능력을 잘 사용합니다. 전략은 간단하고 명확한 논리를 가지고 있으며 구현하기가 쉽습니다. 위험 관리 및 성능을 더욱 향상시키기 위해 매개 변수 및 스톱 로스를 최적화 할 수 있습니다. 전반적으로 RSI 트렌드 역전 전략은 신뢰할 수 있고 실용적인 단기 거래 전략입니다.


/*backtest
start: 2023-10-15 00:00:00
end: 2023-10-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//study(title="Divergence Indicator", format=format.price)
strategy(title="RSI Divergence Indicator", overlay=false,pyramiding=1, default_qty_value=2,   default_qty_type=strategy.fixed, initial_capital=10000, currency=currency.USD)

len = input(title="RSI Period", minval=1, defval=5)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=5)
lbL = input(title="Pivot Lookback Left", defval=5)
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)

bearColor = color.purple
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=#8D1699)
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=#9915FF, 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)


//------------------------------------------------------------------------------
// 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,75) or bearCond
strategy.close(id="RSIDivLE",  when=longCloseCondition)

더 많은