Chiến lược này dựa trên Bollinger Bands và chỉ số ATR. Nó nắm bắt sự biến động giá bằng cách sử dụng Bollinger Bands, sử dụng sự đột phá giá trên hoặc dưới các dải như là tín hiệu đầu vào và sử dụng ATR như là một lệnh dừng lỗ. Chiến lược này đóng các vị trí khi giá vượt qua đường trung bình di chuyển đơn giản. Nó nhằm mục đích nắm bắt thị trường xu hướng, nhập các vị trí theo hướng xu hướng và nhanh chóng đóng các vị trí khi xu hướng đảo ngược.
Chiến lược Bollinger Band ATR Trend Following nắm bắt các thị trường xu hướng bằng cách sử dụng Bollinger Bands và chỉ số ATR. Nó có những lợi thế theo xu hướng, dừng lỗ kịp thời và đơn giản. Tuy nhiên, nó cũng phải đối mặt với những rủi ro như độ nhạy của tham số, thị trường hỗn loạn và đảo ngược xu hướng. Hiệu suất của chiến lược có thể được tối ưu hóa hơn nữa thông qua tối ưu hóa tham số, thêm bộ lọc và quản lý vị trí.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands and ATR Strategy", overlay=true) // Veri Çekme symbol = "AAPL" timeframe = "D" src = close // Bollinger Bantları Hesaplama len = 20 mult = 2 sum1 = 0.0, sum2 = 0.0 for i = 0 to len - 1 sum1 += src[i] basis = sum1 / len for i = 0 to len - 1 diff = src[i] - basis sum2 += diff * diff dev = math.sqrt(sum2 / len) upper_band = basis + dev * mult lower_band = basis - dev * mult // ATR Hesaplama atr_period = input(10, title="ATR Period") atr_value = 0.0 for i = 0 to atr_period - 1 atr_value += math.abs(src[i] - src[i + 1]) atr_value /= atr_period loss = input(1, title="Key Value (Sensitivity)") atr_trailing_stop = src[1] if src > atr_trailing_stop[1] atr_trailing_stop := math.max(atr_trailing_stop[1], src - loss * atr_value) else if src < atr_trailing_stop[1] atr_trailing_stop := math.min(atr_trailing_stop[1], src + loss * atr_value) else atr_trailing_stop := src - loss * atr_value // Sinyal Üretme long_condition = src < lower_band and src[1] >= lower_band[1] short_condition = src > upper_band and src[1] <= upper_band[1] close_long = src > basis close_short = src < basis buy_signal = src > atr_trailing_stop[1] and src[1] <= atr_trailing_stop[1] sell_signal = src < atr_trailing_stop[1] and src[1] >= atr_trailing_stop[1] if (long_condition) strategy.entry("Long", strategy.long, comment="Long Signal") if (short_condition) strategy.entry("Short", strategy.short, comment="Short Signal") if (close_long) strategy.close("Long", comment="Close Long") if (close_short) strategy.close("Short", comment="Close Short") if (buy_signal) strategy.entry("Long", strategy.long, comment="Buy Signal") if (sell_signal) strategy.entry("Short", strategy.short, comment="Sell Signal") // Çizim plot(upper_band, color=#0000FF, linewidth=2, title="Upper Band") plot(lower_band, color=#0000FF, linewidth=2, title="Lower Band") plot(basis, color=#808080, linewidth=2, title="SMA") plot(atr_trailing_stop, color=#FFA500, linewidth=2, title="ATR Trailing Stop") plot(src, color=#FFA500, linewidth=2, title="Price") // Sinyal İşaretleri plotshape(long_condition, style=shape.arrowup, color=#00FF00, location=location.belowbar, size=size.small, title="Long Signal") plotshape(short_condition, style=shape.arrowdown, color=#FF0000, location=location.abovebar, size=size.small, title="Short Signal") plotshape(buy_signal, style=shape.diamond, color=#00FF00, location=location.belowbar, size=size.small, title="Buy Signal") plotshape(sell_signal, style=shape.diamond, color=#FF0000, location=location.abovebar, size=size.small, title="Sell Signal")