Chiến lược Bollinger Bands Breakout nhiều khung thời gian bao gồm RSI

Tác giả:ChaoZhang, Ngày: 2024-02-21 13:59:31
Tags:

img

Tổng quan

Chiến lược này kết hợp Bollinger Bands, chỉ số RSI và phân tích nhiều khung thời gian để nắm bắt hướng của xu hướng trung hạn đến dài hạn. Nó xác định các điểm đảo ngược xu hướng thông qua Bollinger Bands breakouts kết hợp với các tín hiệu mua quá mức / bán quá mức RSI để nhập vào rủi ro thấp. Trong khi đó, các khung thời gian cao hơn được áp dụng để lọc các thị trường khác nhau và tránh bị mắc kẹt.

Chiến lược logic

  1. Sử dụng Bollinger Bands để xác định giá đột phá. Dải giữa là Mức trung bình động của giá đóng trong N ngày. Dải trên và dưới được đặt ở khoảng cách một độ lệch chuẩn ở hai bên của dải giữa. Bước trên dải trên báo hiệu tăng trong khi bước dưới dải dưới báo hiệu giảm.

  2. Kết hợp chỉ số RSI để xác định mức mua quá mức / bán quá mức. Chỉ số RSI trên 70 cho thấy điều kiện mua quá mức trong khi dưới 30 cho thấy điều kiện bán quá mức. Một sự đột phá tăng trên 70 xác nhận sự suy yếu của động lực tăng. Một sự đột phá giảm dưới 30 xác nhận sự suy yếu của động lực giảm.

  3. Sử dụng khung thời gian cao hơn để lọc các dấu hiệu đột phá giả. Khi tín hiệu đột phá xuất hiện trên khung thời gian hàng ngày, nó yêu cầu xác nhận bổ sung từ các khung thời gian 4 giờ hoặc cao hơn để tránh bị mắc kẹt.

Ưu điểm

  1. Tích hợp nhiều chỉ số tăng cường tính ổn định và lợi nhuận của chiến lược.

  2. Việc bao gồm chỉ số RSI làm giảm thiểu tổn thất từ các vụ phá vỡ sai.

  3. Phân tích nhiều khung thời gian có hiệu quả lọc ra các thị trường khác nhau và ngăn chặn bị mắc kẹt.

  4. Xác định tín hiệu đột phá tối ưu (bước đột phá trên 3 thanh liên tiếp) đảm bảo sự trưởng thành của xu hướng trước khi nhập cảnh.

  5. Chỉ số xoáy xác định hướng xu hướng mới bắt đầu sớm.

Rủi ro

  1. Bollinger Bands không đầy đủ dẫn đến tín hiệu mua quá mức / bán quá mức sai.

  2. Các giá trị tham số RSI hợp lý phải được xác định riêng cho các sản phẩm khác nhau.

  3. Các tín hiệu đột phá có thể trở thành đột phá sai.

  4. Duy trì mức ký quỹ dừng lỗ đủ, ví dụ: 3 lần ATR.

Cơ hội gia tăng

  1. Áp dụng thuật toán học máy để tự động điều chỉnh các thông số cho Bollinger Bands và RSI.

  2. Tối ưu hóa mức dừng lỗ dựa trên các chỉ số biến động.

  3. Tích hợp mô-đun định kích thước vị trí để hiệu chỉnh các khoản rủi ro dựa trên các điều kiện thị trường thay đổi.

  4. Hạn chế lỗ tối đa cho mỗi giao dịch dựa trên các nguyên tắc quản lý tiền.

  5. Đánh giá sự ổn định tín hiệu trên các phiên giao dịch khác nhau.

Kết luận

Chiến lược này xem xét toàn diện việc xác định xu hướng, điều kiện mua quá mức / bán quá mức và nhiều khung thời gian để kiểm soát rủi ro trong khi tìm kiếm thời gian đầu vào tối ưu để nắm bắt các xu hướng trung và dài hạn chất lượng cao cho các hồ sơ rủi ro-lợi nhuận hấp dẫn.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © Noway0utstorm
//@version=5
strategy(title='Vortex0.71.3 + bb 3bar breakout + rsi - close hit upper or lower', shorttitle='truongphuthinh', format=format.price, precision=4,overlay = true)

length = input(20, title="Length")
mult = input(2.0, title="Multiplier")
source = close

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)

upperBand = basis + dev
lowerBand = basis - dev

isClosedBar = ta.change(time("15"))

var bool closeAboveUpperBand = false
var bool closeBelowLowerBand = false


// Vortex Indicator Settings
period_ = input.int(14, title='Period', minval=2)

VMP = math.sum(math.abs(high - low[1]), period_)
VMM = math.sum(math.abs(low - high[1]), period_)
STR = math.sum(ta.atr(1), period_)
VIP = VMP / STR
VIM = VMM / STR

//
lengthrsi = input(14, title="RSI Length")
overboughtLevel = input(70, title="Overbought Level")
oversoldLevel = input(30, title="Oversold Level")

sourcersi = close
rsiValue = ta.rsi(sourcersi, lengthrsi)

shouldShort = rsiValue > overboughtLevel
shouldLong = rsiValue < oversoldLevel




if bool(isClosedBar[1]) and bool(isClosedBar[2]) and bool(isClosedBar[3])

    if close[1] > upperBand[1] and close[2] > upperBand[2] and close[3] > upperBand[3] and VIP > 1.25 and VIM < 0.7 and rsiValue > overboughtLevel
        strategy.entry("Short", strategy.short)
        closeAboveUpperBand := false  // Reset the condition when entering a new Short position
    if close[1] < lowerBand[1] and close[2] < lowerBand[2] and close[3] < lowerBand[3] and VIP < 0.7 and VIM > 1.25 and rsiValue < oversoldLevel
        strategy.entry("Long", strategy.long)
        closeBelowLowerBand := false  // Reset the condition when entering a new Long position



if strategy.position_size > 0  // Check if there is an open Long position
    closeAboveUpperBand := close > upperBand  // Update the condition based on close price
    if closeAboveUpperBand
        strategy.close("Long",disable_alert=true)  // Close the Long position if close price is above upper band

if strategy.position_size < 0  // Check if there is an open Short position
    closeBelowLowerBand := close < lowerBand  // Update the condition based on close price
    if closeBelowLowerBand
        strategy.close("Short",disable_alert=true)  // Close the Short position if close price is below lower band

// Plots
plot(basis, color=color.orange, title="Basis")
p1 = plot(upperBand, color=color.blue, title="Upper Band")
p2 = plot(lowerBand, color=color.blue, title="Lower Band")
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))

Thêm nữa