Chiến lược theo dõi ngừng biến động

Tác giả:ChaoZhang, Ngày: 2023-12-01 17:53:36
Tags:

img

Tổng quan

Đây là một chiến lược dừng lỗ theo dõi xu hướng dựa trên biến động giá. Nó sử dụng phạm vi trung bình thực sự (ATR) để thiết lập các đường dừng lỗ cho biến động giá. ATR phản ánh sự biến động và mức độ rủi ro của giá. Khi giá vượt quá đường dừng lỗ, chiến lược đánh giá sự đảo ngược xu hướng và thực hiện các hành động tương ứng để mở các vị trí hoặc dừng lỗ.

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

Chiến lược đầu tiên tính toán phạm vi trung bình thực sự (ATR) trong một khoảng thời gian nhất định. Sau đó dựa trên hướng xu hướng giá hiện tại, nếu là xu hướng tăng, đường dừng lỗ được đặt ở mức giá cao nhất hiện tại trừ n lần ATR; nếu là xu hướng giảm, đường dừng lỗ được đặt ở mức giá thấp nhất hiện tại cộng với n lần ATR. Giá trị n có thể được điều chỉnh thông qua các tham số để kiểm soát khoảng cách giữa đường dừng lỗ và giá.

Khi giá vượt qua đường dừng lỗ của xu hướng tăng hoặc xu hướng giảm, xu hướng được đánh giá là đã thay đổi. Tại thời điểm này, chiến lược xóa các vị trí để dừng lỗ và thiết lập một đường dừng lỗ mới dựa trên hướng của xu hướng mới.

Tóm lại, chiến lược sử dụng biến động giá để thiết lập các đường dừng lỗ để đạt được đánh giá chính xác về những thay đổi xu hướng.

Ưu điểm của Chiến lược

  • Sử dụng các đặc điểm biến động giá để đánh giá xu hướng và nắm bắt chính xác các điểm chuyển đổi giá
  • Dừng lỗ kịp thời và chuyển vị trí để giảm rủi ro đảo ngược thị trường
  • Điều chỉnh tham số linh hoạt để điều khiển khoảng cách giữa đường dừng lỗ và biến động giá
  • Các thông số có thể được tối ưu hóa cho các sản phẩm cụ thể để thích nghi tốt hơn

Rủi ro của chiến lược

  • Nguy cơ đánh giá sai do sự đột phá không hợp lệ. Giá có thể có sự đột phá không hợp lệ không bền vững, gây ra sự đánh giá sai về những thay đổi xu hướng
  • Ví dụ: khi giá trị n quá lớn, đường dừng lỗ quá gần và biến động nhỏ có thể kích hoạt nó
  • Hiệu ứng dừng lỗ có thể kém đối với các sản phẩm biến động thấp như tiền tệ. Giá trị ATR nhỏ hơn có nghĩa là các đường dừng lỗ gần với giá

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

  • Các chỉ số phụ như khối lượng giao dịch hoặc tăng biến động có thể được đưa vào để tránh đánh giá sai về các vụ phá vỡ không hợp lệ
  • Điều chỉnh giá trị n dựa trên các đặc điểm của các sản phẩm khác nhau để làm cho khoảng cách dừng mất mát phù hợp hơn
  • Thời gian ATR cũng có thể được tối ưu hóa để chọn tham số thời gian phù hợp nhất để đánh giá sự biến động chênh lệch giá

Tóm lại

Nhìn chung, đây là một ứng dụng thuật toán tốt để thiết lập các đường dừng lỗ dựa trên biến động giá. Độ chính xác của nó trong việc đánh giá xu hướng giá cao và nó có thể nắm bắt các điểm chuyển đổi chính của xu hướng. Nó cũng cung cấp một số không gian để điều chỉnh tham số để thích nghi tốt hơn. Là một chiến lược dừng lỗ, nó có thể tránh hiệu quả rủi ro đảo ngược thị trường và có giá trị áp dụng trong giao dịch trực tiếp.


/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
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/
// © laptevmaxim92

//@version=4
strategy("Volatility stop strategy", overlay=true)

length = input(20)
mult = input(2, step = 0.1)
utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2039, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

atr_ = atr(length)
max_ = 0.0
min_ = 0.0
max1 = 0.0
max1 := max(nz(max_[1]), close)
min1 = 0.0
min1 := min(nz(min_[1]), close)
vstop = 0.0
is_uptrend = false
is_uptrend_prev = false
is_uptrend_prev := nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? color.green : color.red, linewidth=2)

longCondition = is_uptrend
if (longCondition and use_date)
    strategy.entry("BUY", strategy.long)

shortCondition = not is_uptrend
if (shortCondition and use_date)
    strategy.entry("SELL", strategy.short)
    
if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)

Thêm nữa