Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 19

BỘ GIÁO DỤC VÀ ĐÀO TẠO NGÂN HÀNG NHÀ NƯỚC VIỆT NAM

TRƯỜNG ĐẠI HỌC NGÂN HÀNG TP.HỒ CHÍ MINH

MÔN TÀI CHÍNH ĐỊNH LƯỢNG

BÀI KIỂM TRA CÁ NHÂN

Họ và tên sinh viên: LÊ LINH TRANG


Mã số sinh viên: 030137210553
Lớp sinh hoạt: DH37TC05
Lớp học phần: D02

ĐIỂM: …………. (Bằng chữ: ………………….)


TP.HỒ CHÍ MINH, THÁNG 4 NĂM 2024
PHẦN CHẤM ĐIỂM CỦA GIẢNG VIÊN
…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………

…………………………………………………………………………………………
MỤC LỤC

BÀI 1.3: … ..................................................................................................................................1

1.1. Đề bài ..................................................................................................................................1

1.2. Các bước thực hiện chạy lập trình........................................................................................1

1.2.1. Bước 1...............................................................................................................................1

1.2.2. Bước 2...............................................................................................................................1

1.2.3. Bước 3...............................................................................................................................1

1.2.4. Bước 4...............................................................................................................................1

1.3. Kết quả sau cùng của chương trình......................................................................................1

1.4. Phụ lục dữ liệu (nếu có)..........................................................................................................1

BÀI 3.1: … ..................................................................................................................................2

2.1. Đề bài ..................................................................................................................................2

2.2. Các bước thực hiện chạy lập trình........................................................................................2

2.2.1. Bước 1...............................................................................................................................2

2.2.2. Bước 2...............................................................................................................................2

2.2.3. Bước 3...............................................................................................................................2

2.2.4. Bước 4...............................................................................................................................2

2.3. Kết quả sau cùng của chương trình......................................................................................2

2.4. Phụ lục dữ liệu (nếu có)..........................................................................................................2

3.3. Kết quả sau cùng của chương trình......................................................................................3

3.4. Phụ lục dữ liệu (nếu có)..........................................................................................................3

TÀI LIỆU THAM KHẢO.............................................................................................................4


1

BÀI 1.3: Chạy mô hình ARCH, GARCH bằng Python với chỉ số
VN-Index.

1.1. Đề bài

Chạy mô hình ARCH, GARCH bằng Python với chỉ số VN-Index.

1.2. Các bước thực hiện chạy lập trình

1.2.1. Bước 1

 Cài đặt thư viện arch


Câu lệnh dùng để cài đặt thư viện ARCH. ARCH là một thư viện phổ biến trong lĩnh vực
kinh tế học tài chính và phân tích chuỗi thời gian, chẳng hạn như mô hình hồi quy
ARCH/GARCH. Xây dựng và ước lượng mô hình ARCH, phân tích sự biến động trong
chuỗi thời gian tài chính. Nghiên cứu các mô hình không đồng nhất có điều kiện trong dữ
liệu tài chính.

Câu lệnh:

!pip install arch

 Cài đặt thư viện vnstock

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:

!pip install vnstock pandas

 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 vnstock import stock_historical_data, listing_companies”: Dòng này import hai


hàm cụ thể từ thư viện ‘vnstock’ và ‘stock_historical_data’ có thể được sử dụng để lấy dữ
liệu lịch sử của cổ phiếu, trong khi ‘listing_companies’ có thể được sử dụng để lấy danh
sách các công ty niêm yết.

- “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:

# 1. Import the libraries:

import pandas as pd

from vnstock import stock_historical_data, listing_companies

from arch import arch_model

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:

# 2. Specify the risky asset and the time horizon:


RISKY_ASSET = 'REE'
START_DATE = '2020-02-20'
END_DATE = '2024-02-07'

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.

