Chiến lược giảm xu hướng chỉ số BB

Tác giả:ChaoZhang, Ngày: 2023-12-06 14:43:39
Tags:

img

Tổng quan

Chiến lược này dựa trên chỉ số tỷ lệ phần trăm BB kết hợp với chỉ số RSI và MFI. Nó đưa ra các quyết định dài và ngắn bằng cách phát hiện sự đột phá giá của đường ray trên và dưới của Bollinger Bands, cùng với các tín hiệu bán quá mức / mua quá mức RSI và tín hiệu bán quá mức / mua quá mức MFI. Đây là một chiến lược giao dịch giảm xu hướng điển hình.

Chiến lược logic

  1. Tính toán Bollinger Band Percentage (BB%). BB% đại diện cho độ lệch chuẩn của giá tương đối với Bollinger middle band, đánh giá hướng thị trường thông qua kênh Bollinger.
  2. Kết hợp các chỉ số RSI và MFI để xác định điều kiện mua quá mức và bán quá mức. RSI so sánh lợi nhuận trung bình và lỗ trung bình trong một khoảng thời gian để xác định mức mua quá mức và bán quá mức. MFI so sánh khối lượng và giảm khối lượng để xác định mức mua quá mức và bán quá mức.
  3. Khi giá vượt qua đường ray Bollinger dưới lên, đi dài; khi giá vượt qua đường ray Bollinger trên xuống, đi ngắn. Đồng thời, sử dụng các tín hiệu bán quá / mua quá từ các chỉ số RSI và MFI để lọc.

Ưu điểm

  1. Giao dịch giảm xu hướng tránh xu hướng thị trường và giảm biến động lợi nhuận.
  2. Sự kết hợp của nhiều chỉ số lọc tín hiệu và cải thiện độ chính xác quyết định.
  3. Các thiết lập được tham số hóa linh hoạt để điều chỉnh các đặc điểm rủi ro-lợi nhuận của chiến lược.
  4. Áp dụng cho các công cụ biến động cao như hàng hóa, ngoại hối, tiền điện tử, v.v.

Rủi ro và giải pháp

  1. Có khả năng cao của các tín hiệu sai từ Bollinger breakout, đòi hỏi sự kết hợp của nhiều chỉ số để lọc.
  2. Phán quyết tín hiệu đột phá đòi hỏi các tiêu chí được nới lỏng thích hợp để tránh bỏ lỡ những cơ hội tốt.
  3. Điều chỉnh các thiết lập tham số để kiểm soát rủi ro, chẳng hạn như kích thước vị trí, nâng đường dừng lỗ, v.v.

Hướng dẫn tối ưu hóa

  1. Bao gồm các cơ chế dừng lỗ dựa trên biến động như chỉ số ATR.
  2. Đưa ra các mô hình học máy để hỗ trợ đánh giá chất lượng tín hiệu đột phá.
  3. Tối ưu hóa các cơ chế lựa chọn công cụ để điều chỉnh năng động các công cụ tham gia.
  4. Bao gồm nhiều yếu tố như chỉ số tâm lý, tin tức, v.v. để cải thiện khuôn khổ quyết định.

Kết luận

Chiến lược này chủ yếu được áp dụng cho các công cụ không có xu hướng biến động cao. Nó thực hiện giao dịch giảm xu hướng thông qua các kết hợp kênh Bollinger và chỉ số. Đặc điểm rủi ro-lợi nhuận có thể được kiểm soát bằng cách điều chỉnh các tham số. Các cải tiến hơn nữa có thể được thực hiện bằng cách giới thiệu nhiều chỉ số và mô hình phụ để tối ưu hóa chất lượng quyết định, do đó đạt được hiệu suất chiến lược tốt hơn.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-12-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "BB%/MFI/RSI", shorttitle = "BB%/MFI/RSI", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day")

source = hlc3
length = input(14, minval=1), mult = input(2.0, minval=0.001, maxval=50), bblength = input(50, minval=1, title="BB Period")
DrawRSI_f=input(true, title="Draw RSI?", type=bool)
DrawMFI_f=input(false, title="Draw MFI?", type=bool)
HighlightBreaches=input(true, title="Highlight Oversold/Overbought?", type=bool)

DrawMFI = (not DrawMFI_f) and (not DrawRSI_f) ? true : DrawMFI_f
DrawRSI = (DrawMFI_f and DrawRSI_f) ? false : DrawRSI_f
// RSI
rsi_s = DrawRSI ? rsi(source, length) : na
plot(DrawRSI ? rsi_s : na, color=maroon, linewidth=2)

// MFI
upper_s = DrawMFI ? sum(volume * (change(source) <= 0 ? 0 : source), length) : na
lower_s = DrawMFI ? sum(volume * (change(source) >= 0 ? 0 : source), length) : na
mf = DrawMFI ? rsi(upper_s, lower_s) : na
plot(DrawMFI ? mf : na, color=green, linewidth=2)

// Draw BB on indices
bb_s = DrawRSI ? rsi_s : DrawMFI ? mf : na
basis = sma(bb_s, length)
dev = mult * stdev(bb_s, bblength)
upper = basis + dev
lower = basis - dev
plot(basis, color=red)
p1 = plot(upper, color=blue)
p2 = plot(lower, color=blue)
fill(p1,p2, blue)

b_color = (bb_s > upper) ? red : (bb_s < lower) ? lime : na
bgcolor(HighlightBreaches ? b_color : na, transp = 0)

//Signals
up = bb_s < lower and close < open
dn = bb_s > upper and close > open
size = strategy.position_size
lp = size > 0 and close > open
sp = size < 0 and close < open
exit = (up == false and dn == false) and (lp or sp)

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Thêm nữa