Xu hướng trung bình di chuyển kép theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-09-18 21:57:00
Tags:

Tổng quan

Chiến lược này sử dụng các đường trung bình di chuyển nhanh và chậm để xác định hướng xu hướng và tạo ra tín hiệu khi MA nhanh vượt qua MA chậm, tạo ra một hệ thống MA kép.

Nguyên tắc

Chiến lược sử dụng MA nhanh ngắn hơn và MA chậm hơn.

MA chậm xác định hướng xu hướng chính. Giá trên MA là xu hướng tăng, giá dưới đó là xu hướng giảm.

Trong xu hướng tăng, tín hiệu dài được tạo ra khi MA nhanh vượt qua trên MA chậm. Trong xu hướng giảm, tín hiệu ngắn khi MA nhanh vượt qua dưới MA chậm.

Sau khi báo hiệu, dừng theo dõi có thể được bật tùy chọn.

Ưu điểm

  1. Sự kết hợp MA nhanh và chậm xác định hiệu quả xu hướng.

  2. MA nhanh tạo ra các tín hiệu giao dịch nhạy cảm.

  3. Slow MA lọc tiếng ồn ngăn chặn sự phá vỡ giả.

  4. Các loại MA khác nhau như EMA, DEMA có thể được sử dụng.

  5. Đánh giá stop loss có thể được kích hoạt.

Rủi ro và giảm thiểu

  1. Sự chậm trễ MA có thể làm chậm tín hiệu.

  2. Stop loss có thể quá chật chội dẫn đến thoát sớm.

  3. Số lượng được bỏ qua, nguy cơ thao túng giá tồn tại.

  4. Chỉ có chỉ báo có khả năng phát tín hiệu sai, cần xác nhận thêm.

  5. Tối ưu hóa tham số khó khăn. Tối ưu hóa từng bước hoặc GA có thể tìm các tham số tối ưu.

Cơ hội gia tăng

  1. Kiểm tra các loại và thông số MA khác nhau để có kết quả tốt nhất.

  2. Nghiên cứu các đường trung bình chuyển động thích nghi để có độ nhạy tốt hơn.

  3. Thêm các chỉ số hoặc yếu tố khác để lọc tín hiệu.

  4. Xây dựng dừng động cho dừng linh hoạt.

  5. Tối ưu hóa quản lý tiền như định hình vị trí động với ATR.

Tóm lại

Chiến lược này giao dịch hai MA chéo để xác định xu hướng, với các điểm dừng hạn chế rủi ro. Logic đơn giản và rõ ràng nhưng lựa chọn tham số và các vấn đề khác tồn tại. Cải thiện thông qua tối ưu hóa, lọc, dừng có thể cải thiện độ bền. Nó phục vụ như một hệ thống theo xu hướng cơ sở hợp lý.


/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.7", shorttitle = "Trend MAs str 1.7", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
type = input(7, defval = 7, minval = 1, maxval = 7, title = "Type of Slow MA")
src = input(close, defval = close, title = "Source of Slow MA")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")

fastsma = ema(src, fastlen)

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Trend
ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
trend = low > ma and low[1] > ma[1] and low[2] > ma[2] ? 1 : high < ma and high[1] < ma[1] ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Signals
min = min(open, close)
max = max(open, close)
up = trend == 1 and (low < fastsma or usefastsma == false) and redbars == 1 ? 1 : 0
dn = trend == -1 and (high > fastsma or usefastsma == false) and greenbars == 1 ? 1 : 0

//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(ma, color = blue, linewidth = 3, transp = 0, title = "Slow MA")

//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')

//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
    strategy.exit("Stop Long", "Long", stop = stoplong)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    strategy.exit("Stop Short", "Short", stop = stopshort)

Thêm nữa