Chiến lược dừng lỗ theo xu hướng thích ứng


Ngày tạo: 2023-10-17 14:04:28 sửa đổi lần cuối: 2023-10-17 14:04:28
sao chép: 0 Số nhấp chuột: 878
1
tập trung vào
1617
Người theo dõi

Chiến lược dừng lỗ theo xu hướng thích ứng

Tổng quan

Chiến lược này sử dụng phương pháp dừng lại theo dõi biến động Wilder, kết hợp với chỉ số ATR và các loại đường trung bình di chuyển khác nhau để thực hiện một chiến lược dừng theo dõi xu hướng có khả năng thích ứng.

Nguyên tắc chiến lược

Cốt lõi của chiến lược này là thuật toán trailing stop của Wilder volatility. Đầu tiên, nó tính toán các chỉ số ATR, tính toán chiều dài và nhân của chỉ số ATR theo các tham số đầu vào, để có được đường dừng động. Sau đó, kết hợp với giá đóng cửa, giá cao nhất và một trong những lựa chọn trong giá thấp nhất, liên tục cập nhật điểm cao và thấp nhất của đường dừng.

Trong mã, đầu tiên thực hiện nhiều đường trung bình di chuyển như RMA, EMA, SMA, Hull MA thông qua hàm f_ma. Sau đó, tính toán chỉ số ATR, nhân với số nhân do người dùng đặt, để có được đường dừng dựa trên tỷ lệ biến động. Bằng các hàm cao nhất và thấp nhất, theo dõi điểm cao nhất và thấp nhất của đường dừng, giao dịch khi giá phá vỡ đường dừng.

Chiến lược này sử dụng các chỉ số ATR, các loại đường trung bình và các thiết lập tham số khác nhau để thực hiện một chiến lược theo dõi xu hướng rất thích ứng. Nó có thể theo dõi xu hướng một cách hiệu quả và dừng lỗ khi thị trường có sự rút lui lớn.

Phân tích lợi thế

  • Chiến lược này bắt đầu bằng thuật toán Wilder Volatility Trailing Stop, một phương pháp theo dõi xu hướng đáng tin cậy.

  • Chiến lược sử dụng chỉ số ATR để tính toán động đường dừng lỗ, có thể tránh điểm dừng lỗ quá cứng. Chỉ số ATR có thể phản ánh hiệu quả sự biến động và mức độ rủi ro của thị trường.

  • Mã hóa thực hiện nhiều lựa chọn đường trung bình như RMA, EMA, SMA, Hull MA, tăng khả năng thích ứng của chiến lược.

  • Bằng cách điều chỉnh độ dài ATR, các tham số nhân, bạn có thể tìm các tham số tốt nhất cho các thị trường khác nhau, tối ưu hóa hiệu quả chiến lược.

  • Chiến lược sử dụng các giá khác nhau như giá cao nhất, giá thấp nhất, giá đóng cửa để tính toán đường dừng lỗ, có thể được tối ưu hóa cho các giống khác nhau.

  • Nhìn chung, chiến lược này là một chiến lược dừng lỗ theo xu hướng đáng tin cậy, linh hoạt và dễ dàng tối ưu hóa.

Phân tích rủi ro

  • Chiến lược này phụ thuộc chủ yếu vào tối ưu hóa tham số, các thị trường và giống khác nhau cần thử nghiệm để tìm ra sự kết hợp ATR và tham số nhân phù hợp, nếu không hiệu quả dừng lỗ có thể không tốt.

  • Trong tình huống chấn động, đường dừng ATR có thể xảy ra thường xuyên khi kích hoạt dừng. Cần tối ưu hóa các chỉ số đánh giá xu hướng để tránh bỏ lỡ xu hướng chấn động.

  • Đường dừng quá nới lỏng sẽ bỏ lỡ cơ hội rút lại; quá chặt chẽ sẽ làm tăng tần suất giao dịch và chi phí trượt. Cần kiểm tra cẩn thận để tìm điểm cân bằng.

  • Nhiều lựa chọn đường trung bình có thể gây ra sự lệch trong hiệu quả chiến lược. Một đường trung bình chính nên được chọn cho các giống cụ thể, các đường trung bình khác chỉ là tham khảo phụ.

  • Chiến lược này tập trung vào theo dõi xu hướng và không thể kiếm được lợi nhuận trực tiếp. Cần xem xét việc sử dụng với các chiến lược thoát ra thị trường khác hoặc các chiến lược dừng lại.

  • Trong các tham số không đúng lúc, chiến lược có thể có vấn đề về giao dịch quá thường xuyên hoặc thời gian giữ vị trí quá lâu. Điều này cần được giải quyết bằng cách tối ưu hóa.

