Machine Learning Moving Average – Chỉ báo TradingView | Code2Trade

Chỉ báo Machine Learning Moving Average trên TradingView

Đường trung bình có trọng số do Gaussian Process Regression nặn ra, kèm dải sai số và một trạng thái tăng/giảm tự chốt.

Tóm tắt nhanh: Chỉ báo Machine Learning Moving Average (indicator) vẽ một đường trung bình mà trọng số của từng nến không do bạn chọn, mà được rút ra từ Gaussian Process Regression — hồi quy quá trình Gauss, một kỹ thuật học máy. Quanh đường đó là một dải sai số rộng bằng 2 lần sai số tuyệt đối trung bình, và một trạng thái tăng/giảm chỉ lật khi giá đóng cửa xuyên ra ngoài dải đúng chiều đường đang đi. Bản chuyển thành chiến lược (strategy) đã backtest 365 ngày trên vàng XAUUSD: 742 lệnh, tỉ lệ thắng 41,91%, profit factor 1,301, sụt vốn tối đa 3,49%.

Chỉ báo Machine Learning Moving Average là gì? Ý tưởng đằng sau nó

Mọi đường trung bình đều là phép nhân có trọng số: SMA cho 100 nến gần nhất trọng số bằng nhau, EMA cho nến mới trọng số lớn hơn theo hàm mũ. Cả hai bộ trọng số đó đều do con người áp đặt sẵn. Câu hỏi mà chỉ báo này đặt ra là: nếu để toán học tự nặn ra bộ trọng số tối ưu thì nó trông thế nào?

Câu trả lời đến từ Gaussian Process Regression (GPR, hồi quy quá trình Gauss). Giả định nền tảng của GPR là: giá tại hai thời điểm gần nhau thì có liên hệ chặt với nhau, càng xa nhau thì liên hệ càng lỏng, và mức độ "chặt" đó giảm theo một đường cong hình chuông. Từ giả định đó, GPR giải ra được bộ trọng số khiến đường cong vừa bám sát dữ liệu vừa giữ được độ mượt — thay vì phải đánh đổi "nhanh nhưng nhiễu" (MA ngắn) với "mượt nhưng trễ" (MA dài) như cách chọn chu kỳ thông thường.

Lớp giả định thứ hai nằm ở dải bao quanh đường. Chỉ báo đo xem bình thường giá cách đường hồi quy bao xa, lấy đó làm thước "sai lệch bình thường". Giá đi lệch trong phạm vi ấy thì coi là nhiễu; chỉ khi giá đóng cửa vượt hẳn ra ngoài và bản thân đường hồi quy cũng đang đi cùng chiều, chỉ báo mới coi đó là một cú đổi cục diện thật. Hai điều kiện phải cùng đúng chính là cách nó lọc bớt tín hiệu giả.

Nếu bạn đang so sánh nhiều cách làm mượt giá để bắt xu hướng, các biến thể đường trung bình và kênh hồi quy khác nằm trong kho chỉ báo TradingView miễn phí của Code2Trade.

Machine Learning Moving Average hiển thị những gì trên chart

Kẻ vẽ hiển thị

  • Đường chính "End Point GPR" — đường trung bình do hồi quy nặn ra, vẽ đè lên chart giá. Nó đổi màu theo trạng thái: xanh dương khi đang ở trạng thái tăng, hồng đậm khi ở trạng thái giảm. Màu đổi ngay giữa đường, không cần chờ hết nhịp.
  • Chấm tròn đánh dấu điểm lật — một dấu chấm to vẽ đúng tại cây nến mà trạng thái vừa đổi chiều, cùng màu với trạng thái mới. Đây là mốc trực quan duy nhất cho biết "chính xác ở đây cục diện vừa đổi".
  • Hai dải tô chuyển sắc — phía trên đường là dải xanh nhạt đậm dần khi lên tới biên trên rồi nhạt dần về phía đường; phía dưới là dải hồng nhạt đậm dần khi xuống tới biên dưới. Hai biên này không được vẽ thành đường viền — chúng chỉ tồn tại dưới dạng vùng tô, nên bạn thấy một quầng sáng ôm lấy đường chứ không thấy hai đường kẻ rõ ràng.

