
Chiến lược này kết hợp các dải Bollinger Bands và đường trung bình di chuyển chỉ số 5 ngày (EMA 5 ngày) để tạo ra tín hiệu giao dịch. Khi giá vượt quá dải Bollinger và đóng cửa dưới 5 ngày EMA, mở vị trí mở đầu; khi giá phá vỡ dải Bollinger và đóng cửa trên 5 ngày EMA, mở nhiều vị trí đầu. Đồng thời, khi có tín hiệu đảo ngược, chiến lược sẽ xóa vị trí hiện tại và mở một vị trí đảo ngược mới.
Chiến lược này có thể nắm bắt cơ hội xu hướng và cơ hội biến động hiệu quả hơn, phù hợp với chiến lược giao dịch trong chu kỳ trung bình và dài, thông qua sự kết hợp của Brin và EMA. Tuy nhiên, cần chú ý đến việc tối ưu hóa các tham số, kiểm soát vị trí và quản lý rủi ro, và kết hợp với các chỉ số kỹ thuật khác và phân tích cơ bản, để có thể sử dụng hiệu quả của chiến lược tốt hơn. Hiệu suất của chiến lược có thể bị ảnh hưởng bởi tình trạng thị trường, cần phải điều chỉnh và tối ưu hóa theo tình hình thực tế.
/*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"