RSIのトレンド逆転戦略

作者: リン・ハーンチャオチャン, 日付: 2023年10月23日 17:04:13
タグ:

img

概要

RSIトレンド逆転戦略は,潜在的なトレンド逆転点を特定し,ロングまたはショートトレードを入力するために,RSI指標の逆転信号を利用する.この戦略は,価格逆転とRSI逆転信号を組み合わせて,誤った逆転信号を効果的にフィルタリングする.

戦略の論理

この戦略は,RSI逆転信号と価格逆転信号の組み合わせに基づいています.主に4つの状況を含みます.

  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)

もっと