Chiến lược đảo ngược xu hướng dao động kênh Bollinger Band


Ngày tạo: 2023-10-31 14:30:45 sửa đổi lần cuối: 2023-10-31 14:30:45
sao chép: 0 Số nhấp chuột: 664
1
tập trung vào
1617
Người theo dõi

Chiến lược đảo ngược xu hướng dao động kênh Bollinger Band

Tổng quan

Đây là một chiến lược xu hướng biến động đảo ngược dựa trên kênh Brin. Nó sử dụng kênh Brin lên xuống như một xu hướng và tìm kiếm cơ hội quay trở lại khi giá gần biên giới kênh.

Nguyên tắc chiến lược

Chiến lược này sử dụng chỉ số Brin Belt làm chỉ số kỹ thuật chính. Brin Belt được tạo thành từ đường trung bình di chuyển n ngày và phạm vi biến động lên xuống của nó, Brin Belt lên đường = đường trung bình di chuyển n ngày + m × n ngày chênh lệch tiêu chuẩn, Brin Belt xuống đường = đường trung bình di chuyển n ngày - m × n ngày chênh lệch tiêu chuẩn.

Khi giá gần lên đường, nó cho thấy nó đang trong xu hướng tăng, nhưng có thể chạm đỉnh đảo ngược; khi giá gần xuống đường, nó cho thấy nó đang trong xu hướng giảm, nhưng có thể chạm đáy đảo ngược. Tại thời điểm này, nếu phá vỡ thành công đường dây Brin, nó có thể bắt đầu đảo ngược.

Các quy tắc giao dịch cụ thể cho chiến lược này là:

  1. Khi giá đóng cửa lớn hơn giá Brin lên đường ray, nhập thêm; khi giá đóng cửa nhỏ hơn giá Brin xuống đường ray, nhập trần.

  2. Hạn chế dừng lỗ bằng đường trung bình di chuyển n ngày. Hạn chế dừng lỗ khi phá vỡ đường trung bình n ngày dưới giá đóng cửa nhiều đơn; Hạn chế dừng lỗ khi phá vỡ đường trung bình n ngày trên giá đóng cửa đơn trống.

  3. Các giao dịch được thực hiện với số lượng giao dịch cố định.

  4. Sử dụng phương pháp quản lý quỹ tỷ lệ cố định, thiết lập tỷ lệ thu nhập và lỗ cố định và tỷ lệ điều chỉnh đơn đặt hàng. Khi đạt được lợi nhuận tỷ lệ cố định, tăng vị trí theo tỷ lệ cố định và giảm vị trí khi thua lỗ.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Sử dụng BRI để xác định xu hướng, sử dụng chiến lược giao dịch ngược, vào vào thời điểm giá có thể đảo ngược, tránh hầu hết các cú sốc và tăng tỷ lệ thắng.

  2. Đường trung bình di chuyển là một tín hiệu dừng chân đáng tin cậy, có thể khóa phần lớn lợi nhuận.

  3. Chiến lược khối lượng giao dịch cố định rất đơn giản, không cần tính toán phức tạp.

  4. Chiến lược quản lý vốn tỷ lệ cố định có thể mở rộng lợi nhuận và kiểm soát rủi ro bằng cách điều chỉnh vị trí.

Phân tích rủi ro

Chiến lược này cũng có những rủi ro:

  1. Có khả năng các phán đoán của Binance tạo ra tín hiệu sai, có thể làm cho một lỗ hổng trong xu hướng.

  2. Sự chậm trễ của đường trung bình di chuyển có thể gây ra sự dừng lại không đầy đủ.

  3. Số lượng giao dịch cố định không thể điều chỉnh vị trí theo tình hình thị trường, có vấn đề về vị trí quá lớn quá nhỏ.

  4. Phương pháp quản lý tài chính tỷ lệ cố định mở rộng vị thế lớn hơn, có thể dẫn đến tổn thất mở rộng.

Phản ứng: Tối ưu hóa các tham số Brin, tăng độ chính xác tín hiệu; kết hợp với các chỉ số khác để đánh giá xu hướng; thu nhỏ kích thước vị trí cố định thích hợp; giảm tỷ lệ điều chỉnh vị trí quản lý quỹ tỷ lệ cố định.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tối ưu hóa các tham số của dải Brin, chẳng hạn như điều chỉnh giá trị n và m, để cải thiện độ chính xác của phán đoán dải Brin.

  2. Thêm các chỉ số khác, như MACD, KD, v.v., để tránh tín hiệu sai của Brin.

  3. Điều chỉnh khối lượng giao dịch cố định thành khối lượng giao dịch động, điều chỉnh vị trí linh hoạt theo tình hình thị trường.

  4. Giảm tỷ lệ điều chỉnh vị thế của luật quản lý quỹ tỷ lệ cố định, tối ưu hóa đường cong vốn.

  5. Thêm các chiến lược dừng lỗ, chẳng hạn như dừng di chuyển, dừng phá vỡ khoảng, để kiểm soát rủi ro hơn nữa.

  6. Tối ưu hóa tham số, tự động tối ưu hóa các tham số, tìm các tham số tốt nhất để tối ưu hóa chiến lược.

