Chiến lược ATR Trailing Stop

Tác giả:ChaoZhang, Ngày: 2023-09-26
Tags:

Tổng quan: Chiến lược dừng lại theo dõi ATR là một chiến lược giao dịch thiết lập năng động mức dừng lỗ dựa trên chỉ số Average True Range (ATR). Nó phù hợp với các cặp FOREX biến động, nắm bắt lợi nhuận trong các xu hướng chính trong khi kiểm soát rủi ro bằng cách theo dõi biến động thị trường.

Chiến lược logic

Chiến lược tính toán chỉ số AVERAGE (giá động trung bình) và dải DIFF / DIFFLOW trên/dưới dựa trên giá trị ATR, tạo thành một kênh giao dịch. Nó đi dài khi giá vượt qua DIFF và đi ngắn khi giá vượt qua dưới DIFFLOW, với các điểm dừng được đặt theo động dựa trên ATR.

Đặc biệt, nó đầu tiên tính toán chỉ số trung bình di chuyển đơn giản và chỉ số ATR. DIFF dải trên và DIFFLOW dải dưới sau đó được tính bằng cách nhân các giá trị ATR với một hệ số. Điều này tạo thành một kênh giao dịch bị giới hạn bởi DIFF và DIFFLOW. Khi giá vượt qua dải trên, một vị trí dài được thực hiện. Khi giá vượt qua dải dưới, một vị trí ngắn được thực hiện. Ngoài ra, mức dừng lỗ di chuyển năng động với các giá trị ATR. Điều này cho phép dừng thích nghi.

Do đó, chiến lược có thể liên tục đi dài / ngắn để nắm bắt lợi nhuận trong các xu hướng chính, trong khi sử dụng ATR trailing stop để kiểm soát rủi ro. Điều này làm cho nó phù hợp với các công cụ biến động.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Dừng động dựa trên ATR điều chỉnh theo biến động thị trường, tránh dừng quá gần hoặc quá xa.

  2. Kênh giao dịch nhằm mục đích nắm bắt sự đảo ngược trung bình trong xu hướng. Sử dụng vốn tốt khi giá dao động trong kênh.

  3. Chuyển đổi xu hướng liên tục mà không dự đoán đột phá.

  4. Các thông số và quy tắc đơn giản, dễ hiểu và tự động hóa.

  5. Việc sử dụng vốn cao, giao dịch liên tục mang lại nhiều cơ hội lợi nhuận hơn.

Rủi ro và cải tiến

Một số rủi ro cần xem xét:

  1. Các hệ số ATR lớn dẫn đến việc dừng quá xa, không thể kiểm soát rủi ro.

  2. Whipsaws trong thị trường giới hạn phạm vi kích hoạt dừng thường xuyên điều chỉnh hệ số ATR để giảm dừng không mong muốn.

  3. Mất tiềm năng khi giá đảo ngược sau khi đột phá ban đầu.

  4. Các điểm cao có thể làm cho các điểm dừng không hiệu quả.

Tối ưu hóa có thể:

  1. Tối ưu hóa các thông số ATR để tìm sự cân bằng đúng đắn giữa việc theo dõi biến động và ngăn chặn dừng quá mức.

  2. Thêm chỉ số xu hướng, chỉ giao dịch phá vỡ theo hướng xu hướng. Tránh giao dịch chống xu hướng.

  3. Kiểm tra các thông số riêng biệt cho mỗi thiết bị để tìm ra các giá trị tối ưu.

  4. Tối ưu hóa lối vào, xem xét việc đi vào các kênh giữa.

  5. Tăng kích thước vị trí trong khi kiểm soát tổng rủi ro / rút vốn.

Kết luận

Chiến lược ATR trailing stop liên tục giao dịch theo xu hướng trong khi quản lý rủi ro một cách năng động. Nó phù hợp với các công cụ biến động và cung cấp việc sử dụng vốn tốt. Tối ưu hóa tham số và thêm bộ lọc có thể cải thiện hiệu suất hơn nữa.


/*backtest
start: 2023-09-18 00:00:00
end: 2023-09-25 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Investoz

//@version=4
strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

len = input(26, type=input.integer, minval=1, title="Length")
mul = input(1, type=input.float, minval=0, title="Length")
mullow = input(2, type=input.float, minval=0, title="Length")

price = sma(close, 1)
average = ema(close, len)
diff = atr(len) * mul
difflow = atr(len) * mullow

bull_level = average + diff
bear_level = average - difflow
bull_cross = crossunder(price, bear_level)
bear_cross = crossunder(bull_level, price)

FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2008, title = "From Year", minval = 2008)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2019)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
startTimeOk()  => true

if (startTimeOk())
    strategy.entry("KOP", strategy.long, when=bull_cross)
    strategy.close("KOP", when=bear_cross)  
    strategy.entry("SALJ", strategy.short, when=bear_cross)
    strategy.close("SALJ", when=bull_cross)

plot(price, title="price", color=color.black, transp=50, linewidth=2)
a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1)
a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1)
a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1)
fill(a0, a1, color=color.green, transp=97)
fill(a0, a2, color=color.red, transp=97)

Thêm nữa