Đánh dấu xu hướng thích nghi Chiến lược dừng lỗ

Tác giả:ChaoZhang, Ngày: 2023-10-17 14:04:28
Tags:

img

Tổng quan

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

Chiến lược logic

Cốt lõi của chiến lược này là thuật toán dừng lại sau biến động Wilder. Nó đầu tiên tính toán chỉ số ATR và lập biểu đồ động của đường dừng lỗ theo chiều dài và nhân ATR đầu vào. Sau đó nó theo dõi mức cao nhất và thấp nhất của đường dừng lỗ dựa trên tùy chọn giá được chọn giữa giá đóng, giá cao và giá thấp. Nó gửi tín hiệu giao dịch khi giá phá vỡ đường dừng lỗ.

Trong mã, hàm f_ma thực hiện các đường trung bình động khác nhau bao gồm RMA, EMA, SMA và Hull MA. Chỉ số ATR được tính toán và nhân bằng trình nhân được xác định bởi người dùng để tạo ra đường dừng cuối dựa trên biến động. Mức cao nhất và thấp nhất của đường này được theo dõi bằng các hàm cao nhất và thấp nhất. Các giao dịch được thực hiện khi giá xuyên qua đường dừng cuối này.

Bằng cách sử dụng linh hoạt chỉ số ATR, các đường trung bình động khác nhau và các tham số có thể điều chỉnh, chiến lược này nhận ra một hệ thống dừng lỗ theo dõi xu hướng thích nghi cao.

Phân tích lợi thế

  • Chiến lược này tận dụng thuật toán dừng lại sau biến động hoang dã, đó là một phương pháp theo dõi xu hướng dừng lỗ trưởng thành và đáng tin cậy.

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

  • Việc thực hiện các đường trung bình động khác nhau bao gồm RMA, EMA, SMA và Hull MA làm tăng khả năng thích nghi của chiến lược.

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

  • Việc sử dụng các tùy chọn giá khác nhau như giá cao, thấp, gần cho phép tối ưu hóa trên các sản phẩm khác nhau.

  • Tóm lại, đây là một chiến lược dừng lỗ theo dõi xu hướng đáng tin cậy, thích nghi và dễ dàng tối ưu hóa.

Phân tích rủi ro

  • Chiến lược dựa rất nhiều vào tối ưu hóa tham số. Các tham số ATR và nhân thích hợp cần phải được tìm thấy thông qua thử nghiệm cho các thị trường và sản phẩm khác nhau, nếu không hiệu ứng dừng lỗ có thể không lý tưởng.

  • Trong các thị trường dao động, đường dừng lỗ ATR có thể gây ra các dừng không hợp lý thường xuyên.

  • Nếu đường dừng lỗ quá rộng, các cơ hội mất mát sẽ bị bỏ lỡ. Nếu quá chật, tần suất giao dịch và chi phí trượt sẽ tăng lên. Một điểm cân bằng cần được tìm thấy thông qua kiểm tra cẩn thận.

  • Quá nhiều lựa chọn trung bình động có thể dẫn đến sai lệch hiệu suất.

  • Chiến lược này tập trung vào việc theo dõi xu hướng và không trực tiếp nhắm mục tiêu lợi nhuận. Nó cần được kết hợp với các chiến lược nhập / ra khác hoặc các kỹ thuật lấy lợi nhuận.

  • Với các thông số không phù hợp, chiến lược có thể hiển thị giao dịch quá mức hoặc thời gian nắm giữ quá lớn.

Hướng dẫn tối ưu hóa

  • Các chỉ số xác định xu hướng có thể được giới thiệu để tránh những biến động trong các thị trường dao động.

  • Các chỉ số đảo ngược có thể được thử nghiệm để cho phép dừng lại và đảo ngược nhanh hơn khi xu hướng tăng và giảm xen kẽ.

  • Các tham số thời gian ATR có thể tương quan với các đặc điểm của sản phẩm, do đó các sản phẩm khác nhau sử dụng các thời gian ATR khác nhau.

  • Các chỉ số khối lượng có thể được sử dụng để thắt chặt đường dừng lỗ nhanh hơn khi khối lượng giảm đáng kể.

  • Tỷ lệ dừng lỗ có thể được tăng lên, nhưng không quá chặt chẽ để tránh dừng lại ở các lần khôi phục bình thường.

  • Các chỉ số khác có thể được sử dụng để đo đạc động lượng, và tối ưu hóa các tham số để nới lỏng dừng lại khi động lượng yếu.

Tóm lại

Dựa trên khái niệm "Wilder Volatility Trailing Stop", chiến lược này sử dụng chỉ số ATR để thiết kế một hệ thống theo dõi dừng lỗ xu hướng thích nghi cao. Thông qua tối ưu hóa tham số, nó có thể được trang bị cho các sản phẩm giao dịch khác nhau và là một cách tiếp cận dừng lỗ đáng tin cậy và thực tế. Nhưng rủi ro cần được quản lý bằng các cải tiến thêm như bộ lọc xu hướng và các yếu tố khối lượng để làm cho nó mạnh mẽ hơn. Nó cũng cần được kết hợp với các chiến lược khác để tối đa hóa tính hữu ích của các kỹ thuật dừng lỗ.


/*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)

Thêm nữa