Đây là một bài viết tối ưu hóa SEO về Keltner Channel Stop Loss Take Profit Strategy:
Chiến lược Keltner Channel Stop Loss Take Profit tối ưu hóa các quyết định giao dịch dựa trên phân tích Keltner Channel bằng cách kết hợp các quy tắc dừng lỗ và lấy lợi nhuận.
Tính toán các dải giữa, trên và dưới của kênh Keltner.
Xem xét các cơ hội dài khi giá chạm vào dải trên và các cơ hội ngắn khi chạm vào dải dưới.
Nhập giao dịch dài trên băng thông trên, và nhập giao dịch ngắn trên băng thông dưới.
Đặt mục tiêu lợi nhuận ở một tỷ lệ phần trăm nhất định trên giá nhập cảnh, và mục tiêu dừng lỗ ở một tỷ lệ phần trăm nhất định dưới giá nhập cảnh.
Ưu điểm của chiến lược này là giới thiệu các quy tắc dừng lỗ và lấy lợi nhuận để cắt giảm lỗ trong thời gian khi xu hướng đi sai, và lấy lợi nhuận trước khi sóng kết thúc.
Các thông số có thể được tối ưu hóa cho các tài sản khác nhau để đạt được sự cân bằng rủi ro-lợi nhuận tốt nhất.
Keltner Channel xác định hướng xu hướng
Dừng lỗ và lấy lợi nhuận tối ưu hóa phần thưởng
Nhẹ nhàng vào và ra khỏi ngăn chặn phá vỡ sai
Các thông số linh hoạt cho các điều chỉnh
Có thể kết hợp với các chỉ số khác
Cần tăng tỷ lệ dừng lỗ và lợi nhuận
Một số rủi ro dừng lỗ vẫn còn
Các kênh có thể bị phá vỡ với tổn thất
Mất dừng nhỏ gây ra dừng thường xuyên
Chiến lược Keltner Channel Stop Loss Take Profit tối ưu hóa giao dịch kênh truyền thống bằng cách kiểm soát rủi ro trong khi theo xu hướng. Kết quả chiến lược tuyệt vời có thể đạt được thông qua kiểm tra hậu trường và điều chỉnh tham số rộng rãi. Chiến lược đáng nghiên cứu sâu và thử nghiệm trực tiếp để cải thiện ổn định dần dần.
/*backtest start: 2023-08-15 00:00:00 end: 2023-08-23 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Optimized Keltner Channels Strategy for BTC", overlay=true) length = input(9, minval=1) mult = input(1.0, "Multiplier") src = input(close, title="Source") exp = input(true, "Use Exponential MA") BandsStyle = input("Average True Range", options = ["Average True Range", "True Range", "Range"], title="Bands Style") atrlength = input(18, "ATR Length") sl = input(defval=22, minval=0, title="Stop Loss (%)") tp = input(defval=21, minval=0, title="Take Profit (%)") esma(source, length)=> s = sma(source, length) e = ema(source, length) exp ? e : s ma = esma(src, length) rangema = BandsStyle == "True Range" ? rma(tr(true), length) : BandsStyle == "Average True Range" ? atr(atrlength) : rma(high - low, length) upper = ma + rangema * mult lower = ma - rangema * mult c = color.blue u = plot(upper, color=color.green, title="Upper") plot(ma, color=#0094FF, title="Basis") l = plot(lower, color=color.red, title="Lower") fill(u, l, color=#0094FF, transp=95, title="Background") crossUpper = crossover(src, upper) crossLower = crossunder(src, lower) bprice = 0.0 bprice := crossUpper ? close+syminfo.mintick : nz(bprice[1]) sprice = 0.0 sprice := crossLower ? close-syminfo.mintick : nz(sprice[1]) crossBcond = false crossBcond := crossUpper ? true : na(crossBcond[1]) ? false : crossBcond[1] crossScond = false crossScond := crossLower ? true : na(crossScond[1]) ? false : crossScond[1] cancelBcond = crossBcond and (src < ma or high >= bprice ) cancelScond = crossScond and (src > ma or low <= sprice ) if (cancelBcond) strategy.cancel("KltChLE") if (crossUpper) strategy.entry("KltChLE", strategy.long, stop=bprice, comment="Long") if (cancelScond) strategy.cancel("KltChSE") if (crossLower) strategy.entry("KltChSE", strategy.short, stop=sprice, comment="Short") strategy.exit("long exit", "KltChLE", profit = close * tp * 0.01 / syminfo.mintick, loss = close * sl * 0.01 / syminfo.mintick) strategy.exit("Short exit", "KltChSE", profit = close * tp * 0.01 / syminfo.mintick, loss = close * sl * 0.01 / syminfo.mintick) plot(bprice, color=color.green) plot(sprice, color=color.red)