Cảnh báo (alert)

  • Chỉ báo gốc không khai báo alert nào — không có lệnh alertcondition() trong code. Muốn nhận thông báo khi trạng thái lật, bạn phải tự tạo alert thủ công trên TradingView dựa trên đường đã vẽ, hoặc thêm vài dòng code.

Cách giao dịch với đường trung bình Machine Learning Moving Average

Kịch bản mua (long)

Chờ chấm tròn xanh xuất hiện — đó là lúc giá đóng cửa vừa vượt lên trên biên trên và đường hồi quy cũng đang hướng lên. Vào lệnh ngay tại nến đó thường phải chịu giá đã chạy khá xa, nên cách đỡ rủi ro hơn là chờ giá hồi về chạm lại chính đường hồi quy rồi mới mua, vì trong trạng thái tăng đường này hay đóng vai trò đỡ động. Đặt cắt lỗ dưới biên dưới của dải: với vàng XAUUSD quanh mốc 4.500, dải mặc định rộng khoảng 12 điểm mỗi bên, nên điểm cắt lỗ nằm cách đường chừng 12–15 điểm. Chốt lời khi chấm tròn hồng ngược chiều xuất hiện, hoặc theo bội số rủi ro bạn tự đặt.

Kịch bản bán (short)

Đối xứng hoàn toàn: chấm tròn hồng báo giá đóng cửa đã thủng biên dưới trong lúc đường hồi quy đang đi xuống. Bán khi giá bật lên chạm lại đường, cắt lỗ trên biên trên của dải, thoát khi trạng thái lật lại sang xanh.

Khi nào KHÔNG nên dùng

  • Thị trường đi ngang biên hẹp. Trạng thái chỉ lật khi giá đóng cửa ra hẳn ngoài dải rộng 2 lần sai số trung bình. Trong vùng tích luỹ, giá hiếm khi làm được điều đó, nên màu đường có thể đứng yên hàng trăm nến dù xu hướng thực tế đã đổi vài lần. Đường vẫn đẹp, nhưng màu của nó lúc đó là thông tin cũ.
  • Khoảng 200 nến đầu của chart. Đường chỉ bắt đầu có giá trị sau 100 nến, còn dải sai số cần thêm 100 nến nữa mới đủ dữ liệu. Đừng đọc tín hiệu ở đoạn đầu chart hay trên khung thời gian mà sàn chỉ cấp vài trăm nến lịch sử.
  • Đừng chạm vào ô nhập đầu tiên theo hướng giảm về 0. Giới hạn dưới của nó là 0, nhưng đặt đúng 0 sẽ làm script lỗi và biến mất khỏi chart — chi tiết ở phần dưới.

Đường hồi quy này cho biết xu hướng nền chứ không cho biết vùng giá nào đáng quan tâm, nên nhiều người ghép nó với một chỉ báo cấu trúc hoặc khối lượng; bạn có thể gộp nhiều chỉ báo TradingView thành một mà không cần biết code.

Vì chỉ báo không có alert sẵn, một cách thay thế là để AI trực tiếp nhìn chart và báo khi chấm tròn xuất hiện — xem cách kết nối AI với TradingView chỉ bằng 1 click.

Cách hoạt động của Machine Learning Moving Average: từ kernel tới đường vẽ

Điều bất ngờ nhất khi đọc code: phần "học máy" chỉ chạy đúng một lần, tại cây nến đầu tiên của chart, và không bao giờ chạy lại. Toàn bộ khối dựng ma trận nằm trong barstate.isfirst. Kết quả của nó là 100 con số — và 100 con số đó được dùng lại y nguyên cho mọi nến còn lại.

