
Chiến lược khóa biến động băng thông rộng là một chiến lược phá vỡ đường dài dựa trên chỉ số Burin để xác định biến động của thị trường có giảm hay không. Khi thị trường đi vào giai đoạn xử lý biến động, Burin sẽ đi xuống và kết hợp, tại thời điểm này chúng tôi đánh giá là cơ hội để vào sân. Chúng tôi cũng kết hợp với chỉ số phạm vi biến động thực tế trung bình để xác nhận biến động giá giảm.
Chiến lược này chủ yếu dựa trên chỉ số Brin để xác định liệu giá có đi vào giai đoạn dao động thấp hay không. Đường đường trung tâm của Brin là đường trung bình di chuyển của giá đóng cửa, và đường trên và đường dưới là hai chênh lệch tiêu chuẩn của mỗi đường trung tâm di chuyển lên và xuống.
Để xác nhận thêm về sự biến động giảm, chúng tôi kiểm tra xem liệu giá trị ATR trung bình có xu hướng giảm hay không. Giá trị ATR trung bình giảm cũng là bằng chứng về biến động giảm. Khi hai điều kiện trên được đáp ứng cùng lúc, chúng tôi đánh giá rằng vùng Burin đã có sự kết hợp rõ ràng, đây là thời điểm mua tuyệt vời.
Sau khi mua, chúng tôi sẽ kích hoạt chiến lược dừng lỗ di động với hai lần giá trị ATR làm khoảng cách dừng lỗ. Điều này có thể kiểm soát lỗ hiệu quả.
Ưu điểm lớn nhất của chiến lược này là có thể xác định chính xác thị trường đi vào giai đoạn sắp xếp xung đột biến động thấp, do đó xác định thời gian mua tốt nhất. So với các chiến lược đường dài khác, chiến lược khóa xung đột băng thông rộng có tỷ lệ lợi nhuận cao hơn.
Thứ hai, chiến lược này cũng sử dụng dừng lỗ di động để chủ động kiểm soát rủi ro. Điều này cho phép giảm thiểu tối đa thiệt hại ngay cả khi tình hình không thuận lợi. Điều này là thiếu trong nhiều chiến lược dài dòng.
Rủi ro chính của chiến lược này là chỉ số Bollinger Bands không thể xác định chính xác 100% sự thay đổi trong biến động giá. Khi Bollinger Bands đánh giá sai biến động giảm, thời điểm mua của chúng ta có thể không thuận lợi.
Ngoài ra, thiết lập các tham số khác nhau trong chiến lược cũng có thể ảnh hưởng đến kết quả. Chúng ta cần phải tối ưu hóa các tham số bằng cách phản hồi rất nhiều để làm cho chiến lược trở nên vững chắc hơn.
Chúng ta có thể xem xét thêm các chỉ số khác để xác nhận chỉ số xu hướng cũng có dấu hiệu đảo chiều. Ví dụ, khi Bollinger Countertrend, đồng thời yêu cầu chênh lệch MACD đã bị chuyển tích cực, hoặc RSI đã được kiểm tra bởi vùng mua quá mức. Điều này có thể làm tăng thêm độ chính xác của thời gian mua.
Một hướng khác là thử nghiệm ảnh hưởng của các tham số khác nhau đến kết quả, chẳng hạn như các thiết lập như chu kỳ băng Boolean, chu kỳ ATR và nhân số dừng lỗ di động. Chúng tôi cần sử dụng tối ưu hóa từng bước để tìm ra sự kết hợp tham số tối ưu nhất.
Chiến lược khóa động kinh băng thông rộng sử dụng chỉ số Brin để xác định thời gian biến động giá giảm, sử dụng lệnh dừng di động để kiểm soát rủi ro hiệu quả, là một chiến lược phá vỡ đường dài tương đối ổn định. Chúng tôi vẫn cần tối ưu hóa các tham số và kết hợp các chỉ số khác để nâng cao sự ổn định của chiến lược.
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DojiEmoji
//@version=4
strategy("[KL] Bollinger Bands Consolidation Strategy",overlay=true,pyramiding=1)
// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("19 Apr 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }
// Indicator: BOLL bands {
BOLL_length = 20//input(20,title="Periods to lookback for BOLL and ATR calc. (default 20)")
BOLL_src = close
BOLL_center = sma(BOLL_src, BOLL_length)
BOLL_sDEV_x2 = 2 * stdev(BOLL_src, BOLL_length)
BOLL_upper = BOLL_center + BOLL_sDEV_x2
BOLL_lower = BOLL_center - BOLL_sDEV_x2
plot(BOLL_center, "Basis", color=#872323, offset = 0)
BOLL_p1 = plot(BOLL_upper, "Upper", color=color.navy, offset = 0, transp=50)
BOLL_p2 = plot(BOLL_lower, "Lower", color=color.navy, offset = 0, transp=50)
fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85)
// }
// ATR and volatility Indicator {
ATR_x2 = atr(BOLL_length) * 2 // multiplier aligns with BOLL
avg_volat = sma(ATR_x2, BOLL_length)
//}
// Trailing stop loss {
var entry_price = float(0)
var trailing_SL_buffer = float(0)
var stop_loss_price = float(0)
trail_profit_line_color = color.green
UPDATE_ATR_TSL = false
if strategy.position_size == 0 or not within_timeframe // make TSL line less visible
trail_profit_line_color := color.black
stop_loss_price := close - trailing_SL_buffer
else if strategy.position_size > 0
if UPDATE_ATR_TSL and ATR_x2 < trailing_SL_buffer
trailing_SL_buffer := ATR_x2
stop_loss_price := max(stop_loss_price, close[1] - trailing_SL_buffer)
plot(stop_loss_price,color=trail_profit_line_color)
// }
IGNORE_BOLL_SHAPE = false//input(false,title="Ignore BOLL (vs ATR) during entry (experimental)")
IGNORE_VOLATILITY = false///input(false,title="Ignore average ATR during entry (experimental)")
// Main:
if within_timeframe
// ENTRY:
if (ATR_x2 > BOLL_sDEV_x2 or IGNORE_BOLL_SHAPE) and (avg_volat < avg_volat[1] or IGNORE_VOLATILITY)
if strategy.position_size == 0
entry_price := close
trailing_SL_buffer := ATR_x2
stop_loss_price := close - ATR_x2
strategy.entry("Long",strategy.long, comment="enter")
if strategy.position_size > 0
strategy.entry("Long",strategy.long, comment="+")
// EXIT:
if strategy.position_size > 0
if low <= stop_loss_price
if close > entry_price
strategy.close("Long", comment="take profit")
else if low <= entry_price
strategy.close("Long", comment="stop loss")
if strategy.position_size == 0
entry_price := 0