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

トリプル・ボトム・リバウンド・モメンタム・ブレークスルー戦略

作者: リン・ハーンチャオチャン開催日:2025年1月10日 15:49:30
タグ:エイマATRマルチSMA

 Triple Bottom Rebound Momentum Breakthrough Strategy

概要

この戦略は,技術分析に基づいた定量的な取引システムで,主に市場におけるトリプルボトムパターンとモメンタムブレークスルーシグナルを特定することに重点を置いています.この戦略は,移動平均 (MA) クロスオーバー,平均真の範囲 (ATR) および価格チャネルを含む複数の技術指標を組み合わせて,完全な取引システムを構築しています.プログラム実装を通じて,トリプルボトムリバウンドパターンの自動識別と取引実行を達成します.

戦略の原則

基本論理には次の主要な要素が含まれます. 1. 市場傾向の方向性を確認するために,高速 (5期) と遅い (20期) 移動平均のクロスオーバーを使用する 2. 自動的に3つの連続した低点 (low1,low2,low3) を識別して,3つの底パターンを形成する 3. ATR インディケーターを使用して変動を計算し,動的ストップ・ロストとテイク・プロフィートレベルを設定する 4. 価格が前回のリバウンド高値を超えた場合のロングエントリーシグナルを確認し,MAクロスオーバーシグナルと組み合わせて3番目の底部後 5. 追加市場参照のために価格動きの範囲を視覚化するための並行チャネルを確立する 6. 取引実行中にATRに基づく動的なストップ・ロストとテイク・プロフィート条件の実施

戦略 の 利点

  1. 信号の信頼性を高めるために複数の技術指標を組み合わせます
  2. ATR を使って,ストップ・ロストとテイク・プロフィートのレベルを動的に調整し,市場の変動変化に適応する
  3. 三重底のパターンの識別を自動化し,主観的な判断を減らす
  4. 過剰取引を防ぐために取引間隔制限を実施する
  5. 視覚化ツール (並行チャネルとラベル) を使って市場構造の明確な参照を提供する
  6. シンプルなメンテナンスと最適化のための明確な戦略ロジック

戦略リスク

  1. 高波動性のある市場で誤った信号を生む可能性があります
  2. トリプル・ボトム・パターンの識別プロセスは,市場の騒音の影響を受ける可能性があります.
  3. 固定ATR倍数はすべての市場条件に適合しない可能性があります.
  4. トレンド逆転期間に連続した損失が発生する可能性があります.
  5. 取引間隔設定は,有効な信号を逃す可能性があります.

戦略の最適化方向

  1. リバウンドの有効性を確認するためのボリューム指標を組み込む
  2. 異なる市場状況に基づいて,ATR増倍数を動的に調整する
  3. トレンド強度フィルターを追加して取引信号の品質を向上させる
  4. 精度を高めるために三重底部識別アルゴリズムを最適化
  5. 取引間隔の設定を最適化するために市場サイクル分析を組み込む
  6. 価格パターンの対称性分析を追加することを検討

概要

この戦略は,複数の技術指標とリスク管理措置を良好な実用性で組み合わせて,プログラム的にトリプルボトムリバウンドブレークスルー取引システムを実装する.継続的な最適化と改善を通じて,戦略は実際の取引でより良いパフォーマンスを有することを約束する.ライブ取引の前に徹底的なバックテストを実施し,特定の市場状況に応じてパラメータを調整することが推奨される.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy("反彈三次突破策略", overlay=true, initial_capital=100000, commission_value=0.001425, slippage=1)

// === 參數設定 ===
fast_length = input.int(5, title="快速均線週期")
slow_length = input.int(20, title="慢速均線週期")
atr_period = input.int(14, title="ATR 週期")
atr_factor = input.float(2.0, title="ATR 因子")
profit_factor = input.float(2.0, title="止盈因子")

// === 計算均線 ===
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.ema(close, slow_length)

