この戦略は,動的トレンドラインとボリューム確認に基づいたロングのみのブレークアウト取引戦略である.この戦略は,リアルタイムで価格動きを追跡し,動的にトレンドラインを構築することで,主要なスイング・ハイを特定する.価格が有意なボリュームで上位トレンドラインを突破すると,戦略は,パーセントベースのテイク・プロフィート,ストップ・ロスト,トライリング・ストップメカニズムを通じてリスクを管理しながらロングポジションに入ります.
基本論理は,動的トレンドライン構築,ボリューム確認,リスクマネジメントシステムという3つの主要な柱の上に構築されている.第一に,戦略は,タ.ピボットハイ機能を使用して価格変動高値を動的に特定し,最も最近の2つのスイング高値から計算された傾斜と遮断に基づいて上位トレンドラインを構築する.第二に,エントリー信号は,ブレイアウト有効性を確保するために20期平均よりも1.5倍高いボリュームに伴わなければならない.最後に,戦略は,利益をロックするために1%のトレーリングストップで,固定パーセントのテイク・プロフィート (2%) とストップ・ロスト (1%) を採用する.
この戦略は,堅牢な論理を持つ,よく設計されたトレンドフォロー戦略である.ダイナミックなトレンドラインとボリューム確認の組み合わせ,包括的なリスクマネジメントシステムとともに,戦略は優れた適応性と信頼性を示している.いくつかの市場依存性がある一方で,提案された最適化方向性を通じて改善の余地がある.トレーダーは,実行前に徹底的なパラメータ最適化とバックテストを行うことをお勧めする.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-09 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Long Only Strategy with Dynamic Trend Lines, Fixed TP/SL, and Trailing SL+", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10, pyramiding=0, // Prevent multiple entries calc_on_order_fills=true, calc_on_every_tick=true) // === Parameters === swingThreshold = input.int(5, title="Swing Detection Threshold") tpPercent = input.float(2.0, title="Take Profit (%)") slPercent = input.float(1.0, title="Stop Loss (%)") trailPercent = input.float(1.0, title="Trailing Stop (%)") volumeThresholdMultiplier = input.float(1.5, title="Volume Spike Threshold (x MA)") // === Volume Indicator === avgVolume = ta.sma(volume, 20) volumeSpike = volume > (avgVolume * volumeThresholdMultiplier) // === Detect Swing High === isSwingHigh = ta.pivothigh(high, swingThreshold, swingThreshold) // Variables to store swing highs var float swingHigh1 = na var float swingHigh2 = na var int swingHighBar1 = na var int swingHighBar2 = na // Update swing highs if (isSwingHigh) swingHigh2 := swingHigh1 swingHighBar2 := swingHighBar1 swingHigh1 := high[swingThreshold] swingHighBar1 := bar_index - swingThreshold // === Calculate Upper Trend Line === var float upperSlope = na var float upperIntercept = na // Calculate slope and intercept for upper trend line if there are two swing highs if (not na(swingHigh1) and not na(swingHigh2)) deltaX = swingHighBar1 - swingHighBar2 if (deltaX != 0) upperSlope := (swingHigh1 - swingHigh2) / deltaX upperIntercept := swingHigh1 - (upperSlope * swingHighBar1) else upperSlope := 0 upperIntercept := swingHigh1 // Calculate trend line price for the current bar var float upperTrendPrice = na if (not na(upperSlope) and not na(upperIntercept)) upperTrendPrice := upperSlope * bar_index + upperIntercept // Calculate trend line price for the previous bar var float upperTrendPrice_prev = na if (not na(upperSlope) and not na(upperIntercept)) upperTrendPrice_prev := upperSlope * (bar_index - 1) + upperIntercept // === Buy Condition Based on Trend Line Breakout === // Buy Signal: Price breaks above Upper Trend Line with volume spike breakoutBuyCondition = (not na(upperTrendPrice)) and (close > upperTrendPrice) and (not na(upperTrendPrice_prev)) and (close[1] <= upperTrendPrice_prev) and volumeSpike // === Manage Single Position === // Calculate Take Profit and Stop Loss levels based on percentage longTakeProfit = close * (1 + tpPercent / 100) longStopLoss = close * (1 - slPercent / 100) // Calculate Trailing Stop as trail_offset (in price) trail_offset = close * (trailPercent / 100) // Execute Trade with Single Position Management if (breakoutBuyCondition) // Close existing short position if any if (strategy.position_size < 0) strategy.close("Sell") // Open long position strategy.entry("Buy", strategy.long) // Set Take Profit, Stop Loss, and Trailing Stop Loss for long position strategy.exit("Take Profit Buy", from_entry="Buy", limit=longTakeProfit, stop=longStopLoss, trail_offset=trail_offset) // Plot Buy Signal plotshape(breakoutBuyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")