RSIダイナミックダイバージェンス定量戦略

RSI ATR SL/TP risk management DIVERGENCE Pivot
作成日: 2025-04-25 14:57:31 最終変更日: 2025-04-25 14:57:31
コピー: 0 クリック数: 455
2
フォロー
319
フォロワー

RSIダイナミックダイバージェンス定量戦略 RSIダイナミックダイバージェンス定量戦略

概要

RSI双軸偏差量化策略は,価格行動と相対的に強い指数 ((RSI)) の間の通常の看板と看板の偏差を検知することで,潜在的反転の機会を識別する高度な取引策略である.この策略は,自動的枢軸点検アルゴリズムを採用し,異なる2つのストップ/ストップ管理方法を組み合わせて,偏差信号が確認されたときに自動的にポジションを確立する.この策略の核心は,価格とRSI指標の間の偏差現象を正確な数学的計算で検証し,ダイナミックなリスク管理機構を採用し,各取引が想定されたリスク・リターン比に従っていることを保証する.

戦略原則

  1. RSI計算モジュール: ウィルダー平滑法で14サイクル (調整可能) のRSI値を計算し,閉盘価格をデフォルトの入力源 (設定可能) として使用する.
  2. 核の点検:
    • RSI指標の局所的な高点と低点を検出するために,左または右の5周期毎に (… 調整可能な) スライドウィンドウを使用
    • ta.barssince関数によって,枢軸点間の間隔を5−60K線で確保する (調整可能な範囲)
  3. 確認の論理から外れ:
    • 価格創出は低で,RSIは低点より高い
    • 価格が高くなると,RSIは高点から下がります.
  4. 取引実行システム:
    • 2つのモードのストップメカニズムを使用:最近の20サイクル ((調整可能な) 振動点またはATRの波動幅に基づいて
    • ダイナミックストップ計算: リスクの額を基に,既定のリターンのリスク比率を掛けます (デフォルト2:1)
  5. ビジュアル化システム:すべての有効な偏差信号をグラフにマークし,現在のポジションのストップ (赤) とストップ (緑) の水平線をリアルタイムで表示する.

優位分析

  1. 多次元検証機構:価格とRSIが特定の形状を同時に満たさなければならないことを要求し,時間間隔は既定の範囲で,偽信号の確率を大幅に減らす.
  2. リスク管理の自己適応:
    • 波段の動きを効果的に捉えるため,トレンドマーケットに適した振動点モデル
    • ATRモデルは,波動率に応じて自動でストップ幅を調整する,不安定な市場に適しています.
  3. パラメータの高度設定:すべてのキーパラメータ (RSI周期,枢軸検出範囲,リスク・リターン比率など) は,市場の特性に合わせて調整できます.
  4. 科学的な資金管理:単一の取引の過度のリスク暴露を防ぐために,10%のポジション比率をデフォルトで採用する.
  5. リアルタイム ビジュアル フィードバック: グラフマークとダイナミックなストップ/ストップフローで,直感的な取引意思決定のサポートを提供します.

リスク分析

  1. 遅滞性リスク:RSIが遅滞の指標として,急激な一方的な状況で遅延シグナルが生じることがあります.緩和策:トレンドフィルターと組み合わせたり,RSI周期を短縮したり.
  2. 震動市場リスク:明確なトレンドがない場合,連続した偽信号が生じることがあります.緩和策:ATRモードを有効にし,大乗数を増加させるか,または波動率フィルターを追加する.
  3. パラメータ過適合リスク:特定のパラメータの組み合わせは,歴史データで良好なパフォーマンスを発揮するが,実盤では失敗する.緩和策:多周期,多種種のストレステストを行う.
  4. 極端な市場リスク:空飛ぶギャップは,止損効果を引き起こす可能性がある.緩和策:主要な経済イベントの前後に取引を避けるか,オプションのヘッジを使用する.
  5. タイムフレーム依存性:異なるタイムサイクルでのパフォーマンスの差が大きい.緩和方案:ターゲットタイムフレームで充分な反射最適化.

最適化の方向

  1. 複合指標検証:MACDまたは交付量指標を二次確認として加え,信号品質を向上させる.
  2. 動的パラメータ調整:市場の変動に応じてRSI周期とATR倍数を自動的に調整する.
  3. 機械学習の最適化: 遺伝的アルゴリズムを用いて,重要なパラメータの組み合わせを最適化する.
  4. 多時間枠分析:より高い時間枠のトレンド方向をフィルタリングする.
  5. ポジションのダイナミックマネジメント:波動率に応じてポジションサイズを調整し,リスクバランスを達成する.
  6. イベントフィルター:経済カレンダーのデータを統合し,重要なデータの公開前後の取引を回避する.

要約する

RSI双軸偏差量化戦略は,体系化された偏差の識別と厳格なリスク管理により,構造化された逆転取引方法を提供する.その核心価値は,伝統的な技術分析の概念を量化可能な取引規則に変換することであり,二模の止損機構を介して異なる市場環境に適応することである.戦略の優れたパフォーマンスは,適切なパラメータ最適化,厳格なリスク制御,一貫した執行規律の3つの重要な要素を必要とします.この戦略は,一定の変動が伴うが,トレンドが極端でない市場環境に特に適しており,中級トレーダーにとって量化取引への移行の優れた模範です.

ストラテジーソースコード
/*backtest
start: 2024-04-25 00:00:00
end: 2025-04-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/

//@version=6
strategy("RSI Divergence Strategy - AliferCrypto", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// === RSI Settings ===
rsiLength      = input.int(14, minval=1, title="RSI Length", group="RSI Settings", tooltip="Number of periods for RSI calculation")
rsiSource      = input.source(close, title="RSI Source", group="RSI Settings", tooltip="Price source used for RSI calculation")

// === Divergence Settings ===
lookLeft       = input.int(5, minval=1, title="Pivot Lookback Left", group="Divergence Settings", tooltip="Bars to the left for pivot detection")
lookRight      = input.int(5, minval=1, title="Pivot Lookback Right", group="Divergence Settings", tooltip="Bars to the right for pivot detection")
rangeLower     = input.int(5, minval=1, title="Min Bars Between Pivots", group="Divergence Settings", tooltip="Minimum bars between pivots to validate divergence")
rangeUpper     = input.int(60, minval=1, title="Max Bars Between Pivots", group="Divergence Settings", tooltip="Maximum bars between pivots to validate divergence")

// === SL/TP Method ===
method         = input.string("Swing", title="SL/TP Method", options=["Swing", "ATR"], group="SL/TP Settings", tooltip="Choose between swing-based or ATR-based stop and target")

// === Swing Settings ===
swingLook      = input.int(20, minval=1, title="Swing Lookback (bars)", group="Swing Settings", tooltip="Bars to look back for swing high/low")
swingMarginPct = input.float(1.0, minval=0.0, title="Swing Margin (%)", group="Swing Settings", tooltip="Margin around swing levels as percentage of price")
rrSwing        = input.float(2.0, title="R/R Ratio (Swing)", group="Swing Settings", tooltip="Risk/reward ratio when using swing-based method")

// === ATR Settings ===
atrLen         = input.int(14, minval=1, title="ATR Length", group="ATR Settings", tooltip="Number of periods for ATR calculation")
atrMult        = input.float(1.5, minval=0.1, title="ATR SL Multiplier", group="ATR Settings", tooltip="Multiplier for ATR-based stop loss calculation")
rrAtr          = input.float(2.0, title="R/R Ratio (ATR)", group="ATR Settings", tooltip="Risk/reward ratio when using ATR-based method")

// === RSI Calculation ===
_d    = ta.change(rsiSource)
up    = ta.rma(math.max(_d, 0), rsiLength)
down  = ta.rma(-math.min(_d, 0), rsiLength)
rsi   = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

// === Divergence Detection ===
defPl      = not na(ta.pivotlow(rsi, lookLeft, lookRight))
defPh      = not na(ta.pivothigh(rsi, lookLeft, lookRight))
rsiAtRR   = rsi[lookRight]
barsPl    = ta.barssince(defPl)
barsPl1   = barsPl[1]
inRangePL = barsPl1 >= rangeLower and barsPl1 <= rangeUpper
barsPh    = ta.barssince(defPh)
barsPh1   = barsPh[1]
inRangePH = barsPh1 >= rangeLower and barsPh1 <= rangeUpper
prevPlRsi   = ta.valuewhen(defPl, rsiAtRR, 1)
prevPhRsi   = ta.valuewhen(defPh, rsiAtRR, 1)
prevPlPrice = ta.valuewhen(defPl, low[lookRight], 1)
prevPhPrice = ta.valuewhen(defPh, high[lookRight], 1)
bullCond    = defPl and low[lookRight] < prevPlPrice and rsiAtRR > prevPlRsi and inRangePL
bearCond    = defPh and high[lookRight] > prevPhPrice and rsiAtRR < prevPhRsi and inRangePH

plotshape(bullCond, title="Bullish Divergence", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny)
plotshape(bearCond, title="Bearish Divergence", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny)

// === Entries ===
if bullCond
    strategy.entry("Long", strategy.long)
if bearCond
    strategy.entry("Short", strategy.short)

// === Pre-calculate SL/TP components ===
swingLow    = ta.lowest(low, swingLook)
swingHigh   = ta.highest(high, swingLook)
atrValue    = ta.atr(atrLen)

// === SL/TP Calculation & Exits ===
var float slPrice = na
var float tpPrice = na
var float rr      = na

// Long exits
if strategy.position_size > 0
    entryPrice = strategy.position_avg_price
    if method == "Swing"
        slPrice := swingLow * (1 - swingMarginPct / 100)
        rr      := rrSwing
    else
        slPrice := entryPrice - atrValue * atrMult
        rr      := rrAtr
    risk     = entryPrice - slPrice
    tpPrice  := entryPrice + risk * rr
    strategy.exit("Exit Long", from_entry="Long", stop=slPrice, limit=tpPrice)

// Short exits
if strategy.position_size < 0
    entryPrice = strategy.position_avg_price
    if method == "Swing"
        slPrice := swingHigh * (1 + swingMarginPct / 100)
        rr      := rrSwing
    else
        slPrice := entryPrice + atrValue * atrMult
        rr      := rrAtr
    risk     = slPrice - entryPrice
    tpPrice  := entryPrice - risk * rr
    strategy.exit("Exit Short", from_entry="Short", stop=slPrice, limit=tpPrice)

// === Plot SL/TP Levels ===
plot(strategy.position_size != 0 ? slPrice : na, title="Stop Loss", style=plot.style_linebr, color=color.red)
plot(strategy.position_size != 0 ? tpPrice : na, title="Take Profit", style=plot.style_linebr, color=color.green)

// === Alerts ===
alertcondition(bullCond, title="Bull RSI Divergence", message="Bullish RSI divergence detected")
alertcondition(bearCond, title="Bear RSI Divergence", message="Bearish RSI divergence detected")