二重移動平均でフィルタリングされたATR適応型トレンド追跡戦略

EMA ATR HEIKIN ASHI Trailing Stop TAKE PROFIT
作成日: 2025-04-25 15:01:18 最終変更日: 2025-04-25 15:01:18
コピー: 0 クリック数: 403
2
フォロー
319
フォロワー

二重移動平均でフィルタリングされたATR適応型トレンド追跡戦略 二重移動平均でフィルタリングされたATR適応型トレンド追跡戦略

概要

この戦略は,双均線フィルタリングシステムとATR自己適応追跡ストップメカニズムを組み合わせ,Heikin Ashiのグラフを使って価格変動を平滑化し,高い勝率を実現するトレンド追跡を行う.戦略の中心は,急速なEMAと遅いEMAの金叉死叉をトレンド方向フィルタとして利用し,ATRベースの動的ストップを活用して利益を保護することである.歴史上,この戦略の勝率は90%以上であり,中線短線トレンドに適している.

戦略原則

  1. 信号生成層

    • 基礎データ源としてHeikin Ashi変換後の価格を使用する (原始価格を切り替える)
    • ATRチャネルを計算する:ATR長度 ((20) と倍数 ((1.0) によって動的なチャネル幅を決定する
    • 自動トラッキングストップを実現:チャネルを突破したときに反転シグナルをトリガーする
  2. トレンドフィルター

    • 双EMAシステム ((10周期快線/50周期慢線) を採用
    • スローラインよりも高速ラインが高い場合にのみ,余分な作業が許可されます.
  3. リスク管理

    • ダイナミック・トラッキング・ストップ:trail_stepとtrail_offsetのパラメータでストップ・ストップの移動粒子を制御する
    • 固定ポイント数 止まる:take_profit_points 絶対利益目標を設定する
  4. 実行論理

    • 価格がATRチャネルを突破し,EMA方向に合致したときにポジションを開く
    • 逆転シグナルが表示され,またはストップ・ローズ/ストップ・タイム・平仓に触れたとき

優位分析

  1. 高い成功率のデザイン: 三重フィルタリング機構 ((Heikin Ashi平滑+ATR通道+EMA交差) が偽信号を効果的に減少させる
  2. 風力制御に適応する:ATRは,市場波動が大きくなる時に誤差スペースを自動的に拡張するストップポジションを動的に調整する
  3. トレンドの継続性EMAのフィルタリングは,大きなトレンドの方向に合致する取引のみを保証します.
  4. 複数の時間枠の互換性: パラメータは,異なる波動性の品種に適用して調整できます.
  5. ビジュアルアシスタント: 購入・売却シグナルの標識と均線表示が内蔵され,人工的に確認が容易である

リスク分析

  1. トレンド反転リスクATR通路の遅延により,急激な逆転の場合は,過剰な損失が発生する可能性があります.
    • オプティマイゼーション方案:最大撤回ハードストップを増加させる
  2. パラメータが合わない“90%の勝利率は,特定の歴史的データから得られたかもしれない”
    • 最適化方案:多周期ウォーク・フォワードテストを行う
  3. 横盤磨損EMAの交差点が,震災中の都市で連続した偽信号を発生させた.
    • 最適化方案:ADXフィルターまたは波動率の値を導入する
  4. スライドポイントの影響追随ストップは,急速な動きで不利な価格で実行される可能性があります.
    • 最適化方案:最小滑点の許容値を設定する

最適化の方向

  1. 動態参数調整

    • 市場の変動率 (VIX指数など) に応じてATR倍数を自動的に調整する
    • 実現原理:標準差または歴史変動率のパーセント計算
  2. 複合フィルタリングシステム

    • 取引量加重確認:突破時に取引量増強を要求する
    • タイムフィルター:重要な経済データ発表の時間を回避する
  3. 機械学習の最適化

    • 強化学習の動態を使用してEMA周期组合の調整
    • LSTMによる最適停止位置の予測
  4. 多次元検証

    • 周回線レベルのトレンド確認を導入
    • RSI 偏差値の追加は,出場シグナルの補助として

要約する

この戦略はHeikin Ashi-ATR-EMA三重構造によって高確率のトレンドキャプチャを実現し,ダイナミック・ストップ・ローズ・メカニズムは利潤を効果的に保護する.核心的な優位性は,トレンド方向判断 (EMA),波動率適応 (ATR) とノイズフィルタ (Heikin Ashi) を有機的に統合することにある.さらに最適化すると,パラメータ自適性と多要素検証を重視し,実際のアプリケーションで硬性風力制御規則を配合して使用することが推奨される.

ストラテジーソースコード
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-23 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/

//@version=5
strategy("UTBot + EMA Filter (HA + ATR Logic)", overlay = true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === INPUTS ===
bandwidth = input.float(8., 'Bandwidth')
atr_mult = input.float(1.0, 'ATR Multiplier')
atr_len = input.int(20, 'ATR Length')
ema_fast_len = input.int(10, 'EMA Fast Length')
ema_slow_len = input.int(50, 'EMA Slow Length')
use_heikin = input.bool(true, title='Use Heikin Ashi Candle')
trail_step = input.float(10.0, title='Trailing Step (Points)', minval=0.1)
trail_offset = input.float(10.0, title='Trailing Offset (Points)', minval=0.1)
take_profit_points = input.float(100.0, title='Take Profit (Points)', minval=0.1)

// === SOURCE ===
sr = use_heikin ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close) : close

// === ATR Trailing Stop ===
atr = ta.atr(atr_len)
nLoss = atr_mult * atr

var float trail = na
iff_1 = sr > nz(trail[1]) ? sr - nLoss : sr + nLoss
iff_2 = sr < nz(trail[1]) and sr[1] < nz(trail[1]) ? math.min(nz(trail[1]), sr + nLoss) : iff_1
trail := sr > nz(trail[1]) and sr[1] > nz(trail[1]) ? math.max(nz(trail[1]), sr - nLoss) : iff_2

// === EMA FILTER ===
ema_fast = ta.ema(sr, ema_fast_len)
ema_slow = ta.ema(sr, ema_slow_len)

// === ENTRY & EXIT CONDITIONS ===
buy = sr[1] < trail[1] and sr > trail and ema_fast > ema_slow
sell = sr[1] > trail[1] and sr < trail and ema_fast < ema_slow

// === EXIT on opposite signal ===
exit_buy = sell
exit_sell = buy

// === STRATEGY EXECUTION ===
if buy
    strategy.entry("Buy", strategy.long)
if sell
    strategy.entry("Sell", strategy.short)

if exit_buy and strategy.position_size > 0
    strategy.close("Buy")
if exit_sell and strategy.position_size < 0
    strategy.close("Sell")

// === TRAILING STOP + TAKE PROFIT ===
// Long
if strategy.position_size > 0
    strategy.exit("Exit Long", from_entry="Buy", trail_points=trail_step, trail_offset=trail_offset, limit=sr + take_profit_points)

// Short
if strategy.position_size < 0
    strategy.exit("Exit Short", from_entry="Sell", trail_points=trail_step, trail_offset=trail_offset, limit=sr - take_profit_points)

// === PLOTS ===
plotshape(buy, title='Buy Signal', text='Buy', location=location.belowbar, color=color.green, style=shape.labelup, textcolor=color.white, size=size.tiny)
plotshape(sell, title='Sell Signal', text='Sell', location=location.abovebar, color=color.red, style=shape.labeldown, textcolor=color.white, size=size.tiny)

plot(ema_fast, color=color.teal, title='EMA Fast')
plot(ema_slow, color=color.purple, title='EMA Slow')

// === ALERTS ===
alertcondition(buy, title='UTBot Buy', message='UTBot Buy Signal')
alertcondition(sell, title='UTBot Sell', message='UTBot Sell Signal')