ダイナミックニューラルネットワークRSIトレンドフォロー取引戦略

SMA RSI
作成日: 2025-01-17 14:19:08 最終変更日: 2025-01-17 14:19:08
コピー: 3 クリック数: 462
1
フォロー
1617
フォロワー

ダイナミックニューラルネットワークRSIトレンドフォロー取引戦略

概要

この戦略は、移動平均、RSI インジケーター、およびトレーリング ストップ ロスに基づいた定量的な取引システムです。テクニカル分析におけるトレンド追跡とモメンタム指標を組み合わせ、厳格なエントリー条件とエグジット条件を設定することでリスク管理された取引を実現します。この戦略の核となるロジックは、上昇トレンドで市場に参入するための売られ過ぎの機会を探し、トレーリングストップロスを使用して利益を保護することです。

戦略原則

この戦略では、200 日単純移動平均 (SMA) をトレンド判断の基準として使用し、相対力指数 (RSI) と組み合わせて取引シグナルを生成します。具体的には:

  1. 200日移動平均を使用して全体的な傾向を判断し、価格が移動平均を上回った場合にのみロングを検討します。
  2. RSI が事前に設定されたしきい値 (デフォルトは 40) を下回ると、売られすぎのシグナルと見なされます。
  3. 上記の両方の条件が満たされ、最後のポジションがクローズされてから待機期間(デフォルトは10日間)が経過すると、ロングシグナルがトリガーされます。
  4. ポジション保持中にトレーリングストップロスで利益を動的に保護する(デフォルト5%)
  5. 価格がトレーリングストップロス価格を下回るか、200日移動平均を下回ると、ポジションをクローズします。

戦略的優位性

  1. トレンドとモメンタムの二重フィルタリングを組み合わせて取引の精度を向上
  2. トラッキングストップロスメカニズムを使用すると、効果的に利益を確保できます。
  3. 頻繁な取引を避けるために取引間隔を設定する
  4. パラメータはさまざまな市場環境に適応できるよう高度に調整可能
  5. トランザクションロジックは明確で、理解しやすく、実行しやすい
  6. シンプルな計算と高い効率

戦略リスク

  1. 移動平均の遅れにより、エントリーとエグジットのシグナルが遅れる可能性がある
  2. RSI指標は不安定な市場では誤ったシグナルを生成する可能性がある
  3. 固定パーセンテージのトレーリングストップは、すべての市場状況に適しているわけではない。
  4. パラメータの最適化は過剰適合につながる可能性がある
  5. 不安定な市場では大きな下落に見舞われる可能性がある

戦略最適化の方向性

  1. ボラティリティ適応型トレーリングストップパーセンテージの導入
  2. 補助確認としてボリュームインジケーターを追加
  3. 感度を向上させるために単純移動平均の代わりに指数移動平均を使用する
  4. 市場センチメント指標を追加して取引機会を最適化します
  5. 動的パラメータ最適化メカニズムの開発
  6. 複数期間戦略確認メカニズムを追加

要約する

これは、完全な構造と明確なロジックを備えた定量的な取引戦略です。複数のテクニカル指標を組み合わせ、リスクをコントロールしながら安定したリターンを追求します。最適化の余地はあるものの、基本的なフレームワークは実用性と拡張性に優れています。この戦略は中長期投資家に適しており、さまざまな市場環境への適応性に優れています。

ストラテジーソースコード
/*backtest
start: 2025-01-09 00:00:00
end: 2025-01-16 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy("200 SMA Crossover Strategy", overlay=false)

// Define inputs
smaLength = input.int(200, title="SMA Length")
rsiLength = input.int(14, title="RSI Length")
rsiThreshold = input.float(40, title="RSI Threshold")
trailStopPercent = input.float(5.0, title="Trailing Stop Loss (%)")
waitingPeriod = input.int(10, title="Waiting Period (Days)")

// Calculate 200 SMA
sma200 = ta.sma(close, smaLength)

// Calculate RSI
rsi = ta.rsi(close, rsiLength)

// Plot the 200 SMA and RSI
plot(sma200, color=color.blue, linewidth=2, title="200 SMA")
plot(rsi, color=color.purple, title="RSI", display=display.none)

// Define buy and sell conditions
var isLong = false
var float lastExitTime = na
var float trailStopPrice = na

// Explicitly declare timeSinceExit as float
float timeSinceExit = na(lastExitTime) ? na : (time - lastExitTime) / (24 * 60 * 60 * 1000)
canEnter = na(lastExitTime) or timeSinceExit > waitingPeriod

buyCondition = close > sma200 and rsi < rsiThreshold and canEnter

if (buyCondition and not isLong)
    strategy.entry("Buy", strategy.long)
    trailStopPrice := na
    isLong := true

// Update trailing stop loss if long
if (isLong)
    trailStopPrice := na(trailStopPrice) ? close * (1 - trailStopPercent / 100) : math.max(trailStopPrice, close * (1 - trailStopPercent / 100))

// Check for trailing stop loss or sell condition
if (isLong and (close < trailStopPrice or close < sma200))
    strategy.close("Buy")
    lastExitTime := time
    isLong := false

// Plot buy and sell signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=(isLong and close < trailStopPrice) or close < sma200, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")