Đầu vào và vai trò từng tham số

  • window (số nguyên, mặc định 100): tham số quan trọng nhất, và nó làm bốn việc cùng lúc — quyết định số nến đem đi huấn luyện, làm luôn độ rộng của hàm kernel, làm cửa sổ tính giá trung bình, và làm cửa sổ tính sai số. Hạ xuống 50 thì đường bám giá sát hơn và dải hẹp lại, tín hiệu dày hơn; nâng lên 200 thì đường gần như phẳng và tín hiệu rất thưa. ⚠️ Giới hạn dưới của ô này là 0, nhưng đặt đúng 0 làm cả script lỗi: code đi lấy dòng số window + forecast − 1 của một ma trận, với window = 0 và forecast = 0 thì thành dòng số −1, một chỉ số không tồn tại. (Tầng 1 trên sơ đồ)
  • forecast (số nguyên, mặc định 0): đẩy điểm mà hồi quy ước lượng ra xa hơn cửa sổ huấn luyện. Để 0 nghĩa là ước lượng đúng điểm hiện tại. Nâng lên 5 thì chỉ báo ước lượng một điểm nằm xa hơn 5 bước về bên phải nhưng vẫn vẽ nó tại nến hiện tại — nên hiệu ứng thực tế là đường chạy trước giá một nhịp, bớt trễ nhưng dễ vọt quá đà. (Tầng 1)
  • sigma (số thực, mặc định 0,01): lượng nhiễu cộng vào đường chéo ma trận trước khi nghịch đảo. Đây là cái van giữ cho phép nghịch đảo ổn định: quá nhỏ thì ma trận gần suy biến, lớn hơn thì đường bám giá lỏng tay hơn. Lưu ý ô này có bước nhảy 0,1 trong khi mặc định là 0,01, nên bấm mũi tên tăng một lần là nhảy thẳng lên 0,11 — gấp 11 lần. Muốn chỉnh tinh thì phải gõ số. (Tầng 1)
  • mult (số thực, mặc định 2): nhân vào độ rộng dải sai số. Hạ xuống 1 thì dải hẹp đi một nửa, trạng thái lật thường xuyên hơn hẳn; nâng lên 3 thì chỉ những cú phá giá thật mạnh mới đổi được màu. Đây là núm chỉnh độ nhạy dễ hiểu nhất. (Tầng 1)
  • src (nguồn giá, mặc định close): dãy số đem đi hồi quy. Đổi sang hl2 cho đường mượt hơn chút. (Tầng 1)
  • upCss / dnCss và bullCss / bearCss (màu): chỉ ảnh hưởng hiển thị, không đụng tới một phép tính nào. Cặp đầu tô hai dải, cặp sau tô đường và chấm tròn. (Tầng 1)

Ba ô window, forecast, sigma được khai báo mà không truyền tên, nên trong bảng Settings chúng hiện ra là ba ô số trống không có nhãn, xếp đúng theo thứ tự trên. Hai ô màu đường cũng nằm chung một hàng chỉ có chữ "Moving Average" ở đầu.

Các khối tính toán chính

  • Dựng khung chỉ số. Chỉ báo tạo một danh sách vị trí 0, 1, 2 … 99 — đây là số thứ tự nến, không phải giá. Cùng lúc nó dựng một ma trận đơn vị 100×100. (Tầng 2 trên sơ đồ)
  • Đo độ giống nhau giữa các vị trí bằng hàm rbf. Công thức là rbf(a,b) = exp(−(a−b)² / (2 × window²)): hai vị trí trùng nhau cho đúng 1, càng xa nhau giá trị càng nhỏ. Điểm đáng chú ý là window vừa là số nến vừa là mẫu số trong công thức, nên thang đo rất rộng: hai nến xa nhau nhất trong cửa sổ (cách 99 cây) vẫn còn "giống nhau" tới 0,61. Mọi nến đều liên quan chặt với nhau — đó chính là lý do đường ra mượt như vậy. Kết quả là hai ma trận 100×100. (Tầng 3)
  • Nghịch đảo ma trận — bước "học" duy nhất. Chỉ báo lấy nghịch đảo giả của ma trận kernel. Đây là phép tính nặng nhất trong toàn bộ script, và cũng là chỗ duy nhất xứng đáng gọi là huấn luyện. (Tầng 4)
  • Rút ra 100 trọng số cố định. Nhân hai ma trận rồi lấy đúng một dòng — dòng ứng với điểm cuối cùng. Kết quả là một dãy 100 con số. Điểm mấu chốt: dãy này chỉ phụ thuộc vào window, forecast và sigma, hoàn toàn không phụ thuộc vào giá. Nó được tính xong ở nến đầu tiên và giữ nguyên tới hết chart. (Tầng 5)
  • Áp trọng số lên giá, mỗi nến một lần. Từ đây mới là phần lặp lại hằng nến. Chỉ báo lấy giá trung bình 100 nến, trừ nó ra khỏi từng giá để chỉ còn phần chênh lệch quanh 0, nhân từng phần chênh lệch với trọng số tương ứng, cộng tất cả lại rồi cộng giá trung bình trở lại. Ví dụ với vàng: trung bình 100 nến là 4.498,0, tổng có trọng số ra +9,4, đường vẽ tại 4.507,4. Trọng số mới nhất nhân với nến hiện tại, trọng số cũ nhất nhân với nến cách đây 99 cây. (Tầng 6)
  • Đo sai số và hướng đường. Lấy khoảng cách tuyệt đối giữa giá và đường, trung bình trong 100 nến, nhân với mult. Ví dụ sai số trung bình 6,2 nhân 2 ra 12,4. Song song đó, chỉ báo so đường với chính nó ở nến trước để biết đang lên hay xuống. (Tầng 7)
  • Dựng hai biên dải. Biên trên = đường + 12,4 = 4.519,8; biên dưới = đường − 12,4 = 4.495,0. (Tầng 8)
  • Chốt trạng thái. Trạng thái chuyển sang tăng khi giá đóng cửa vượt 4.519,8 và đường đang đi lên; chuyển sang giảm khi giá đóng cửa thủng 4.495,0 và đường đang đi xuống. Không thoả vế nào thì trạng thái cũ được giữ nguyên — đây là một biến nhớ, không phải phép so sánh lại từ đầu mỗi nến. Vì vậy một cú phá dải mà đường chưa kịp đổi hướng sẽ không đổi được màu. (Tầng 9)