Tóm tắt

Chiến lược tổng thể là một chiến lược đảo ngược Bollinger Bands điển hình hơn. Nó sử dụng Bollinger Bands để xác định điểm đảo ngược xu hướng, kết hợp với thiết lập trung bình di chuyển để dừng lỗ, khối lượng giao dịch cố định và kiểm soát rủi ro quản lý quỹ tỷ lệ cố định. So với chiến lược Bollinger Bands truyền thống, chiến lược này là một chiến lược đảo ngược, về mặt lý thuyết có thể tránh được một số chấn động và nâng cao tỷ lệ lợi nhuận.

Mã nguồn chiến lược
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
basePeriod: 15m
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/
// © gsanson66


//This strategy uses the well-known Bollinger Bands Indicator
//@version=5
strategy("BOLLINGER BANDS BACKTESTING", shorttitle="BB BACKTESTING", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18)


//----------------------------------------FUNCTIONS---------------------------------------//

//@function Displays text passed to `txt` when called.
debugLabel(txt, color) =>
    label.new(bar_index, high, text = txt, color=color, style = label.style_label_lower_right, textcolor = color.black, size = size.small)

//@function which looks if the close date of the current bar falls inside the date range
inBacktestPeriod(start, end) => (time >= start) and (time <= end)


//---------------------------------------USER INPUTS--------------------------------------//

//Technical parameters
bbLength = input.int(defval=20, minval=1, title="BB Length", group="Technical Parameters")
mult = input.float(defval=2, minval=0.1, title="Standard Deviation Multipler", group="Technical Parameters")
smaLength = input.int(defval=20, minval=1, title="SMA Exit Signal Length", group="Technical Parameters")
//Money Management
fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management")
increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management")
//Backtesting period
startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period")
endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period")


//----------------------------------VARIABLES INITIALISATION-----------------------------//
strategy.initial_capital = 50000
//Exit SMA
smaExit = ta.sma(close, smaLength)
//BB Calculation
basis = ta.sma(close, bbLength)
dev = mult * ta.stdev(close, bbLength)
upperBB = basis + dev
lowerBB = basis - dev
//Money management
equity = strategy.equity - strategy.openprofit
var float capital_ref = strategy.initial_capital
var float cashOrder = strategy.initial_capital * 0.95
//Backtesting period
bool inRange = na


//------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------//

//Checking if the date belong to the range
inRange := true

//Checking performances of the strategy
if equity > capital_ref + fixedRatio
    spread = (equity - capital_ref)/fixedRatio
    nb_level = int(spread)
    increasingOrder = nb_level * increasingOrderAmount
    cashOrder := cashOrder + increasingOrder
    capital_ref := capital_ref + nb_level*fixedRatio
if equity < capital_ref - fixedRatio
    spread = (capital_ref - equity)/fixedRatio
    nb_level = int(spread)
    decreasingOrder = nb_level * increasingOrderAmount
    cashOrder := cashOrder - decreasingOrder
    capital_ref := capital_ref - nb_level*fixedRatio

//Checking if we close all trades in case where we exit the backtesting period
if strategy.position_size!=0 and not inRange
    strategy.close_all()
    debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116))


//-----------------------------------EXIT SIGNAL------------------------------//

if strategy.position_size > 0 and close < smaExit
    strategy.close("Long")
if strategy.position_size < 0 and close > smaExit
    strategy.close("Short")


//----------------------------------LONG/SHORT CONDITION---------------------------//

//Long Condition
if close > upperBB and inRange
    qty = cashOrder/close
    strategy.entry("Long", strategy.long, qty)
//Short Condition
if close < lowerBB and inRange
    qty = cashOrder/close
    strategy.entry("Short", strategy.short, qty)


//---------------------------------PLOTTING ELEMENT----------------------------------//

plot(smaExit, color=color.orange)
upperBBPlot = plot(upperBB, color=color.blue)
lowerBBPlot = plot(lowerBB, color=color.blue)
fill(upperBBPlot, lowerBBPlot, title = "Background", color=strategy.position_size>0 ? color.rgb(0, 255, 0, 90) : strategy.position_size<0 ? color.rgb(255, 0, 0, 90) : color.rgb(33, 150, 243, 95))