Vì sao EA chỉ xét nến đã đóng thì không repaint
Mục lục
Nói kết luận trước: tín hiệu của EA chỉ xét nến đã đóng ít thay đổi vì dữ liệu dùng để ra quyết định đã ngừng biến động ngay từ thời điểm đó. Với nến đang hình thành, giá đóng cửa, giá cao nhất và giá thấp nhất đều có thể đổi ở tick kế tiếp. Ngược lại, bốn giá (OHLC) của một nến đã đóng thông thường sẽ không còn thay đổi sau khi nến được xác nhận.
Tuy vậy, đọc nến đã đóng không có nghĩa là hoàn toàn an toàn. Tùy cách tính chỉ báo hoặc cách xử lý khung thời gian lớn hơn, giá trị của tương lai vẫn có thể lọt vào dù bạn tưởng mình đang dùng nến đã đóng.
Vì sao nến đang hình thành lại nguy hiểm
Trong MQL5, shift 0 là nến đang hình thành, shift 1 là nến đã đóng gần nhất. Giá đóng cửa ở shift 0 chỉ là "giá hiện tại". Nếu dùng nó để ra quyết định, sẽ phát sinh các vấn đề sau:
- Điều kiện lúc thỏa lúc không theo từng tick, nên căn cứ vào lệnh sau đó có thể biến mất
- Lệnh được khớp bởi một tín hiệu chớp nhoáng, không để lại dấu vết nào trên biểu đồ sau khi nến đóng
- Trong tester, kết quả dễ thay đổi tùy cách tạo tick; nếu diễn biến trong nến khác với thực tế thì chênh lệch này tác động trực tiếp đến kết quả
| Hạng mục | Nến đang hình thành (shift 0) | Nến đã đóng (shift 1 trở đi) |
|---|---|---|
| Giá trị dùng để quyết định | Thay đổi cho đến khi nến đóng | Thông thường không đổi |
| Khả năng tái lập tín hiệu | Thấp | Cao |
| Tốc độ vào lệnh | Nhanh | Chậm hơn do phải chờ nến đóng |
| Ảnh hưởng của phương thức tick trong tester | Bản thân quyết định có thể thay đổi | Ảnh hưởng đến quyết định nhỏ (vẫn còn ở phần thoát lệnh) |
Dùng nến đang hình thành không phải lúc nào cũng sai. Có những thiết kế bắt breakout ngay lập tức. Trong trường hợp đó, cần thừa nhận rằng EA phụ thuộc vào diễn biến bên trong nến, và phải chú trọng kiểm tra bằng tick thực.
So sánh nhà môi giới khuyên dùng →
🎁 Tải EA miễn phí📧 Khóa học email miễn phí (8 email) + gói 13 chỉ báo MT5 dành riêng cho người đăng ký
Ngay sau khi đăng ký, bạn nhận được liên kết tải gói dành riêng cho người đăng ký gồm 13 chỉ báo MT5 của chúng tôi: tệp đã biên dịch (.ex5), mã nguồn và hướng dẫn cài đặt. Sau đó là 8 email về nền tảng giao dịch tự động, cách đọc backtest đúng và cách chọn sàn (mỗi ngày một email trong 5 ngày đầu, sau đó vào ngày thứ 7, 14 và 30 kể từ khi đăng ký). Bạn cũng được báo trước mỗi lần tăng giá của các phiên bản bán trên MQL5 Market (giá ra mắt tăng dần theo doanh số). Trên trang này, EA của chúng tôi miễn phí khi có tài khoản thật tại sàn đối tác.
* Quyền riêng tư được bảo vệ nghiêm ngặt. Bạn có thể hủy đăng ký bất cứ lúc nào.
Thiết kế để tín hiệu được chốt
CopyRates: chỉ rõ vị trí bắt đầu và thứ tự sắp xếp
Chỉ đọc nến đã đóng một lần, ở tick đầu tiên của nến mới.
datetime g_lastBar = 0;
void OnTick()
{
datetime t = iTime(_Symbol, _Period, 0);
if(t == 0 || t == g_lastBar) return;
MqlRates r[];
ArraySetAsSeries(r, true);
if(CopyRates(_Symbol, _Period, 1, 2, r) != 2) return;
g_lastBar = t;
// r[0] là nến đã đóng gần nhất, r[1] là nến ngay trước đó
}
Có ba điểm chính. Một là đặt vị trí bắt đầu là 1 để loại nến đang hình thành khỏi phạm vi lấy dữ liệu. Hai là dùng ArraySetAsSeries để xác định thứ tự sắp xếp. Ba là nếu lấy dữ liệu thất bại thì không cập nhật g_lastBar mà thử lại ở tick sau. Nếu quên chỉ định thứ tự sắp xếp, phần tử đầu mảng sẽ là nến cũ nhất.
iBarShift: cạm bẫy khi dùng khung thời gian lớn hơn
Khi tham chiếu khung thời gian lớn hơn, iBarShift trả về "nến chứa thời điểm đó". Nếu truyền vào thời gian hiện tại, thông thường kết quả sẽ là nến đang hình thành của khung lớn.
int s = iBarShift(_Symbol, PERIOD_H1, TimeCurrent(), false);
if(s < 0) return;
double closedH1 = iClose(_Symbol, PERIOD_H1, s + 1);
Nếu muốn lấy nến đã đóng của khung lớn, hãy chỉ định lùi một nến như trên.
Kiểu repaint điển hình xảy ra ở chỉ báo vẽ giá trị của khung lớn lên biểu đồ khung nhỏ. Nếu gán cho mỗi nến khung nhỏ trong quá khứ giá đóng cửa của nến khung lớn chứa cùng thời điểm đó, thì quá khứ sẽ được vẽ bằng giá trị cuối cùng mà lúc ấy chưa hề tồn tại. Trên biểu đồ trông có vẻ trúng, nhưng trong thời gian thực bạn không thể ra quyết định giống như vậy.
Nếu đặt tham số thứ tư exact là false, khi không có nến tương ứng hàm sẽ trả về nến gần nhất. Điều này khiến khó nhận ra dữ liệu bị thiếu, nên kiểm tra thêm thời gian của nến lấy được sẽ an toàn hơn. Dữ liệu của symbol khác hoặc khung thời gian khác đôi khi cập nhật chậm, vì vậy hãy đối chiếu xem đó có đúng là nến ở thời điểm mong muốn hay không rồi mới quyết định.
Tránh xét lệnh hai lần khi khởi động lại
Biến g_lastBar trong đoạn mã trên sẽ trở về giá trị ban đầu khi EA khởi động lại. Để tránh việc cùng một nến đã đóng bị xét lại và vào lệnh hai lần, cần thiết kế thêm việc kiểm tra các vị thế đang giữ và thời điểm khớp lệnh gần nhất.
Các bước kiểm tra dành cho người dùng
Dù không đọc được mã nguồn, bạn vẫn có thể kiểm tra phần nào bằng các cách sau.
- Xem ở chế độ trực quan (visual mode): Trong visual mode của tester, kiểm tra xem thời điểm vào lệnh có tập trung gần đầu nến hay không. Nếu lệnh thường xuyên khớp giữa nến thì có khả năng EA đang dùng nến đang hình thành (phần thoát lệnh là chuyện khác).
- Đổi mô hình hóa để so sánh: Với cùng khoảng thời gian và cùng cài đặt, thử lần lượt Open prices only, Every tick và Every tick based on real ticks. Nếu số lần vào lệnh hay thời điểm vào lệnh lệch nhiều, hãy nghi ngờ EA phụ thuộc vào diễn biến trong nến.
- Ghi lại mũi tên của chỉ báo: Lưu thời điểm mũi tên xuất hiện bằng ảnh chụp màn hình, rồi so với vài nến sau đó. Nếu vị trí thay đổi hoặc mũi tên biến mất thì chỉ báo đang repaint.
- Hỏi nơi phân phối: Hỏi xem họ có quyết định dựa trên nến đã đóng hay không, và xử lý khung thời gian lớn hơn như thế nào.
Tất cả chỉ là bằng chứng gián tiếp, chỉ riêng chúng không thể chứng minh "không repaint". Nếu muốn thử chỉ báo, hãy luyện các bước này với chỉ báo miễn phí; còn để cài đặt EA, hãy tham khảo hướng dẫn cài đặt EA.
Giới hạn và lưu ý
Quyết định dựa trên nến đã đóng cũng có những mặt bất lợi.
- Vào lệnh trễ: Trong lúc chờ nến đóng, giá đã di chuyển và có thể bạn vào ở vị trí bất lợi. Trong những pha tăng hoặc giảm mạnh, chênh lệch này có thể rất lớn.
- Chi phí ở đầu nến: Với thiết kế mà lệnh dồn vào tick đầu tiên của nến mới, EA có thể chịu ảnh hưởng của giai đoạn spread giãn rộng hoặc gap mở cửa.
- Không ngăn được chỉ báo tham chiếu tương lai: Những chỉ báo như ZigZag có hình dạng thay đổi về sau, hoặc cần các nến phía sau mới xác nhận được, thì tùy vị trí đọc, giá trị vẫn có thể thay đổi dù đó là nến đã đóng.
- Nến đã đóng cũng khác nhau giữa các broker: Giờ máy chủ và nguồn dữ liệu giá khác nhau thì OHLC cũng khác, nên cùng một EA nhưng đổi broker có thể cho quyết định khác. Cũng không thể loại trừ khả năng lịch sử bị chỉnh sửa về sau.
- Thoát lệnh xảy ra trong nến: Dù quyết định vào lệnh dựa trên nến đã đóng, cắt lỗ và chốt lời vẫn khớp giữa nến. Phần này tiếp tục phụ thuộc vào chất lượng tick.
Và quan trọng nhất: không repaint không đồng nghĩa với có lãi. Trong số các EA của chúng tôi cũng có những EA cho kết quả kiểm tra dữ liệu quá khứ tốt nhưng lại âm khi forward test trên tài khoản demo. Việc dùng nến đã đóng chỉ là một trong những điều kiện tiên quyết để tin vào kết quả kiểm tra, chứ không phải chỉ báo của thành tích tương lai. Ngoài ra, việc có dùng nến đã đóng hay không khác nhau theo thiết kế của từng EA, vì vậy khi chọn EA hãy kiểm tra riêng từng EA và đánh giá cùng với các con số trong bảng xếp hạng thực đo. Cách tư duy về kiểm chứng liên quan được tổng hợp trong kiến thức EA và MT5.
Tóm tắt
- Giá trị của nến đang hình thành còn biến động cho đến khi nến đóng, nên tín hiệu có thể biến mất hoặc thay đổi
- Nếu quyết định dựa trên nến đã đóng, dữ liệu ra quyết định được cố định và cũng ít chịu ảnh hưởng của phương thức tạo tick
- Với
CopyRates, hãy chỉ rõ vị trí bắt đầu và thứ tự sắp xếp, đồng thời thử lại khi lấy dữ liệu thất bại iBarShiftdễ trả về nến đang hình thành của khung lớn, nên nếu muốn đọc nến đã đóng hãy lùi shift- Việc vẽ khung lớn lên khung nhỏ và các chỉ báo tham chiếu tương lai là ví dụ điển hình của repaint
- Nến đã đóng có vấn đề về độ trễ và chi phí, và không hề đảm bảo lợi nhuận
Liên quan
2026-07-14
[66] Kiểm tra 43 EA Vàng trong 11.5 năm dữ liệu thực
2026-10-29
OnTick và OnTimer trong MQL5: cách dùng khi thiết kế EA
2026-10-21
Monte Carlo đo biên độ may rủi của drawdown
2026-10-19
Backtest cùng EA, cùng kỳ không khớp: 5 điểm cần kiểm tra
📧 Khóa học email miễn phí (8 email) + gói 13 chỉ báo MT5 dành riêng cho người đăng ký
Ngay sau khi đăng ký, bạn nhận được liên kết tải gói dành riêng cho người đăng ký gồm 13 chỉ báo MT5 của chúng tôi: tệp đã biên dịch (.ex5), mã nguồn và hướng dẫn cài đặt. Sau đó là 8 email về nền tảng giao dịch tự động, cách đọc backtest đúng và cách chọn sàn (mỗi ngày một email trong 5 ngày đầu, sau đó vào ngày thứ 7, 14 và 30 kể từ khi đăng ký). Bạn cũng được báo trước mỗi lần tăng giá của các phiên bản bán trên MQL5 Market (giá ra mắt tăng dần theo doanh số). Trên trang này, EA của chúng tôi miễn phí khi có tài khoản thật tại sàn đối tác.
* Quyền riêng tư được bảo vệ nghiêm ngặt. Bạn có thể hủy đăng ký bất cứ lúc nào.
Bạn có câu hỏi về EA hay Forex?
Bạn có thể đăng câu hỏi trên diễn đàn giao dịch Nattzy (đăng ký miễn phí). Không nhất thiết liên quan đến bài viết này — cài đặt EA, chọn sàn môi giới, v.v. đều được.
Hỏi trên Nattzy ↗