複数の指標によるトレンド追跡とショック警告戦略を組み合わせる

SMA RSI ADX ATR STOCH
作成日: 2025-02-18 14:54:47 最終変更日: 2025-02-18 14:54:47
コピー: 0 クリック数: 343
1
フォロー
1617
フォロワー

複数の指標によるトレンド追跡とショック警告戦略を組み合わせる

概要

この戦略は,トレンド追跡と振動指標の優位性を組み合わせた複数の技術指標に基づいた取引システムである.その核心論理は,SMA平均線の交差によってトレンドの方向を判断し,ADXを使用してトレンドの強さを確認し,その後,トレンドの方向で最適なエントリーポイントを見つけるためにランダムなRSIを使用し,トラッキングストップを活用して利益を保護する.この戦略は,5分周期の取引に適しており,市場の主要なトレンドの機会を効果的に捉える.

戦略原則

戦略の具体的原理は以下の通りです.

  1. トレンド判断:SMA20とSMA200の交差を用い,トレンドの方向を決定し,快線を横切る慢線は多頭トレンドとみなされ,逆は空頭トレンドである
  2. トレンド強度確認:ADXが20を超えると,トレンドが十分に発達していることを示し,整合市場での取引を避ける
  3. エントリー時:トレンドが確認された後,RSIをランダムに使い,OverboughtとOverSoldの機会を探し,RSIが30を下回るとOverDownの機会を探し,70を超えるとDownDownの機会を探し
  4. ポジション管理:トレンドの変化に自動で平仓し,逆転してポジションを開くための反転取引メカニズム
  5. リスク管理:トラッキングストップ ((40ポイント,歩長5ポイント) を使用して利益をロックし,偽信号を避けるために1K線の再入延期を設定する

戦略的優位性

  1. 多次元分析:均線,ADX,ランダムRSIを組み合わせて,異なる角度から取引信号を確認し,取引の信頼性を向上させる
  2. 適応性: 戦略は市場の状況に自動的に適応し,トレンドと振動の両方の市場で取引の機会を見つける
  3. リスク管理の改善: 追跡可能なストップ・ロスの導入により,収益を保護しながら,収益を稼働させることができる
  4. 市場への継続的関与:リバーストレードメカニズムにより,主要市場の動向を常に把握する
  5. パラメータの可調性: 戦略は,異なる市場条件に応じて最適化するための複数の可調性パラメータを提供します.

戦略リスク

  1. 過剰取引のリスク:頻繁に反転取引を行うことで手数料が高くなる
  2. 偽のブレイクリスク:市場が揺れ動いているときに頻繁に偽のブレイクシグナルが発生する可能性があります.
  3. スリップリスク: 5分サイクルで,大きなスリップコストに直面する可能性があります
  4. トレンド遅延のリスク:均線システムはそれ自体で遅滞しており,重要な転換点を逃している可能性があります.
  5. パラメタセンシビリティ: パラメタ設定に対して戦略効果が敏感であり,継続的な最適化が必要である

戦略最適化の方向性

  1. 取引量指標の導入:取引量分析を追加することで,トレンド判断の正確性を向上させることができます.
  2. 入札のタイミングを最適化:入札の精度を高めるために,の形状などの価格形状分析を追加することを検討する
  3. 完善した停止メカニズム:ATRの動的調整とトラッキングの停止距離を組み合わせて,より適応性を持つことができる
  4. タイムフィルターを追加: 低流動性の期間を回避するために,取引時間フィルターを追加する
  5. 適応パラメータの開発:市場の変動率に応じて自動的に調整できるパラメータシステムを研究開発

要約する

この戦略は,いくつかのクラシックな技術指標を組み合わせて,包括的な取引システムを構築しています.主要トレンドを捉えることができ,トレンドの中で最適なエントリーポイントを見つけることができ,完全なリスク管理メカニズムを持っています.いくつかの固有のリスクがあるものの,継続的な最適化と細かいパラメータの調整により,この戦略は,異なる市場環境で安定したパフォーマンスを維持する見込みがあります.

ストラテジーソースコード
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-17 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("XAU/USD 5M SMA + Stochastic RSI + ADX Strategy", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// === Входные параметры ===
sma_fast_length = input(20, title="SMA Fast Period")  
sma_slow_length = input(200, title="SMA Slow Period")  
stoch_k_length = input(14, title="Stochastic RSI K Length")
stoch_d_length = input(3, title="Stochastic RSI D Length")
adx_length = input(10, title="ADX Period")  
adx_smoothing = input(10, title="ADX Smoothing Period")
atr_length = input(14, title="ATR Period")

// === Уровни фильтрации ===
adx_min_trend = input(20, title="ADX Minimum Trend Strength")  // Было 25 → уменьшено до 20
stoch_buy_level = input(30, title="Stoch RSI Buy Level")  // Было 20 → увеличено для входов
stoch_sell_level = input(70, title="Stoch RSI Sell Level")  // Было 80 → снижено для входов

// === Трейлинг-стоп ===
use_trailing_stop = input(true, title="Enable Trailing Stop")
trailing_stop_pips = input(40, title="Trailing Stop (Pips)")  // Было 50 → уменьшено для активной торговли
trailing_step_pips = input(5, title="Trailing Step (Pips)")

// === Управление позициями ===
entry_delay = input(1, title="Bars Delay Before Re-Entry")  // Было 2 → уменьшено до 1

// === Расчёт индикаторов ===
sma_fast = ta.sma(close, sma_fast_length)
sma_slow = ta.sma(close, sma_slow_length)
[diPlus, diMinus, adx_value] = ta.dmi(adx_length, adx_smoothing)
atr_value = ta.atr(atr_length)

// === Stochastic RSI ===
stoch_rsi_k = ta.stoch(close, stoch_k_length, stoch_d_length, stoch_d_length)
stoch_rsi_d = ta.sma(stoch_rsi_k, stoch_d_length)

// === Фильтр волатильности (Убран, если мешает входам) ===
// atr_threshold = ta.sma(atr_value, 20)
// volatility_ok = atr_value > atr_threshold  // Комментируем, если ATR слишком строгий

// === Пересечения ===
sma_crossover = ta.crossover(sma_fast, sma_slow)
sma_crossunder = ta.crossunder(sma_fast, sma_slow)
stoch_rsi_crossover = ta.crossover(stoch_rsi_k, stoch_rsi_d)
stoch_rsi_crossunder = ta.crossunder(stoch_rsi_k, stoch_rsi_d)

// === Условия входа ===
longCondition = sma_crossover and adx_value > adx_min_trend and stoch_rsi_crossover and stoch_rsi_k < stoch_buy_level
shortCondition = sma_crossunder and adx_value > adx_min_trend and stoch_rsi_crossunder and stoch_rsi_k > stoch_sell_level

// === Исправленный таймер на повторные входы ===
barsSinceExit = ta.barssince(strategy.position_size == 0)
canReenter = not na(barsSinceExit) and barsSinceExit > entry_delay

// === Переворот позиции (исправлен) ===
if strategy.position_size > 0 and shortCondition and canReenter
    strategy.close("BUY")
    strategy.entry("SELL", strategy.short)

if strategy.position_size < 0 and longCondition and canReenter
    strategy.close("SELL")
    strategy.entry("BUY", strategy.long)

// === Открытие позиций ===
if strategy.position_size == 0 and longCondition
    strategy.entry("BUY", strategy.long)

if strategy.position_size == 0 and shortCondition
    strategy.entry("SELL", strategy.short)

// === Трейлинг-стоп (работает корректно) ===
if use_trailing_stop
    strategy.exit("Exit Long", from_entry="BUY", trail_points=trailing_stop_pips, trail_offset=trailing_step_pips)
    strategy.exit("Exit Short", from_entry="SELL", trail_points=trailing_stop_pips, trail_offset=trailing_step_pips)

// === Визуализация ===
plot(sma_fast, color=color.blue, title="SMA 20")
plot(sma_slow, color=color.red, title="SMA 200")
hline(stoch_buy_level, title="Stoch RSI Buy Level", color=color.blue)
hline(stoch_sell_level, title="Stoch RSI Sell Level", color=color.purple)
hline(adx_min_trend, title="ADX Min Trend Level", color=color.orange)