Xu hướng theo chiến lược với dừng động

Tác giả:ChaoZhang, Ngày: 2023-11-01 13:46:28
Tags:

img

Tổng quan

Chiến lược này tạo ra các tín hiệu giao dịch khi giá vượt qua EMA và sử dụng ATR như một mức dừng lỗ động để quản lý rủi ro.

Làm thế nào nó hoạt động

Lý thuyết chính là:

  1. Tính toán ATR là đường dừng lỗ, giá trị ATR xác định khoảng cách dừng nLoss

  2. Nguồn giá là giá đóng mặc định, sử dụng Heikin Ashi đóng nếu tùy chọn Heikin Ashi h được bật

  3. xATRTrailingStop theo dõi đường dừng mất mát động dựa trên so sánh giá với dừng trước đó

  4. Vị trí pos là 1 cho dài khi giá vượt qua đường dừng lỗ, -1 cho ngắn khi vượt qua dưới, nếu không 0

  5. Các tín hiệu chéo EMA, trên EMA là tín hiệu mua, dưới đây là tín hiệu bán

  6. Nhập giao dịch trên tín hiệu mua/bán, thoát trên tín hiệu ngược lại

  7. Các thanh màu dựa trên vị trí, tín hiệu đánh dấu và đường dừng lỗ

Chiến lược này theo dõi xu hướng với các điểm dừng năng động dựa trên ATR. Nó có thể xác định xu hướng và quản lý rủi ro hiệu quả.

Ưu điểm

Lợi thế là:

  1. Dừng động dựa trên ATR thích nghi với biến động thị trường

  2. Bộ lọc EMA làm giảm tín hiệu sai từ tiếng ồn

  3. Tùy chọn Heikin Ashi lọc tiếng ồn và xác định xu hướng

  4. Clear long/short position avoids whipsaws from trailing stop:

  5. Các trợ giúp trực quan như đường, nhãn và màu sắc

  6. Đơn giản và dễ hiểu logic để sửa đổi

  7. Thời gian ATR có thể tùy chỉnh và nhân cho các thị trường khác nhau

Tóm lại, bằng cách kết hợp theo xu hướng và dừng động, chiến lược này có thể bắt được xu hướng và quản lý rủi ro tốt cho giao dịch xoay.

Rủi ro

Có một số rủi ro cần xem xét:

  1. Các tín hiệu EMA có thể bị chậm trễ khi thiếu các động thái ngắn hạn

  2. Khả năng kích hoạt dừng lỗ thường xuyên trong các thị trường hỗn loạn

  3. Không tính đến chi phí như hoa hồng

  4. Thiếu kiểm soát kích thước vị trí

  5. Hiệu suất phụ thuộc vào điều chỉnh tham số

  6. Rủi ro của các loại whipsaws trên các thị trường khác nhau

  7. Cần theo dõi và can thiệp

Nguy cơ có thể được giảm bằng cách tối ưu hóa các thông số, thêm các bộ lọc, định kích thước vị trí đúng cách, theo dõi hiệu suất và can thiệp khi cần thiết.

Tối ưu hóa

Một số cách để cải thiện chiến lược:

  1. Điều chỉnh các thông số ATR cho các thị trường khác nhau

  2. Kiểm tra các đường trung bình động khác để lọc tín hiệu

  3. Thêm các chỉ số lọc xu hướng cho xác suất cao hơn

  4. Thực hiện giới hạn kích thước vị trí

  5. Thêm các điều kiện nhập như khối lượng, khoảng cách từ MA

  6. Kết hợp chi phí như hoa hồng vào dừng

  7. Tối ưu hóa thời gian vào và ra với nhiều tín hiệu hơn

  8. Đưa ra việc lấy lợi nhuận hoặc dừng lại

  9. Tối ưu hóa tham số tự động

Bằng cách kết hợp nhiều kỹ thuật hơn cho các lối vào, lối ra, bộ lọc và điều chỉnh tham số, chiến lược có thể được củng cố hơn nữa.

Kết luận

Chiến lược này kết hợp các điểm dừng năng động và theo xu hướng một cách đẹp. Với các điểm dừng hiệu quả, theo dõi xu hướng mượt mà, dễ sử dụng và tùy biến, nó phù hợp với xu hướng giao dịch xoay. Nhưng cần quản lý rủi ro, giám sát và điều chỉnh tham số thích hợp. Khi áp dụng tốt trên các thị trường xu hướng, có thể đạt được kết quả tốt. Nhìn chung nó cung cấp một cách tiếp cận đơn giản và thực tế để kết hợp giao dịch xu hướng và quản lý rủi ro.


/*backtest
start: 2022-10-25 00:00:00
end: 2023-10-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 

// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

xATR  = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

strategy.entry("long",   true, when = buy)
strategy.entry("short", false, when = sell)

Thêm nữa