- “df = stock_historical_data(RISKY_ASSET, START_DATE, END_DATE”, "1D",


“stock”, source='TCBS'): Dùng gọi hàm stock_historical_data để tải dữ liệu lịch sử của
một tài sản rủi ro từ Yahoo Finance. Các tham số được truyền vào hàm bao gồm tên của
tài sản rủi ro (RISKY_ASSET), ngày bắt đầu (START_DATE), ngày kết thúc
(END_DATE), tần suất dữ liệu (‘1D’ cho dữ liệu hàng ngày), loại dữ liệu (‘stock’), và
nguồn dữ liệu (source=‘TCBS’). Kết quả của hàm được gán cho biến df, một DataFrame
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:

# 3. Download data from Yahoo Finance:

df = stock_historical_data(RISKY_ASSET, START_DATE, END_DATE, "1D",


"stock", source='TCBS')

print(df.info())

print(df.head())

print(df.tail())

 Xử lý và sắp xếp dữ liệu thời gian trong một DataFrame Pandas.

- Đ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:

# chuyển cột time sang định dạng thời gian

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

Tính toán lợi suất hàng ngày và thêm vào DataFrame


5

- “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:

# 4. Calculate daily returns:

returns = 100 * df['close'].pct_change().dropna()

df['returns'] = returns

print(df)

 Xóa các dòng có giá trị NaN


- Đoạn mã này đóng vai trò quan trọng trong việc làm sạch và chuẩn bị dữ liệu bằng cách
loại bỏ các hàng có giá trị NaN, đảm bảo tính chính xác và nhất quán cho các phân tích
và thao tác dữ liệu tiếp theo.

Câu lệnh:

# Xoá các dòng có ít nhất một giá trị NaN


df.dropna(inplace=True)
print(df)
print(df.info())

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.xlabel('Time')” và “plt.ylabel('Asset Returns')”: Đặt nhãn cho trục x và trục y của


biểu đồ. Trục x được gán nhãn là ‘Time’, còn trục y được gán nhãn là ‘Asset Returns’.

- “plt.title(f'{RISKY_ASSET} Returns: {START_DATE} - {END_DATE}')”: Đặt tiêu


đề cho biểu đồ, sử dụng tên của tài sản rủi ro (RISKY_ASSET) và khoảng thời gian
(START_DATE - END_DATE).

“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:

import matplotlib.pyplot as plt

# Vẽ đồ thị lợi nhuận


plt.plot(df['time'], df['returns'])

# Đặt nhãn cho trục x và trục y


plt.xlabel('Time')
plt.ylabel('Asset Returns')

# Đặt tiêu đề cho đồ thị


plt.title(f'{RISKY_ASSET} Returns: {START_DATE} - {END_DATE}')

# Xoay chữ trên trục hoành


plt.xticks(rotation=45)

# Hiển thị đồ thị


plt.show()

1.2.6. Bước 6

 Thiết lập và ước tính mô hình ARCH


7

- 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

# Đảm bảo cột thời gian đã được định dạng đúng


df['time'] = pd.to_datetime(df['time'])
df.set_index('time', inplace=True)

# 5. Specify the ARCH model


model1 = arch_model(df['returns'], mean='Zero', vol='ARCH', p=1, o=0, q=0)

# 6. Estimate the model and print the summary


model1_fitted = model1.fit(disp='off')
print(model1_fitted.summary())

1.2.7. Bước 7

 Vẽ biểu đồ và phương sai điều kiện của mô hình ARCH


- Xóa đồ thị hiện tại:

“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ũ.

- Hiển thị đồ thị mới:

“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”.

plt.show(): Lệnh này hiển thị đồ thị đã được tạo ra.

Câu lệnh:

# 7. Plot the residuals and the conditional volatility:


# Xóa đồ thị hiện tại
plt.clf()

# Hiển thị đồ thị mới


model1_fitted.plot(annualize='D')
plt.show()

1.2.8. Bước 8

 Hiển thị đồ thị residuals và biến động có điều kiện


- Đồ thị Residuals:

“plt.plot(model1_fitted.resid, label='Residuals')”: Lệnh này tạo ra một đồ thị đường