// === 均線交叉訊號 ===
long_signal = ta.crossover(fast_ma, slow_ma)
short_signal = ta.crossunder(fast_ma, slow_ma)

// === 計算 ATR ===
atr = ta.atr(atr_period)

// === 反彈三次突破策略 ===
var float low1 = na
var float low2 = na
var float low3 = na
var bool trend_down = false
var bool long_breakout = false
var line lower_line = na
var line upper_line = na

if (na(low1) or na(low2) or na(low3))
    // 初始化低點
    low1 := na
    low2 := na
    low3 := na

if (close < low3 or na(low3))
    // 更新低點
    low1 := low2
    low2 := low3
    low3 := close
    trend_down := true

if (trend_down and close > low2 and close > low1)
    // 確認反轉且第三次反彈比第二次高
    trend_down := false
    long_breakout := true

// 清除前一個反彈通道
if (not na(lower_line))
    line.delete(lower_line)
if (not na(upper_line))
    line.delete(upper_line)

// 繪製新的反彈通道
if (not na(low1) and not na(low3))    
    lower_line := line.new(x1=bar_index[2], y1=low1, x2=bar_index, y2=low3, color=color.yellow, width=2)
    upper_line := line.new(x1=bar_index[2], y1=low1 + (low3 - low1), x2=bar_index, y2=low3 + (low3 - low1), color=color.yellow, width=2)

// === 進出場條件 ===
var float last_long_exit = na
var float last_short_exit = na
var float stop_loss_long = na
var float take_profit_long = na
var float stop_loss_short = na
var float take_profit_short = na

var label stop_loss_label_long = na
var label take_profit_label_long = na
var label stop_loss_label_short = na
var label take_profit_label_short = na

if (long_signal or long_breakout)
    if na(last_short_exit) or (time - last_short_exit) > 2 * 60 * 60 * 1000  // 確保多頭出場後有一段時間間隔
        // 做多
        strategy.entry("做多", strategy.long)
        // 止損設置為最近低點下方
        stop_loss_long := low3 - atr_factor * atr
        take_profit_long := close + profit_factor * atr  // 設定止盈位置
        strategy.exit("止盈/止損", "做多", stop=stop_loss_long, limit=take_profit_long)
        last_long_exit := time  // 記錄多頭出場時間

        // 刪除之前的止盈止損標籤
        if (not na(stop_loss_label_long))
            label.delete(stop_loss_label_long)
        if (not na(take_profit_label_long))
            label.delete(take_profit_label_long)

        // 繪製新的止盈止損標籤
        stop_loss_label_long := label.new(x=bar_index, y=stop_loss_long, text=str.tostring(math.round(stop_loss_long * 10) / 10), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)
        take_profit_label_long := label.new(x=bar_index, y=take_profit_long, text=str.tostring(math.round(take_profit_long * 10) / 10), color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

if (short_signal)
    if na(last_long_exit) or (time - last_long_exit) > 2 * 60 * 60 * 1000  // 確保空頭出場後有一段時間間隔
        // 做空
        strategy.entry("做空", strategy.short)
        // 止損設置為最近高點上方
        stop_loss_short := high + atr_factor * atr
        take_profit_short := close - profit_factor * atr  // 設定止盈位置
        strategy.exit("止盈/止損", "做空", stop=stop_loss_short, limit=take_profit_short)
        last_short_exit := time  // 記錄空頭出場時間

        // 刪除之前的止盈止損標籤
        if (not na(stop_loss_label_short))
            label.delete(stop_loss_label_short)
        if (not na(take_profit_label_short))
            label.delete(take_profit_label_short)

        // 繪製新的止盈止損標籤
        stop_loss_label_short := label.new(x=bar_index, y=stop_loss_short, text=str.tostring(math.round(stop_loss_short * 10) / 10), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)
        take_profit_label_short := label.new(x=bar_index, y=take_profit_short, text=str.tostring(math.round(take_profit_short * 10) / 10), color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

関連性

もっと