RSI バリッシュ・ベアッシュ・ディバージェンス・トレーディング戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-15 12時09分54秒
タグ:

img

概要

この戦略は,市場の上昇傾向と下落傾向を判断し,RSIインジケーターの分散を計算することによって取引決定を下します.特に,RSIが低低値を形成するときに隠された上昇信号を判断し,価格が高い低値を形成するときに隠された下落信号を判断します.その後,これらの信号に基づいて市場の潜在的な上昇傾向または下落傾向を決定し,取引を行います.

戦略の論理

この戦略は主にRSI指標の上昇と下落の差異理論に基づいている.RSIと価格が逆差を形成すると,市場の潜在的逆転を示唆する.4つの特定の状況があります:

  1. 定期的な上昇信号:RSIは低値が上昇し,価格は低値が下がります.これは購買力がRSIを押し上げますが,価格に完全に反映されず,上昇力が強化されたことを意味します.

  2. 隠れた上昇信号:RSIは低値を下に,価格は低値上へと形成される.これは,売り力がRSIを下に押し下げるが,価格が押し下げるわけではないことを意味し,上昇力が強化されたことを示唆する.

  3. RSIは,価格が上昇し,RSIは上昇し,RSIは上昇し,RSIは上昇しない.

  4. 隠された下落シグナル:RSIは高値より高く,価格は低値より高くなります.これは購買力がRSIを押し上げますが価格ではありません.

上記の差異に基づいて,市場の上昇傾向や下落傾向や,買い/販売力の強化を判断し,取引戦略を策定する.

利点

  1. RSIの上昇と下落差の理論を利用して市場の潜在的な傾向を決定します.
  2. また,価格アクションを組み合わせて確認し,騒々しい信号を避けます.
  3. 市場が急激に逆転する前に 重要な信号を捉える能力があります
  4. 視覚化されたシグナルを導入し,操作が簡単で直感的です.
  5. 異なる市場環境に適したパラメータを調整できます

リスク

  1. RSIと価格の差は必ずしも逆転を意味するものではなく,範囲限定の行動である可能性があります.
  2. 隠された信号は 比較的大きな騒音があり 判断の誤りがある可能性があります
  3. 信号の確認のために,より多くの指標や技術分析方法を組み込む必要があります.
  4. 誤ったパラメータ設定も判断に影響を与える可能性があります.

改善の方向性

  1. 入力シグナルを決定するために,MACD,KDJ,その他の指標をRSIに組み込む.
  2. ストップ・ロスの戦略を追加して,取引毎の損失を減らす.
  3. より適切なRSI期間を探すようなパラメータ設定を最適化します
  4. 機械学習アルゴリズムを導入して 入力信号の把握の精度を訓練する.
  5. 信号確認の遅延を減らすため,リアルタイムの引用のためにwebソケットを実装する.

概要

この戦略は,主にRSIの上昇と下落の差を活用し,価格動向の背後にある購入力と販売力の相対的な強さの変化を把握することによって市場の潜在的な上昇または下落傾向を決定する.逆転の予測能力がある.しかし,騒音信号のリスクもあります.パラメータ最適化,指標組み合わせ,機械学習などの方法は,戦略の安定性と収益性をさらに高めるのに役立ちます.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Divergence Indicator")
len = input.int(title="RSI Period", minval=1, defval=20)
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=true)
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 = ta.rsi(src, len)

plot(osc, title="RSI", linewidth=2, color=#2962FF)
hline(50, title="Middle Line", color=#787B86, linestyle=hline.style_dotted)
obLevel = hline(70, title="Overbought", color=#787B86, linestyle=hline.style_dotted)
osLevel = hline(30, title="Oversold", color=#787B86, linestyle=hline.style_dotted)
fill(obLevel, osLevel, title="Background", color=color.rgb(33, 150, 243, 90))

plFound = na(ta.pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(ta.pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
	bars = ta.barssince(cond == true)
	rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Regular Bullish
// Osc: Higher Low

oscHL = osc[lbR] > ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Lower Low

priceLL = low[lbR] < ta.valuewhen(plFound, low[lbR], 1) 
// bull : 상승 Condition : 조건
bullCond = plotBull and priceLL and oscHL and plFound // 상승다이버전스?
strategy.entry("상승 다이버전스 진입", strategy.long, when = bullCond)
// strategy.close("상승 다이버전스 진입", when = ta.crossover(osc, 70)) 
plot(
     plFound ? osc[lbR] : na,
     offset=-lbR,
     title="Regular Bullish",
     linewidth=2,
     color=(bullCond ? bullColor : noneColor)
     )

plotshape(
	 bullCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish Label",
	 text=" Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor
	 )

//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low

oscLL = osc[lbR] < ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low

priceHL = low[lbR] > ta.valuewhen(plFound, low[lbR], 1)
hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound
strategy.entry("히든 상승 다이버전스 진입", strategy.long, when = hiddenBullCond)
// strategy.close("히든 상승 다이버전스 진입", when = ta.crossover(osc, 70))
plot(
	 plFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish",
	 linewidth=2,
	 color=(hiddenBullCond ? hiddenBullColor : noneColor)
	 )

plotshape(
	 hiddenBullCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish Label",
	 text=" H Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor
	 )

//------------------------------------------------------------------------------
// Regular Bearish
// Osc: Lower High

oscLH = osc[lbR] < ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Higher High

priceHH = high[lbR] > ta.valuewhen(phFound, high[lbR], 1)
// bear : 하락 
bearCond = plotBear and priceHH and oscLH and phFound
strategy.entry("하락 다이버전스 진입", strategy.short, when = bearCond)
// strategy.close("하락 다이버전스 진입", when = ta.crossunder(osc, 50)) 
plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish",
	 linewidth=2,
	 color=(bearCond ? bearColor : noneColor)
	 )

plotshape(
	 bearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish Label",
	 text=" Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor
	 )

//------------------------------------------------------------------------------
// Hidden Bearish
// Osc: Higher High

oscHH = osc[lbR] > ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Lower High

priceLH = high[lbR] < ta.valuewhen(phFound, high[lbR], 1)

hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound
strategy.entry("히든 하락 다이버전스 진입", strategy.short, when = hiddenBearCond)
// strategy.close("히든 하락 다이버전스 진입", when = ta.crossunder(osc, 50)) 
plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish",
	 linewidth=2,
	 color=(hiddenBearCond ? hiddenBearColor : noneColor)
	 )

plotshape(
	 hiddenBearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish Label",
	 text=" H Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor
	 )

もっと