thẳng, với trục x là các điểm dữ liệu theo thời gian và trục y là các giá trị residuals (tức là
sai số) của mô hình ARCH.

“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.

- Đồ thị Conditional Volatility:

“plt.plot(model1_fitted.conditional_volatility, label='Conditional Volatility')”: Lệnh này


tạo ra một đồ thị đường thẳng khác, với trục x là các điểm dữ liệu theo thời gian và trục y
là các giá trị biến động điều kiện (conditional volatility) của mô hình ARCH.

“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:

# 7. Plot the residuals and the conditional volatility:


# Đồ thị này có thể cung cấp thông tin về mức độ biến động của dữ liệu,
# nếu có những điểm dữ liệu nào đó có residuals lớn hơn thì có thể là những điểm
có biến động cao.
# model1_fitted.plot(annualize='D')
import matplotlib.pyplot as plt
import pandas as pd
plt.plot(model1_fitted.resid, label='Residuals')
plt.legend()
plt.xticks(rotation=45)
plt.show()
plt.plot(model1_fitted.conditional_volatility, label='Conditional Volatility')
plt.legend()
plt.xticks(rotation=45)
plt.show()

1.2.9. Bước 9

 Tạo mô hình GARCH


- Lệnh này tạo ra một mô hình GARCH mới được lưu trữ trong biến model2. GARCH là
một mô hình thống kê được sử dụng để mô hình hóa biến động (volatility) của dữ liệu
theo chuỗi thời gian, đặc biệt là khi biến động này không đồng đều và có thể phụ thuộc
vào biến động trong quá khứ. Biến này có thể được sử dụng để ước tính các tham số của
mô hình, tạo đồ thị, thực hiện dự báo và các phân tích khác.

- 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).

- “vol='GARCH'”: Xác định mô hình biến động là GARCH.


10

- “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. Specify the GARCH model:


model2 = arch_model(df['returns'], mean='Zero', vol='GARCH', p=1, o=0, q=1)

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:

# 2. Estimate the model and print the summary:


model2_fitted = model2.fit(disp='off')
print(model2_fitted.summary())

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ị.

- Sử dụng “model2_fitted.plot()” để vẽ biểu đồ của residuals và biến động có điều kiện


của mô hình đã ước lượng. Tham số “annualize='D'” được sử dụng để chỉ định việc hiển
thị biến động có điều kiện hàng ngày (nếu có) trong năm.
11

- Sử dụng “plt.show()” để hiển thị đồ thị mới đã được tạo ra.

Câu lệnh:

# 3. Plot the residuals and the conditional volatility:


import matplotlib.pyplot as plt

# Xóa đồ thị hiện tại


plt.clf()

# Hiển thị đồ thị mới


model2_fitted.plot(annualize='D')
plt.show()

1.3. Kết quả sau cùng của chương trình

 Mô tả chi tiết kết quả:


Đoạn mã này sử dụng thư viện matplotlib.pyplot để vẽ hai biểu đồ:

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

1.4. Phụ lục dữ liệu (nếu có)


13

BÀI 3.1: Tính drawdown và maximum drawdown (MDD).

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. Các bước thực hiện chạy lập trình

2.2.1. Bước 1

 Cài đặt thư viện pandas_datareader


- Câu lệnh thực hiện tải xuống thư viện ‘pandas_datareader’ thông qua pip, một trình
quản lý gói Python. Gói pandas_datareader cung cấp các công cụ để lấy dữ liệu tài chính
từ các nguồn khác nhau trực tuyến như Yahoo Finance, Google Finance, St.Louis FED
(FRED), World Bank, và nhiều nguồn khác.

- 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:

!pip install pandas_datareader

 Cài đặt thư viện vnstock

- 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:

!pip install vnstock pandas

2.2.2. Bước 2
14

Tải dữ liệu cổ phiếu từ VNStock

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

2.3. Kết quả sau cùng của chương trình

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ả.

2.4. Phụ lục dữ liệu (nếu có)

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

TÀI LIỆU THAM KHẢO

You might also like