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

Chiến lược theo dõi đa xu hướng dựa trên ATR với hệ thống tối ưu hóa lấy lợi nhuận và dừng lỗ

Tác giả:ChaoZhang, Ngày: 2024-11-12 16:14:11
Tags:ATRSMATP/SLOHLCMA

img

Tổng quan

Chiến lược này là một hệ thống giao dịch theo xu hướng dựa trên chỉ số Average True Range (ATR), xác định xu hướng thị trường thông qua việc tính toán năng động các phạm vi biến động giá và kết hợp các cơ chế lấy lợi nhuận và dừng lỗ thích nghi để quản lý rủi ro. Chiến lược sử dụng phương pháp phân tích đa giai đoạn, sử dụng nhân ATR để điều chỉnh năng động các kích hoạt tín hiệu giao dịch để theo dõi biến động thị trường chính xác.

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

Chiến lược cốt lõi dựa trên tính toán ATR năng động, sử dụng tham số thời gian ( mặc định 10) để tính phạm vi thực sự của thị trường. Một nhân ATR ( mặc định 3.0) được sử dụng để xây dựng các kênh trên và dưới, kích hoạt tín hiệu giao dịch khi giá vượt qua các kênh này. Cụ thể:

  1. Sử dụng SMA hoặc ATR tiêu chuẩn để tính toán đường cơ bản biến động
  2. Đếm động các kênh trên và dưới như các tham chiếu theo xu hướng
  3. Xác định hướng xu hướng thông qua giá và kênh chéo
  4. Khởi động tín hiệu giao dịch tại các điểm đảo ngược xu hướng
  5. Thực hiện hệ thống lấy lợi nhuận và dừng lỗ dựa trên tỷ lệ phần trăm

Ưu điểm chiến lược

  1. Khả năng thích nghi cao: Điều chỉnh năng động theo biến động thị trường thông qua ATR
  2. Rủi ro được kiểm soát: Các cơ chế lấy lợi nhuận và dừng lỗ dựa trên tỷ lệ phần trăm tích hợp có hiệu quả kiểm soát rủi ro cho mỗi giao dịch
  3. Tính linh hoạt của các thông số: Các thông số chính như thời gian ATR và nhân có thể được điều chỉnh dựa trên các đặc điểm của thị trường
  4. Nhìn rõ: Cung cấp giao diện đồ họa toàn diện bao gồm các dấu hiệu xu hướng và cảnh báo tín hiệu
  5. Quản lý thời gian: Hỗ trợ cửa sổ thời gian giao dịch tùy chỉnh, cải thiện khả năng áp dụng chiến lược

Rủi ro chiến lược

  1. Rủi ro đảo ngược xu hướng: Có thể tạo ra các tín hiệu sai thường xuyên trên các thị trường khác nhau
  2. Độ nhạy của tham số: Sự lựa chọn của thời gian ATR và nhân có ảnh hưởng đáng kể đến hiệu suất chiến lược
  3. Sự phụ thuộc vào môi trường thị trường: Có thể trải qua sự trượt lớn hơn trong thời gian biến động cao
  4. Cài đặt dừng lỗ: Cài đặt dừng tỷ lệ phần trăm cố định có thể không phù hợp với tất cả các điều kiện thị trường

Hướng dẫn tối ưu hóa chiến lược

  1. Đưa ra phân tích nhiều khung thời gian để cải thiện độ chính xác xác xác định xu hướng
  2. Thêm xác nhận chỉ số âm lượng để tăng độ tin cậy tín hiệu
  3. Phát triển các cơ chế thích nghi lấy lợi nhuận và dừng lỗ điều chỉnh năng động theo biến động thị trường
  4. Bao gồm các bộ lọc sức mạnh xu hướng để giảm tín hiệu sai
  5. Tích hợp các chỉ số biến động để tối ưu hóa thời gian nhập cảnh

Tóm lại

Đây là một chiến lược theo xu hướng được thiết kế tốt, đạt được theo dõi biến động thị trường chính xác thông qua chỉ số ATR, kết hợp với các cơ chế lấy lợi nhuận và dừng lỗ để quản lý rủi ro.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Custom Buy BID Strategy", overlay=true, shorttitle="Buy BID by MR.STOCKVN")

// Cài đặt chỉ báo
Periods = input.int(title="ATR Period", defval=10)
src = input.source(hl2, title="Source")
Multiplier = input.float(title="ATR Multiplier", step=0.1, defval=3.0)
changeATR = input.bool(title="Change ATR Calculation Method?", defval=true)
showsignals = input.bool(title="Show Buy Signals?", defval=false)
highlighting = input.bool(title="Highlighter On/Off?", defval=true)
barcoloring = input.bool(title="Bar Coloring On/Off?", defval=true)

// Tính toán ATR
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2

// Tính toán mức giá mua bán dựa trên ATR
up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Vẽ xu hướng
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_line, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1

// Hiển thị tín hiệu mua
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)

// Cài đặt màu cho thanh nến
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)

// Điều kiện thời gian giao dịch
FromMonth = input.int(defval=9, title="From Month", minval=1, maxval=12)
FromDay = input.int(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input.int(defval=2018, title="From Year", minval=999)
ToMonth = input.int(defval=1, title="To Month", minval=1, maxval=12)
ToDay = input.int(defval=1, title="To Day", minval=1, maxval=31)
ToYear = input.int(defval=9999, title="To Year", minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)

// Cửa sổ thời gian giao dịch
window() => (time >= start and time <= finish)

// Điều kiện vào lệnh Buy
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when=window())

// Điều kiện chốt lời và cắt lỗ có thể điều chỉnh
takeProfitPercent = input.float(5, title="Take Profit (%)") / 100
stopLossPercent = input.float(2, title="Stop Loss (%)") / 100

// Tính toán giá trị chốt lời và cắt lỗ dựa trên giá vào lệnh
if (strategy.position_size > 0)
    strategy.exit("Take Profit", "BUY", limit=strategy.position_avg_price * (1 + takeProfitPercent), stop=strategy.position_avg_price * (1 - stopLossPercent))

// Màu nến theo xu hướng
buy1 = ta.barssince(buySignal)
color1 = buy1[1] < na ? color.green : na
barcolor(barcoloring ? color1 : na)


Có liên quan

Thêm nữa