Chiến lược dừng lỗ trung bình theo xu hướng

ATR TS
Ngày tạo: 2024-05-24 18:12:01 sửa đổi lần cuối: 2024-05-24 18:12:01
sao chép: 8 Số nhấp chuột: 521
1
tập trung vào
1617
Người theo dõi

Chiến lược dừng lỗ trung bình theo xu hướng

Tổng quan

Chiến lược này sử dụng sóng trung bình thực sự (ATR) làm cơ sở để theo dõi dừng lỗ (TS) để thực hiện mục đích theo dõi xu hướng bằng cách điều chỉnh động vị trí dừng lỗ. Khi giá di chuyển theo hướng thuận lợi, vị trí dừng lỗ cũng sẽ điều chỉnh theo đó, do đó, khóa lợi nhuận đã đạt được; khi giá di chuyển theo hướng bất lợi, vị trí dừng lỗ không thay đổi, và một khi giá chạm vào giá dừng lỗ, vị trí dừng lỗ sẽ bị xóa.

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

  1. ATR được tính như là một cơ sở để theo dõi lỗ. ATR phản ánh sự biến động của thị trường và được sử dụng để đo lường mức độ trung bình của biến động giá.
  2. Khoảng cách dừng nLoss được tính dựa trên tham số ATR và KeyValue. KeyValue là nhân số tùy chỉnh của người dùng, nLoss là nhân của KeyValue và ATR, cho biết khoảng cách dừng là vài lần ATR.
  3. Tính toán động theo dõi điểm dừng xATRTrailingStop. Khi giữ nhiều đầu, đặt nó là “giá cao nhất của dòng K trước và giá đóng cửa - nLoss) lớn hơn”; Khi giữ đầu trống, đặt nó là “giá thấp nhất của dòng K trước và giá đóng cửa + nLoss) nhỏ hơn”.
  4. Tạo tín hiệu mở vị trí. Khi giá đóng cửa vượt qua xATRTrailingStop, hãy làm nhiều; Khi giá đóng cửa vượt qua xATRTrailingStop, hãy làm trống.

Phân tích lợi thế

  1. Vị trí dừng lỗ được điều chỉnh động theo biến động của giá cả, không chỉ khóa lợi nhuận mà còn cho phép lợi nhuận mở rộng theo xu hướng.
  2. Vị trí dừng lỗ dựa trên tính toán ATR, có thể phản ánh khách quan sự biến động của thị trường, linh hoạt hơn và hiệu quả hơn so với dừng cố định được đặt chủ quan.
  3. Bằng cách tăng ATR bằng tham số KeyValue, bạn có thể đặt khoảng cách dừng thích hợp theo sở thích rủi ro của mình. KeyValue lớn hơn sẽ mang lại không gian dừng rộng hơn và tần suất dừng ít hơn.

Phân tích rủi ro

  1. Các chiến lược theo xu hướng không hoạt động tốt trong thị trường bất ổn, thường xuyên dừng lại khi xu hướng đơn phương không rõ ràng, dẫn đến mất tiền nhanh chóng.
  2. Thời gian vào cửa phụ thuộc vào tín hiệu chéo giữa giá đóng cửa và đường dừng động, có thể xảy ra các lỗ nhỏ liên tiếp trong trường hợp xung đột.
  3. Theo dõi chiến lược dừng lỗ không thể tránh được lỗ hổng của Lido hoặc Lido, điều chỉnh vị trí dừng lỗ không theo kịp tốc độ biến đổi giá, dẫn đến tổn thất thực tế lớn hơn nhiều so với tổn thất có thể kiểm soát được dự kiến.

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

  1. Bạn có thể thêm các chỉ số đánh giá xu hướng dựa trên chiến lược, chẳng hạn như hệ thống đường trung bình, chỉ số động lực, v.v., và chỉ tham gia khi xu hướng rõ ràng, tránh giao dịch thường xuyên trong thị trường rung động.
  2. Có thể xem xét việc đưa ra các chiến lược dừng, chẳng hạn như giữ vị trí dựa trên phương thức Kelly, thiết lập một số lệnh dừng rút lợi nhuận cố định, v.v., để giảm khả năng quay trở lại lợi nhuận tiềm năng vào cuối xu hướng.
  3. Đối với lỗ hổng nhảy vọt, bạn có thể đặt giới hạn dừng tối đa, chẳng hạn như số tiền cố định hoặc tỷ lệ phần trăm cố định, một khi đạt đến giới hạn đó, bất kể giá dừng động ở đâu, nó sẽ dừng ngay lập tức.

Tóm tắt

Chiến lược dừng chân theo dõi ATR có thể điều chỉnh vị trí dừng chân theo động lực tùy thuộc vào độ dao động của giá và có thể đạt được hiệu quả tốt trong hoạt động của xu hướng. Tuy nhiên, chiến lược này cũng có nguy cơ không thể đối phó với thị trường rung động, dừng chân quá thường xuyên và khó tránh lỗ hổng nhảy vọt. Đối với các thiếu sót trên, chiến lược có thể được tối ưu hóa và cải thiện từ các khía cạnh của phán đoán xu hướng, chiến lược dừng chân, giới hạn dừng chân tối đa.

Mã nguồn chiến lược
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Long TAP", overlay=true)

// Constants
keyValueDefault = 3.0
keyValueStep = 0.5
atrPeriodDefault = 10

// Inputs
keyValue = input.float(keyValueDefault, title="Key Value")
atrPeriod = input.int(atrPeriodDefault, title="ATR Period")

// Calculations
xATR = ta.atr(atrPeriod)
nLoss = keyValue * xATR

// Trailing Stop Calculation
var float xATRTrailingStop = 0.0
xATRTrailingStop := ta.highest(math.max(nz(xATRTrailingStop[1], 0), close - nLoss), 1)
xATRTrailingStop := ta.lowest(math.min(nz(xATRTrailingStop, 0), close + nLoss), 1)

// Position Calculation
var int pos = 0
pos := nz(pos[1], 0)
if (close[1] < nz(xATRTrailingStop, 0) and close > nz(xATRTrailingStop, 0))
    pos := 1
else if (close[1] > nz(xATRTrailingStop, 0) and close < nz(xATRTrailingStop, 0))
    pos := -1

// Plotting Trailing Stop
var color xcolor = na
if (pos == -1)
    xcolor := color.red
else if (pos == 1)
    xcolor := color.green
plot(xATRTrailingStop, color=xcolor, title="Trailing Stop")

// Buy/Sell Signals
buySignal = ta.crossover(close, xATRTrailingStop)
sellSignal = ta.crossunder(close, xATRTrailingStop)

// Strategy
if (buySignal)
    strategy.entry("Long", strategy.long)
    label.new(bar_index, xATRTrailingStop, text="Buy Signal", color=color.green, style=label.style_label_up, yloc=yloc.belowbar)
if (sellSignal)
    strategy.entry("Short", strategy.short)
    label.new(bar_index, xATRTrailingStop, text="Sell Signal", color=color.red, style=label.style_label_down, yloc=yloc.abovebar)

// Alerts
alertcondition(buySignal, title='UT BOT Buy', message='UT BOT Buy')
alertcondition(sellSignal, title='UT BOT Sell', message='UT BOT Sell')