Hướng tối ưu hóa

  • Có thể xem xét thêm các chỉ số xu hướng để xác định xu hướng có tồn tại hay không, và tránh bị mắc kẹt trong tình huống chấn động.

  • Có thể thử nghiệm thêm các yếu tố chỉ số đảo ngược, chuyển đổi vị trí dừng lỗ nhanh hơn khi xu hướng đầu không và xu hướng đa đầu thay đổi.

  • Bạn có thể thử liên kết các tham số chiều dài ATR với các đặc điểm của các giống giao dịch. Các giống khác nhau có thiết lập chiều dài ATR khác nhau.

  • Bạn có thể thử thêm chỉ số khối lượng giao dịch, tăng tốc độ thắt chặt đường dừng lỗ khi khối lượng giao dịch giảm rõ rệt.

  • Bạn có thể cân nhắc tăng tỷ lệ thu hồi, nhưng không quá chặt, để tránh thu hồi bình thường.

  • Có thể kết hợp với các chỉ số khác về khả năng phán đoán và tối ưu hóa các tham số, cho phép mở rộng phạm vi dừng thích hợp khi sức mạnh không đủ.

Tóm tắt

Chiến lược này dựa trên tư tưởng Wilder Volatility Trailing Stop, sử dụng chỉ số ATR để thiết kế một chiến lược dừng theo dõi xu hướng rất thích ứng. Nó có thể thích ứng tốt với các loại giao dịch khác nhau thông qua tối ưu hóa tham số, là một chiến lược dừng lỗ đáng tin cậy và thực tế.

Mã nguồn chiến lược
/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Wilder's Volatility Trailing Stop Strategy with various MA's
// by SparkyFlary

//For Educational Purposes
//Results can differ on different markets and can fail at any time. Profit is not guaranteed.
strategy(title="Wilder's Volatility Trailing Stop Strategy with various MA's", shorttitle="Trailing Stop Strategy", overlay=true)

AtrMult = input(3.0, title="ATR multiplier")
ATRlength = input(7, title="ATR length")
ATRavgType = input("RMA", title="ATR moving average type", options=["RMA", "EMA", "SMA", "HULL"])
sicType = input("close", title="significant close type for trail calculation", options=["close", "high-low"])

//function for choosing moving averages
f_ma(type, src, len) =>
    float result = 0
    if type == "RMA" // Wilder's moving averaege or Running moving average
        result := rma(src, len)
    if type == "EMA" // Exponential moving average
        result := ema(src, len)
    if type == "SMA" // Simple moving average
        result := sma(src, len)
    if type == "HULL" // Hull moving average
        result := wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))
    result

ATR = f_ma(ATRavgType, tr, ATRlength)
upperTrail = lowest(sicType=="close"?close:low, ATRlength) + AtrMult * ATR
lowerTrail = highest(sicType=="close"?close:high, ATRlength) - AtrMult * ATR

float TS = 0
TS := close < TS[1] ? upperTrail[1] : close > TS[1] ? lowerTrail[1] : TS

//plot
plot(TS, title="trailing stop", color=close<TS?color.red:color.green)

//Strategy
buy = crossover(close, TS)
//sell = close < TS
short = crossunder(close, TS)
//cover = close > TS

strategy.entry(id="enter long", long=true, when=buy)
//strategy.close(id="enter long", comment="exit long", when=sell)
strategy.entry(id="enter short", long=false, when=short)
//strategy.close(id="enter short", comment="exit short", when=cover)