Chiến lược theo dõi xu hướng trung bình di chuyển kép là một chiến lược sử dụng sự kết hợp của các trung bình di chuyển nhanh và chậm để xác định xu hướng thị trường, và tạo ra các tín hiệu giao dịch khi hướng xu hướng thay đổi. Nó kết hợp các chỉ số trung bình di chuyển và các chỉ số kênh giá để xác định xu hướng, có thể lọc hiệu quả tiếng ồn thị trường và xác định hướng xu hướng.
Chiến lược theo dõi xu hướng trung bình di chuyển kép sử dụng hai trung bình di chuyển - trung bình di chuyển nhanh (5 giai đoạn) và trung bình di chuyển chậm (21 giai đoạn). MA nhanh được sử dụng để tạo ra tín hiệu giao dịch trong khi MA chậm được sử dụng để xác định hướng xu hướng thị trường. Khi MA nhanh vượt qua trên MA chậm, một tín hiệu mua được tạo ra. Khi MA nhanh vượt qua dưới MA chậm, một tín hiệu bán được tạo ra.
Chiến lược này cũng sử dụng một chỉ số kênh giá để giúp xác định xu hướng. Kênh giá được xác định bởi trung bình động của giá cao nhất và thấp nhất. Khi giá vượt qua kênh, nó chỉ ra sự đảo ngược xu hướng. Chiến lược này sử dụng hai kênh giá với thời gian lần lượt là 21 và 5, phù hợp với thời gian MA.
Khi xác định tín hiệu mua và bán, chiến lược yêu cầu các ngọn nến màu đỏ / xanh liên tiếp xuất hiện (có thể điều chỉnh bởi người dùng) như một điều kiện lọc bổ sung.
Tóm lại, logic để xác định xu hướng trong chiến lược này là:
Bằng cách đánh giá xu hướng qua các khung thời gian, tiếng ồn thị trường có thể được lọc hiệu quả và xác nhận hướng xu hướng.
Chiến lược theo dõi xu hướng trung bình di chuyển kép có những lợi thế sau:
Tóm lại, chiến lược này có sự ổn định tổng thể tương đối tốt và hoạt động tốt trên các thị trường có xu hướng mạnh.
Chiến lược theo dõi xu hướng trung bình di chuyển kép cũng có một số rủi ro, chủ yếu là:
Các biện pháp tương ứng để giảm rủi ro bao gồm:
Có chỗ cho việc tối ưu hóa thêm chiến lược, chủ yếu theo các hướng như:
Các hướng tối ưu hóa này có thể cải thiện thêm sự ổn định, khả năng thích nghi và mức độ thông minh của chiến lược.
Kết luận, chiến lược theo dõi xu hướng trung bình di chuyển kép là một chiến lược theo xu hướng tương đối mạnh mẽ. Nó kết hợp các đường trung bình di chuyển và các kênh giá để xác định hướng và sức mạnh xu hướng, tạo ra các tín hiệu giao dịch với MA nhanh. Các bộ lọc nến bổ sung cũng giúp tránh các tín hiệu sai. Các thông số điều chỉnh cho phép thích nghi với môi trường thị trường khác nhau. Ngoài ra còn có nhiều phòng cho các tối ưu hóa hơn nữa để xây dựng một chiến lược giao dịch tự động đáng tin cậy, thông minh.
/*backtest start: 2023-12-24 00:00:00 end: 2024-01-23 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "Noro's Trend MAs Strategy v1.8", shorttitle = "Trend MAs str 1.8", 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, %") useohlc4 = input(false, defval = false, title = "Use OHLC4") usefastsma = input(true, "Use fast MA Filter") fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period") slowlen = input(21, 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?") src = useohlc4 == true ? ohlc4 : close fastsma = ema(src, 5) //PriceChannel 1 lasthigh = highest(src, slowlen) lastlow = lowest(src, slowlen) center = (lasthigh + lastlow) / 2 //PriceChannel 2 lasthigh2 = highest(src, fastlen) lastlow2 = lowest(src, fastlen) center2 = (lasthigh2 + lastlow2) / 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] trend1 = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend1[1] trend2 = low > center2 and low[1] > center2[1] ? 1 : high < center2 and high[1] < center2[1] ? -1 : trend1[1] trend = trend1 == 1 and trend2 == 1 ? 1 : trend2 == -1 and trend2 == -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 up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0 dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0 //Lines colorfastsma = usefastsma == true ? red : na plot(fastsma, color = colorfastsma, title = "Fast MA") plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA") plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2") //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)