ダイナミックブレイクアウトトレーリングストップ取引戦略: ボラティリティに基づく複数期間の価格ブレイクアウトモデル

BREAKOUT ATR SL TP VOL momentum RSI
作成日: 2025-02-20 17:02:22 最終変更日: 2025-02-27 17:27:27
コピー: 1 クリック数: 421
2
フォロー
319
フォロワー

ダイナミックブレイクアウトトレーリングストップ取引戦略: ボラティリティに基づく複数期間の価格ブレイクアウトモデル ダイナミックブレイクアウトトレーリングストップ取引戦略: ボラティリティに基づく複数期間の価格ブレイクアウトモデル

概要

この戦略は,価格突破とダイナミック・トラッキング・ストップ・ロスをベースとする取引システムである.過去Nサイクルの最高価格と最低価格をモニタリングすることで,価格がこれらの重要なレベルを突破したときに取引を行う.戦略は,スマート・ストップ・ロスを採用し,1%の利益に達した後にのみストップ・ロスをアクティブにすることで,利益が充分に発展できるようにする.同時に,1時間の冷却時間を設定することで,過度取引を避けるようにし,各取引の質を向上させる.

戦略原則

戦略の中核となるロジックには、次の主要な部分が含まれます。

  1. エントリーシグナル:過去N周期の最高価格と最低価格を計算して,現在の価格がこれらのレベルを突破したときに取引シグナルをトリガーする.多頭入場は,価格が前期高点を突破する一定パーセントを要求し,空頭は前期低点を突破する必要がある.
  2. 取引管理: 1時間の取引の冷却期間を導入し,波動が激しいときに頻繁に取引を避ける.
  3. リスク管理:ダイナミック・トラッキング・ストップを採用し,1%の利益の獲得後にのみアクティブ化することで,利益をより保護することができる.
  4. パラメータ最適化:回顧周期,突破値,ストップ・パーセンテージなどの重要なパラメータは,異なる市場状況に応じて調整することができます.

戦略的優位性

  1. ダイナミックなリスク管理: ストップ・ローズを追跡することで,収益を保護しながら,収益を継続的に増やすことができる.
  2. 柔軟な適応性:戦略は,異なる市場条件に適応し,パラメータを調整することでパフォーマンスを最適化します.
  3. フィルタリングメカニズム: 取引の冷却期間を使用して,過剰取引を回避し,取引の質を向上させる.
  4. シンプルで効果的: 戦略の論理が明確で,理解し実行しやすい. 拡張性も良好.

戦略リスク

  1. 偽の突破リスク:市場が偽の突破を起こし,誤ったシグナルを引き起こす可能性があります. 取引量の確認を増やすことをお勧めします.
  2. スライドポイントの影響:高波動期には,大きなスライドポイントに直面し,戦略のパフォーマンスに影響を与える可能性があります.
  3. パラメタセンシビリティ: 策略のパフォーマンスはパラメタ設定に敏感であり,慎重な最適化が必要である.
  4. 市場環境依存:低波動率の環境で不良なパフォーマンスを発揮する可能性がある.

戦略最適化の方向性

  1. 取引量指標の導入:取引量確認によって突破信号の信頼性を高める.
  2. トレンドフィルターを追加します. 長期トレンド指数と組み合わせて,トレンド方向のみで取引します.
  3. 動的パラメータ調整:市場の変動率に応じて突破値とストップ損失パラメータを自動的に調整する.
  4. 複数の時間周期:複数の時間周期の信号を統合して精度を増やす.

要約する

これは合理的に設計されたトレンド追跡戦略であり,価格の突破と動的ストロップを組み合わせて,大きなトレンドを捕捉し,リスクを効果的に制御することができます.戦略のカスタマイズ性が強く,パラメータの最適化によって異なる市場環境に適応できます. 戦略のパフォーマンスを異なる市場条件下で段階的に検証するために,現場で小さなポジションから始めることをお勧めします.

ストラテジーソースコード
/*backtest
start: 2024-02-21 00:00:00
end: 2025-02-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Binance","currency":"TRB_USDT"}]
*/

//@version=5
//TSLA has the buest results on the 5 min or 1 hour chart
//NQ 15 minute
strategy("!! 🔥 Breakout Strategy with Trailing Stop", overlay=true, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, 
         pyramiding=100)

// User inputs
var int lookbackBars = input.int(10, title="Lookback Bars", minval=1)
var float breakoutThresholdPct = input.float(0.05, title="Breakout Threshold Percentage", minval=0.0001, maxval=5, step=0.01)
var float stopLossPct = input.float(0.2, title="Stop Loss Percentage", minval=0.1) / 100
// Adjusted: No longer directly using takeProfitPct for a fixed take profit level
var float trailStartPct = input.float(0.5, title="Trail Start at Profit Percentage", minval=0.001) / 100

// Tracking the last entry time
var float lastEntryTime = na

// Calculate the highest high and lowest low over the last N bars excluding the current bar
float previousHigh = ta.highest(high[1], lookbackBars)
float previousLow = ta.lowest(low[1], lookbackBars)


// Entry condition adjusted to compare current price against the previous period's high/low
bool breakoutHigh = close > previousHigh * (1 + breakoutThresholdPct / 100) and (na(lastEntryTime) or (time - lastEntryTime) > 3600000 )
bool breakoutLow = close < previousLow * (1 - breakoutThresholdPct / 100) and (na(lastEntryTime) or (time - lastEntryTime) > 3600000 )

// Execute strategy based on the breakout condition
if (breakoutHigh)
    strategy.entry("Breakout Buy", strategy.long)
    lastEntryTime := time
else if (breakoutLow)
    strategy.entry("Breakout Sell", strategy.short)
    lastEntryTime := time

// Exiting the strategy with a trailing stop that starts after reaching 1% profit
// Adjusted: Implementing a dynamic trailing stop that activates after a 1% profit
if strategy.position_size > 0 
    strategy.exit("Trailing Stop Exit", "Breakout Buy", trail_points = close * trailStartPct, trail_offset = close * stopLossPct)
if strategy.position_size < 0 
    strategy.exit("Trailing Stop Exit", "Breakout Sell", trail_points = close * trailStartPct, trail_offset = close * stopLossPct)

// Visualization for debugging and analysis
plot(previousHigh, color=color.green, linewidth=2, title="Previous High")
plot(previousLow, color=color.red, linewidth=2, title="Previous Low")
// plotshape(series=breakoutHigh, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
// plotshape(series=breakoutLow, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")