Professional Documents
Culture Documents
Mẫu bài kiểm tra cá nhân 01.2024
Mẫu bài kiểm tra cá nhân 01.2024
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
MỤC LỤC
BÀI 1.3: Chạy mô hình ARCH, GARCH bằng Python với chỉ số
VN-Index.
1.1. Đề bài
1.2.1. Bước 1
Câu lệnh:
Xử lý và tính toán số liệu theo yêu cầu, trước hết cần phải có dữ liệu đầu vào của mã cổ
phiếu. Vì vậy, cần có một câu lệnh để thực hiện chức năng tải xuống và cung cấp các dữ
liệu liên quan từ nền tảng ‘vnstock’.
Câu lệnh:
Nhập dữ liệu và thiết lập thư viện phân tích thị trường chứng khoán Việt Nam
Câu lệnh này thực hiện việc import các thư viện cần thiết để phân tích dữ liệu chứng
khoán Việt Nam:
2
- “import pandas as pd”: import thư viện ‘pandas’ vào Python. Thư viện Pandas được sử
dụng rộng rãi cho việc xử lý và phân tích dữ liệu có cấu trúc như các bảng dữ liệu.
- “from arch import arch_model”: Dòng này import lớp ‘arch_model’ từ thư viện ‘arch’,
mà thường được sử dụng cho việc mô hình hóa biến động giá cổ phiếu, ví dụ như mô
hình ARCH/GARCH.
- “import time”: Dòng này import thư viện ‘time’, mà cung cấp các hàm để làm việc với
thời gian.
- “import datetime as dt”: Dòng này import thư viện ‘datetime’ và đặt kí hiệu ‘dt’ cho nó.
Thư viện ‘datetime’ cung cấp các hàm và lớp để làm việc với thời gian và ngày tháng.
Bằng cách sử dụng kí hiệu, việc gọi các phương thức từ ‘datetime’ trở nên ngắn gọn hơn.
Câu lệnh:
import pandas as pd
import time
import datetime as dt
1.2.2. Bước 2
Xác định tài sản rủi ro (mã chứng khoán) và khung thời gian để phân tích dữ liệu.
RISKY_ASSET = ‘REE’: Biến RISKY_ASSET được gán giá trị ‘REE’, có thể đây là mã
chứng khoán của một công ty cụ thể (REE – Công ty Cổ phần Cơ Điện Lạnh ).
3
START_DATE = ‘2020-02-20’ : Dòng này gán chuỗi ‘2020-02-20’ cho biến có tên
START_DATE. Đây là ngày bắt đầu phân tích, được định dạng theo YYYY-MM-DD
(năm-tháng-ngày). Cụ thể, quá trình phân tích sẽ bắt đầu vào ngày 20 tháng 02 năm 2020.
END_DATE = ‘2024-02-07’ : Dòng này gán chuỗi ‘2024-02-07’ cho biến có tên
END_DATE. Đây là ngày kết thúc phân tích của bạn, được định dạng lại theo YYYY-
MM-DD. Tại đây, quá trình phân tích sẽ kết thúc vào ngày 7 tháng 02 năm 2024.
Câu lệnh:
1.2.3. Bước 3
Sử dụng câu lệnh để tải dữ liệu lịch sử từ Yahoo Finance và lưu trữ dữ liệu đó
trong một DataFrame của Pandas.
- “print(df.info())”: In ra thông tin về DataFrame df, bao gồm số lượng dòng, số lượng
cột, kiểu dữ liệu của mỗi cột, và một số thông tin khác về bộ nhớ được sử dụng.
- “print(df.head())”: In ra năm dòng đầu tiên của DataFrame df, để kiểm tra xem dữ liệu
đã được tải chính xác và có cấu trúc như mong đợi hay không.
- “print(df.tail())”: In ra năm dòng cuối cùng của DataFrame df, để kiểm tra xem dữ liệu
kết thúc ở đâu và có đầy đủ thông tin không.
4
Câu lệnh:
print(df.info())
print(df.head())
print(df.tail())
- Đoạn mã này sử dụng hàm to_datetime từ thư viện Pandas để chuyển đổi các giá trị
trong cột 'time' của DataFrame df sang các đối tượng datetime. Định dạng được chỉ định
là '%Y-%m-%d', dữ liệu đầu vào tuân theo định dạng "YYYY-MM-DD". Sử dụng
phương thức sort_values để sắp xếp DataFrame df theo cột 'time' theo thứ tự tăng dần.
Việc này đảm bảo rằng các hàng trong DataFrame được sắp xếp theo thứ tự thời gian dựa
trên giá trị 'time'.
Câu lệnh:
df['time'] = pd.to_datetime(df['time'],format='%Y-%m-%d')
print(df.info())
# Sắp xếp DataFrame theo cột 'time' để đảm bảo thứ tự thời gian
df = df.sort_values(by='time')
1.2.4. Bước 4
- “returns = 100 * df['close'].pct_change().dropna()”: Tính toán tỷ suất sinh lợi hàng ngày
bằng cách sử dụng phương pháp chia tỷ lệ giá đóng cửa của các ngày liền kề và
“.dropna()” được sử dụng để loại bỏ các giá trị NaN (nếu có) từ kết quả tính toán. Tỉ lệ
này sau đó được nhân với 100 để biểu diễn tỷ lệ dưới dạng phần trăm. Kết quả được gán
cho biến ‘returns’.
- “df['returns'] = returns”: Thêm cột lợi suất hàng ngày (returns) vào DataFrame df, bằng
cách gán giá trị tính toán từ bước trước vào cột mới này.
- “print(df)”: Dòng này in ra DataFrame df sau khi cột lợi suất hàng ngày đã được thêm
vào. Điều này giúp kiểm tra xem việc tính toán và thêm cột mới đã được thực hiện đúng
cách hay không.
Câu lệnh:
df['returns'] = returns
print(df)
Câu lệnh:
1.2.5. Bước 5
Tạo và hiển thị một biểu đồ đường của lợi nhuận của tài sản theo thời gian
6
- “plt.plot(df['time'], df['returns'])”: Tạo biểu đồ đường bằng cách sử dụng dữ liệu trong
cột ‘time’ làm trục x và dữ liệu trong cột ‘returns’ làm trục y từ DataFrame df. Điều này
tạo ra biểu đồ của lợi nhuận của tài sản theo thời gian.
“plt.xticks(rotation=45)” và “plt.show()”: Dòng này quay chữ trên trục x của biểu đồ đi
45 độ, để làm cho các nhãn trên trục x dễ đọc hơn nếu chúng được chồng chéo. Cuối
cùng hiển thị biểu đồ đã tạo ra.
Câu lệnh:
1.2.6. Bước 6
- Bước này bắt đầu bằng việc import các thư viện cần thiết như pandas, matplotlib và
arch_model từ gói ARCH. Sau đó, dữ liệu được chuẩn bị để phân tích bằng cách chuyển
đổi cột thời gian thành định dạng datetime và đặt cột thời gian làm chỉ mục.
Sau khi dữ liệu được chuẩn bị, một mô hình ARCH được xác định và ước lượng bằng
cách sử dụng phương pháp tối ưu hóa. Cụ thể, mô hình này được thiết lập với
mean=‘Zero’(tức là không có thành phần trung bình), vol=‘ARCH’ (tức là phương sai
không đổi theo thời gian), và các tham số p, o, q được thiết lập tương ứng. Cuối cùng, mô
hình được ước lượng và một tóm tắt của nó được in ra màn hình.
Câu lệnh:
import pandas as pd
import matplotlib.pyplot as plt
from arch import arch_model
1.2.7. Bước 7
“plt.clf()”: Lệnh này xóa đồ thị đang được hiển thị trên màn hình. Điều này đảm bảo rằng
đồ thị mới sẽ được hiển thị mà không bị che khuất bởi đồ thị cũ.
“model1_fitted”: Biến này chứa mô hình ARCH đã được ước tính ở các bước trước.
“plot()”: Đây là phương thức của mô hình ARCH được sử dụng để tạo đồ thị.
8
“annualize='D'”: Tham số này cho biết đơn vị đo cho trục y (biến động điều kiện) nên
được hiển thị theo đơn vị nào. Trong trường hợp này, ‘D’ nghĩa là biến động điều kiện sẽ
được thể hiện theo đơn vị “lợi nhuận hàng ngày”.
Câu lệnh:
1.2.8. Bước 8
“plt.legend()”: Lệnh này thêm chú thích cho các đường thẳng trong đồ thị, trong trường
hợp này là "Residuals".
“plt.xticks(rotation=45)”: Lệnh này xoay các nhãn trục x theo góc 45 độ để giúp người
xem dễ đọc hơn.
“plt.show()”: Lệnh này hiển thị đồ thị residuals đã được tạo ra.
“plt.legend()”: Lệnh này thêm chú thích cho các đường thẳng trong đồ thị, trong trường
hợp này là ‘Conditional Volatility’.
9
“plt.xticks(rotation=45)”: Lệnh này xoay các nhãn trục x theo góc 45 độ để người xem dễ
đọc hơn.
“plt.show()”: Lệnh này hiển thị đồ thị conditional volatility đã được tạo ra.
Câu lệnh:
1.2.9. Bước 9
- Lệnh arch_model: Lệnh này được sử dụng để tạo một mô hình GARCH (Generalized
Autoregressive Conditional Heteroskedasticity)
- “df['returns']”: Biểu diễn dữ liệu chuỗi thời gian về lợi nhuận (returns) cần được mô
hình hóa.
- “mean='Zero'”: Giả sử mô hình có trung bình bằng 0 (Zero) cho kỳ vọng sinh lợi
(conditional mean).
- “p=1”: Thiết lập bậc của quá trình ARCH (Autoregressive Conditional
Heteroskedasticity) thành 1, nghĩa là phương sai hiện tại phụ thuộc vào bình phương của
lỗi kỳ trước.
-“o=0”: Thiết lập bậc của các hồi quy ngoại sinh (exogenous regressors - không được sử
dụng trong trường hợp này).
“q=1:” Thiết lập bậc của quá trình GARCH thành 1, nghĩa là phương sai hiện tại phụ
thuộc vào phương sai điều kiện kỳ trước.
Câu lệnh:
1.2.10. Bước 10
• Ước tính và in tóm tắt mô hình
- Ước lượng mô hình với dữ liệu đã cho và lưu kết quả vào biến model2_fitted, sử dụng
phương pháp tối ưu hóa và thiết lập disp='off' để tắt hiển thị thông tin tiến trình.
- In ra tóm tắt của mô hình đã ước lượng thông qua lệnh print(model2_fitted.summary()).
Câu lệnh:
1.2.11. Bước 11
• Vẽ biểu đồ của Residuals và Biến động có điều kiện".
- Sử dụng thư viện “matplotlib” để vẽ biểu đồ của residuals và biến động có điều kiện của
mô hình đã ước lượng.
- Sử dụng “plt.clf()” để xóa bỏ tất cả các đồ thị trước đó trên cùng một lớp đồ thị.
Câu lệnh:
- Biểu đồ Residuals: Biểu đồ này hiển thị sự khác biệt giữa giá trị thực tế của biến mục
tiêu và giá trị dự đoán bởi mô hình. Phần dư được tính toán cho mỗi điểm dữ liệu và được
vẽ theo thời gian. Biểu đồ phần dư có thể giúp chúng ta đánh giá xem mô hình có phù
hợp tốt với dữ liệu hay không. Nếu phần dư được phân bố ngẫu nhiên xung quanh đường
0, thì điều đó cho thấy mô hình có thể đã nắm bắt tốt mối quan hệ giữa các biến.
- Biểu đồ biến động có điều kiện: Biểu đồ này hiển thị độ biến động dự đoán của biến
mục tiêu theo thời gian. Biến động có điều kiện được tính toán dựa trên các giá trị hiện
tại của các biến giải thích. Biểu đồ biến động có điều kiện có thể hữu ích để hiểu cách độ
biến động của biến mục tiêu thay đổi theo thời gian.
Mã sử dụng hàm plot() của mô hình được fitted để tạo ra các biểu đồ. Hàm annualize='D'
được sử dụng để đảm bảo rằng đơn vị của trục x là ngày.
Kết quả của đoạn mã này là hai biểu đồ được hiển thị trong một cửa sổ mới. Biểu đồ phần
dư sẽ nằm ở nửa trên của cửa sổ, và biểu đồ biến động có điều kiện sẽ nằm ở nửa dưới.
Để diễn giải kết quả một cách đầy đủ, cần phải xem xét cả hai biểu đồ cùng một lúc. Nếu
phần dư được phân bố ngẫu nhiên xung quanh đường 0 và biến động có điều kiện thay
đổi hợp lý theo thời gian, thì điều đó cho thấy mô hình là một mô hình tốt để mô tả mối
quan hệ giữa các biến. Tuy nhiên, nếu phần dư có cấu trúc hoặc biến động có điều kiện
12
không hợp lý, thì điều đó có thể cho thấy mô hình không phù hợp tốt với dữ liệu và cần
phải được điều chỉnh hoặc thay thế bằng một mô hình khác.
2.1. Đề bài
Tải dữ liệu giá theo ngày cổ phiếu (tự chọn) bằng python. Tính drawdown và maximum
drawdown (MDD). Vẽ đồ thị biểu diễn.
2.2.1. Bước 1
- Khi thực thi câu lệnh này, pip sẽ tìm kiếm thư viện ‘pandas_datareader’ trong kho lưu
trữ của Python Package Index (PyPI) và cài đặt nó trên máy tính của người dùng. Điều
này cho phép bạn sử dụng ‘pandas_datareader’ để truy cập và tải dữ liệu tài chính từ các
nguồn đã được hỗ trợ.
Câu lệnh:
- Xử lý và tính toán số liệu theo yêu cầu, trước hết cần phải có dữ liệu đầu vào của mã cổ
phiếu. Vì vậy, cần có một câu lệnh để thực hiện chức năng tải xuống và cung cấp các dữ
liệu liên quan từ nền tảng ‘vnstock’.
Câu lệnh:
2.2.2. Bước 2
14
Hướng dẫn: mô tả nội dung từng bước, sau đó chép code python vào
2.2.3. Bước 3
Hướng dẫn: mô tả nội dung từng bước, sau đó chép code python vào
2.2.4. Bước 4
Hướng dẫn: mô tả nội dung từng bước, sau đó chép code python vào
Hướng dẫn: phần này trình bày kết quả sau cùng chương trình chạy ra, diễn đạt kết quả.
Chép dữ liệu vào đây hoặc đính kèm file dữ liệu khi nộp bài, hoặc đính kèm code dữ liệu
(nếu chạy dữ liệu trực tuyến).
15