Tài nguyên đang được tải lên... tải...

Keltner Channel Stop Loss Take Profit chiến lược

Tác giả:ChaoZhang, Ngày: 2023-09-15 14:41:46
Tags:

Đây là một bài viết tối ưu hóa SEO về Keltner Channel Stop Loss Take Profit Strategy:

Tổng quan chiến lược

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.

Chiến lược logic

  1. Tính toán các dải giữa, trên và dưới của kênh Keltner.

  2. 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.

  3. 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.

  4. Đặ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.

Ưu điểm của Chiến lược

  • 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ảnh báo về rủi ro

  • 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

Kết luậ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)

Thêm nữa