Chiến lược chỉ báo PB trung bình cắt dải Bollinger


Ngày tạo: 2024-01-17 17:10:53 sửa đổi lần cuối: 2024-01-17 17:10:53
sao chép: 0 Số nhấp chuột: 661
1
tập trung vào
1617
Người theo dõi

Chiến lược chỉ báo PB trung bình cắt dải Bollinger

Tổng quan

Chiến lược này tạo ra tín hiệu mua và bán bằng cách tính toán các chỉ số PB trung bình và Brin đan xuống đường, để đánh giá mối quan hệ giữa chỉ số PB và Brin đan xuống đường, tạo ra tín hiệu mua. Khi chỉ số PB đi lên, nó sẽ phá vỡ đường trung tâm của Brin hoặc xuống đường; khi chỉ số PB đi xuống, nó sẽ phá vỡ đường trung tâm của Brin hoặc lên đường.

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

Chỉ số trung bình PB là chỉ số trung bình của chiến lược. Chỉ số trung bình PB kết hợp sự ổn định của hệ thống đường trung bình và độ nhạy của chỉ số PB, nó sử dụng sự khác biệt giữa hai đường trung bình khác nhau trong thời gian để thể hiện xu hướng thay đổi giá, do đó đánh giá xem tình trạng trống.

Chiến lược này cũng sử dụng chỉ số Brin để xác định giá cổ phiếu quá mua quá bán. Chỉ số Brin bao gồm ba đường cong trung đạo, trên đường và dưới đường. Đường trung đạo là đường trung bình di chuyển n ngày; trên và dưới đường được tính bằng trung đạo và biến động lịch sử.

Tóm lại, chiến lược này sử dụng các chỉ số PB trung bình để xác định xu hướng giá cổ phiếu tăng hoặc giảm, và hỗ trợ các chỉ số Bollinger Bands để xác định tình trạng quá mua quá bán, tìm kiếm điểm mua và bán trong mối quan hệ chỉ số kết hợp giữa cả hai, thuộc về chiến lược giao dịch chỉ số số số điển hình.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Sử dụng chỉ số PB trung bình để xác định xu hướng giá cổ phiếu, nhạy cảm cao
  2. Thêm vào đó, chỉ số Brin Belt được sử dụng để xác định các điểm quá mua và quá bán, giúp xác định chính xác các điểm mua và bán.
  3. Chiến lược hoạt động đơn giản, dễ thực hiện
  4. Dữ liệu phản hồi cho thấy chiến lược này mang lại lợi ích đáng kể.

Phân tích rủi ro

Những rủi ro chính của chiến lược này là:

  1. Chỉ số PB trung bình và chỉ số Blink đều dựa trên tính toán dữ liệu lịch sử, dễ tạo ra tín hiệu sai khi giá cổ phiếu biến động mạnh
  2. Chỉ số PB và Blink đều nhạy cảm với thiết lập tham số, thiết lập không đúng có thể dẫn đến quá nhiều giao dịch sai
  3. Trong thời gian thực hiện chiến lược, thay đổi môi trường vĩ mô có thể có ảnh hưởng lớn đến giá cổ phiếu, chẳng hạn như khủng hoảng kinh tế, thay đổi chính sách, v.v., có thể dẫn đến chiến lược không hiệu quả

Đối với các rủi ro trên, có thể tránh rủi ro bằng cách thiết lập tham số tối ưu hóa, dừng lỗ nghiêm ngặt, xem xét các yếu tố môi trường lớn và giám sát nhân tạo.

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

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

  1. Tối ưu hóa các tham số của chỉ số PB trung bình và dải Brin để tìm các tham số kết hợp tốt nhất
  2. Thêm các bộ lọc cho các chỉ số khác, như MACD, KDJ, để tăng hiệu quả chiến lược
  3. Tăng cơ chế ngăn chặn tổn thất, kiểm soát hiệu quả tổn thất đơn lẻ
  4. Kết hợp với các chỉ số chu kỳ thời gian lớn hơn để đánh giá xu hướng lớn và tránh giao dịch ngược

Tóm tắt

Chiến lược này hoạt động hiệu quả tốt, với chỉ số PB trung bình là cốt lõi, được hỗ trợ bởi băng Brin để xác định điểm mua và bán, hoạt động đơn giản, nhạy cảm cao, phản hồi hiệu suất tốt. Bằng cách liên tục tối ưu hóa các tham số thiết lập, thêm các chỉ số hỗ trợ, các biện pháp ngăn chặn nghiêm ngặt, có thể làm tăng thêm lợi nhuận và ổn định của chiến lược, đáng để thử nghiệm và ứng dụng.

Mã nguồn chiến lược
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BandPass EOS", overlay=false, initial_capital = 1000)

src = input(close, "Source", input.source)
Period1 = input(41, "Fast Period", input.integer)
Period2 = input(54, "Slow Period", input.integer)
showBG = input(false, "Show crosses on background?", input.bool)
UseReversalStop = input(true, "Use additional triggers?", input.bool)

//Super Passband Filter
a1 = 0.0
a2 = 0.0
PB = 0.0
RMS = 0.0
if bar_index > Period1
    a1 := 5 / Period1
    a2 := 5 / Period2
    PB := (a1 - a2) * src + (a2 * (1 - a1) - a1 * (1 - a2)) * src[1] + 
       (1 - a1 + 1 - a2) * nz(PB[1]) - (1 - a1) * (1 - a2) * nz(PB[2])
    for i = 0 to 49 by 1
        RMS := RMS + PB[i] * PB[i]
        RMS
    RMS := sqrt(RMS / 40)
    RMS
z = 0

buy = PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z)
sell = PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z)
signal = buy ? 1 : sell ? -1 : 0
bg = buy ? color.green : sell ? color.red : color.white
bg := showBG ? bg : na
upperFill = PB>RMS ? color.lime : na
lowerFill = PB<-RMS ? color.red : na

p1 = plot(PB,"PB",color.red)
p2 = plot(RMS,"+RMS",color.blue)
p3 = plot(-RMS,"-RMS",color.blue)
bgcolor(bg)
fill(p1,p2,upperFill)
fill(p1,p3,lowerFill)
hline(0)



//PERIOD
testStartYear = input(2018, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true
    
lcolor = PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z)
scolor = PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z)

c1 = (PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z))
c2 = (PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z))

plot (c1 ? PB : na, style = plot.style_circles, color = color.red, linewidth = 3)
plot (c2 ? PB : na, style = plot.style_circles, color = color.green, linewidth = 3)

if (PB > PB [5] and crossover(PB, -RMS) or PB > PB [5] and crossover (PB, RMS) or PB > PB [5] and crossover (PB, z))
    strategy.entry("long", strategy.long, when = testPeriod())


if (PB < PB [5] and crossunder(PB, RMS) or PB < PB [5] and crossunder (PB, -RMS) or PB < PB [5] and crossunder (PB, z))
    strategy.entry("short", strategy.short, when = testPeriod())