Bài viết này chủ yếu giới thiệu một chiến lược giao dịch định lượng được gọi là
Logic giao dịch của chiến lược này rất đơn giản và rõ ràng.
Sử dụng sự chéo chéo giữa SMA 14 giai đoạn và SMA 28 giai đoạn làm tín hiệu cho dài và ngắn. Khi SMA 14 giai đoạn vượt trên SMA 28 giai đoạn, đi dài. Khi SMA 14 giai đoạn xuống dưới SMA 28 giai đoạn, đi ngắn.
Tính toán chỉ số ATR và nhân nó bằng một nhân để có được vị trí lợi nhuận động. Ví dụ, đặt chiều dài ATR là 7, nhân là 1,5, sau đó chiều rộng của kênh lợi nhuận động là 1,5 lần ATR 7 giai đoạn.
Khi hướng vị trí dài, cộng giá cao và chiều rộng kênh lợi nhuận động để có được đường thu lợi nhuận dài. Khi hướng vị trí ngắn, trừ chiều rộng kênh lợi nhuận động từ giá thấp để có được đường thu lợi nhuận ngắn.
Một khi giá vượt quá đường lợi nhuận động này, lấy lợi nhuận để thoát ngay lập tức.
Thông qua các bước trên, chiến lược này đạt được hiệu quả đơn giản nhưng hiệu quả của việc theo dõi lợi nhuận và lấy lợi nhuận nhanh chóng. Kênh ATR cung cấp khả năng điều chỉnh năng động cho đường lấy lợi nhuận, trong khi điều kiện 1 bar mới được thêm vào đảm bảo rằng đường lấy lợi nhuận chỉ được kích hoạt trong điều kiện thị trường thuận lợi đột ngột. Điều này có thể làm giảm hiệu quả việc thoát sớm do lấy lợi nhuận.
Chiến lược giao dịch lợi nhuận theo dõi động có những lợi thế sau:
Ý tưởng đơn giản và rõ ràng, dễ hiểu và thực hiện, phù hợp cho người mới bắt đầu học.
ATR năng động có thể tự động theo dõi lợi nhuận và tránh để lại lợi nhuận trên bàn.
Thêm 1 bar điều kiện cao / thấp ngăn chặn lợi nhuận được kích hoạt trên các động thái nhỏ hơn.
Chiều dài ATR và nhân có thể được điều chỉnh để điều chỉnh mức độ thu lợi nhuận.
Có thể thoát nhanh để nắm bắt các chuyển động giá thuận lợi.
Rất có thể mở rộng, dễ thực hiện các chiến lược dừng lỗ / lấy lợi nhuận khác dựa trên khuôn khổ này.
Ngoài ra còn có một số rủi ro với chiến lược này:
Sự mở rộng đột ngột của ATR có thể gây ra việc thoát khỏi lợi nhuận sớm.
Không thể lọc hiệu quả tiếng ồn thị trường, dễ bị tín hiệu sai.
Chỉ dựa vào giao thoa SMA để ra quyết định, không hiệu quả đối với các tình huống thị trường phức tạp.
Không có cơ chế dừng lỗ để hạn chế thiệt hại hiệu quả.
Các thông số mặc định có thể không phù hợp với tất cả các sản phẩm, cần tối ưu hóa.
Để giảm rủi ro trên, chúng ta có thể tối ưu hóa từ các khía cạnh sau:
Thêm các quy tắc lọc dựa trên các chỉ số khác để loại bỏ các tín hiệu sai.
Thêm các chiến lược dừng lỗ để kiểm soát chặt chẽ lỗ cho mỗi giao dịch.
Tối ưu hóa các thông số bằng cách sử dụng Phân tích Tiếp tục.
Tối ưu hóa các thông số riêng biệt cho các sản phẩm khác nhau.
Tăng các mô hình máy học để đưa ra quyết định thông minh hơn.
Dựa trên phân tích rủi ro, các hướng tối ưu hóa chủ yếu bao gồm:
Thêm bộ lọc tín hiệu: Thêm các quy tắc lọc dựa trên các chỉ số như MACD, Bollinger Band vv sau tín hiệu để tránh tiếng ồn.
Thêm đường dừng lỗ: Thêm đường dừng lỗ dựa trên ATR hoặc dừng lại theo dõi để kiểm soát mỗi lỗ giao dịch.
Tối ưu hóa tham số: Tối ưu hóa các tham số như ATR Length, ATR Multiplier sử dụng máy học.
Điều chỉnh rủi ro: Điều chỉnh kích thước vị trí, các tham số rủi ro dựa trên các sản phẩm khác nhau.
Mô hình tổng hợpKết hợp chiến lược này với máy học, mạng thần kinh để cải thiện độ chính xác.
Can thiệp bằng tay: Cho phép thay thế bằng tay mức lợi nhuận / dừng lỗ tại những thời điểm quan trọng.
Với tối ưu hóa theo các hướng trên, lợi nhuận và sự ổn định của chiến lược có thể được cải thiện đáng kể.
Tóm lại,
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Peter_O //@version=5 strategy("TrailingTakeProfit example", overlay=true, margin_long=100, margin_short=100, default_qty_value = 1, initial_capital = 100) longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28)) shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28)) if longCondition strategy.entry("Long", strategy.long, comment="long", alert_message="long") if shortCondition strategy.entry("Short", strategy.short, comment="short", alert_message="short") atr_length=input.int(7, title="ATR Length") atr_multiplier = input.float(1.5, title="ATR Multiplier") atr_multiplied = atr_multiplier * ta.atr(atr_length) ttp_top_bracket = strategy.position_size>0 ? high[1]+atr_multiplied : na ttp_bottom_bracket = strategy.position_size<0 ? low[1]-atr_multiplied : na plot(ttp_top_bracket, title="ttp_top_bracket", color=color.lime, style=plot.style_linebr, offset=1) plot(ttp_bottom_bracket, title="ttp_bottom_bracket", color=color.red, style=plot.style_linebr, offset=1) strategy.exit("closelong", from_entry="Long", limit=ttp_top_bracket, alert_message = "closelong") strategy.exit("closeshort", from_entry="Short", limit=ttp_bottom_bracket, alert_message = "closeshort") // var table alertsDisplayTable = table.new(position.top_right, 1, 5, color.black) // if barstate.islastconfirmedhistory // table.cell(alertsDisplayTable, 0, 0, "TradingConnector-compatible alerts sent", text_color=color.white) // table.cell(alertsDisplayTable, 0, 1, "at Long Entry: long", text_color=color.white) // table.cell(alertsDisplayTable, 0, 2, "at Short Entry: short", text_color=color.white) // table.cell(alertsDisplayTable, 0, 3, "at Long Exit: closelong", text_color=color.white) // table.cell(alertsDisplayTable, 0, 4, "at Short Exit: closeshort", text_color=color.white)