Chiến lược này dựa trên sự lựa chọn của người dùng về EMA và kênh tỷ lệ phần trăm được xác định. Nó đi dài khi giá nằm dưới dải trên và đi ngắn khi giá nằm trên dải dưới. Nếu giá bắt đầu xu hướng và di chuyển bên ngoài kênh, tất cả các vị trí sẽ bị đóng để ngăn ngừa mất mát.
Đối với thị trường xu hướng,
Tính toán đường EMA 200 giai đoạn như đường EMA cơ bản.
Tính toán các dải trên và dưới dựa trên tỷ lệ phần trăm được xác định bởi người dùng: Phạm vi trên = EMA * (1 + %) Phạm vi dưới = EMA * (1 - %)
Tính toán Bollinger Bands 20 giai đoạn để mô tả phạm vi kênh.
Đi dài khi giá đóng cửa vượt qua trên Bollinger Band dưới từ dưới. Đi ngắn khi giá đóng cửa vượt qua dưới Bollinger Band trên từ trên.
Sử dụng ATR để tính toán stop loss để tránh mất quá nhiều.
Nếu giá di chuyển ngoài phạm vi kênh phần trăm được xác định, đóng tất cả các vị trí để ngăn ngừa tổn thất thêm.
Đường cơ sở EMA giúp nắm bắt tốt hơn các điểm đảo ngược xu hướng.
Kênh tỷ lệ phần trăm thiết lập một phạm vi giao dịch hợp lý để tránh giao dịch quá mức.
Bollinger Bands cung cấp các mức hỗ trợ và kháng cự để hỗ trợ thời gian nhập cảnh.
ATR trailing stop động thiết lập stop loss để kiểm soát hiệu quả rủi ro mỗi giao dịch.
Đóng tất cả các vị trí khi giá vượt qua kênh nhanh chóng kiểm soát lỗ.
Các tham số có thể tùy chỉnh linh hoạt cho các điều kiện thị trường khác nhau.
Một phạm vi kênh quá rộng có thể bỏ lỡ xu hướng hoặc trì hoãn việc dừng lỗ.
Một phạm vi kênh quá hẹp có thể gây ra quá mức giao dịch và làm tăng chi phí giao dịch.
Cài đặt tham số Bollinger Bands kém có thể gây ra cơ hội giao dịch bị bỏ lỡ.
Một ngưỡng dừng lỗ được đặt quá lỏng lẻo có thể dẫn đến tổn thất quá mức cho mỗi giao dịch.
Các thông số cần được tối ưu hóa để tìm phạm vi giao dịch tối ưu.
Kiểm tra các khoảng thời gian EMA khác nhau để tìm trung bình động phù hợp nhất.
Tối ưu hóa các thông số kênh phần trăm để xác định phạm vi kênh tối ưu.
Điều chỉnh thời gian Bollinger Bands để nắm bắt tốt hơn sự biến động.
Điều chỉnh thời gian ATR và nhân để tinh chỉnh thêm chiến lược dừng lỗ.
Kiểm tra chỉ dài trên điều kiện EMA hoặc chỉ ngắn dưới điều kiện EMA và xem liệu nó có cải thiện tỷ lệ thắng hay không.
Bao gồm các chỉ số xu hướng để xác định xem có cần phải thoát sớm hay không.
Chiến lược này kết hợp các điểm mạnh của các đường trung bình động, kênh, biến động và nhiều hơn nữa để tạo ra một hệ thống giao dịch phạm vi tương đối ổn định.
/*backtest start: 2023-11-05 00:00:00 end: 2023-11-12 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="[mdeacey] EMA% Channel + BB Range Strategy", shorttitle="[mdeacey] EMA% Channel + BB Range Strategy", overlay=true) //EMA 200 len = input(title="EMA Length", type=input.integer, defval=200) srce = input(title="EMA Source", type=input.source, defval=close) ema1= ema(srce,len) percent = input(title="Channel Percentage (%)", type=input.float, defval= 1) valuee = (percent*ema1)/100 upperbande = ema1 + valuee lowerbande = ema1 - valuee plot(ema1, title='EMA200', color=color.gray, linewidth=1, style=plot.style_line ) plot(upperbande, title='EMA Upper Band', color=color.gray, linewidth=1, style=plot.style_line ) plot(lowerbande, title='EMA Lower Band', color=color.gray, linewidth=1, style=plot.style_line ) length = input(20, minval=2) src = input(close, title="Close price") mult = input(2.0, minval=0.001, maxval=50) MA2 = sma(src, length) dev = mult * stdev(src, length) upper = MA2 + dev lower = MA2 - dev signalColor = crossunder(close, upper) ? color.red : crossover(close, lower) ? color.green : color.white barcolor(color=signalColor) upperBand = plot(upper, color=color.gray, linewidth=1) lowerBand = plot(lower, color=color.gray, linewidth=1) fill(upperBand, lowerBand,color=color.gray) strategy.entry("Long",true,when = crossover(close,lower) and close <upperbande and close>lowerbande) strategy.close("Long",when = crossunder(close,lowerbande)) strategy.entry("Short",false,when = crossunder(close,upper) and close <upperbande and close>lowerbande) strategy.close("Short",when = crossover(close,upperbande)) //Inputs atrPeriod = input(defval=14, title="ATR Period",group='ATR Settings', type=input.integer) // Adjust this to change the ATR calculation length multiplierPeriod = input(defval=1.75, title="ATR Multiplier Period",group='ATR Settings', type=input.float)// Adjust this to change the distance between your candles and the line //ATR Calculation pine_rma(x, y) => alpha = y sum = 0.0 sum := (x + (alpha - 1) * nz(sum[1])) / alpha true_range() => max(high - low, max(abs(high - close[1]), abs(low - close[1]))) //Long SL plot(low - pine_rma(true_range() * multiplierPeriod, atrPeriod), "Long Stop", color=color.red, offset = 1) // Short SL plot(high +pine_rma(true_range() * multiplierPeriod, atrPeriod), "Short Stop", color=color.red, offset = 1) strategy.exit("Exit Long","Long",limit=upper ,stop = low - pine_rma(true_range() * multiplierPeriod, atrPeriod) ) strategy.exit("eExit Short","Short",limit=lower ,stop =high +pine_rma(true_range() * multiplierPeriod, atrPeriod) )