Chiến lược này sử dụng Bollinger Bands để xác định hướng xu hướng hiện tại và trung bình động theo cấp số nhân để dừng lỗ và quản lý lợi nhuận để nắm bắt hiệu quả xu hướng.
Chiến lược đầu tiên tính toán đường giữa, dải trên và dải dưới của Bollinger Bands. Dải giữa là trung bình di chuyển đơn giản của giá đóng trong n ngày. Dải trên và dưới được dịch lên và xuống bằng hai độ lệch chuẩn so với đường giữa. Khi giá đóng trên dải trên, nó chỉ ra xu hướng tăng. Khi giá đóng dưới dải dưới, nó chỉ ra xu hướng giảm.
Chiến lược đánh giá hướng xu hướng hiện tại bằng cách so sánh mối quan hệ giữa giá đóng cửa và các dải trên / dưới của Bollinger Bands. Nếu giá đóng cửa vượt qua dải trên, mua dài. Nếu giá đóng cửa vượt qua dải dưới, mua ngắn.
Ngoài ra, đường trung bình chuyển động theo cấp số nhân được giới thiệu như là một điểm dừng để dừng lỗ và lấy lợi nhuận. Cụ thể, nếu giá giảm sau khi mua dài, đường dừng lỗ sẽ giảm tương ứng, dần dần thắt chặt khoảng cách dừng lỗ để tối đa hóa khóa lợi nhuận. Nếu giá tiếp tục tăng, đường dừng lỗ cũng sẽ di chuyển lên để cho phép lợi nhuận chạy. Cơ chế dừng lỗ hoạt động ngược lại cho các vị trí ngắn.
Chiến lược kết hợp Bollinger Bands cho hướng xu hướng và EMA cho quản lý dừng lỗ / lấy lợi nhuận có những lợi thế sau:
Sử dụng Bollinger Bands có thể xác định hiệu quả hướng xu hướng và phản ứng nhanh chóng với sự đột phá.
Dừng lỗ / lấy lợi nhuận dựa trên EMA có thể tối đa hóa việc khóa lợi nhuận trong khi kiểm soát rủi ro.
Chiến lược có một số tham số dễ thực hiện - chỉ có một cho BB và một cho EMA, rất đơn giản.
Nó có thể được áp dụng rộng rãi cho các sản phẩm khác nhau với khả năng thích nghi mạnh mẽ.
Chiến lược cũng có một số rủi ro cần lưu ý:
Việc phá vỡ các băng tần trên / dưới BB không thể tránh hoàn toàn nguy cơ phá vỡ sai.
Việc thiết lập tham số EMA cần kiểm tra cẩn thận theo các sản phẩm cụ thể. Thời gian EMA quá ngắn có thể làm tăng thời gian dừng lỗ. Quá lâu sẽ làm giảm hiệu quả kéo theo.
Cần tránh tối ưu hóa quá mức. Nhiều kết hợp các tham số BB và EMA có thể dẫn đến quá phù hợp.
Để giải quyết các rủi ro và hướng tối ưu hóa, sau đây có thể được xem xét:
Thêm khối lượng hoặc MACD vv để lọc các tín hiệu đột phá sai.
Tối ưu hóa thời gian EMA thông qua thử nghiệm để tìm các thông số phù hợp nhất cho các sản phẩm cụ thể.
Cố gắng giữ cho các thông số BB và EMA ổn định càng nhiều càng tốt để tránh rủi ro quá phù hợp do tối ưu hóa quá mức.
Xem xét sử dụng chỉ số RSI v.v. để xác định điều chỉnh vị trí trong xu hướng trung hạn.
Chiến lược này tích hợp sử dụng Bollinger Bands để xác định xu hướng và EMA để quản lý dừng lỗ / lấy lợi nhuận để tạo thành một hệ thống theo dõi xu hướng tương đối hoàn chỉnh. Nó có thể nhanh chóng nắm bắt hướng xu hướng và khóa lợi nhuận bằng cách điều chỉnh liên tục đường dừng lỗ. Nhìn chung, chiến lược tương đối đơn giản, thực tế và thích nghi, đáng để thử nghiệm và tối ưu hóa hơn nữa. Nhưng các thiết lập tham số và kiểm soát rủi ro cần phải được lưu ý để ngăn ngừa đánh giá sai và tối ưu hóa quá mức. Kết hợp với các chỉ số kỹ thuật khác để cải thiện hơn nữa sẽ là hướng đi.
/*backtest start: 2022-11-10 00:00:00 end: 2023-11-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © zxcv55602 //@version=4 strategy(shorttitle=" BB+EMA", title="Bollinger Bands", overlay=true) date1 = input(title="Start Date", type=input.time, defval=timestamp("2020-01-01T00:00:00")) date2 = input(title="Stop Date", type=input.time, defval=timestamp("2030-01-01T00:00:00")) length = input(40, minval=1) src = input(close, title="Source") mult = input(2.0,title="StdDev",step=0.1) basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev //offset = input(0, "Offset", minval = -500, maxval = 500) offset=0 stopcon=input(title="stopcon/lot", type=input.bool, defval=true) lot1=input(title="lot",defval=1) stoploss=input(title="stopcon",defval=1000) emacon=input(title="emacon", type=input.bool, defval=true) ema_value=input(title="value",defval=30, minval=2,step=1) plot(basis, "Basis", color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=color.new(color.blue,50), offset = offset) p2 = plot(lower, "Lower", color=color.new(color.blue,50), offset = offset) ema1=ema(close,ema_value) plot(ema1, "SMA", color=#2962FF) period() => true //----------- if period() if strategy.opentrades==0 and ema1<upper if close>upper lot_L=stoploss/((close-lower)/2) strategy.entry("OP_L",strategy.long,qty=stopcon==true?lot_L:lot1,stop=emacon==true?max(basis,ema1):basis) if strategy.opentrades==0 and ema1>lower if close<lower lot_S=stoploss/((upper-close)/2) strategy.entry("OP_S",strategy.short,qty=stopcon==true?lot_S:lot1,stop=emacon==true?min(basis,ema1):basis) if strategy.position_size>0 strategy.exit("OP_L",stop=emacon==true?max(basis,ema1):basis,comment="exit_L") if strategy.position_size<0 strategy.exit("OP_S",stop=emacon==true?min(basis,ema1):basis,comment="exit_S")