Strategi ini menggabungkan Bollinger Bands dan Exponential Moving Average (EMA) 5 hari untuk menjana isyarat perdagangan. Apabila harga memecahkan di atas Bollinger Band atas dan ditutup di bawah EMA 5 hari, kedudukan pendek dibuka. Sebaliknya, apabila harga memecahkan di bawah Bollinger Band bawah dan ditutup di atas EMA 5 hari, kedudukan panjang dibuka. Di samping itu, apabila isyarat terbalik muncul, strategi menutup kedudukan semasa dan membuka kedudukan baru ke arah yang bertentangan. Strategi ini bertujuan untuk menangkap turun naik pasaran dan perubahan trend dengan menggunakan Bollinger Bands untuk mengukur tahap harga relatif dan EMA sebagai penapis trend untuk menjana isyarat perdagangan.
Dengan menggabungkan Bollinger Bands dan EMA, strategi ini dapat menangkap peluang trend dan turun naik dengan berkesan, sesuai untuk strategi perdagangan jangka menengah hingga panjang. Walau bagaimanapun, perhatian harus diberikan kepada pengoptimuman parameter, kawalan kedudukan, dan pengurusan risiko. Ia juga harus digabungkan dengan penunjuk teknikal lain dan analisis asas untuk prestasi yang lebih baik. Prestasi strategi mungkin dipengaruhi oleh keadaan pasaran dan memerlukan penyesuaian dan pengoptimuman berdasarkan situasi sebenar.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands and EMA Strategy", overlay=true) // Define the Bollinger Bands length = input.int(20, title="BB Length") src = input(close, title="BB Source") mult = input.float(2.0, title="BB Multiplier") basis = ta.sma(src, length) dev = mult * ta.stdev(src, length) upper = basis + dev lower = basis - dev // Plot Bollinger Bands plot(upper, "Upper Band", color=color.red) plot(lower, "Lower Band", color=color.green) plot(basis, "Middle Band", color=color.blue) // Use plot instead of hline for basis // Define the 5-period EMA ema5 = ta.ema(close, 5) // Plot the 5 EMA plot(ema5, "5 EMA", color=color.orange) // Generate signals var float entry_price = na var string trade_direction = "none" if (na(close[1])) trade_direction := "none" // Condition for entering a short trade if (open > upper and close < ema5) if (trade_direction != "short") strategy.entry("Short", strategy.short) entry_price := close trade_direction := "short" // Condition for entering a long trade if (open < lower and close > ema5) if (trade_direction != "long") strategy.entry("Long", strategy.long) entry_price := close trade_direction := "long" // Close short trade on a long signal if (trade_direction == "short" and open < lower and close > ema5) strategy.close("Short") strategy.entry("Long", strategy.long) entry_price := close trade_direction := "long" // Close long trade on a short signal if (trade_direction == "long" and open > upper and close < ema5) strategy.close("Long") strategy.entry("Short", strategy.short) entry_price := close trade_direction := "short" // Close trades when opposite signal is generated if (trade_direction == "long" and open > upper and close < ema5) strategy.close("Long") trade_direction := "none" if (trade_direction == "short" and open < lower and close > ema5) strategy.close("Short") trade_direction := "none"