Chiến lược hệ thống đảo ngược dao động của EMA

Tác giả:ChaoZhang, Ngày: 2023-10-18 12:23:13
Tags:

img

Tổng quan

Chiến lược này sử dụng một hệ thống trung bình động để xác định hướng xu hướng và kết hợp chỉ số biến động để tránh thị trường dao động biến động thấp, với lối ra đèn chùm để quản lý giao dịch.

Nguyên tắc

Chiến lược này đánh giá hướng xu hướng bằng cách so sánh trung bình di chuyển nhanh và chậm. Nó đi dài khi MA nhanh vượt qua trên MA chậm, và đi ngắn khi MA nhanh vượt qua dưới MA chậm. Để tránh các thị trường dao động, chiến lược cũng kết hợp các dải Bollinger. Nó tạo ra tín hiệu giao dịch khi tỷ lệ thay đổi chiều rộng BB vượt quá ngưỡng. Cuối cùng, chiến lược sử dụng việc ra khỏi Chandelier như là dừng lỗ để tránh bị mắc kẹt trong các thị trường giới hạn phạm vi.

Cụ thể, logic giao dịch là như sau:

  1. Xác định MA nhanh (định mục 20 ngày) và MA chậm (định mục 50 ngày).

  2. Tính toán tỷ lệ thay đổi chiều rộng của dải Bollinger (bên mặc định 40 ngày, 2 độ lệch chuẩn).

  3. Đi dài khi MA nhanh vượt qua MA chậm và tỷ lệ thay đổi chiều rộng BB vượt quá ngưỡng mặc định 9%.

  4. Đi ngắn khi MA nhanh vượt qua dưới MA chậm và tỷ lệ thay đổi chiều rộng BB vượt quá ngưỡng mặc định 9%.

  5. Tính toán Chandelier dừng dài và ngắn.

  6. Dừng dài là cao nhất cao - ATR * nhân. Dừng ngắn là thấp nhất thấp + ATR * nhân.

Ưu điểm

  1. Hệ thống MA có hiệu quả theo dõi xu hướng.

  2. BB thay đổi chiều rộng lọc ra dao động, giảm các giao dịch không cần thiết.

  3. Chandelier thoát khỏi lỗ dừng kịp thời để tránh bị mắc kẹt.

  4. Nhiều thông số điều chỉnh để tối ưu hóa.

  5. Logic rõ ràng, dễ hiểu và thực hiện.

Rủi ro

  1. Sự chậm trễ MA có thể bỏ lỡ sự đảo ngược nhanh chóng.

  2. Các thông số BB không chính xác có thể lọc các tín hiệu hợp lệ.

  3. Việc mua bán quá nhiều sẽ gây ra giao dịch quá mức.

  4. Tối ưu hóa tham số không đầy đủ dẫn đến rủi ro.

  5. Không thể thích nghi với những thay đổi thị trường cực đoan từ các sự kiện lớn.

Tối ưu hóa

  1. Kiểm tra các kết hợp MA khác nhau để tìm các thông số tối ưu.

  2. Kiểm tra các khoảng thời gian BB khác nhau cho bộ lọc biến động tốt nhất.

  3. Thêm các chỉ số khác để xác nhận nhập cảnh.

  4. giới thiệu dừng động để theo dõi thị trường tốt hơn.

  5. Sử dụng máy học để tự động tối ưu hóa cho thị trường thay đổi.

Tóm lại

Chiến lược này tích hợp hệ thống MA, chỉ số BB và lối ra đèn chùm để tạo thành một hệ thống theo xu hướng tương đối ổn định. Tối ưu hóa tham số thích hợp có thể đạt được kết quả tốt. Nhưng rủi ro đảo ngược xu hướng và dao động vẫn còn. Học máy có thể tăng cường độ bền hơn nữa. Nhìn chung là một chiến lược tốt cho việc học.


/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 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/
// © juanchez

//@version=4
strategy("CHI", overlay = true, close_entries_rule = "ANY")

n = input(title= "highest high o lowest low period", defval= 22)
f= input(title= "multiplicador", defval= 4)
long = highest(high, n) - atr(n)*f
short= lowest(low, n) + atr(n)*f
plot(long, color= color.red)
plot(short, color= color.green)

//moving averages
period= input(title= "moving averages period", defval= 50)
period2= input(title= "moving averages period2", defval= 20)
type= input(title= "moving averages type", options= ["sma", "ema"], defval= "ema")

//moving average function
mo(p, t) =>
    if t == "sma"
        sma(close[barstate.islast ? 1: 0], p)
    else  if t== "ema"
        ema(close[barstate.islast ? 1: 0], p)

m= mo(period, type)
m2= mo(period2, type)

trend= m2 > m 

plot(m, color = color.maroon, linewidth = 3)
plot(m2, linewidth= 3)


//BOLLINGER BANDS ENTRIES
bb1_period= input(title= "Bollinger bands 1 period", defval=40, minval=1)
bb1_source=input(title="Bollinger band 1 source", defval=close)
bb1_multi=input(title="Bollinger Bands 1 factor", defval=2, minval=1, step=0.1)
show_bb1= input(title="Show Bollinger bands 1", defval=false)
//BOLLINGER BANDS
_bb(src, lenght, multi)=>
    float moving_avg= sma(src[barstate.islast? 1: 0], lenght)
    float deviation= stdev(src[barstate.islast? 1: 0], lenght)
    float lowerband = moving_avg - deviation*multi
    float upperband = moving_avg + deviation*multi
    
    [moving_avg, lowerband, upperband]
    
[bb1, lowerband1, upperband1]= _bb(bb1_source,  bb1_period, bb1_multi)

//FIRST BAND    
plot(show_bb1? bb1 : na, title="BB1 Moving average", linewidth= 3, color= color.fuchsia)
plot(show_bb1? upperband1 : na, title="BB1 Upper Band", linewidth= 3, color= color.green)
plot(show_bb1? lowerband1 : na, title="BB1 Lower Band", linewidth= 3, color= color.red)

//BB's Width threshold 
thresh= input(title= "widen %", defval= 9, minval = 0, step = 1, maxval= 100)

widht= (upperband1 - lowerband1)/bb1
roc= change(widht)/widht[1]*100
cross=crossover(roc, thresh)

// entry
//long
elong= input(true, title= "enable long")
longcondition= m2 > m and cross and elong

//short
eshort= input(true, title= "enable short")
shortcondition= m2 < m and cross and eshort


plotshape(longcondition? true: false , location= location.belowbar, style= shape.labelup, size= size.small, color= color.green, text= "Buy", textcolor= color.white)
plotshape(shortcondition? true: false , location= location.abovebar, style= shape.labeldown, size= size.small, color= color.red, text= "Sell", textcolor= color.white)

out= crossunder(close, long)
outt= crossover(close, short)

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = out)

strategy.entry("short", strategy.short, when = shortcondition)
strategy.close("short", when = outt)

Thêm nữa