Bài viết gần đây
-
Huỳnh Thị Ngọc Loan — Giảng Viên Yoga & Spa | HNDL
Tháng 8 6, 2026
| Bài Tập Python Hedging Buổi 1–2: Global State & Market Cache Lab | HNDL
Được viết bởi Đặng Trí Thanh vào ngày 04/08/2026 lúc 13:22 | 50 lượt xem
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Hướng Nghiệp Dữ Liệu
Lab 2.1 khóa Python Hedging: bài tập Global State + Market Cache.
Bài tập Buổi 1–2 Python Hedging: khi nào bạn được coi là “xong Infrastructure”?
Trong khóa Lập trình Python nâng cao Hedging tự động hóa, Buổi 1 và Buổi 2 không kết thúc ở slide. Chúng kết thúc khi học viên chạy được hai lệnh python run_assignment.py và thấy chữ PASS.
Đó là lý do có Buổi 2.1 — Bài tập tổng hợp: gom Lab Global State và Lab Market Cache vào một folder nộp bài, có starter/ để làm và dap_an/ để đối chiếu sau hạn.
Bài viết này dành cho học viên đang làm Lab 2.1, giảng viên chấm bài, và người theo dõi blog HNDL muốn hiểu “bài tập thực chiến” của khóa Python Hedging trông như thế nào. Nội dung giáo dục kỹ thuật — không cam kết lợi nhuận.
1. Vì sao phải có buổi bài tập riêng?
Lý thuyết Buổi 1 nói: MT5 là nguồn sự thật của lệnh, Global State là nguồn sự thật của logic bot. Lý thuyết Buổi 2 nói: đừng gọi copy_rates mỗi vòng loop; cache tick/OHLC đúng TTL và bar.
Nhưng học viên chỉ “tin” khi tự tay:
- Sync 4 lệnh giả → cluster báo Surplus BUY 0.20
- Đóng 1 ticket → net còn 0.10 và ticket cũ biến mất khỏi State
- Gọi tick hai lần trong TTL → fetcher chỉ chạy 1 lần
- Đổi bar → OHLC miss thật (fetch lần 2), không phải hit giả
Buổi 2.1 buộc hai bài này đứng cạnh nhau để học viên không tách não: State và Cache là cặp, không phải hai môn học lệch pha.
2. Cấu trúc Lab 2.1 trong folder khóa

