Tài nguyên đang được tải lên... tải...

Xu hướng theo chiến lược dừng theo dõi phạm vi thực trung bình

Tác giả:ChaoZhang, Ngày: 2024-05-24 18:12:01
Tags:ATRTS

img

Tổng quan

Chiến lược này sử dụng phạm vi trung bình thực sự (ATR) làm cơ sở cho Trailing Stop (TS), điều chỉnh động vị trí dừng lỗ để theo xu hướng. Khi giá di chuyển theo hướng thuận lợi, vị trí dừng lỗ được điều chỉnh phù hợp để khóa lợi nhuận; khi giá di chuyển theo hướng bất lợi, vị trí dừng lỗ vẫn không thay đổi, và một khi giá đạt đến giá dừng lỗ, vị trí được đóng.

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

  1. Tính toán ATR là cơ sở cho việc dừng lại. ATR phản ánh sự biến động của thị trường và được sử dụng để đo lường mức độ thay đổi giá trung bình.
  2. Tính toán khoảng cách dừng lỗ nLoss dựa trên tham số ATR và KeyValue. KeyValue là một nhân được xác định bởi người dùng, và nLoss là sản phẩm của KeyValue và ATR, cho thấy khoảng cách dừng lỗ là nhiều lần ATR.
  3. Tính toán vị trí dừng kéo theo động xATRTrailingStop. Đối với vị trí dài, nó được đặt thành số lớn hơn của giá cao nhất của nến trước và (kết thúc - nLoss) ; cho vị trí ngắn, nó được đặt thành số nhỏ hơn của giá thấp nhất của nến trước và (kết thúc + nLoss) .
  4. Tạo tín hiệu vào. Khi giá đóng vượt trên xATRTrailingStop, mua dài; khi giá đóng vượt dưới xATRTrailingStop, mua ngắn.

Phân tích lợi thế

  1. Vị trí dừng lỗ được điều chỉnh năng động với biến động giá, cho phép lợi nhuận được khóa trong khi cũng cho phép lợi nhuận mở rộng khi xu hướng tiếp tục.
  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 và linh hoạt và hiệu quả hơn so với các lệnh dừng lỗ cố định được đặt theo chủ quan.
  3. Bằng cách khuếch đại ATR bằng tham số KeyValue, bạn có thể đặt khoảng cách dừng lỗ phù hợp dựa trên sở thích rủi ro của mình.

Phân tích rủi ro

  1. Các chiến lược theo xu hướng hoạt động kém trong thị trường hỗn loạn, và khi xu hướng đơn phương không rõ ràng, việc dừng lỗ thường xuyên có thể dẫn đến mất tiền nhanh chóng.
  2. Thời gian vào dựa trên tín hiệu chéo giữa giá đóng cửa và đường dừng lỗ động, có thể dẫn đến các stop-loss nhỏ liên tiếp trong một thị trường hỗn loạn.
  3. Các chiến lược dừng lại sau không thể tránh các khoảng trống do tin tức giảm hoặc tăng đáng kể, và tốc độ điều chỉnh của vị trí dừng lỗ không thể theo kịp tốc độ thay đổi giá, dẫn đến tổn thất thực sự lớn hơn nhiều so với các lỗ có thể kiểm soát được dự kiến.

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

  1. Các chỉ số đánh giá xu hướng, chẳng hạn như các hệ thống trung bình động và các chỉ số động lực, có thể được thêm vào chiến lược để chỉ vào thị trường khi xu hướng rõ ràng, tránh giao dịch thường xuyên trên các thị trường hỗn loạn.
  2. Một chiến lược lấy lợi nhuận có thể được xem xét, chẳng hạn như tính toán kích thước vị trí dựa trên công thức Kelly, thiết lập các điểm lợi nhuận cố định cho các điểm dừng lợi nhuận, v.v., để giảm khả năng lợi nhuận tiềm năng vào cuối xu hướng.
  3. Đối với các lỗ hổng mở, một giới hạn dừng lỗ tối đa có thể được thiết lập, chẳng hạn như một số tiền cố định hoặc một tỷ lệ phần trăm cố định.

Tóm lại

Chiến lược ATR trailing stop có thể điều chỉnh động vị trí stop-loss dựa trên quy mô biến động giá và có thể đạt được kết quả tốt trong thị trường xu hướng. Tuy nhiên, chiến lược này cũng có những rủi ro như không thể đối phó với thị trường hỗn loạn, tần suất stop-loss quá cao và khó tránh lỗ hổng. Để giải quyết những thiếu sót này, chiến lược có thể được tối ưu hóa và cải thiện về phán đoán xu hướng, chiến lược lấy lợi nhuận và giới hạn stop-loss tối đa.


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


Có liên quan

Thêm nữa