Đầu ra: kẻ vẽ, vào lệnh, alert

  • Đường và màu của nó là đầu ra chính: vị trí đường cho biết giá trị "hợp lý" theo hồi quy, màu cho biết cục diện đang nghiêng bên nào. (Tầng cuối trên sơ đồ)
  • Chấm tròn là tín hiệu rời rạc duy nhất — mốc để đặt lệnh hoặc để thoát. (Tầng cuối)
  • Hai dải tô cho biết biên độ dao động bình thường, dùng làm mốc đặt cắt lỗ. (Tầng cuối)
  • Không có đầu ra vào lệnh và không có alert trong bản chỉ báo gốc — muốn tự động hoá thì phải chuyển thành strategy. (Tầng cuối)

Hệ quả thực tế của việc trọng số tính một lần: dù mang tên "machine learning", chỉ báo này không học gì từ thị trường trong lúc chạy. Nó là một bộ lọc tuyến tính cố định, chỉ khác các đường trung bình quen thuộc ở chỗ bộ trọng số được giải ra từ toán học của GPR thay vì do người đặt. Đổi lại, nó rất nhẹ khi chạy thực tế: phép tính nặng đã xong từ nến đầu tiên.

Sơ đồ hoạt động Machine Learning Moving Average (flowchart theo tầng)

Sơ đồ 10 tầng chỉ báo Machine Learning Moving Average: cài đặt, ma trận kernel, 100 trọng số, đường hồi quy, dải sai số
Flowchart đọc từ trên xuống: bốn tầng đầu chạy một lần nặn ra 100 trọng số, các tầng sau lặp lại mỗi nến.

Giải thích sơ đồ theo từng tầng

