Tái mẫu Chuỗi Thời gian Tài chính & Độ biến động Lũy kế Rolling Drawdown
Trong hệ thống giao dịch thuật toán (Algorithmic Trading), các lệnh khớp thị trường diễn ra ở các mốc thời gian ngẫu nhiên. Để đưa vào mô hình dự báo giá hoặc quản trị rủi ro, dữ l…
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: to datetime, datetime index, resample ohlc, rolling aggregations.
Nội dung đề bài
Mục tiêu kiến thức
- Sử dụng
pd.to_datetimevà thiết lậpDatetimeIndexđể xử lý chuỗi thời gian bất quy tắc. - Tái lấy mẫu tần suất (
resample) để xây dựng nến giao dịch chuẩn (open,high,low,close,volume). - Tính toán lợi suất liên tục (Log Returns) và độ biến động trượt (Rolling Volatility) bằng phương sai mẫu (
ddof=1). - Tính toán mức sụt giảm giá trị trượt (Rolling Maximum Drawdown) trên cửa sổ thời gian xác định.
Mô tả bài toán
Trong hệ thống giao dịch thuật toán (Algorithmic Trading), các lệnh khớp thị trường diễn ra ở các mốc thời gian ngẫu nhiên. Để đưa vào mô hình dự báo giá hoặc quản trị rủi ro, dữ liệu cần được chuẩn hóa thành các khung thời gian đều đặn (như 5 phút, 1 giờ, 1 ngày).
Hãy viết hàm: analyze_trading_resample_rolling(df: pd.DataFrame, timestamp_col: str, price_col: str, volume_col: str, rule: str = "1h", window: int = 5) -> pd.DataFrame
Yêu cầu thực hiện:
- Kiểm tra đầu vào:
dfphải chứa đủ 3 cột:timestamp_col,price_col,volume_col. Nếu thiếu, némValueError("Missing required columns").windowphải là số nguyên ≥ 1. Nếu không, némValueError("window must be >= 1").- Thiết lập DatetimeIndex:
- Chuyển
timestamp_colsang kiểu datetime:pd.to_datetime(df[timestamp_col]). - Đặt làm chỉ mục chính của bảng và sắp xếp theo thời gian tăng dần.
- Tái lấy mẫu (Resampling):
- Tái lấy mẫu theo quy tắc
rule(ví dụ"1h","15min"): 'open': giá giao dịch đầu tiên (first())'high': giá cao nhất (max())'low': giá thấp nhất (min())'close': giá cuối cùng (last())'volume': tổng khối lượng (sum())- Loại bỏ toàn bộ các khoảng thời gian không có giao dịch (
dropna(subset=['close'])). - Tính toán Lợi suất Log & Độ biến động:
- Tính lợi suất log: rt = ln(closetcloset-1).
- Dòng đầu tiên (t=0) gán
log_return = 0.0. Gán vào cột'log_return'. - Tính độ biến động trượt với kích thước cửa sổ
window(dùng độ lệch chuẩn mẫuddof=1,min_periods=1):
rolling_vol = resampled['log_return'].rolling(window, min_periods=1).std(ddof=1).fillna(0.0) Gán vào cột 'rolling_volatility'.
- Tính toán Mức sụt giảm trượt (Rolling Drawdown):
- Tìm đỉnh giá cao nhất trong cửa sổ trượt:
rolling_peak = resampled['close'].rolling(window, min_periods=1).max()
- Tính mức sụt giảm: DDt = closet - rolling_peakrolling_peak.
- Gán vào cột
'rolling_drawdown'(lưu ý: giá trị luôn ≤ 0.0). - Đầu ra:
- Reset index và đưa cột thời gian trở lại với tên
'timestamp'. - Toàn bộ các cột tính toán có kiểu
float64. - Trả về DataFrame kết quả.
Input
- Các tham số truyền vào hàm/lớp analyze_trading_resample_rolling hoặc dữ liệu đầu vào theo định dạng mô tả.
Output
- Kết quả trả về của hàm/lớp analyze_trading_resample_rolling hoặc dữ liệu in ra màn hình theo đúng đặc tả.
Ràng buộc
- Số dòng dữ liệu: 1 ≤ N ≤ 105.
price_col> 0,volume_col≥ 0.
Ví dụ 1
Input
analyze_trading_resample_rolling(data=[{'time': '2026-03-01 09:05:00', 'price': 100.0, 'qty': 10}, {'time': '2026-03-01 09:30:00', 'price': 105.0, 'qty': 20}, {'time': '2026-03-01 09:55:00', 'price': 102.0, 'qty': 5}, {'time': '2026-03-01 10:10:00', 'price': 104.0, 'qty': 15}, {'time': '2026-03-01 10:45:00', 'price': 108.0, 'qty': 25}], timestamp_col='time', price_col='price', volume_col='qty', rule='1h', window=2)Output
2Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Ví dụ 2
Input
analyze_trading_resample_rolling(data=[{'time': '2026-01-01', 'price': 100.0, 'qty': 1}, {'time': '2026-01-02', 'price': 90.0, 'qty': 1}, {'time': '2026-01-03', 'price': 80.0, 'qty': 1}], timestamp_col='time', price_col='price', volume_col='qty', rule='1D', window=3)Output
3Giải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
