Chiến lược này áp dụng ý tưởng dừng lại động dựa trên ATR và cực đoan giá để tính toán các đường dừng lỗ dài và ngắn. Kết hợp với ý tưởng Chandelier Exit, nó đánh giá hướng dài / ngắn dựa trên sự đột phá đường dừng lỗ. Khi đường dừng lỗ phá vỡ lên, nó được đánh giá là tăng và bước vào dài. Khi đường dừng lỗ phá vỡ xuống, nó được đánh giá là giảm và bước vào ngắn.
Chiến lược có cả chức năng quản lý dừng lỗ và đánh giá tín hiệu đầu vào.
Chiến lược bao gồm các phần chính sau:
Tính toán các đường dừng lỗ dài / ngắn dựa trên ATR
Dựa trên khoảng thời gian ATR được xác định bởi người dùng và số lần nhân, ATR thời gian thực được tính toán. Sau đó, các đường dừng lỗ dài / ngắn được tính toán với ATR và mức giá cực:
longStop = Highest - ATR
shortStop = Lowest + ATR
Đánh giá hướng giao dịch bằng cách phá vỡ
So sánh các đường dừng lỗ giữa thanh trước và thanh hiện tại. Nếu đường dừng lỗ của thanh hiện tại bị phá vỡ, các tín hiệu giao dịch được kích hoạt:
Long stop-loss line breakout upwards, long entry
Short stop-loss line breakout downwards, short entry
Đặt lệnh dừng lỗ và lấy lợi nhuận dựa trên tỷ lệ rủi ro-lợi nhuận
Dựa trên tỷ lệ rủi ro-lợi nhuận được xác định bởi người sử dụng riskRewardRatio, khoảng cách dừng lỗ và khoảng cách lấy lợi nhuận được tính từ ATR. Lệnh dừng lỗ và lệnh lấy lợi nhuận được đặt khi mở các vị trí.
Những lợi thế của chiến lược này bao gồm:
Đánh giá giá
Việc áp dụng các đường dừng lỗ theo dõi năng động giúp ngăn chặn lỗ kịp thời và kiểm soát rủi ro giảm.
Chức năng kép
Đường dừng lỗ phục vụ như cả công cụ quản lý dừng lỗ và thẩm phán điều kiện nhập cảnh, giảm sự phức tạp của chiến lược.
Tỷ lệ rủi ro-lợi nhuận có thể điều chỉnh
Theo đuổi lợi nhuận cao hơn với tỷ lệ rủi ro-lợi nhuận được xác định trước.
Dễ hiểu và mở rộng
Cấu trúc đơn giản, dễ hiểu và tối ưu hóa để mở rộng.
Một số rủi ro có thể tồn tại cho chiến lược này:
Rủi ro hai chiều
Là một chiến lược giao dịch hai hướng, nó đảm nhận cả rủi ro dài và ngắn.
Tùy thuộc vào tham số ATR
Các thông số ATR trực tiếp ảnh hưởng đến các đường dừng lỗ và tần suất giao dịch.
Khả năng thích nghi với xu hướng
Chiến lược phù hợp hơn cho các kịch bản giới hạn phạm vi với đột phá đột ngột. Không phù hợp với các kịch bản xu hướng mạnh.
Các tối ưu hóa để giải quyết các rủi ro trên là:
Bao gồm các chỉ số xu hướng
Bao gồm MA và các chỉ số xu hướng khác để xác định xu hướng thị trường, tránh giao dịch theo xu hướng.
Tối ưu hóa tham số
Tối ưu hóa sự kết hợp của các tham số ATR và tỷ lệ rủi ro-lợi nhuận để dừng lỗ hợp lý hơn và lấy lợi nhuận.
Các bộ lọc bổ sung
Thêm các bộ lọc điều kiện khối lượng giao dịch hoặc biến động để đảm bảo chất lượng giao dịch.
Vẫn còn chỗ để tối ưu hóa chiến lược hơn nữa:
Kết hợp học máy
Sử dụng các mô hình học máy để dự đoán xu hướng giá để có độ chính xác nhập khẩu cao hơn.
Xây dựng danh mục đầu tư không rủi ro với các tùy chọn
Sử dụng các tùy chọn để phòng ngừa biến động giá của tài sản cơ bản và xây dựng các danh mục đầu tư không rủi ro.
Thuế trọng tài đa tài sản giữa các thị trường
Thực hiện điều tra thống kê qua các thị trường và lớp tài sản khác nhau để có được alpha ổn định.
Giao dịch thuật toán
Tận dụng các công cụ giao dịch thuật toán để kiểm tra lại các chiến lược và giao dịch hiệu quả.
Bài viết này phân tích kỹ lưỡng một chiến lược giao dịch định lượng dựa trên stop loss động. Chiến lược đồng thời có chức năng quản lý stop loss và xác định tín hiệu giao dịch, có hiệu quả kiểm soát rủi ro. Chúng tôi cũng thảo luận về những lợi thế, rủi ro tiềm ẩn và tối ưu hóa trong tương lai của chiến lược. Đây là một chiến lược giao dịch rất thực tế đáng nghiên cứu và áp dụng thêm.
/*backtest start: 2023-12-29 00:00:00 end: 2024-01-28 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Chandelier Exit with 1-to-1 Risk-Reward", shorttitle='CE', overlay=true) // Chandelier Exit Logic length = input.int(title='ATR Period', defval=22) mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0) useClose = input.bool(title='Use Close Price for Extremums', defval=true) atr = mult * ta.atr(length) longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr longStopPrev = nz(longStop[1], longStop) longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop var int dir = 1 dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir // Risk-Reward Ratio riskRewardRatio = input.int(1, title="Risk-Reward Ratio", minval=1, maxval=10, step=1) // Calculate Take Profit and Stop Loss Levels takeProfitLevel = atr * riskRewardRatio stopLossLevel = atr // Entry Conditions longCondition = dir == 1 and dir[1] == -1 shortCondition = dir == -1 and dir[1] == 1 // Entry Signals if (longCondition) strategy.entry("Long", strategy.long, stop=close - stopLossLevel, limit=close + takeProfitLevel) if (shortCondition) strategy.entry("Short", strategy.short, stop=close + stopLossLevel, limit=close - takeProfitLevel) longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.green) shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.red) midPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false) fill(midPricePlot, longStopPlot, color=color.new(color.green, 90), title='Long State Filling') fill(midPricePlot, shortStopPlot, color=color.new(color.red, 90), title='Short State Filling') // Alerts if (dir != dir[1]) strategy.entry("Direction Change", strategy.long, comment="Chandelier Exit has changed direction!") if (longCondition) strategy.entry("Buy Signal", strategy.long, comment="Chandelier Exit Buy!") if (shortCondition) strategy.entry("Sell Signal", strategy.short, comment="Chandelier Exit Sell!")