この戦略は,複数の技術指標の調整を通じて市場の動向を把握するために波動性とモメンタム指標を組み合わせる適応型取引システムである.この戦略は,市場の波動性を監視するためにATR指標,トレンドモメンタムを判断するためにMACD指標,および柔軟なストップ・ロストとテイク・プロフィートメカニズムで取引シグナルを確認するために価格モメンタム指標を組み合わせています.システムは柔軟性があり,市場の状況に応じて取引頻度とポジション制御を自動的に調整することができます.
この戦略は,トライアルインジケーターシステム (triple indicator system) を基本取引論理として採用している.第一に,ATRは市場変動条件を測定し,取引決定のための変動基準を提供するために使用される.第二に,MACDインジケーターの黄金と死亡クロスはトレンドターニングポイントを捉えるために使用され,MACDの速い線と遅い線クロスオーバーが主なトレードトリガー信号として使用される.第三に,価格勢力のインジケーターは検証のために使用され,トレンド強さを確認するために以前の期間の価格変化を観察する.システムには50日間の移動平均値もトレンドフィルターとして組み込まれており,価格は移動平均値以上,低値下にある場合のみロングポジションを設定する.オーバートレードを避けるため,シグナル戦略は最低取引間隔を強制し,オプションで交替実行を設定する.
この戦略は,複数の技術指標の使用を通じて市場動向を効果的に把握する,合理的に厳格な定量取引システムである.このシステムは,リスク管理と取引実行に詳細な考慮を行い,良い実用性を示している.いくつかの潜在的なリスクがあるにもかかわらず,提案された最適化方向性により,戦略の安定性と収益性はさらに向上すると期待できる.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("[ETH] Volatility & Momentum Adaptive Strategy", shorttitle="Definitive 1 day Ethereum Signal", overlay=true, initial_capital=10000, currency=currency.USD) // === Input Parameters === // trade_size = input.float(5, title="Trade Size (ETH)") atr_length = input.int(8, minval=1, title="ATR Length") macd_fast = input.int(8, minval=1, title="MACD Fast Length") macd_slow = input.int(7, minval=1, title="MACD Slow Length") macd_signal = input.int(9, minval=1, title="MACD Signal Length") momentum_length = input.int(37, title="Momentum Length") stop_loss_percent = input.float(9.9, title="Stop Loss Percentage (%)") take_profit_percent = input.float(9.0, title="Take Profit Percentage (%)") alternate_signal = input.bool(true, title="Alternate Buy/Sell Signals") // === Indicators === // // ATR to measure volatility atr = ta.atr(atr_length) // MACD for trend momentum [macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal) macd_cross_up = ta.crossover(macd_line, signal_line) macd_cross_down = ta.crossunder(macd_line, signal_line) // Momentum momentum = ta.mom(close, momentum_length) // === Signal Control Variables === // var bool last_signal_long = na var int last_trade_bar = na min_bars_between_trades = 5 // Adjust for minimal trade frequency control time_elapsed = na(last_trade_bar) or (bar_index - last_trade_bar) >= min_bars_between_trades // === Buy and Sell Conditions === // // Buy when: buy_signal = (macd_cross_up and momentum > 0 and close > ta.sma(close, 50) and time_elapsed) // Sell when: sell_signal = (macd_cross_down and momentum < 0 and close < ta.sma(close, 50) and time_elapsed) // Enforce alternate signals if selected if alternate_signal buy_signal := buy_signal and (na(last_signal_long) or not last_signal_long) sell_signal := sell_signal and (not na(last_signal_long) and last_signal_long) // === Trade Execution === // // Buy Position if (buy_signal) if strategy.position_size < 0 strategy.close("Short") strategy.entry("Long", strategy.long, qty=trade_size) last_signal_long := true last_trade_bar := bar_index // Sell Position if (sell_signal) if strategy.position_size > 0 strategy.close("Long") strategy.entry("Short", strategy.short, qty=trade_size) last_signal_long := false last_trade_bar := bar_index // === Stop Loss and Take Profit === // if strategy.position_size > 0 long_take_profit = strategy.position_avg_price * (1 + take_profit_percent / 100) long_stop_loss = strategy.position_avg_price * (1 - stop_loss_percent / 100) strategy.exit("TP/SL Long", from_entry="Long", limit=long_take_profit, stop=long_stop_loss) if strategy.position_size < 0 short_take_profit = strategy.position_avg_price * (1 - take_profit_percent / 100) short_stop_loss = strategy.position_avg_price * (1 + stop_loss_percent / 100) strategy.exit("TP/SL Short", from_entry="Short", limit=short_take_profit, stop=short_stop_loss) // === Visual Signals === // plotshape(series=buy_signal and time_elapsed, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=sell_signal and time_elapsed, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")