Cấp quyền và xử lý lỗi
Mục lục
Tính năng trên trang này đang trong giai đoạn phát triển thử nghiệm và chưa ổn định. Bạn dùng được để tìm hiểu và chạy thử, nhưng tên hàm hay công cụ, tham số và cấu trúc kết quả có thể còn đổi giữa các bản phát hành, cách tính và cách xử lý cũng có thể còn được hiệu chỉnh.
Hãy đối chiếu kết quả với một cách tính độc lập trước khi đưa vào quy trình nghiên cứu, và ghim phiên bản thư viện trong dự án để mã đang chạy không tự đổi theo bản mới.
Kiểm tra trạng thái quyền
vq.entitlement() chạy trên máy, không trừ lượt. Khoá backtest là phần riêng của mô-đun này:
import vnstock_quant as vq
state = vq.entitlement()
print(state["tier"], state["features"]) # features gồm bt_basic, bt, bt_portfolio, bt_optimize khi được mở
print(state["backtest"]["trial"]) # None nếu cấp của bạn không bị đếm lượt backtest riêng
print(state["backtest"]["quota"]) # quy mô tối đa của một lần chạy| Khoá | Ý nghĩa |
|---|---|
features | Nhóm tính năng đang mở của cả thư viện; phần backtest là bt_basic, bt, bt_portfolio, bt_optimize |
backtest.trial | Lượt backtest trong ngày: daily, used, remaining, max_symbols, resets_at |
backtest.quota | Quy mô một lần chạy: portfolio_symbols, sweep_tasks, monte_carlo_paths |
backtest.budget | Mã hạn mức riêng của mô-đun backtest trên máy chủ; chỉ dùng để đối chiếu khi cần hỗ trợ |
Bản Cộng đồng và các cấp quyền sử dụng
Từ Bronze, bạn dùng được mọi tính năng của mô-đun. Các cấp quyền sử dụng chỉ khác nhau ở số lượt mỗi ngày và quy mô một lần chạy.
| Chưa đăng nhập | Cộng đồng | Bronze | Silver | Golden | Diamond | |
|---|---|---|---|---|---|---|
| Backtest một mã, bảng quy tắc, kiểm tra nhìn trước tương lai | có | có | có | có | có | có |
| Chỉ báo dùng được trong bảng quy tắc | 10 | 10 | 56 | 56 | 56 | 56 |
| Danh mục nhiều mã, dò tham số, walk-forward, Monte Carlo | — | — | có | có | có | có |
| Lượt tính mỗi ngày | 3 | 5 | 200 | 1.000 | 5.000 | không đếm riêng |
| Số mã mỗi lần chạy danh mục | 1 | 1 | 10 | 30 | 100 | 400 |
| Số tổ hợp mỗi lần dò tham số hoặc walk-forward | — | — | 100 | 1.000 | 10.000 | 50.000 |
| Số đường mỗi lần chạy Monte Carlo | — | — | 1.000 | 5.000 | 20.000 | 100.000 |
Bản Cộng đồng dùng được 10 chỉ báo trong bảng quy tắc, cùng nhóm chỉ báo mở cho bản Cộng đồng của vnstock_quant: sma, ema, rsi, macd, stoch, bbands, atr, obv, vwap, pivots. Bảng quy tắc dùng chỉ báo khác thì bị từ chối với QUANT_TIER_REQUIRED trước khi chạy, và không bị trừ lượt. Tín hiệu bạn tự tính bằng thư viện khác rồi đưa vào qua signals hay entries/exits thì không bị giới hạn này.
Cách đếm:
- Số lượt phụ thuộc vào hàm và quy mô lần chạy.
runtính một lượt;run_portfoliotính một lượt mỗi mã;sweepvàwalk_forwardtính theo số tổ hợp. Các hàm tính toán khác gồmmonte_carlo,eval_rule_dsl,check_rule_dsl_causalityvàdetect_limit_events. Xem số lượt còn lại trongvq.entitlement()["backtest"]trước khi chạy. - Các hàm chỉ đọc không trừ lượt:
list_brokers,list_profiles,list_presets,list_indicators,catalog,schema,vq.entitlement,vq.build_info. check_causality(kiểm tra hàm tín hiệu Python của bạn) vàdeflated_sharpe_ratiokhông trừ lượt.- Lượt làm mới mỗi ngày theo giờ Việt Nam.
trial["resets_at"]ghi thời điểm làm mới. - Lượt backtest là dòng ngân sách riêng do máy chủ đặt cho mô-đun này, không trừ vào 30 phép tính mỗi ngày của chỉ báo và chỉ số tài chính. Với tài khoản đã đăng nhập, mọi lần chạy còn được tính vào hạn mức sử dụng chung của tài khoản, như các thư viện khác của Vnstock.
- Diamond không bị đếm lượt riêng cho mô-đun này, chỉ tính vào hạn mức sử dụng chung.
Số lượt mỗi ngày có thể được điều chỉnh mà không cần phát hành lại thư viện. Số đúng cho máy của bạn là số trong vq.entitlement()["backtest"].
Khi hết lượt, thư viện báo QUANT_TRIAL_EXHAUSTED. Khi một lần chạy vượt quy mô của cấp, thư viện báo QUANT_QUOTA_LIMIT kèm cấp chạy được quy mô đó.
Xử lý lỗi
Mọi lỗi của mô-đun thuộc cây VnstockQuantError của vnstock_quant (xem Cài đặt và thiết lập). Mỗi lỗi có:
code: mã ổn định, dùng để rẽ nhánh trong mã của bạn;message: thông điệp tiếng Việt;kind: nhóm lỗi;retryable: có nên thử lại không;action: việc nên làm tiếp (nếu có).
from vnstock_quant import backtest as bt
from vnstock_quant.errors import EntitlementError, VnstockQuantError
try:
res = bt.sweep(df, tasks, symbol="FPT")
except EntitlementError as e: # TierRequiredError, QuotaExceededError
print(e.code, e.message, e.action)
except VnstockQuantError as e:
print(e.code, e.message)Lớp ngoại lệ
| Lớp | Khi nào |
|---|---|
InputDataError | Dữ liệu nến, tín hiệu hoặc cột theo phiên sai |
CausalityViolationError (con của InputDataError) | Bảng quy tắc dùng chỉ báo đọc dữ liệu tương lai |
InvalidParameterError | Tham số, hồ sơ, biểu phí, chế độ khớp lệnh không hợp lệ |
TierRequiredError | Cấp chưa mở tính năng, hoặc bảng quy tắc dùng chỉ báo ngoài bản Cộng đồng |
QuotaExceededError | Hết lượt backtest trong ngày, hoặc một lần chạy vượt quy mô của cấp |
AuthError, UnsupportedError | Khoá, thiết bị, máy chủ cấp quyền; bản đã hết hạn hoặc bị ngừng |
Mã lỗi
code | Ý nghĩa | Cách xử lý |
|---|---|---|
QUANT_INPUT_DATA | Dữ liệu thiếu cột ngày, ngày không đọc được, số phần tử tín hiệu hoặc cột theo phiên (entry_limit, entry_stop, exit_stop, exit_tags, target_weights) khác số phiên, các mã của danh mục lệch ngày | Sửa dữ liệu đầu vào |
QUANT_INVALID_PARAMETER | Tham số không hỗ trợ, giá trị không hợp lệ, chọn nhiều cách tính khối lượng, chế độ khớp lệnh đã gỡ (tradingview, amibroker), khai corporate_actions trên giá đã điều chỉnh hoặc thiếu symbol trong danh mục nhiều mã, risk_per_trade_pct mà không có mức dừng, rebalance dùng với hồ sơ phái sinh | Đọc message, sửa tham số |
QUANT_UNKNOWN_PROFILE | profile không có trong list_profiles() | Dùng một hồ sơ có sẵn |
QUANT_UNKNOWN_BROKER | broker không có trong list_brokers() | Dùng một mã có sẵn, hoặc khai fee |
QUANT_CAUSALITY_VIOLATION | Bảng quy tắc dùng ichimoku hoặc vp | Chọn chỉ báo khác |
QUANT_TIER_REQUIRED | Cấp hiện tại chưa mở nhóm tính năng này (ví dụ Cộng đồng gọi sweep), hoặc bảng quy tắc dùng chỉ báo ngoài 10 chỉ báo của bản Cộng đồng | Xem cấp cần có trong message, hoặc đăng ký gói ở cấp phù hợp |
QUANT_TRIAL_EXHAUSTED | Đã dùng hết lượt trong ngày | Chờ tới thời điểm làm mới (vq.entitlement()["backtest"]["trial"]["resets_at"]) |
QUANT_QUOTA_LIMIT | Một lần chạy vượt quy mô của cấp: số mã, số tổ hợp, số đường Monte Carlo | Giảm quy mô, hoặc dùng cấp ghi trong message |
Lỗi từ lớp xác thực dùng chung của hệ sinh thái mang mã VNSTOCK_AUTH_..., ví dụ khi khoá API không hợp lệ hoặc thiết bị vượt giới hạn. Các lỗi này thuộc EntitlementError và có action hướng dẫn cụ thể.
Khi gặp QUANT_QUOTA_LIMIT hay QUANT_TRIAL_EXHAUSTED, đừng chia một lần dò tham số thành nhiều lần nhỏ để chạy tiếp. Nếu bạn dùng trợ lý AI, hãy yêu cầu nó báo lại lỗi cho bạn thay vì tự tìm đường vòng.