Đọc sơ đồ từ trên xuống dưới: bốn tầng đầu chỉ chạy đúng một lần ở nến đầu tiên để nặn ra 100 trọng số, các tầng sau lặp lại mỗi nến với đúng bộ trọng số đó.

  1. Tầng 1 — Đầu vào: Cài đặt người dùng nhập.
    • window — ô nhập KHÔNG CÓ TÊN trong bảng Settings. Giá trị này đi vào bốn chỗ cùng lúc: số vị trí huấn luyện, tham số l của hàm rbf, cửa sổ của mean và cửa sổ của mae. Đặt bằng 0 (đúng minval của nó) làm script lỗi ngay. → dẫn tới: xtrain · xtest · identity, mean, Ktrain, K_star, mae
    • forecast — ô nhập không có tên. Với mặc định 0, hồi quy ước lượng đúng điểm hiện tại; tăng lên là ước lượng một điểm nằm xa hơn về bên phải nhưng vẫn vẽ tại nến hiện tại. → dẫn tới: xtrain · xtest · identity, K_row
    • sigma — ô nhập không tên thứ ba, bước nhảy 0,1 trong khi mặc định là 0,01 nên bấm mũi tên một lần là nhảy thẳng lên 0,11. Giá trị lớn hơn cho đường bám giá lỏng hơn. → dẫn tới: Ktrain
    • mult — Số thực · mặc định 2; Hệ số nhân độ rộng dải sai số → dẫn tới: mae
    • src — Nguồn giá · mặc định close; Dãy số đem đi hồi quy → dẫn tới: mean, out, mae
    • upCss · dnCss — Màu tô dải trên và dải dưới; Xanh #5b9cf6 · hồng #e91e63 → dẫn tới: Hai dải tô chuyển sắc
    • bullCss · bearCss — Màu đường khi tăng và khi giảm; Xanh #3179f5 · hồng #e91e63 → dẫn tới: Đường out (End Point GPR), Chấm tròn đổi trạng thái
  2. Tầng 2 — Tính toán: Dựng khung chỉ số và giá trung bình.
    • xtrain · xtest · identity — đây là các con số thứ tự nến, không phải giá. Toàn bộ khối này nằm trong barstate.isfirst nên chỉ chạy đúng một lần cho cả chart. → dẫn tới: Ktrain, K_star
    • mean — giá trung bình này được trừ ra khỏi giá trước khi hồi quy, rồi cộng ngược lại ở cuối — hồi quy chỉ làm việc với phần chênh lệch quanh 0. → dẫn tới: out
  3. Tầng 3 — Tính toán: Tính hai ma trận kernel bằng hàm rbf.
    • Ktrain — rbf(a, b) = exp(−(a−b)² / (2 × window²)) đo độ giống nhau giữa hai vị trí: hai nến càng gần nhau thì giá trị càng gần 1. Vì window vừa là số nến vừa là mẫu số, hai nến xa nhau nhất (cách 99 cây) vẫn còn giống nhau tới 0,61 — đó là lý do đường ra rất mượt. → dẫn tới: K_inv
    • K_star — rbf giữa vị trí huấn luyện và các điểm cần ước lượng; Ma trận 100 × 100 → dẫn tới: K_row
  4. Tầng 4 — Tính toán: Nghịch đảo ma trận — bước học duy nhất.
    • K_inv — sigma cộng vào đường chéo ở tầng trên chính là để phép nghịch đảo này ổn định; sigma quá nhỏ thì ma trận gần suy biến. → dẫn tới: K_row
  5. Tầng 5 — Tính toán: Rút ra bộ trọng số cố định.
    • K_row — dòng được lấy là dòng số window + forecast − 1, tức điểm cuối cùng. Bộ trọng số này chỉ phụ thuộc vào window, forecast và sigma — hoàn toàn KHÔNG phụ thuộc vào giá. → dẫn tới: out
  6. Tầng 6 — Tính toán: Áp trọng số lên giá mỗi nến.
    • out — đây là đường chính bạn nhìn thấy trên chart. Trọng số mới nhất nhân với nến hiện tại, trọng số cũ nhất nhân với nến cách đây 99 cây. Chỉ bắt đầu có giá trị khi chart đã chạy quá window nến. → dẫn tới: mae, out_dir, upper · lower, Đường out (End Point GPR), Hai dải tô chuyển sắc
  7. Tầng 7 — Tính toán: Đo sai số và hướng của đường.
    • mae — khoảng cách trung bình giữa giá và đường hồi quy trong 100 nến gần nhất, nhân với mult. Thị trường biến động mạnh thì con số này nở ra, dải rộng ra và tín hiệu thưa đi. → dẫn tới: upper · lower, Hai dải tô chuyển sắc
    • out_dir — So out với chính nó ở nến trước; Đang đi lên hay đang đi xuống → dẫn tới: os
  8. Tầng 8 — Tính toán: Dựng hai biên dải và nhớ trạng thái cũ.
    • upper · lower — out + mae và out − mae; VD: 4.519,8 và 4.495,0 → dẫn tới: os, Hai dải tô chuyển sắc
    • os[1] — biến var nghĩa là giá trị được nhớ qua các nến thay vì tính lại từ đầu. Nếu nến này không thoả điều kiện lật nào thì trạng thái cũ được giữ nguyên. → dẫn tới: os (nếu không lật)
  9. Tầng 9 — Tính toán: Chốt trạng thái tăng hay giảm.
    • os — cần đủ CẢ HAI vế mới lật: phá dải thôi chưa đủ, hướng của đường phải đồng thuận. Không thoả vế nào thì giữ nguyên trạng thái cũ, nên os có thể đứng yên rất lâu. → dẫn tới: Đường out (End Point GPR), Chấm tròn đổi trạng thái ↺ quay lại cập nhật (nét đứt): os[1] (nhớ sang nến sau)
  10. Tầng 10 — Đầu ra: Thứ bạn thấy trên chart.
    • Đường out (End Point GPR) — Xanh khi os = 1 · hồng khi os = 0
    • Chấm tròn đổi trạng thái — Vẽ đúng tại nến os vừa lật
    • Hai dải tô chuyển sắc — Xanh nhạt phía trên · hồng nhạt phía dưới

