Strategi ini adalah sistem dagangan adaptif yang menggabungkan penunjuk turun naik dan momentum untuk menangkap trend pasaran melalui penyelarasan beberapa penunjuk teknikal. Strategi ini menggunakan penunjuk ATR untuk memantau turun naik pasaran, MACD untuk menilai momentum trend, dan menggabungkan penunjuk momentum harga untuk mengesahkan isyarat perdagangan, dengan mekanisme stop-loss dan mengambil keuntungan yang fleksibel. Sistem ini mempunyai daya adaptasi yang kuat dan boleh menyesuaikan kekerapan perdagangan dan kawalan kedudukan secara automatik mengikut keadaan pasaran.
Strategi ini bergantung pada sistem penunjuk tiga sebagai logik dagangan terasnya: Pertama, ATR digunakan untuk mengukur keadaan turun naik pasaran untuk menyediakan rujukan turun naik untuk keputusan dagangan; Kedua, penunjuk MACD's golden dan death crosses digunakan untuk menangkap titik perubahan trend, dengan penyambungan garis MACD yang cepat dan perlahan digunakan sebagai isyarat pencetus perdagangan utama; Ketiga, penunjuk momentum harga digunakan untuk pengesahan, memerhatikan perubahan harga berbanding tempoh sebelumnya untuk mengesahkan kekuatan trend. Sistem ini juga menggabungkan purata bergerak 50 hari sebagai penapis trend, hanya membenarkan kedudukan panjang apabila harga di atas purata bergerak dan kedudukan pendek apabila di bawah. Untuk mengelakkan overtrading, isyarat isyarat strategi menguatkuasakan selang perdagangan minimum dan secara pilihan melaksanakan pelaksanaan bergantian.
Strategi ini adalah sistem perdagangan kuantitatif yang direka dengan baik, secara logik ketat yang mencapai penangkapan yang berkesan terhadap trend pasaran melalui penggunaan pelbagai penunjuk teknikal. Sistem ini telah membuat pertimbangan terperinci dalam kawalan risiko dan pelaksanaan perdagangan, menunjukkan kepraktisan yang baik.
/*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")