Chiến lược này tính toán chỉ số PB trung bình và dải Bollinger để xác định mối quan hệ chéo vàng và chéo chết giữa chỉ số PB và đường ray trên và dưới của dải Bollinger. Nó tạo ra tín hiệu mua khi chỉ số PB phá vỡ trên đường ray giữa hoặc đường ray dưới của dải Bollinger, và tạo ra tín hiệu bán khi chỉ số PB phá vỡ dưới đường ray giữa hoặc đường ray trên của dải Bollinger.
Chỉ số trung tâm của chiến lược là chỉ số PB trung bình. Chỉ số PB trung bình kết hợp sự ổn định của hệ thống trung bình động và độ nhạy của chỉ số PB. Nó sử dụng sự khác biệt giữa trung bình động nhanh và chậm của các chu kỳ khác nhau để thể hiện xu hướng thay đổi giá để xác định xu hướng dài và ngắn.
Bollinger Band là một chỉ số giá cổ phiếu được sử dụng để xác định các điều kiện mua quá mức và bán quá mức của giá cổ phiếu. Chỉ số Bollinger Band bao gồm ba đường cong: đường ray giữa, đường ray trên và đường ray dưới.
Tóm lại, chiến lược này sử dụng thông minh chỉ số PB trung bình để xác định xu hướng tăng hoặc giảm của giá cổ phiếu, và các dải Bollinger như một chỉ số phụ để xác định điều kiện mua quá mức và bán quá mức, để tìm tín hiệu giao dịch từ mối quan hệ giữa hai chỉ số.
Những lợi thế chính của chiến lược này là:
Những rủi ro chính của chiến lược này là:
Để giải quyết các rủi ro trên, các phương pháp như tối ưu hóa cài đặt tham số, dừng lỗ nghiêm ngặt, xem xét các yếu tố vĩ mô, giám sát thủ công có thể được sử dụng để giảm thiểu rủi ro.
Các hướng tối ưu hóa cho chiến lược này bao gồm:
Với chỉ số PB trung bình là cốt lõi của nó và Bollinger Bands để hỗ trợ xác định tín hiệu giao dịch, nó có logic đơn giản, độ nhạy cao và kết quả backtest tốt. Bằng cách tiếp tục tối ưu hóa các thiết lập tham số, thêm các chỉ số hỗ trợ khác, thực hiện stop loss nghiêm ngặt vv, lợi nhuận và sự ổn định của chiến lược có thể được cải thiện hơn nữa. Nó đáng để xác minh trong giao dịch trực tiếp và ứng dụng.
/*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())