Strategi ini adalah sistem dagangan pembalikan purata adaptif berdasarkan penunjuk Bollinger Bands. Ia menangkap peluang overbought dan oversold dengan memantau persilangan harga dengan Bollinger Bands, berdagang pada prinsip pembalikan purata. Strategi ini menggabungkan ukuran kedudukan dinamik dan mekanisme pengurusan risiko, sesuai untuk pelbagai pasaran dan jangka masa.
Logik terasnya adalah berdasarkan perkara berikut: 1. Menggunakan purata bergerak 20 tempoh sebagai jalur tengah, dengan 2 penyimpangan piawai untuk jalur atas dan bawah. 2. Membuka kedudukan panjang apabila harga pecah di bawah band bawah (isyarat oversold). 3. Membuka kedudukan pendek apabila harga melanggar band atas (isyarat overbought). 4. Mengambil keuntungan apabila harga kembali ke jalur tengah. 5. Tetapkan 1% stop loss dan 2% mengambil keuntungan, mencapai nisbah risiko-balasan 2: 1. 6. Menggunakan saiz kedudukan berasaskan peratusan, melabur 1% daripada ekuiti akaun setiap perdagangan.
Risiko Pasaran Konsolidasi - Boleh menyebabkan kerugian disebabkan oleh perdagangan yang kerap di pasaran yang berbeza. Penyelesaian: Tambah penapis trend, hanya berdagang apabila trend jelas.
Risiko pecah palsu - Harga boleh berbalik dengan cepat selepas pecah. Penyelesaian: Tambah isyarat pengesahan seperti jumlah atau penunjuk teknikal lain.
Risiko sistematik - Boleh mengalami kerugian yang lebih besar dalam keadaan pasaran yang melampau. Penyelesaian: Melaksanakan had pengeluaran maksimum, secara automatik menghentikan perdagangan apabila ambang tercapai.
Strategi ini menangkap penyimpangan harga menggunakan Bollinger Bands dan berdagang pada prinsip pembalikan purata. Pengurusan risiko yang komprehensif dan peraturan perdagangan yang jelas memberikan kepraktisan yang baik. Melalui pengoptimuman yang dicadangkan, kestabilan dan keuntungan strategi dapat ditingkatkan lagi. Ia sesuai untuk peniaga kuantitatif yang mencari pulangan yang stabil.
/*backtest start: 2025-01-09 00:00:00 end: 2025-01-16 00:00:00 period: 10m basePeriod: 10m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("Bollinger Bands Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=200) // Inputs for Bollinger Bands bbLength = input.int(20, title="Bollinger Bands Length") bbStdDev = input.float(2.0, title="Bollinger Bands StdDev") // Inputs for Risk Management stopLossPerc = input.float(1.0, title="Stop Loss (%)", minval=0.1, step=0.1) takeProfitPerc = input.float(2.0, title="Take Profit (%)", minval=0.1, step=0.1) // Calculate Bollinger Bands basis = ta.sma(close, bbLength) bbStdev = ta.stdev(close, bbLength) upper = basis + bbStdDev * bbStdev lower = basis - bbStdDev * bbStdev // Plot Bollinger Bands plot(basis, color=color.blue, title="Middle Band") plot(upper, color=color.red, title="Upper Band") plot(lower, color=color.green, title="Lower Band") // Entry Conditions longCondition = ta.crossover(close, lower) shortCondition = ta.crossunder(close, upper) // Exit Conditions exitLongCondition = ta.crossunder(close, basis) exitShortCondition = ta.crossover(close, basis) // Stop Loss and Take Profit Levels longStopLoss = close * (1 - stopLossPerc / 100) longTakeProfit = close * (1 + takeProfitPerc / 100) shortStopLoss = close * (1 + stopLossPerc / 100) shortTakeProfit = close * (1 - takeProfitPerc / 100) // Execute Long Trades if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("Exit Long", from_entry="Long", stop=longStopLoss, limit=longTakeProfit) if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Exit Short", from_entry="Short", stop=shortStopLoss, limit=shortTakeProfit) // Close Positions on Exit Conditions if (exitLongCondition and strategy.position_size > 0) strategy.close("Long") if (exitShortCondition and strategy.position_size < 0) strategy.close("Short") // 🔊 SOUND ALERTS IN BROWSER 🔊 if (longCondition) alert("🔔 Long Entry Signal!", alert.freq_once_per_bar_close) if (shortCondition) alert("🔔 Short Entry Signal!", alert.freq_once_per_bar_close) if (exitLongCondition) alert("🔔 Closing Long Trade!", alert.freq_once_per_bar_close) if (exitShortCondition) alert("🔔 Closing Short Trade!", alert.freq_once_per_bar_close)