Chiến lược này sử dụng sự kết hợp của đường trung bình di chuyển nhanh và đường trung bình di chuyển chậm để xác định hướng xu hướng, tạo ra tín hiệu giao dịch khi đường nhanh vượt qua đường chậm, thuộc hệ thống giao dịch đường trung bình di chuyển kép.
Chiến lược này sử dụng các đường trung bình di chuyển nhanh có độ dài ngắn hơn và đường trung bình di chuyển chậm có độ dài dài hơn.
MA chậm được sử dụng để xác định hướng của xu hướng chính. Khi giá nằm trên MA, nó được đánh giá là xu hướng tăng; Khi giá nằm dưới MA, nó được đánh giá là xu hướng giảm.
Trong xu hướng tăng, nếu MA nhanh trên MA chậm, tạo ra tín hiệu mua; trong xu hướng giảm, nếu MA nhanh dưới MA chậm, tạo ra tín hiệu bán.
Sau khi tín hiệu giao dịch được tạo ra, bạn có thể chọn đặt mức dừng để tiếp tục theo dõi lỗ.
Nhóm MA có thể nhận diện được xu hướng một cách hiệu quả.
MA nhanh có thể tạo ra tín hiệu giao dịch nhạy cảm hơn.
Từ từ MA xóa tiếng ồn thị trường, ngăn chặn đột phá giả.
Có thể chọn nhiều thuật toán MA, chẳng hạn như EMA, DEMA, v.v.
Có thể kích hoạt chiến lược dừng lỗ theo dõi dừng lỗ.
MA có vấn đề về độ trễ, có thể gây ra sự trễ tín hiệu. Các tham số nhạy cảm hơn có thể được thử nghiệm.
Điểm dừng có thể bị quá gần và bị phá vỡ gây ra thiệt hại.
Không tính đến khối lượng giao dịch, có nguy cơ giá bị thao tác.
Chỉ số này có thể tạo ra tín hiệu giả. Các yếu tố khác có thể được xác nhận.
Khó khăn trong việc tối ưu hóa tham số. Bạn có thể sử dụng tối ưu hóa từng bước hoặc thuật toán di truyền để tìm tham số tối ưu nhất.
Kiểm tra các tham số MA khác nhau để tìm tham số tối ưu.
Nghiên cứu các phương tiện di chuyển tự điều chỉnh để tăng độ nhạy.
Thêm các chỉ số hoặc yếu tố khác để tối ưu hóa bộ lọc tín hiệu.
Thiết lập cơ chế dừng lỗ động để giảm lỗ linh hoạt hơn.
Tối ưu hóa chiến lược quản lý tiền, chẳng hạn như điều chỉnh vị trí theo động thái ATR
Chiến lược này sử dụng xu hướng phán đoán chéo hai MA để tạo ra tín hiệu giao dịch, có thể thiết lập rủi ro hạn chế dừng lỗ. Lập luận giao dịch của nó đơn giản và rõ ràng, nhưng có những vấn đề như khó chọn tham số. Có thể cải tiến bằng cách tối ưu hóa tham số, lọc chỉ số, chiến lược dừng lỗ, v.v., để chiến lược trở nên ổn định và đáng tin cậy hơn.
/*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)