Một tổ chức phát hành chứng quyền có bảo đảm (CW) không chỉ bán CW mà còn phải nắm giữ cổ phiếu cơ sở để phòng hộ, trả phí giao dịch và chịu chi phí vốn. Muốn biết sổ CW thực sự lãi hay lỗ, cần cộng đủ các mảnh này theo từng ngày, từng đợt phát hành và từng mã cơ sở. Bài viết mô tả cách tính CW PnL Dashboard từ kiến trúc, phương pháp tính, giao diện và những bài học khi vận hành.
Mục lục
- 1. Bài toán: P&L của một sổ chứng quyền
- 2. Kiến trúc: tách engine và dashboard
- 3. Hai cách đo P&L: Kế toán và Theoretical
- 4. Cách cộng dồn P&L, COF và ROI
- 5. Greeks và rủi ro vị thế
- 6. Chọn biến động (IV) để định giá
- 7. Giao diện 5 tab
- 8. Vận hành hằng ngày
- 9. Bài học khi tự xây dựng
- 10. Ghi chú bản quyền và miễn trừ
1. Bài toán: P&L của một sổ chứng quyền
Khi phát hành CW mua, tổ chức phát hành ở vị thế bán (short) quyền chọn. Để trung hoà rủi ro giá, họ mua cổ phiếu cơ sở theo delta (delta hedging). Lãi lỗ của sổ vì vậy gồm bốn cấu phần:
| Cấu phần | Ý nghĩa | Ký hiệu trong bài |
|---|---|---|
| Bán CW (Market Making) | Tiền thu từ bán CW trừ chi phí mua lại; phần đã chốt và phần còn treo theo giá hiện tại | CW Realized / CW Unrealized |
| Cổ phiếu phòng hộ (Hedge) | Lãi lỗ mua bán cổ phiếu cơ sở và chênh lệch giá trên lượng đang nắm | Hedge Realized / Hedge Unrealized |
| Phí giao dịch (NFI) | Phí mua bán CW và cổ phiếu | Fee |
| Chi phí vốn (COF) | Chi phí của khoản vốn dùng để nắm giữ cổ phiếu phòng hộ | COF |
Câu hỏi quản trị thường gặp: sổ đang lãi bao nhiêu, đợt phát hành nào hiệu quả, mã cơ sở nào kéo lùi kết quả, vị thế đang lệch delta bao nhiêu, và lãi lỗ đến từ phòng hộ tốt hay chỉ do giá CW trên sàn biến động. Dashboard trả lời các câu hỏi này trên một màn hình.
2. Kiến trúc: tách engine và dashboard
Hệ thống chia làm hai phần độc lập: (1) Engine tính toán nặng và ghi kết quả vào một cơ sở dữ liệu; (2) Dashboard chỉ đọc kết quả đó, cộng gộp theo bộ lọc người dùng chọn và tính thêm các chỉ số rủi ro tại thời điểm xem.
| Nguồn | Xử lý | Đầu ra |
|---|---|---|
| Giao dịch nội bộ: lệnh bán/mua CW, lệnh mua/bán cổ phiếu phòng hộ theo tiểu khoản | Engine P&L toàn kỳ (chạy riêng): tính realized/unrealized theo từng mã, từng ngày; COF theo ngày lịch; giá Black-Scholes với IV nội bộ | Cơ sở dữ liệu kết quả (SQLite): số luỹ kế theo ngày × mã, COF, VN30, điều chỉnh quyền, CW đã tất toán |
| Điều khoản CW: giá thực hiện, tỷ lệ chuyển đổi, ngày đáo hạn, lịch sử điều chỉnh khi có sự kiện quyền | Server dashboard (Python, thư viện chuẩn): đọc DB ở chế độ chỉ đọc, lọc, cộng gộp, tính Greeks | API JSON cho 5 tab |
| Giá đóng cửa cổ phiếu và CW từ nguồn dữ liệu thị trường; nhiều nguồn dự phòng nối tiếp nhau | Trang HTML (Chart.js): vẽ biểu đồ, bảng, bộ lọc | Dashboard mở bằng trình duyệt |
Lợi ích của cách tách này:
- Dashboard không bao giờ ghi vào dữ liệu gốc, nhiều người có thể mở cùng lúc mà không sợ làm hỏng số.
- Engine chạy xong là số mới hiện ngay: server nhận biết file kết quả đã thay đổi (theo thời điểm sửa file) và tự đọc lại, không cần khởi động lại.
- Logic P&L nằm ở một nơi duy nhất. Dashboard không tự tính lại realized/unrealized nên không có hai phiên bản số liệu.
Luồng một lần xem
- Người dùng bấm đúp file khởi động. Script tìm Python đi kèm, khởi chạy server, đợi server trả lời rồi mới mở trình duyệt (tránh lỗi “This site can’t be reached”).
- Trang gọi
/api/metađể lấy danh sách đợt phát hành, mã cơ sở, trader phụ trách và ngày dữ liệu mới nhất. - Mỗi tab gọi API riêng:
/api/overview,/api/pnl-analytics,/api/positions,/api/iv-surface. Bộ lọc được gửi kèm dưới dạng tham số. - Server cộng gộp, tính Greeks và trả JSON; trang vẽ lại biểu đồ. Nếu người dùng đổi bộ lọc liên tục, trang chỉ vẽ kết quả của lần bấm cuối.
3. Hai cách đo P&L: Kế toán và Theoretical
Điểm khác biệt quan trọng nhất của dashboard là đo P&L theo hai góc nhìn song song. Hai cách chỉ khác nhau ở cách định giá lượng CW đang lưu hành (vẫn còn nợ nhà đầu tư).
| Kế toán (TOI / PBT) | Theoretical P&L | |
|---|---|---|
| CW đang lưu hành định giá theo | Giá khớp lệnh trên sàn HOSE | Giá lý thuyết Black-Scholes với IV định giá nội bộ |
| Phản ánh | Số liệu sổ sách, đối chiếu báo cáo tài chính | Hiệu quả kinh tế của sổ phòng hộ delta-neutral |
| Điểm yếu | Giá CW trên sàn có thể lệch xa giá trị hợp lý (thanh khoản mỏng, cung cầu ngắn hạn), làm P&L dao động mà rủi ro thực không đổi | Phụ thuộc giả định IV; IV nội bộ sai thì P&L sai |
Phần lãi lỗ chưa thực hiện theo giá BS được tính như sau:
Tab Overview luôn hiển thị cả hai để đối chiếu. Tab P&L Analytics dùng một trong hai, người dùng chọn ở tab Settings (lưu theo trình duyệt).
4. Cách cộng dồn P&L, COF và ROI
4.1 Từ số theo mã đến số toàn sổ
Engine ghi số luỹ kế cho từng cặp (mã, ngày). Dashboard cộng mọi mã theo ngày giao dịch, rồi trải ra ngày lịch (ngày nghỉ giữ số của phiên trước) để khớp với COF vốn được tính theo ngày lịch.
| Chỉ tiêu | Công thức |
|---|---|
| P&L CW luỹ kế | CW Realized + CW Unrealized |
| P&L cổ phiếu luỹ kế | Hedge Realized + Hedge Unrealized |
| Phí luỹ kế | Phí CW + phí cổ phiếu |
| Vốn sử dụng | Giá vốn cổ phiếu phòng hộ + phí − dòng tiền ròng từ bán CW |
| PBT luỹ kế | P&L CW + P&L cổ phiếu − phí − COF luỹ kế |
| Theoretical P&L luỹ kế | PBT − CW Unrealized (thị trường) + CW Unrealized (BS) |
4.2 Phân bổ COF khi lọc
COF thật được engine tính cho cả đợt phát hành. Khi người dùng lọc một mã cơ sở hoặc một trader, dashboard phân bổ COF theo tỷ trọng giá vốn cổ phiếu phòng hộ của nhóm đang lọc trong đợt. Ngày đợt chưa có vốn phòng hộ thì chia theo số lượng CW. Không lọc gì thì tổng đúng bằng COF của engine.
4.3 Waterfall theo kỳ
Chọn một kỳ bất kỳ, biểu đồ thác nước tách thay đổi P&L thành từng cấu phần. Mỗi thanh là chênh lệch giữa cuối kỳ và ngay trước kỳ:
P&L đầu kỳ → + CW Realized → + CW Unrealized → + Hedge Realized → + Hedge Unrealized → − Phí → − COF → P&L cuối kỳ
Khi lọc theo đợt phát hành, dữ liệu được cắt từ ngày bắt đầu của đợt. Nếu đợt sau dùng chung tiểu khoản phòng hộ với đợt trước, phần dữ liệu từ ngày đợt sau bắt đầu sẽ bị loại khỏi đợt trước, để phần phòng hộ của hai đợt không tính lẫn vào nhau.
4.4 ROI
Vốn bình quân là trung bình mở rộng (expanding mean) của |vốn sử dụng|. ROI chỉ được tính khi vốn bình quân vượt một ngưỡng tối thiểu, tránh chia cho số rất nhỏ ở những ngày đầu.
4.5 Bảng P&L Summary
Bảng theo dạng báo cáo kết quả kinh doanh: TOI (CW + cổ phiếu, mỗi phần tách realized/unrealized) → OPEX → COF → PBT → Theoretical P&L. Mỗi cột là thay đổi trong ngày, tuần (ISO) hoặc tháng; hiển thị 12 tháng gần nhất; bên phải ghim các cột YTD từng năm và Toàn kỳ. Đơn vị tỷ đồng, số âm trong ngoặc đơn.
5. Greeks và rủi ro vị thế
Với mỗi CW còn lưu hành, dashboard định giá bằng mô hình Black-Scholes (Black và Scholes, 1973) cho quyền chọn kiểu châu Âu, rồi quy về vị thế của tổ chức phát hành.
| Đại lượng | Cách tính |
|---|---|
| Thời gian còn lại T | (Ngày đáo hạn − ngày xem) / 365, tính theo ngày lịch |
| Moneyness | (S − K) / K; CW mua ITM khi > 0 |
| Giá thực hiện K, tỷ lệ chuyển đổi CR | Lấy theo điều khoản hiệu lực tại ngày xem: nếu đã qua ngày giao dịch không hưởng quyền thì dùng K và CR sau điều chỉnh |
| Lãi suất phi rủi ro r | Một tham số cấu hình chung cho mọi CW |
| Δ, Γ, Θ | Công thức Black-Scholes chuẩn; Θ tính theo ngày lịch |
Vì tổ chức phát hành bán CW, với OI là số CW đang lưu hành:
| Chỉ số | Công thức | Cách đọc |
|---|---|---|
| Delta CW (đồng) | −OI × Δ / CR × S | Lượng cổ phiếu tương đương mà vị thế CW đang short, quy ra tiền |
| Delta Exposure | Delta CW + giá trị cổ phiếu phòng hộ | Âm = sổ đang thiếu phòng hộ (net short); dương = phòng hộ dư |
| Gamma (1%) | ½ × (−OI × Γ / CR) × (S × 1%)² | Lãi lỗ bậc hai khi cổ phiếu biến động 1%; thường âm với bên bán quyền chọn |
| Theta | −OI × Θ / CR | Đồng/ngày; dương = sổ hưởng lợi khi thời gian trôi |
| Book Hedging | Giá vốn + lãi lỗ chưa thực hiện của cổ phiếu phòng hộ | Giá trị thị trường của sổ cổ phiếu |
| Tỷ lệ phân phối | OI / Khối lượng phát hành | Bao nhiêu phần trăm CW đã đến tay nhà đầu tư |
6. Chọn biến động (IV) để định giá
Greeks rất nhạy với biến động σ. Dashboard chọn σ theo thứ tự ưu tiên:
- IV định giá nội bộ: lịch IV do bộ phận định giá khai báo cho từng CW, áp dụng từ một ngày hiệu lực.
- IV quét thị trường: giá trị gần nhất do một tiến trình riêng tính từ giá CW trên bảng giá.
- IV giải ngược từ giá đóng cửa CW: phương pháp chia đôi (bisection) trên khoảng [0,1%; 500%], với giá quyền chọn = giá CW × CR.
- Giá trị mặc định khi không có dữ liệu nào.
Tab IV Surface dựng bốn góc nhìn cho từng mã cơ sở: smile (IV theo moneyness), term structure (IV của CW gần ATM nhất ở các mốc 1M, 3M, 6M, 9M, 1Y), heatmap moneyness × kỳ hạn, và IV lịch sử (trung bình các CW theo ngày).
7. Giao diện 5 tab
| Tab | Nội dung | Điều khiển |
|---|---|---|
| Overview | 5 thẻ KPI (Total P&L, Delta Exposure, Gamma 1%, Theta, Book Hedging) · PBT luỹ kế · Sổ phòng hộ so với VN30 · Bảng P&L Summary | Ngày / Tuần / Tháng; lăn chuột để zoom, kéo để trượt, nhấp đúp để về toàn kỳ |
| P&L Analytics | Waterfall · P&L luỹ kế · ROI · Bảng phân rã theo mã cơ sở → từng CW (Live/Expired) | Kỳ từ–đến, đợt phát hành, mã cơ sở, trạng thái, trader; sắp xếp mọi cột |
| Positions | Tỷ lệ phân phối theo thời gian · Cơ cấu sổ phòng hộ (donut) · Delta Exposure theo mã (thanh hai chiều xanh/đỏ) · Bảng vị thế: moneyness, TTM, OI, khối lượng phát hành, tỷ lệ phân phối, vốn, Greeks, giao dịch | Ngày xem, đợt, mã cơ sở, trader, ITM/OTM, ô tìm mã |
| IV Surface | Heatmap · Smile · Term structure · IV lịch sử | Chọn mã cơ sở |
| Settings | Chọn phương pháp P&L cho tab P&L Analytics | Lưu trong trình duyệt |
Một vài chi tiết giúp dùng hằng ngày dễ hơn: link có thể mở thẳng tab và kỳ (ví dụ ?tab=pnl&start=2026-07-01&end=2026-09-30); bảng P&L Summary ghim cột tên và cột tổng khi cuộn ngang; mã chỉ còn cổ phiếu phòng hộ (CW đã đáo hạn) vẫn hiện một dòng để không bỏ sót delta; số âm hiển thị trong ngoặc đơn và tô đỏ.
8. Vận hành hằng ngày
| Bước | Việc làm |
|---|---|
| 1 | Sau phiên, chạy engine P&L để cập nhật cơ sở dữ liệu kết quả. |
| 2 | Bấm đúp file khởi động dashboard. Trình duyệt tự mở khi server sẵn sàng; cửa sổ dòng lệnh cần để mở suốt lúc dùng. |
| 3 | Kiểm tra góc trên: “Số liệu tới <ngày>” phải là phiên mới nhất. Rê chuột để xem giờ engine chạy. |
| 4 | Nếu server đang chạy sẵn, chỉ cần bấm nút làm mới trên trang sau khi engine chạy xong. |
Lỗi thường gặp
| Hiện tượng | Nguyên nhân và cách xử lý |
|---|---|
| Mọi tab báo “Chưa có dữ liệu P&L” | Server không tìm thấy cơ sở dữ liệu kết quả → chạy engine, kiểm tra đường dẫn trong file cấu hình |
| Bộ lọc trống, Greeks bằng 0 | Thiếu file điều khoản CW, hoặc không lấy được giá đóng cửa (mất mạng) |
| Greeks bất thường | CW chưa có IV nội bộ và không có IV quét → bổ sung IV, khởi động lại server |
| Giao diện vỡ, không có biểu đồ | Máy không truy cập được CDN chứa thư viện giao diện |
| Sửa file cấu hình phụ mà số không đổi | Một số file chỉ được đọc lúc khởi động → tắt và mở lại server |
9. Bài học khi tự xây dựng
Những điểm dưới đây rút ra trong quá trình rà soát và vận hành, hữu ích cho ai muốn xây công cụ tương tự:
- Giữ mã nguồn cùng sản phẩm. Chỉ phát hành bản đã biên dịch thì người kế nhiệm không sửa được, và sản phẩm bị khoá vào đúng một phiên bản Python.
- Đóng gói môi trường chạy. Mang theo bản Python nhúng giúp người dùng không phải cài đặt, nhưng cần giữ thư mục này luôn có sẵn trên máy (đặc biệt khi đồng bộ qua dịch vụ lưu trữ đám mây ở chế độ “chỉ tải khi mở”).
- Không để giá trị mặc định chạy âm thầm. Khi phải dùng IV mặc định, nên đánh dấu rõ trên giao diện để người đọc biết Greeks của mã đó chỉ mang tính tham khảo.
- Mọi số phải cùng một ngày. IV, giá và thời gian đến đáo hạn nên tính theo cùng ngày dữ liệu, kể cả khi xem vào cuối tuần.
- Một nơi cho mỗi định nghĩa. Danh sách đợt phát hành, tham số lãi suất… chỉ nên khai báo ở một chỗ; khai báo hai nơi dễ khiến người dùng tưởng đã đổi mà hệ thống vẫn dùng giá trị cũ.
- Dọn cấu hình không dùng. Tham số không có tác dụng nên xoá, tránh tạo cảm giác đã điều chỉnh giả định.
- Bảo mật mặc định. Dữ liệu vị thế và P&L là thông tin nhạy cảm: server nên chỉ mở cho máy cục bộ, hoặc có xác thực nếu cần chia sẻ trong mạng nội bộ.
- Giảm phụ thuộc mạng ngoài. Đóng gói sẵn thư viện giao diện thay vì tải từ CDN giúp dashboard vẫn chạy khi mạng bị hạn chế.
10. Ghi chú bản quyền và miễn trừ
- Nội dung, sơ đồ và ví dụ trong bài do tác giả tự biên soạn. Số liệu trong ví dụ là giả định để minh hoạ, không phản ánh vị thế hay kết quả kinh doanh thực tế của bất kỳ tổ chức nào.
- Mô hình Black-Scholes và các công thức Greeks là kiến thức tài chính công khai (Black, F. & Scholes, M., 1973, *The Pricing of Options and Corporate Liabilities*, Journal of Political Economy).
- Giao diện dùng các thư viện mã nguồn mở theo giấy phép của chúng: Chart.js, chartjs-plugin-zoom, Hammer.js, Tailwind CSS (MIT); phông Manrope (SIL Open Font License); bộ biểu tượng Material Symbols (Apache 2.0). Phần xử lý dùng Python, NumPy, pandas, SciPy (BSD) và SQLite (public domain).
- SSI, VNDIRECT, HOSE, VN30 và các tên khác được nhắc đến là nhãn hiệu hoặc tên gọi thuộc chủ sở hữu tương ứng, chỉ dùng để mô tả.
- Bài viết mang tính chia sẻ kỹ thuật, không phải khuyến nghị đầu tư hay tư vấn tài chính.


