
RSIとランダムなRSIの逆転取引戦略は,市場における重要な転換点を特定するために設計された高度な技術分析方法である.この戦略は,比較的強い指標 (RSI) とランダムな比較的強い指標 (SRSI) の力を組み合わせて,価格とこれらの動量指標の間の逆転を監視して潜在的トレンド変化を予測する.さらに,この戦略は,指数移動平均線 (EMA) をトレンドフィルターとして統合し,正確な振動距離フィルターを適用し,意味のある市場構造の変化を捕捉することを保証します.
この戦略の核心原則は,技術分析における偏差の概念に基づいている.偏差は,価格の動きが技術指標の動きと一致しないときに発生し,通常,現在の傾向が逆転する可能性があることを示している.この戦略は,4種類の偏差に焦点を当てている.
この戦略は,厳格なフィルタリング条件を用いて, 信号の質を保証します.
偏差が検出されたとき,戦略はグラフにタグと接続線を描画し,トレーダーにこれらの重要な信号を直感的に識別できるようにする.また,戦略は偏差の信号に基づいて,自動的に多行と空行の入場信号を生成する.
これらのリスクを軽減するために,以下のことをお勧めします.
RSIとランダムなRSI離散取引戦略は,価格と動向指標の間の不一致を識別することで,潜在的市場逆転とトレンド継続のシグナルを捉えるための複雑で強力な技術分析ツールである.この戦略は,常規と隠された離散検出を統合し,精密に設計されたフィルターを適用することで,高確率の取引機会を識別するための包括的な方法を提供します.
しかし,すべての技術分析方法と同様に,この戦略には制限とリスクがあります.リスク管理機構の追加,信号確認の改善,動的パラメータ調整の統合などの推奨の最適化を適用することにより,戦略の安定性と性能を大幅に向上させることができます.
最終的には,この戦略は,他の分析ツールと適切な資金管理の原則と組み合わせたより広範な取引システムの一部として最も適しています.技術分析と市場構造を理解するトレーダーにとって,この策略からの脱却は,高品質の取引設定を見つけるための貴重なツールとなることができます.
/*backtest
start: 2024-06-26 00:00:00
end: 2025-06-24 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("RSI Divergence Strategy", overlay=true)
//strategy("RSI & SRSI Divergence Strategy with EMA & Min Swing Filter + Price Chart Lines", overlay=true)
rsiLength = input.int(14, title="RSI Length")
srsiLength = input.int(14, title="Stochastic RSI Length")
kLength = input.int(3, title="%K Length")
dLength = input.int(3, title="%D Length")
emaLength = input.int(200, title="EMA Length")
lookback = input.int(40, title="Lookback Period for Divergence")
minSwingDistPercent = input.float(1.5, title="Minimum Swing Distance (%)")
minPriceMovePercent = input.float(0.5, title="Minimum Price Move from Last Swing (%)")
rsi = ta.rsi(close, rsiLength)
srsi = ta.stoch(rsi, rsi, rsi, srsiLength)
k = ta.sma(srsi, kLength)
d = ta.sma(k, dLength)
ema200 = ta.ema(close, emaLength)
// === Bullish Regular Divergence ===
var float lastLowPrice = na
var float lastLowRsi = na
var float lastLowSrsi = na
var int lastLowIndex = na
bullishDiv = false
if ta.lowestbars(low, lookback) == 0
if not na(lastLowPrice) and not na(lastLowRsi) and not na(lastLowSrsi)
swingDistLow = math.abs(low - lastLowPrice) / lastLowPrice * 100
priceMoveLow = math.abs(low - lastLowPrice) / lastLowPrice * 100
if swingDistLow >= minSwingDistPercent and priceMoveLow >= minPriceMovePercent
if (low < lastLowPrice and rsi > lastLowRsi) or (low < lastLowPrice and k > lastLowSrsi)
bullishDiv := true
lastLowPrice := low
lastLowRsi := rsi
lastLowSrsi := k
lastLowIndex := bar_index
else
lastLowPrice := low
lastLowRsi := rsi
lastLowSrsi := k
lastLowIndex := bar_index
// === Bearish Regular Divergence ===
var float lastHighPrice = na
var float lastHighRsi = na
var float lastHighSrsi = na
var int lastHighIndex = na
bearishDiv = false
if ta.highestbars(high, lookback) == 0
if not na(lastHighPrice) and not na(lastHighRsi) and not na(lastHighSrsi)
swingDistHigh = math.abs(high - lastHighPrice) / lastHighPrice * 100
priceMoveHigh = math.abs(high - lastHighPrice) / lastHighPrice * 100
if swingDistHigh >= minSwingDistPercent and priceMoveHigh >= minPriceMovePercent
if (high > lastHighPrice and rsi < lastHighRsi) or (high > lastHighPrice and k < lastHighSrsi)
bearishDiv := true
lastHighPrice := high
lastHighRsi := rsi
lastHighSrsi := k
lastHighIndex := bar_index
else
lastHighPrice := high
lastHighRsi := rsi
lastHighSrsi := k
lastHighIndex := bar_index
// === Bullish Hidden Divergence ===
bullishHiddenDiv = false
if ta.lowestbars(low, lookback) == 0
if not na(lastLowPrice) and not na(lastLowRsi) and not na(lastLowSrsi)
swingDistLowHidden = math.abs(low - lastLowPrice) / lastLowPrice * 100
priceMoveLowHidden = math.abs(low - lastLowPrice) / lastLowPrice * 100
if swingDistLowHidden >= minSwingDistPercent and priceMoveLowHidden >= minPriceMovePercent
if (low > lastLowPrice and rsi < lastLowRsi) or (low > lastLowPrice and k < lastLowSrsi)
bullishHiddenDiv := true
// === Bearish Hidden Divergence ===
bearishHiddenDiv = false
if ta.highestbars(high, lookback) == 0
if not na(lastHighPrice) and not na(lastHighRsi) and not na(lastHighSrsi)
swingDistHighHidden = math.abs(high - lastHighPrice) / lastHighPrice * 100
priceMoveHighHidden = math.abs(high - lastHighPrice) / lastHighPrice * 100
if swingDistHighHidden >= minSwingDistPercent and priceMoveHighHidden >= minPriceMovePercent
if (high < lastHighPrice and rsi > lastHighRsi) or (high < lastHighPrice and k > lastHighSrsi)
bearishHiddenDiv := true
// === PLOTS ===
plot(ema200, title="EMA 200", color=color.purple, linewidth=2)
// === STRATEGY ENTRIES ===
if bullishDiv or bullishHiddenDiv
strategy.entry("Long", strategy.long)
if bearishDiv or bearishHiddenDiv
strategy.entry("Short", strategy.short)