
Chiến lược này dựa trên các chỉ số Brin và ATR, lấy phạm vi biến động của giá thông qua Brin, sử dụng giá phá vỡ Brin và xuống đường như một tín hiệu đặt hàng, đồng thời sử dụng ATR như một dừng di chuyển, và cuối cùng với giá phá vỡ đường trung bình di chuyển đơn giản như một tín hiệu đặt hàng. Chiến lược này cố gắng nắm bắt tình trạng xu hướng, đặt hàng theo hướng xu hướng và đồng thời giữ vị trí yên khi xu hướng đảo ngược.
Chiến lược theo dõi xu hướng ATR của Brin có lợi thế theo dõi xu hướng, dừng lỗ kịp thời và dễ sử dụng. Tuy nhiên, cũng có rủi ro như nhạy cảm với tham số, thị trường rung động 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 bằng cách 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")