Buoi 2.1Bai tap/
├─ 00_Huong_dan_nop_bai.md
├─ Bai_1_Global_State/
│ ├─ 01_Bai_tap.md
│ ├─ starter/
│ └─ dap_an/
└─ Bai_2_Market_Cache/
├─ 02_Bai_tap.md
├─ starter/
└─ dap_an/
Quy ước lớp:
- Làm trong
starter/ - Không sửa
run_assignment.pyđể né assert dap_an/chỉ mở sau hạn hoặc khi GV cho phép- Không cần cài MetaTrader 5 để PASS tuần này
3. Lab 1 — Global State: bạn đang thi cái gì?
3.1. Model dữ liệu
Học viên hoàn thiện Position, AccountSnapshot, ClusterView và hàm cluster_id(symbol, magic) dạng XAUUSD:202601.
Mục tiêu không phải viết dataclass cho đẹp. Mục tiêu là schema đủ để Buổi 5 đọc Surplus/Hedge mà không phải đoán field.
3.2. Singleton có method
GlobalState cho phép:
upsert_position/remove_positionsync_from_mt5(raw_positions)— đồng bộ full, xóa ticket không còn trong payloadset_account/get_cluster/snapshot
Điểm chết thường gặp: chỉ upsert mà quên diff/xóa → State giữ “ticket ma” → Surplus sai → Hedge sai.
3.3. Kịch bản chấm (rút gọn)
- Sync 3 BUY 0.10 + 1 SELL 0.10 →
buy=0.30,sell=0.10,net=+0.20,surplus_side=BUY - Sync lại thiếu ticket 3 →
buy=0.20,net=+0.10, ticket 3 không còn snapshot()["account"]["equity"] == 9850
Chạy:
cd Bai_1_Global_State/starter
python run_assignment.py
4. Lab 2 — MarketCache: bạn đang thi cái gì?
4.1. Indicators NumPy
true_range, atr, ema chạy trên ndarray. Hot path không dùng DataFrame.apply từng dòng.
4.2. Cache contract
Constructor nhận:
tick_fetcherohlc_fetcherbar_time_fntick_ttl_sec
Hit tick = còn trong TTL và không gọi fetcher. Hit OHLC = cùng bar_time_fn + cùng n và không gọi fetcher.
Đây là điểm học viên hay nhầm: fetch rồi mới so sánh bar vẫn tính là “có cache logic”, nhưng không được tính hit thật trong bài chấm — vì vẫn trả phí I/O.
4.3. Kịch bản chấm (rút gọn)
get_tick× 2 trong TTL → fetch tick = 1get_ohlc× 2 cùng bar → fetch OHLC = 1advance_bar()+get_ohlc→ fetch OHLC = 2- ATR/EMA độ dài khớp, phần tử cuối hữu hạn
cd Bai_2_Market_Cache/starter
pip install numpy pandas
python run_assignment.py
5. Lỗi thường gặp khi chấm Lab 2.1
| Triệu chứng | Nguyên nhân hay gặp | Hướng sửa |
|---|---|---|
NotImplementedError |
Chưa làm hết TODO | Làm method theo đề, đừng comment assert |
net_volume lệch 0.199999 |
Float thô | round(..., 8) |
| Ticket cũ vẫn còn | sync_from_mt5 thiếu diff |
Xóa ticket không có trong raw |
| Fetch OHLC = 2 dù cùng bar | Gọi fetcher trước khi check cache | So bar_time_fn trước, miss mới fetch |
ATR toàn nan |
Sai cửa sổ period | Khởi tạo đúng phần tử period-1 |
Hai GlobalState() khác object |
Sai Singleton | __new__ + _instance |
6. Tiêu chí điểm (nhắc lại cho phụ huynh kỹ thuật)
| Hạng mục | Điểm |
|---|---|
| Lab 1 — model + rebuild cluster | 35 |
| Lab 1 — sync xóa ticket cũ | 15 |
| Lab 2 — ATR/EMA | 20 |
| Lab 2 — TTL + bar invalidate | 20 |
| Code sạch / type hint | 10 |
| Cộng: index phụ, rolling buffer, test 2 magic | +10 |
PASS kỹ thuật là điều kiện cần. Điểm cộng dành cho người nghĩ tới production sớm.
7. Vì sao Lab này quan trọng với bot hedging thật?
Trong bot Nhi Quái / PyNhiQuaiBot kiểu khóa học:
- Guard cần equity/spread tươi
- Step/X-Level cần ATR từ cache
- Surplus/Hedge cần net volume từ State
- Multi-thread (Buổi 6) sẽ khóa cả hai lớp
Nếu Lab 2.1 làm ẩu, Buổi 5–9 sẽ “debug chiến lược” trong khi bug thật nằm ở dữ liệu lệch pha. Đó là lý do Infrastructure bị siết sớm.
8. Bridge đọc thêm trên blog HNDL
- Bài lý thuyết Cache: Market Cache, Pandas & NumPy (Buổi 2)
- Landing khóa: Python Hedging tự động hóa
Lab 2.1 là phần “làm được”; các bài trên là phần “hiểu vì sao”.
9. FAQ học viên
Em PASS Lab 1 nhưng chưa làm Lab 2 — có được tính hoàn thành Buổi 2.1? Không. Buổi 2.1 là gói tổng hợp. Thiếu một lab là chưa xong Infrastructure tuần này.
Có được dùng AI code giúp không? Được như trợ lý, nhưng phải giải thích được vì sao sync_from_mt5 phải xóa ticket và vì sao hit OHLC không được gọi fetcher. GV hỏi miệng / review diff.
Vì sao không chấm trên MT5 demo ngay? Để tách lỗi Terminal khỏi lỗi tư duy State/Cache. Adapter MT5 gắn sau khi contract đã đúng.
Nộp gì? Theo 00_Huong_dan_nop_bai.md: hai folder starter đã PASS, hoặc zip theo form lớp.
10. Kết
Buổi 1 dạy nhớ đúng lệnh. Buổi 2 dạy nhớ đúng thị trường với chi phí đúng. Buổi 2.1 buộc bạn chứng minh cả hai bằng chữ PASS trên terminal — trước khi đụng Magic/Comment, Step/X-Level và Surplus/Hedge.
Nếu bạn đang theo lộ trình Python Hedging tại Hướng Nghiệp Dữ Liệu: mở Buoi 2.1Bai tap, chạy lần lượt hai run_assignment.py, rồi mới sang Buổi 3.
Học để vận hành có kiểm soát. Mọi quyết định vốn là trách nhiệm của bạn.
Weekly Digest — Nhận Bản Tin Hàng Tuần
Nhận các bài viết phân tích kỹ thuật chuyên sâu, thuật toán giao dịch tự động (Trading Bot) và các giải pháp công nghệ mới nhất từ Hướng Nghiệp Dữ Liệu.
Đặng Trí Thanh
Giám đốc Công nghệ · DNT Digital · Giảng viên HNDLĐặng Trí Thanh — Founder & CTO · Hướng Nghiệp Dữ Liệu - DNT Digital. Chuyên đào tạo và triển khai thực chiến Python, MT5 và hệ thống bot auto trading / IB cho học viên và doanh nghiệp.