動的なボラティリティ調整に基づく二重移動平均クロスオーバーとRSI/ATR複合フィルタリング取引システム

MA RSI ATR RR SL TP SMA
作成日: 2025-02-21 11:58:43 最終変更日: 2025-02-21 11:58:43
コピー: 1 クリック数: 390
2
フォロー
319
フォロワー

動的なボラティリティ調整に基づく二重移動平均クロスオーバーとRSI/ATR複合フィルタリング取引システム 動的なボラティリティ調整に基づく二重移動平均クロスオーバーとRSI/ATR複合フィルタリング取引システム

戦略概要

この戦略は,双均線交差,RSI超買い超売り,ATR波動率フィルタを組み合わせた複合型取引システムである.システムは,短期および長期の移動平均を用いて取引信号を生成し,RSI指標を介して市場状態をフィルターし,ATR指標を使用して波動率判断を行い,パーセンテージ・ストップ・ローズとリスク・ギア・比率を組み合わせてポジション管理とリスク管理を行う.この戦略は,強い適応性を持ち,市場の環境に応じてパラメータを柔軟に調整することができる.

戦略原則

戦略の中核となるロジックは、次の側面に基づいています。

  1. 信号生成: 9 日と 21 日間の単純な移動平均線の交差を利用してトレンドの変化を捕捉する. 短期平均線上を長期平均線を穿越するときに多行信号が生成され,下を穿越するときに空行信号が生成される.
  2. 条件フィルター: RSI指数で過買過売状態をフィルターし,極端な市場条件で入場を避ける.同時にATR指数を使用して,市場波動率が取引条件を満たしていることを確認する.
  3. リスク管理: 口座の純額に基づくパーセンテージ・ストロスを採用し,リスク・利益比を設定することでストップ・ポジションを決定し,リスクのカバーと同時に合理的な利益を得ます.

戦略的優位性

  1. システムの適応性:RSIとATRのフィルターをオン/オフすることで,戦略は異なる市場状況に応じて柔軟に調整できます.
  2. リスク管理の完善: パーセンテージ・ストップ・ローズとダイナミック・ポジション・マネジメントにより,各取引のリスク・エッジを効果的に制御する.
  3. 信号の信頼性:複数のフィルタリングメカニズムにより,偽信号の影響を軽減し,取引の成功率を向上させる.
  4. パラメータの柔軟性: パラメータは,特定の市場の特徴に応じて最適化調整が可能である.

戦略リスク

  1. 振動市場リスク:横盤振動市場では,均線交差が頻繁に偽信号を生じることがあります.
  2. 遅滞リスク:移動平均は遅滞性があり,最良の入場時間を逃す可能性があります.
  3. パラメータ最適化のリスク: パラメータを過度に最適化すると,戦略が過度に適合し,リールディスクのパフォーマンスに影響を与える可能性があります.
  4. 市場環境依存性:戦略は,傾向が顕著な市場ではよりよく機能し,他の市場環境ではより効果的でない可能性があります.

戦略最適化の方向性

  1. ダイナミックパラメータ調整:市場変動に応じて平均線周期とRSI値を自動的に調整できます.
  2. トレンド強度フィルターを追加します.トレンド強さを評価するためにDMIまたはADXなどの指標を導入します.
  3. ストップを最適化する方法:追跡ストップまたはATRベースのダイナミックストップを使用することを検討できます.
  4. ポジション管理の改善:変動率に基づくダイナミックなポジション管理システムを導入.

要約する

この戦略は,複数の技術指標を組み合わせて,比較的完全な取引システムを構築している.戦略は,トレンド市場において優れたパフォーマンスを発揮し,優れたリスク管理能力を持っている.戦略は,パラメータを合理的に設定し,必要なフィルタリング条件を追加することにより,異なる市場環境に適応することができる.

ストラテジーソースコード
/*backtest
start: 2025-01-21 00:00:00
end: 2025-02-20 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("Simplified MA Crossover Strategy with Disable Options", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Inputs
shortLength = input.int(9, title="Short MA Length", minval=1)
longLength = input.int(21, title="Long MA Length", minval=1)

// RSI Filter
enableRSI = input.bool(true, title="Enable RSI Filter")
rsiLength = input.int(14, title="RSI Length", minval=1)
rsiOverbought = input.int(70, title="RSI Overbought Level", minval=50, maxval=100)
rsiOversold = input.int(30, title="RSI Oversold Level", minval=0, maxval=50)

// ATR Filter
enableATR = input.bool(true, title="Enable ATR Filter")
atrLength = input.int(14, title="ATR Length", minval=1)
minATR = input.float(0.005, title="Minimum ATR Threshold", minval=0)

// Risk Management
stopLossPerc = input.float(0.5, title="Stop Loss (%)", minval=0.1) / 100
riskRewardRatio = input.float(2, title="Risk-Reward Ratio", minval=1)
riskPercentage = input.float(2, title="Risk Percentage", minval=0.1) / 100

// Indicators
shortMA = ta.sma(close, shortLength)
longMA = ta.sma(close, longLength)
rsi = ta.rsi(close, rsiLength)
atr = ta.atr(atrLength)

// Conditions
longCondition = ta.crossover(shortMA, longMA)
shortCondition = ta.crossunder(shortMA, longMA)

// Apply RSI Filter (if enabled)
if (enableRSI)
    longCondition := longCondition and rsi < rsiOverbought
    shortCondition := shortCondition and rsi > rsiOversold

// Apply ATR Filter (if enabled)
if (enableATR)
    longCondition := longCondition and atr > minATR
    shortCondition := shortCondition and atr > minATR

// Risk Management
positionSize = strategy.equity * riskPercentage / (stopLossPerc * close)
takeProfitLevel = strategy.position_avg_price * (1 + stopLossPerc * riskRewardRatio)
stopLossLevel = strategy.position_avg_price * (1 - stopLossPerc)

// Execute Trades
if (longCondition)
    strategy.entry("Long", strategy.long, qty=positionSize)
    strategy.exit("Take Profit/Stop Loss", "Long", limit=takeProfitLevel, stop=stopLossLevel)

if (shortCondition)
    strategy.entry("Short", strategy.short, qty=positionSize)
    strategy.exit("Take Profit/Stop Loss", "Short", limit=strategy.position_avg_price * (1 - stopLossPerc * riskRewardRatio), stop=strategy.position_avg_price * (1 + stopLossPerc))

// Plotting
plot(shortMA, color=color.blue, title="Short MA")
plot(longMA, color=color.red, title="Long MA")
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
plot(atr, color=color.orange, title="ATR")
plotshape(series=longCondition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")