Dựa trên chiến lược theo dõi xu hướng biến động


Ngày tạo: 2024-02-18 10:07:29 sửa đổi lần cuối: 2024-02-18 10:07:29
sao chép: 0 Số nhấp chuột: 538
1
tập trung vào
1617
Người theo dõi

Dựa trên chiến lược theo dõi xu hướng biến động

Tổng quan

Chiến lược này sử dụng chỉ số WaveTrend để đánh giá xu hướng giá và quá mua quá bán, kết hợp với các tín hiệu lọc của chỉ số RSI, sử dụng phương pháp theo dõi xu hướng để thực hiện hoạt động đảo ngược ở vị trí quá mua quá bán.

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

Chiến lược này sử dụng chỉ số WaveTrend để xác định xu hướng giá. Chỉ số WaveTrend dựa trên chỉ số Rainbow được cải thiện để xác định xu hướng giá bằng cách tính toán chênh lệch giữa đường trung bình Heikin-Ashi và giá trị tuyệt đối.

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 Heikin-Ashi được tính toán, d là giá trị trung bình của sự khác biệt giữa đường trung bình Heikin-Ashi và giá trị tuyệt đối.

Chỉ số RSI được sử dụng để đánh giá quá mua quá bán. Công thức tính toán RSI trong mã là:

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))

Mức tiêu chuẩn là 0-100; cao hơn 70 là vùng mua quá mức, thấp hơn 30 là vùng bán quá mức.

Kết hợp cả hai chỉ số này, khi RSI thấp hơn 25, WaveTrend thấp hơn 60 là vùng bán quá mức, báo hiệu nhiều; khi RSI cao hơn 75, WaveTrend cao hơn 60 là vùng mua quá mức, báo hiệu ngắn.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Sử dụng chỉ số WaveTrend để xác định hướng xu hướng giá chính xác và đáng tin cậy.
  2. RSI có thể được lọc để tránh các giao dịch không cần thiết và tăng tỷ lệ chiến thắng.
  3. Sử dụng phương pháp theo dõi xu hướng, bạn có thể tối đa hóa lợi nhuận từ xu hướng giá.
  4. Chiến lược được thiết kế rõ ràng và dễ hiểu, các tham số được thiết lập linh hoạt, có thể được điều chỉnh theo các giống và thị trường khác nhau.
  5. Các chiến lược được thực hiện một cách đơn giản, dễ xác minh trên thực tế và dễ dàng tối ưu hóa khung.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Các chỉ số WaveTrend và RSI đều có độ trễ, có thể bỏ lỡ điểm đảo ngược giá.
  2. Mặc dù có điều kiện lọc, nhưng vẫn có thể tạo ra tín hiệu sai trong trường hợp động đất.
  3. Chiến lược theo dõi và ngăn chặn tổn thất vẫn chưa hoàn thiện và không thể kiểm soát hiệu quả tổn thất đơn lẻ.
  4. Cài đặt tham số hợp lý với đặc tính giống và tần suất giao dịch là rất quan trọng.

Phản ứng:

  1. Kết hợp với các chỉ số phán đoán bổ sung để tối ưu hóa, tăng độ chính xác của tín hiệu.
  2. Tham gia chiến lược dừng lỗ để kiểm soát tổn thất đơn lẻ.
  3. Tìm kiếm sự kết hợp tốt nhất và điều chỉnh chiến lược phù hợp với thị trường.

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

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

  1. Thay thế chỉ số phán đoán hoặc tăng chỉ số phán đoán, tối ưu hóa độ chính xác của tín hiệu. Ví dụ như thêm các chỉ số phán đoán như MACD, KD.

  2. Tối ưu hóa các thiết lập tham số để phù hợp với các loại giao dịch khác nhau. Ví dụ: điều chỉnh chu kỳ mài mòn để tìm kiếm sự kết hợp tham số tốt nhất.

  3. Tham gia theo dõi chiến lược dừng lỗ để kiểm soát hiệu quả các tổn thất đơn lẻ. Ví dụ như dừng phần trăm số dư, dừng di chuyển, v.v.

  4. Xem xét các chiến lược đặt hàng khác nhau. Ví dụ: sử dụng đặt hàng Martingale thay vì đặt hàng số lượng cố định ban đầu.

  5. Tối ưu hóa các tham số trong phạm vi thích ứng, tìm các tham số tối ưu để tăng độ chính xác phán đoán.

Tóm tắt

Chiến lược này có tư duy tổng thể rõ ràng, sử dụng chỉ số cường độ dao động để đánh giá xu hướng giá và lọc hiệu quả tín hiệu giao dịch tiếng ồn. Có nhiều không gian để tối ưu hóa chiến lược, có thể cải thiện từ nhiều góc độ, làm cho chiến lược ổn định và đáng tin cậy hơn. Có thể tối ưu hóa thông qua điều chỉnh tham số, thích ứng với các loại giao dịch khác nhau, đáng để kiểm tra thực tế hơn nữa.

Mã nguồn chiến lược
/*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()