デュアルインジケーターモメンタムトレンド定量戦略システム

RSI MA ATR TP/SL
作成日: 2025-01-17 16:40:55 最終変更日: 2025-01-17 16:41:17
コピー: 0 クリック数: 545
1
フォロー
1617
フォロワー

デュアルインジケーターモメンタムトレンド定量戦略システム

概要

この戦略は、相対力指数 (RSI) と移動平均 (MA) を組み合わせて、2 つの指標の相乗効果を通じて市場の動向と取引機会を特定する定量取引システムです。このシステムには、取引シグナルの信頼性を高めるために、ボリューム フィルターとボラティリティ フィルターも組み込まれています。この戦略の核となる考え方は、高速移動平均と低速移動平均のクロスオーバーを通じてトレンドの方向を決定し、RSI を使用して勢いを確認して、最終的に完全な取引決定フレームワークを形成することです。

戦略原則

この戦略では、2 層のシグナル確認メカニズムを採用しています。

  1. トレンド確認レイヤー: 高速移動平均 (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="Закрито по сигналу")