Chiến lược theo dõi xu hướng biến động

Tác giả:ChaoZhang, Ngày: 2024-02-18 10:07:29
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số WaveTrend để xác định xu hướng giá và tình huống mua quá mức / bán quá mức. Nó kết hợp chỉ số RSI để lọc tín hiệu và áp dụng phương pháp theo dõi xu hướng để thực hiện các hoạt động chống xu hướng ở mức mua quá mức / bán quá mức.

Chiến lược logic

Chiến lược này sử dụng chỉ số WaveTrend để xác định hướng xu hướng giá. Chỉ số WaveTrend được cải thiện dựa trên chỉ số Rainbow. Nó đánh giá hướng xu hướng giá bằng cách tính toán sự khác biệt giữa đường trung bình động Heikin-Ashi và giá trị tuyệt đối của giá. Nó tạo ra các tín hiệu giao dịch bằng cách kết hợp chỉ số RSI để xác định tình huống mua quá mức / bán quá mức.

Cụ thể, công thức WaveTrend trong chiến lược là:

esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10) 
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

Trong đó esa là đường trung bình di chuyển Heikin-Ashi được tính toán, d là trung bình của sự khác biệt giữa đường trung bình di chuyển Heikin-Ashi và giá trị tuyệt đối của giá. ci là cái gọi là phạm vi thích nghi, phản ánh sự biến động của giá. wt là đường trung bình di chuyển của ci, xác định hướng xu hướng giá và là chỉ số chính cho dài và ngắn.

Chỉ số RSI được sử dụng để xác định các tình huống mua quá mức / bán quá mức.

rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown)) 

Giá trị tiêu chuẩn của nó là 0-100. trên 70 là mua quá mức và dưới 30 là bán quá mức.

Kết hợp với hai chỉ số này, khi RSI dưới 25 và WaveTrend dưới -60, nó được bán quá để mua dài. Khi RSI trên 75 và WaveTrend trên 60, nó được mua quá để mua ngắn.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Chỉ số WaveTrend có thể xác định chính xác và đáng tin cậy hướng xu hướng giá.
  2. Các bộ lọc RSI có thể tránh các giao dịch không cần thiết và cải thiện tỷ lệ thắng.
  3. Phương pháp theo dõi xu hướng có thể tối đa hóa lợi nhuận từ việc bắt xu hướng giá.
  4. Ý tưởng chiến lược đơn giản và rõ ràng, các tham số linh hoạt để điều chỉnh cho các sản phẩm và thị trường khác nhau.
  5. Dễ thực hiện và thử nghiệm trong giao dịch trực tiếp, tốt cho tối ưu hóa hơn nữa.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro:

  1. Cả WaveTrend và RSI đều có một chút chậm trễ, có thể bỏ lỡ các điểm đảo ngược giá.
  2. Các tín hiệu sai vẫn có thể xảy ra trong các thị trường bên cạnh mặc dù các bộ lọc.
  3. Thiếu phương pháp dừng lỗ hiệu quả để kiểm soát lỗ đơn.
  4. Điều chỉnh tham số hợp lý cần phù hợp với các đặc điểm và tần suất giao dịch.

Giải pháp:

  1. Thêm các chỉ số cho tối ưu hóa kết hợp để cải thiện độ chính xác tín hiệu.
  2. Thêm các chiến lược dừng lỗ để kiểm soát lỗ đơn.
  3. Tìm kết hợp các tham số tối ưu để điều chỉnh chiến lược.

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

Chiến lược có thể được tối ưu hóa theo các hướng sau:

  1. Thay đổi hoặc thêm các chỉ số đánh giá để cải thiện độ chính xác tín hiệu, ví dụ như MACD, KD v.v.

  2. Tối ưu hóa cài đặt tham số để điều chỉnh các sản phẩm khác nhau, ví dụ: điều chỉnh thời gian trơn tru.

  3. Thêm các chiến lược dừng lỗ theo dõi để kiểm soát lỗ duy nhất, ví dụ: tỷ lệ dừng lỗ phần trăm, dừng lỗ kéo dài, v.v.

  4. Xem xét các chiến lược kim tự tháp khác nhau, ví dụ: Martingale thay vì số lượng cố định.

  5. Tối ưu hóa các tham số phạm vi thích nghi để cải thiện độ chính xác phán đoán.

Kết luận

Ý tưởng tổng thể của chiến lược là rõ ràng, sử dụng các chỉ số biến động để xác định xu hướng giá và lọc tiếng ồn một cách hiệu quả. Có không gian tối ưu hóa trong nhiều khía cạnh để làm cho chiến lược mạnh mẽ hơn. Thông qua điều chỉnh tham số, nó có thể được điều chỉnh cho các sản phẩm khác nhau và đáng để thử nghiệm trực tiếp hơn nữa.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's WaveTrender Strategy v1.0", shorttitle = "WaveTrender str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
showarr = input(true, defval = true, title = "Show Arrows")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//RSI
rsiup = rma(max(change(close), 0), 14)
rsidown = rma(-min(change(close), 0), 14)
rsi = rsidown == 0 ? 100 : rsiup == 0 ? 0 : 100 - (100 / (1 + rsiup / rsidown))

//WaveTrend
esa = ema(hlc3, 10)
d = ema(abs(hlc3 - esa), 10)
ci = (hlc3 - esa) / (0.015 * d)
wt = ema(ci, 21)

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
overs = rsi < 25 and wt < -60
overb = rsi > 75 and wt > 60
up1 = (strategy.position_size == 0 or close < strategy.position_avg_price) and overs and bar == -1
dn1 = (strategy.position_size == 0 or close > strategy.position_avg_price) and overb and bar == 1
exit = (strategy.position_size > 0 and overs == false) or (strategy.position_size < 0 and overb == false)

//Arrows
col = exit ? black : up1 or dn1 ? blue : na
needup = up1
needdn = dn1
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if exit
    strategy.close_all()

Thêm nữa