| 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Đặ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”?

Lab 2.1 — Global State + Market Cache

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:

  1. Sync 4 lệnh giả → cluster báo Surplus BUY 0.20
  2. Đóng 1 ticket → net còn 0.10 và ticket cũ biến mất khỏi State
  3. Gọi tick hai lần trong TTL → fetcher chỉ chạy 1 lần
  4. Đổ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

Workflow nop bai Lab 2.1
starter → run_assignment.py → PASS
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_position
  • sync_from_mt5(raw_positions) — đồng bộ full, xóa ticket không còn trong payload
  • set_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)

  1. Sync 3 BUY 0.10 + 1 SELL 0.10 → buy=0.30, sell=0.10, net=+0.20, surplus_side=BUY
  2. Sync lại thiếu ticket 3 → buy=0.20, net=+0.10, ticket 3 không còn
  3. 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_fetcher
  • ohlc_fetcher
  • bar_time_fn
  • tick_ttl_sec

Hit tick = còn trong TTL và không gọi fetcher. Hit OHLC = cùng bar_time_fn + cùng nkhô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)

  1. get_tick × 2 trong TTL → fetch tick = 1
  2. get_ohlc × 2 cùng bar → fetch OHLC = 1
  3. advance_bar() + get_ohlc → fetch OHLC = 2
  4. 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

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.

Đặng Trí Thanh

Đặng Trí Thanh

Giám đốc Công nghệ · DNT Digital · Giảng viên HNDL
838 Bài viết
15.4k Người theo dõi
120k+ Lượt đọc

Đặ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.