Sơ đồ 10 tầng này và toàn bộ phần phân tích được dựng bằng AI theo đúng quy trình của khoá Zero2Hero: tạo chỉ báo và bot trade bằng AI không cần code.

Câu hỏi thường gặp về Machine Learning Moving Average

Chỉ báo này dùng cho forex, vàng hay coin được không?

Mới chỉ kiểm chứng trên vàng XAUUSD qua bản chuyển thành chiến lược. Về mặt công thức thì chỉ báo không dùng khối lượng và không gắn với khung giờ phiên nào, nên chạy được trên mọi mã — nhưng chạy được và có lãi là hai chuyện khác nhau. Forex, coin và cổ phiếu chưa được backtest, nên chúng tôi không khẳng định gì về chúng.

Machine Learning Moving Average có hiệu quả không?

Riêng chỉ báo thì không có con số nào, vì bản thân nó chỉ vẽ chứ không vào lệnh. Bản chuyển thành chiến lược chạy backtest 365 ngày trên XAUUSD với vốn 10.000 USD cho kết quả: 742 lệnh, thắng 311 lệnh tức 41,91%, lợi nhuận +2.192 USD tương đương +21,92%, profit factor 1,301, sụt vốn tối đa 386,87 USD tức 3,49%. Đọc đúng con số này: tỉ lệ thắng dưới 50% nhưng vẫn có lãi, nghĩa là lệnh thắng trung bình lớn hơn lệnh thua — đúng kiểu hệ thống bám xu hướng. Profit factor 1,301 là mức khiêm tốn, đủ dương nhưng không dày, và nó phụ thuộc mạnh vào mức phí đã giả định.

Vì sao gọi là machine learning khi nó chỉ là một đường trung bình?

Vì bộ trọng số được giải ra bằng Gaussian Process Regression chứ không do người đặt. Nhưng cần nói thẳng: phép giải đó chạy đúng một lần ở nến đầu tiên và cho ra 100 con số cố định, dùng lại cho mọi nến về sau. Chỉ báo không học thêm gì từ dữ liệu mới trong lúc chạy. Gọi chính xác hơn thì đây là một bộ lọc tuyến tính có trọng số do học máy nặn ra, không phải một mô hình học trực tuyến.

Có bản bot tự động trên MT5 hoặc OKX không?

Bản chiến lược PineScript đã có; bản MT5 nằm ở bước sau của quy trình. Bạn có thể cho AI kết nối với MetaTrader 5 (MT5) để chạy tín hiệu này trên tài khoản của mình.

Tôi muốn sửa chỉ báo theo ý mình thì làm thế nào?

Code2Trade nhận dịch vụ code chỉ báo và bot trade theo yêu cầu (TradingView, MT5); gửi yêu cầu qua trang liên hệ Code2Trade.

Nội dung chỉ nhằm mục đích giáo dục, không phải lời khuyên đầu tư. Giao dịch có rủi ro mất vốn.

Zoom/Pan Layered Image
Sơ đồ logic chỉ báo Auto-Length Moving Average + Trend Signals
− +

Chỉ báo trên vừa hoá thành BOT TRADE — chỉ 1 click AI

📊Chỉ báo gốc
→
🤖AI convert 1-click
→
⚙️Bot tự trade 24/7