資源の読み込みに... 荷物...

ダイナミック・ダブル・インディケーター・モメント・トレンド 定量戦略システム

作者: リン・ハーンチャオチャン開催日:2025年1月17日 16時40分55秒
タグ:RSIマルチATRTP/SL

 Dynamic Dual-Indicator Momentum Trend Quantitative Strategy System

概要

この戦略は,相対強度指数 (RSI) と移動平均 (MA) を組み合わせて市場動向と取引機会を特定する定量的な取引システムである.このシステムは,取引シグナルの信頼性を高めるため,ボリュームと変動性フィルターも組み込む.コアコンセプトは,RSIを使用してモメンタム確認の同時,高速および遅い移動平均のクロスオーバーを通じてトレンド方向を決定することであり,最終的には完全な取引決定フレームワークを形成する.

戦略原則

戦略は二重信号の確認メカニズムを使用します. トレンド確認層: 市場傾向を決定するために,高速移動平均 (FastMA) とスロー移動平均 (SlowMA) のクロスオーバーを使用する.高速線がスローラインを越えると上昇傾向が確立され,高速線がスローラインを下回ると下落傾向が確立される. 2.モメンタム確認層:RSIをモメンタム確認ツールとして使用する.上昇傾向では,RSIは50以下で,上昇可能性を示し,下落傾向では,RSIは50以上で,下落可能性を示します. 3. トレーディングフィルター: 流動性や波動性が不十分な信号をフィルタリングするために,ボリュームとATR波動性の最低限値を設定する.

戦略 の 利点

  1. 多次元信号確認: 傾向と動力指標を組み合わせて偽信号の確率を減らす.
  2. 総合的なリスク管理: ストップ・ロストとテイク・プロフィートの機能をパーセントベースのリスクコントロールポイントと統合する.
  3. 柔軟なフィルタリングメカニズム: 市場状況に応じて,ボリュームと波動性フィルタを有効または無効にすることができます.
  4. オートマティック・ポジション・クロージング (自動・ポジション・クロージング): 逆転信号が表示されても,自動的にポジションをクロージングする.

戦略リスク

  1. 市場変動リスク: 波及市場では誤ったブレイクシグナルが頻繁に発生する可能性があります.
  2. スリップリスク: 変動する市場状況下で,実際の実行価格がシグナルトリガー価格から大幅に偏りることがあります.
  3. パラメータ感度: 戦略のパフォーマンスはパラメータ設定に大きく依存しており,異なる市場環境では異なるパラメータの組み合わせを必要とする場合があります.

戦略の最適化方向

  1. 動的パラメータ調整: 市場変動に基づいて動的平均期とRSIの値を動的に調整するための適応性パラメータメカニズムを導入する.
  2. シグナル重量化システム: シグナル強度評価システムを確立し,インジケータの性能に基づいて異なる重量化を行う.
  3. 市場環境分類: 異なる市場条件下で異なる取引戦略を使用するために市場状態識別モジュールを追加する.
  4. リスク管理の強化: 市場の変動に基づいてストップロスのポジションを自動的に調整するためのダイナミックストップロスのメカニズムを導入する.

概要

この戦略は,トレンドとモメンタム指標の統合された利用を通じて包括的な取引システムを確立する.このシステムの強みは,多層の信号確認メカニズムと包括的なリスク管理フレームワークにあります.しかし,実用的な適用には,実際の状況に基づいて戦略パフォーマンスとパラメータ最適化に対する市場の状況の影響に注意が必要です.継続的な改善と最適化を通じて,この戦略は,異なる市場環境で安定したパフォーマンスを維持する可能性があります.


/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

// © Boba2601
//@version=5
strategy("RSI-MA Synergy", overlay=true, margin_long=100, margin_short=100)

// === Налаштування індикаторів ===
length_rsi = input.int(14, title="RSI Period", group="Індикатори")
fastMALength = input.int(9, title="Fast MA Length", group="Індикатори")
slowMALength = input.int(21, title="Slow MA Length", group="Індикатори")

// === Налаштування стоп-лосу і тейк-профіту ===
useStopLossTakeProfit = input.bool(true, title="Використовувати стоп-лос і тейк-профіт", group="Стоп-лос і Тейк-профіт")
stopLossPercent = input.float(2.0, title="Стоп-лос (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт")
takeProfitPercent = input.float(4.0, title="Тейк-профіт (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт")

// === Налаштування об'єму та волатильності ===
useVolumeFilter = input.bool(false, title="Використовувати фільтр об'єму", group="Об'єм та Волатильність")
volumeThreshold = input.int(50000, title="Мінімальний об'єм", group="Об'єм та Волатильність")
useVolatilityFilter = input.bool(false, title="Використовувати фільтр волатильності", group="Об'єм та Волатильність")
atrLength = input.int(14, title="Період ATR для волатильності", group="Об'єм та Волатильність")
volatilityThreshold = input.float(1.5, title="Мінімальна волатильність (ATR)", step=0.1, group="Об'єм та Волатильність")


// === Розрахунок індикаторів ===
rsiValue = ta.rsi(close, length_rsi)
fastMA = ta.sma(close, fastMALength)
slowMA = ta.sma(close, slowMALength)

// === Розрахунок об'єму та волатильності ===
averageVolume = ta.sma(volume, 20)
atrValue = ta.atr(atrLength)

// === Умови входу в позицію ===
longCondition = ta.crossover(fastMA, slowMA) and rsiValue < 50
if useVolumeFilter
    longCondition := longCondition and volume > volumeThreshold
if useVolatilityFilter
    longCondition := longCondition and atrValue > volatilityThreshold

shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue > 50
if useVolumeFilter
    shortCondition := shortCondition and volume > volumeThreshold
if useVolatilityFilter
    shortCondition := shortCondition and atrValue > volatilityThreshold

// === Логіка входу та виходу з позиції ===
if (longCondition)
    strategy.entry("Long", strategy.long)
    if (useStopLossTakeProfit)
        stopLossPrice = close * (1 - stopLossPercent / 100)
        takeProfitPrice = close * (1 + takeProfitPercent / 100)
        strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice)

if (shortCondition)
    strategy.entry("Short", strategy.short)
    if (useStopLossTakeProfit)
        stopLossPrice = close * (1 + stopLossPercent / 100)
        takeProfitPrice = close * (1 - takeProfitPercent / 100)
        strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice)

// === Закриття позицій за зворотнім сигналом ===
if (strategy.position_size > 0 and (ta.crossunder(fastMA, slowMA) or rsiValue > 50))
    strategy.close("Long", comment="Закрито по сигналу")

if (strategy.position_size < 0 and (ta.crossover(fastMA, slowMA) or rsiValue < 50))
    strategy.close("Short", comment="Закрито по сигналу")

関連性

もっと