Chiến lược này xây dựng một kênh giá dựa trên chỉ số Bollinger Bands và chỉ số Momentum Oscillating Moving Average, tạo ra tín hiệu giao dịch khi giá vượt qua ranh giới trên hoặc dưới của kênh. Bằng cách kết hợp khả năng thích nghi của Bollinger Bands và sự linh hoạt của các dao động cơ động, nó có thể phản ứng kịp thời với những thay đổi trong xu hướng thị trường.
Chiến lược này xây dựng một kênh giá bằng cách sử dụng Bollinger Middle Band và Momentum Oscillating Moving Average. Băng trung gian áp dụng Bollinger Middle Band 21 giai đoạn. Các băng phía trên và phía dưới kéo dài lên và xuống cho một phạm vi phần trăm tương ứng. Momentum Oscillating Moving Average kéo dài hoặc co lại gần mức mua quá mức hoặc bán quá mức dựa trên băng phía giữa. Khi giá vượt qua băng phía trên, đi dài. Khi giá vượt qua băng phía dưới, đi ngắn.
Cụ thể, dải giữa Bollinger được tính như sau:
Middle Band = Moving Average of N-period closing price
Dải trên và dải dưới được tính như sau:
Upper Band = Middle Band + WidthDev * N-period Bollinger standard deviation
Lower Band = Middle Band - WidthDev * N-period Bollinger standard deviation
Nơi WidthDev đại diện cho phạm vi phần trăm mở rộng lên và xuống.
Đường trung bình chuyển động dao động đà kéo dài hoặc co lại dựa trên dải giữa theo một số quy tắc nhất định. Khi thị trường trở nên mua quá nhiều hoặc bán quá nhiều, nó mở rộng xa hơn khỏi dải giữa để cung cấp nhiều cơ hội hơn để mua dài hoặc mua ngắn. Khi thị trường bình tĩnh, nó co lại hướng tới dải giữa.
Tóm lại, chiến lược này mô tả một kênh giá bằng cách sử dụng Bollinger Bands và xác định thời gian nhập bằng cách sử dụng Momentum Oscillating Moving Average, nhận ra giao dịch đột phá. Đi dài khi giá vượt lên từ dải Bollinger trên và đi ngắn khi giá vượt ra từ dải Bollinger dưới.
Phản ánh biến động thị trường Bollinger Bands có thể phản ánh biến động thị trường và thay đổi xu hướng trong thời gian thực.
Giảm tín hiệu sai Hiệu ứng kéo dài của Momentum Oscillating Moving Average có thể làm giảm hiệu quả các tín hiệu sai được tạo ra bởi Bollinger Bands. Bằng cách mở rộng chiều rộng của kênh BB và kéo dài thời gian giữ, lợi nhuận lớn hơn có thể được thu được.
Thời gian bắt đầu đảo ngược xu hướng Sự chéo chéo giữa các dải BB trên và dưới và Momentum Oscillating Moving Average cung cấp thời gian và giá thuận lợi để tạo ra các tín hiệu giao dịch, có thể bắt được các điều chỉnh tăng và giảm chính và nắm bắt kịp thời các biến đổi xu hướng.
Các thông số BB không chính xác Các thiết lập không chính xác của các thông số BB như thời gian tính toán và nhân độ lệch chuẩn có thể dẫn đến khoảng cách quá rộng hoặc quá hẹp giữa các băng tần, tạo ra các tín hiệu sai quá mức và làm suy yếu sự ổn định của chiến lược.
Phạm vi dao động quá mức Phạm vi dao động quá lớn của Momentum Oscillating Moving Average có thể dẫn đến các điểm dừng lỗ quá xa, làm tăng nguy cơ mất mát.
Trở lại chậm
Khi thị trường dao động hoặc không có xu hướng, các tín hiệu giao dịch từ BB và Momentum Oscillating Moving Average có thể chậm lại, không phản ánh sự thay đổi giá theo thời gian, gây ra rủi ro đảo ngược chậm.
Tối ưu hóa các thông số BB Kiểm tra các khoảng thời gian khác nhau, nhân độ lệch chuẩn để tìm kết hợp tham số tối ưu cung cấp tần số tín hiệu tốt hơn và ít tín hiệu sai hơn.
Tối ưu hóa các thông số động lực dao động trung bình di chuyển Kiểm tra các kích thước dao động và thời gian dao động khác nhau để tìm các thông số nắm bắt xu hướng tốt hơn và giảm độ trễ tín hiệu.
Thêm điều kiện bộ lọc Thêm các bộ lọc như khối lượng giao dịch dựa trên các tín hiệu chéo để loại trừ các tín hiệu giao dịch không hiệu quả.
Sự kết hợp chiến lược Kết hợp chiến lược này với các chiến lược dừng lỗ khác hoặc các chiến lược học máy để kiểm soát rủi ro hơn nữa và cải thiện sự ổn định.
Chiến lược này kết hợp các điểm mạnh của Bollinger Bands thích nghi và Momentum Oscillating Moving Average, đạt được sự tích hợp của xu hướng theo dõi và nắm bắt sự đảo ngược xu hướng. Bằng cách cân bằng sự biến động của thị trường và sự linh hoạt của tín hiệu giao dịch, nó nhận ra giao dịch đột phá ổn định và hiệu quả.
/*backtest start: 2022-12-29 00:00:00 end: 2024-01-04 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // Hull Cloud v2 by SEASIDE420 strategy("Hull Moving Average Cloud v2", shorttitle="hull_cloud_v2", overlay=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, max_bars_back=200, default_qty_value=100, calc_on_order_fills= true, calc_on_every_tick=true, pyramiding=0) hullperiod=input(title="HullMA Period",defval=210, minval=1) Width=input(title="Cloud Width",defval=200, minval=2) price=input(ohlc4,title="Price data") FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2017, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => true n2ma=2*wma(price,round(hullperiod/2)) nma=wma(price,hullperiod) diff=n2ma-nma sqn=round(sqrt(hullperiod)) n2ma1=2*wma(price[1],round(hullperiod/2)) nma1=wma(price[1],hullperiod) diff1=n2ma1-nma1 n1=wma(diff,sqn) n2=wma(diff1,sqn) Hull_Line=n1-n1[1]/n2[1] Hull_retracted=if(n1>n2) Hull_retracted=Hull_Line-Width else Hull_retracted=Hull_Line+Width c1=(Hull_retracted*n1)/price[1] c2=(Hull_retracted*n2)/price[1] c4=c1>c2?green:red c2p=plot(c2, color=black, linewidth=1) c3p=plot(price, color=black, linewidth=1) fill(c3p, c2p, color=c4, transp=75) plot(cross(c1, c2) ? c1 : na, style = circles,color=c4, linewidth = 4) if (price<c2) strategy.close("BUY", when=window()) if (price>c2) strategy.close("SELL", when=window()) if (price[1]>c2 and price[1]>c1) strategy.entry("BUY",strategy.long, when=window()) if (price[1]<c1 and price[1]<c2) strategy.entry("SELL",strategy.short, when=window())// /L'-, // ,'-. ` ```` / L '-, // . _,--dMMMM\ ` ` ` '`.. / '-, // : _,--, )MMMMMMMMM),. ` ,<> /_ '-,' // ; ___,--. \MM( `-' )M//MM\ ,',.; .-'* ; .' // | \MMMMMM) \MM\ ,dM//MMM/ ___ < ,; `. )`--' / // | \MM()M MMM)__ /MM(/MP' ___, \ \ ` `. `. /__, ,' // | MMMM/ MMMMMM( /MMMMP'__, \ | / `. `-,_\ / // | MM /MMM---' `--'_ \ |-' |/ `./ .\----.___ // | /MM' `--' __,- \"" |-' |_, `.__) . .F. )-. // | `--' \ \ |-' |_, _,-/ J . . . J-'-. `-., // | __ \`. | | | \ / _ |. . . . \ `-. F // | ___ / \ | `| ' __ \ | /-' F . . . . \ '` // | \ \ \ / | __ / \ | |,-' __,- J . . . . . \ // | | / |/ __,- \ ) \ / |_,- __,--' |. .__.----,' // | |/ ___ \ |'. |/ __,--' `.-;;;;;;;;;\ // | ___ \ \ | | ` __,--' /;;;;;;;;;;;;. // | \ \ |-'\ ' __,--' /;;;;;;;;;;;;;;\ // \ | | / | __,--' `--;;/ \;-'\ // \ | |/ __,--' / / \ \ // \ | __,--' / / \ \ // \|__,--' _,-;M-K, ,;-;\ // <;;;;;;;; '-;;;; // :D