
Chiến lược này là một chiến lược giao dịch định lượng dựa trên đợt đột phá của Brin, sử dụng đường lên của 3 lần chênh lệch chuẩn và đường xuống của 1 lần chênh lệch chuẩn, đồng thời kết hợp với đường trung bình di chuyển 100 ngày làm đường trung tâm. Chiến lược này chủ yếu để nắm bắt xu hướng dài hạn bằng cách phát hiện giá phá vỡ đường lên và sử dụng đường xuống như một tín hiệu dừng.
Nguyên tắc cốt lõi của chiến lược dựa trên đặc tính thống kê của Brin Belt. 3 lần chênh lệch tiêu chuẩn trên đường đua, có nghĩa là trong giả định phân phối bình thường, xác suất giá vượt qua đường đua chỉ là 0,15%, do đó, khi có sự phá vỡ, thường có xu hướng hình thành.
Đây là một chiến lược theo dõi xu hướng được thiết kế hợp lý, logic và rõ ràng. Với tính năng theo dõi xu hướng của Brinband và tính năng theo dõi xu hướng của moving average, nó có thể nắm bắt hiệu quả các cơ hội đột phá quan trọng trong thị trường. Mặc dù có một số rủi ro rút lui, nhưng với thiết lập dừng lỗ và kiểm soát rủi ro hợp lý, nó vẫn có giá trị thực tế tốt.
/*backtest
start: 2024-11-12 00:00:00
end: 2024-12-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © MounirTrades007
// @version=6
strategy("Bollinger Bands", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=200)
// Get user input
var g_bb = "Bollinger Band Settings"
upperBandSD = input.float(title="Upper Band Std Dev", defval=3.0, tooltip="Upper band's standard deviation multiplier", group=g_bb)
lowerBandSD = input.float(title="Lower Band Std Dev", defval=1.0, tooltip="Lower band's standard deviation multiplier", group=g_bb)
maPeriod = input.int(title="Middle Band MA Length", defval=100, tooltip="Middle band's SMA period length", group=g_bb)
var g_tester = "Backtester Settings"
drawTester = input.bool(title="Draw Backtester", defval=true, group=g_tester, tooltip="Turn on/off inbuilt backtester display")
// Get Bollinger Bands
[bbIgnore1, bbHigh, bbIgnore2] = ta.bb(close, maPeriod, upperBandSD)
[bbMid, bbIgnore3, bbLow] = ta.bb(close, maPeriod, lowerBandSD)
// Prepare trade persistent variables
drawEntry = false
drawExit = false
// Detect bollinger breakout
if close > bbHigh and barstate.isconfirmed and strategy.position_size == 0
drawEntry := true
strategy.entry(id="Trade", direction=strategy.long)
alert("Bollinger Breakout Detected for " + syminfo.ticker, alert.freq_once_per_bar_close)
// Detect bollinger sell signal
if close < bbLow and barstate.isconfirmed and strategy.position_size != 0
drawExit := true
strategy.close(id="Trade")
alert("Bollinger Exit detected for " + syminfo.ticker, alert.freq_once_per_bar_close)
// Draw bollinger bands
plot(bbMid, color=color.blue, title="Middle SMA")
plot(bbHigh, color=color.green, title="Upper Band")
plot(bbLow, color=color.red, title="Lower Band")
// Draw signals
plotshape(drawEntry, style=shape.triangleup, color=color.green, location=location.belowbar, size=size.normal, title="Buy Signal")
plotshape(drawExit, style=shape.xcross, color=color.red, location=location.belowbar, size=size.normal, title="Sell Signal")
// // =============================================================================
// // START BACKTEST CODE
// // =============================================================================
// // Prepare stats table
// var table testTable = table.new(position.top_right, 2, 2, border_width=1)
// f_fillCell(_table, _column, _row, _title, _value, _bgcolor, _txtcolor) =>
// _cellText = _title + "\n" + _value
// table.cell(_table, _column, _row, _cellText, bgcolor=_bgcolor, text_color=_txtcolor)
// // Draw stats table
// var bgcolor = color.black
// if barstate.islastconfirmedhistory
// if drawTester
// dollarReturn = strategy.equity - strategy.initial_capital
// f_fillCell(testTable, 0, 0, "Total Trades:", str.tostring(strategy.closedtrades), bgcolor, color.white)
// f_fillCell(testTable, 0, 1, "Win Rate:", str.tostring(strategy.wintrades / strategy.closedtrades * 100, "##.##") + "%", bgcolor, color.white)
// f_fillCell(testTable, 1, 0, "Equity:", "$" + str.tostring(strategy.equity, "###,###.##"), bgcolor, color.white)
// f_fillCell(testTable, 1, 1, "Return:", str.tostring((strategy.netprofit / strategy.initial_capital) * 100, "##.##") + "%", dollarReturn > 0 ? color.green : color.red, color.white)
// // =============================================================================
// // END BACKTEST CODE
// // =============================================================================