この戦略は,トレンドフォローとスウィング・トレーディング・メソッド,EMAとSMAクロスオーバー,スウィング・ハイ/ロー識別,ボリュームフィルタリング,百分比ベースのテイク・プロフィートとトラッキング・ストップ・ロストメカニズムを組み合わせた包括的な取引システムである.この戦略は,多次元信号確認を強調し,技術指標のシネージを通じて取引精度を向上させる.
この戦略は,複数の層のシグナルフィルタリングメカニズムを使用し,基本トレンド決定のためにEMA (EMA) (10) とSMA (SMA) (21) クロスオーバーから始まり,入場タイミングのために6バーの左/右ピボットポイントブレイクを使用し,十分な流動性を確保するために200期移動平均値以上のボリュームを必要とする. リスク管理のために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 combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true) // --- Inputs --- source = close TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers') turnonAlerts = input(true, title='Turn on Alerts?') colorbars = input(true, title="Color Bars?") turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?') backgroundcolor = input(false, title='Enable Background Color?') // EMA/SMA Lengths emaLength = input.int(10, minval=1, title='EMA Length') smaLength = input.int(21, minval=1, title='SMA Length') ema1 = ta.ema(source, emaLength) sma2 = ta.sma(source, smaLength) // Swing High/Low Lengths leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1) rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1) // Volume MA Length volMaLength = input.int(200, title="Volume Moving Average Length") // Percentage Take Profit with hundredth place adjustment takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100 // Trailing Stop Loss Option useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?") trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100 // --- Swing High/Low Logic --- pivotHigh(_leftBars, _rightBars) => ta.pivothigh(_leftBars, _rightBars) pivotLow(_leftBars, _rightBars) => ta.pivotlow(_leftBars, _rightBars) ph = fixnan(pivotHigh(leftBars, rightBars)) pl = fixnan(pivotLow(leftBars, rightBars)) // --- Volume Condition --- volMa = ta.sma(volume, volMaLength) // Declare exit conditions as 'var' so they are initialized var bool longExitCondition = na var bool shortExitCondition = na // --- Long Entry Condition: Close above Swing High & Volume >= 200 MA --- longCondition = (close > ph and volume >= volMa) if (longCondition) strategy.entry("Long", strategy.long) // --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA --- shortCondition = (close < pl and volume >= volMa) if (shortCondition) strategy.entry("Short", strategy.short) // --- Take Profit and Trailing Stop Logic --- // For long position: Set take profit at the entry price + takeProfitPercent longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent) shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent) // --- Long Exit Logic --- if (useTrailingStop) // Trailing Stop for Long strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel) else // Exit Long on Take Profit only strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel) // --- Short Exit Logic --- if (useTrailingStop) // Trailing Stop for Short strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel) else // Exit Short on Take Profit only strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel) // --- Plot Swing High/Low --- plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High") plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High") plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High") plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High") // --- Plot EMA/SMA --- plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA") plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA") // --- Alerts --- alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA") alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA") // --- Bar Colors for Visualization --- barcolor(longCondition ? color.green : na, title="Long Entry Color") barcolor(shortCondition ? color.red : na, title="Short Entry Color") bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)