Nghiên cứu và phân tích những dữ liệu chứng khoán của bốn ngân hàng tại Việt Nam bao gồm:Ngân hàng thương mại cổ phần Sài Gòn Thương Tín STB, Ngân hàng Thương mại cổ phần Kỹ Thương Việt
Trang 1NGÂN HÀNG NHÀ NƯỚC VIỆT NAM TRƯỜNG ĐẠI HỌC NGÂN HÀNG THÀNH PHỐ HỒ CHÍ MINH
ĐỀ TÀI :
Môn Học : Lập trình Python cho phân tích dữ liệu
Lớp : L10 Giáo Viên Phụ Trách : Phạm Thanh An
Trang 3Mục Lụ
1 Mục tiêu nghiên cứu và nhiệm vụ nghiên cứu 1
1.1 Mục tiêu nghiên cứu: 1
1.2 Nhiệm vụ nghiên cứu 1
2 Đối tượng và phạm vi nghiên cứu 1
2.1 Đối tượng nghiên cứu: 1
2.2 Phạm vi nghiên cứu : 2
3 Mô hình nghiệp vụ bài toán thực tế, miền ứng dụng 2
3.1 Mô hình nghiệp vụ bài toán thực tế 2
4 Quá trình thu thập và làm sạch dữ liệu 2
4.1 Biểu đồ pairlot 5
4.2 Biểu đồ matplotlib 6
4.3 Biểu đồ nhiệt 7
4.4 Biểu đồ nến: 8
5 Cơ sở lý thuyết về Python cho bài toán 11
5.1 Seaborn 11
5.2 Pandas 11
5.3 Numpy 11
5.4 Matplotlib: 12
5.5 Biểu đồ nhiệt 12
5.6 Biểu đồ hình nến 12
6 Kết quả phân tích 12
Tài liệu tham khảo 13
Trang 51 Mục tiêu nghiên cứu và nhiệm vụ nghiên cứu
1.1 Mục tiêu nghiên cứu:
a Nghiên cứu và phân tích những dữ liệu chứng khoán của bốn ngân hàng tại Việt Nam bao gồm:
Ngân hàng thương mại cổ phần Sài Gòn Thương Tín (STB), Ngân hàng Thương mại
cổ phần Kỹ Thương Việt Nam (TCB), Ngân hàng Quân đội (MBB) và cuối cùng là Ngân hàng Thương mại Cổ phần Bưu điện Liên Việt (LPB) từ 2022 đến nay
Qua đó nhằm nắm được tình hình sàn chứng khoán từ đầu năm 2020 đến đầu năm 2024
b Nghiên cứu về những tác động làm biến đổi giá cổ phiếu của 4 ngân hàng từ những năm 2023 đến nay
c Nghiên cứu và nâng cao hiệu quả của việc đầu tư vào các sàn giao dịch chứng khoán trong nước
1.2 Nhiệm vụ nghiên cứu
Giải quyết được số liệu của 4 ngân hàng trên để nhằm phân tích
2 Đối tượng và phạm vi nghiên cứu
2.1 Đối tượng nghiên cứu:
Cổ phiếu ngân hàng của những ngân hàng sau: Ngân hàng Quân Đội (MB), Ngân hàng thương mại cổ phần Sài Gòn Thương Tín (STB), Ngân hàng Thương mại cổ phần Kỹ Thương Việt Nam (TCB) và cuối cùng là Ngân hàng Thương mại Cổ phần Bưu điện Liên Việt (LPB) trong thị trường chứng khoán Việt Nam
Ngân hàng thương mại cổ phần Sài Gòn
Thương Tín
STB
Ngân hàng Thương mại cổ phần Kỹ
Thương Việt Nam
TCB
Ngân hàng Thương mại Cổ phần Bưu LPB
Trang 6điện Liên Việt
2.2 Phạm vi nghiên cứu :
Về không gian: Thị trường chứng khoán Việt Nam, cụ thể là sở giao dịch chứng khoán của bốn ngân hàng: Ngân hàng Quân Đội (MB), Ngân hàng thương mại cổ phần Sài Gòn Thương Tín (STB), Ngân hàng Thương mại cổ phần Kỹ Thương Việt Nam (TCB) và cuối cùng là Ngân hàng Thương mại Cổ phần Bưu điện Liên Việt (LPB) Về thời gian: Tiến hành phân tích cổ phiếu các ngân hàng từ đầu năm 2020 đến đầu năm 2024
3 Mô hình nghiệp vụ bài toán thực tế, miền ứng dụng
3.1 Mô hình nghiệp vụ bài toán thực tế
Dự báo cổ phiếu luôn là bài toán thách thức vì tính không thể đoán trước của nó Giải quyết thị trường hàng ngày là không thể dự báo giá cổ phiếu và giá cổ phiếu là ngẫu nhiên Tuy nhiên bằng các phân tích kỹ thuật cho thấy hầu hết các giá cổ phiếu được phản ánh các dữ liệu trước đó, do đó xu hướng vận động giá là rất quan trọng để dự đoán giá hiệu quả Hơn nữa, các nhóm cổ phiếu và thị trường chứng khoán bị ảnh hưởng bởi một số yếu tố kinh tế như sự kiện chính trị, điều kiện kinh tế chung, chỉ số giá hàng hóa, kỳ vọng của nhà đầu tư, Mô hình nghiệp vụ kinh doanh chứng khoán của các nhà đầu tư, mỗi nhà đầu tư có mục đích đầu tư rất khác nhau, trước hết và quan trọng nhất là tìm kiếm lợi nhuận từ lợi tức kép của chứng khoán Họ có thể nhằm vào mục tiêu tích lũy vốn để tạo ra thu nhập trong tương lai, hoặc đáp ứng các nhu cầu
cá nhân khác… Nhà đầu tư thường có thể trực tiếp hoặc gián tiếp xác định tình hình tài chính thông qua việc thường xuyên xem xét tình hình tài chính của mình, các quan điểm về khả năng chấp nhận rủi ro, các quy chế về thuế và đặc biệt họ phải có những phân tích mang độ chính sách cao về những biến động của thị trường chứng khoán thông qua các phân tích chứng khoán được thể hiện dưới dạng biểu đồ Và mục tiêu cuối cùng của bài toán thực tế khi giao dịch trên sàn chứng khoán chính là tối đa hóa lợi ích cũng như an toàn vốn
Đối với đồ án này nhóm chúng em sẽ phân tích về giá đóng cửa, mở cửa của cổ phiếu của 4 ngân hàng khác nhau với dữ liệu được lấy từ sàn giao dịch chứng khoán Việt Nam vn stock
Trang 74 Quá trình thu thập và làm sạch dữ liệu
Trong dự án này, nhóm của chúng tôi đã sử dụng ứng dụng Google Collaboration để viết mã và tạo biểu đồ phân tích chứng khoán
Đầu tiên hãy nhập thư viện để phân tích, như sau:
import datetime
import numpy as np
import pandas as pd
Tiếp theo chúng ta cài đặt thư viện chứng khoán vn vào Colab để lấy dữ liệu chứng khoán theo thời gian thực
!pip install vnstock
import vnstock as vs
Tiếp theo, chúng tôi tải dữ liệu chứng khoán từ 3 ngân hàng: Ngân hàng Quân đội (MB), Ngân hàng TMCP Công nghệ Việt Nam (TCB Ngân hàng thương mại cổ phần Sài Gòn Thương Tín (STB) và Ngân hàng Thương mại Cổ phần Bưu điện Liên Việt (TCB) Thời gian giao dịch cổ phiếu và thu thập dữ liệu là từ ngày 1 tháng 1 năm
2020 đến ngày 31 tháng 1 năm 2024 Chúng tôi thực hiện như sau:
Tải data STB
STB = vs.stock_historical_data(symbol='STB', start_date="2020-01-01",
end_date='2024-01-31')
STB.head()
Kết quả trả về cho chúng ta là 1 Data Frame, bắt đầu từ ngày 02/01/2020, trong đó ngày 1, 5, 6, 7 là ngày lễ, thứ 7 và chủ nhật nên không có dữ liệu để hiển thị Nhìn vào bảng ta thấy các cột có ý nghĩa như sau:
Open là giá mở cửa
High là giá cao nhất trong phiên giao dịch
Low là giá thấp nhất trong phiên
Close là giá đóng cửa (hay giá kết phiên)
Volume là khối lượng giao dịch (tổng số phiếu giao dịch trong phiên)
Trang 8Tiếp tục làm tương tự với 3 ngân hàng còn lại: LPB, TCB và MB Bây giờ chúng ta sẽ thêm 4 khung dữ liệu trên vào bảng dữ liệu mới để dễ phân tích hơn Ta đặt tên là bank_stocks
#Gom thành 1 list theo hàng ngang
list_banks = ['STB','MBB','LPB','TCB']
# Tham số axis = 1 là nối theo cột
bank_stocks = pd.concat([STB,MBB,LPB,TCB],axis=1, keys = list_banks)
bank_stocks
Sử dụng phương thức xs() trong Pandas để lập chỉ mục nhiều cấp nhằm tìm ra giá đóng cửa cao nhất và thấp nhất của mỗi cổ phiếu so với cổ phiếu trước đó
bank_stocks.xs(key='close',axis=1,level=1).max()
STB 35850.0
MBB 24310.0
LPB 18460.0
TCB 58000.0
dtype: float64
bank_stocks.xs(key='close',axis=1,level=1).min()
STB 7300.0
MBB 6180.0
LPB 2770.0
TCB 14900.0
dtype: float64
Tạo 1 DataFrame trống mới được gọi là value_banks Data frame này sẽ chứa tỷ suất
lợi nhuận cho từng cổ phiếu của ngân hàng trên
value_banks = pd.DataFrame()
Tạo một vòng lặp for để lặp qua với mỗi mã cổ phiếu ngân hàng Tiếp theo, ta tạo một
cột tên là “mã cổ phiếu + value_bank” = giá trị tỷ suất lợi nhuận.
Để tính tỷ suất lợi nhuận, ta dùng hàm pct_change trong pandas và áp dụng cho giá đóng cửa cửa từng mã cổ phiếu theo code bên dưới Phương thức pct_change() để
Trang 9tính toán thay đổi % theo thời gian Sự thay đổi này được tính (giá trị row hiện tại – giá trị row trước đó)/ (giá trị row trước đó) dòng đầu tiên không có dữ liệu để tính
nên trả về giá trị NaN, ta có thể xóa luôn dòng này với hàm dropna
for name in list_banks:
value_banks[name+' value_bank'] = bank_stocks[name]['close'].pct_change() value_banks.dropna(inplace= True)
value_banks.head()
4.1 Biểu đồ pairlot
Dùng Seaborn sử dụng biểu đồ pairplot để tìm cổ phiếu nổi bật dựa trên giá trị lợi nhuận bên trên
import seaborn as sns
sns.pairplot(value_banks)
Trang 10Nhận xét:
Từ biểu đồ trên ta thấy được:
Tỷ suất giữa Ngân hàng LPB với TCB
Tỷ suất giữa Ngân hàng STB với MBB
Tỷ suất giữa Ngân hàng STB với TCB
Tỷ suất giữa Ngân hàng LPB với MBB
4.2 Biểu đồ matplotlib
Lấy giá đóng cửa các cổ phiếu trên bằng biểu đồ matplotlib ta dùng vòng for để lặp qua Data frame các cổ phiếu trên
Trang 11import matplotlib.pyplot as plt
for tick in list_banks:
bank_stocks[tick]['close'].plot(figsize=(12,4),label=tick)
plt.legend()
Nhận xét:
Nhìn vào biểu đồ matplotlib trên, chúng ta thấy giá cổ phiếu đứng đầu là TCB, tiếp theo là MBB, LPB, TCB Nói chung, khi giá cổ phiếu của một ngân hàng tăng thì giá
cổ phiếu của các ngân hàng còn lại cũng tăng theo và ngược lại
4.3 Biểu đồ nhiệt
Sử dụng bản đồ nhiệt để xem mối tương quan giữa giá đóng cửa của các cổ phiếu trên plt.figure(figsize=(12,5))
sns.heatmap(bank_stocks.xs(key='close',axis=1,level=1).corr(),annot=True)
Sử dụng Seaborn Clustermap để nhóm các cổ phiếu có tương quan với nhau
sns.clustermap(bank_stocks.xs(key='close',axis=1,level=1).corr(),annot=True)
Trang 12Nhận xét:
Giá trị cổ phiếu của Ngân hàng MB và TCB có sự tương quan với nhau Giá trị cổ phiếu của Ngân hàng TCB và LPB có sự tương quan với nhau Giá trị cổ phiếu của Ngân hàng STB và TCB có sự tương quan với nhau
4.4 Biểu đồ nến:
Cổ phiếu STB
import plotly
import plotly.graph_objects as go
candlestick = go.Candlestick(
x=STB.index,
open=STB['open'],
high=STB['high'],
low=STB['low'],
close=STB['close']
)
Trang 13fig = go.Figure(data=[candlestick]) fig.show()
Nhận xét:
Cổ phiếu LPB:
candlestick = go.Candlestick(
x=LPB.index,
open=LPB['open'],
high=LPB['high'],
low=LPB['low'],
close=LPB['close']
)
fig3 = go.Figure(data=[candlestick]) fig3.show()
Nhận xét:
Cổ phiếu MBB:
candlestick = go.Candlestick(
x=MBB.index,
open=MBB['open'],
high=MBB['high'],
low=MBB['low'],
close=MBB['close']
Trang 14fig1 = go.Figure(data=[candlestick]) fig1.show()
Nhận xét:
Cổ phiếu TCB:
candlestick = go.Candlestick(
x=TCB.index,
open=TCB['open'],
high=TCB['high'],
low=TCB['low'],
close=TCB['close']
)
fig2 = go.Figure(data=[candlestick]) fig2.show()
Trang 155 Cơ sở lý thuyết về Python cho bài toán.
5.1 Seaborn
Seaborn là một công cụ có thể được sử dụng để tạo các biểu diễn trực quan về dữ liệu phân loại, chẳng hạn như phân loại giới tính, phân loại ngày và phân loại sản phẩm
Nó đặc biệt hữu ích để trực quan hóa các tập dữ liệu thuộc các danh mục này Trong kịch bản cụ thể được đề cập, chúng tôi sử dụng biểu đồ Seaborn để kiểm tra sự thay đổi tỷ giá hối đoái của bốn ngân hàng: STB, TCB, MBBank
5.2 Pandas
Pandas có khả năng thực hiện các nhiệm vụ mà các thư viện này không thể thực hiện được Trọng tâm chính của nó là quản lý cấu trúc dữ liệu, cụ thể là DataFrames và Series Với Pandas, bạn có khả năng xử lý các bảng dữ liệu và chuỗi thời gian phức tạp một cách dễ dàng Bạn có thể dễ dàng nhập dữ liệu từ nhiều nguồn khác nhau, thao tác dữ liệu theo nhiều cách khác nhau như lọc, chuyển đổi, xử lý các giá trị bị thiếu, thêm hoặc đổi tên cột, tổng hợp dữ liệu, định hình lại và cuối cùng là trực quan hóa dữ liệu theo cách phù hợp với sở thích của bạn
5.3 Numpy
NumPy, còn được gọi là Numeric Python, là một thư viện toán học cực kỳ phổ biến và mạnh mẽ trong ngôn ngữ lập trình Python Thư viện này được trang bị các chức năng được tối ưu hóa cao, cho phép thao tác hiệu quả với ma trận và mảng, đặc biệt là những chức năng liên quan đến lượng dữ liệu lớn Bằng cách sử dụng NumPy, người ta có thể đạt được tốc độ xử lý nhanh hơn đáng kể so với sử dụng
Trang 16Python thuần túy Với NumPy, nhiều thao tác khác nhau có thể được thực hiện, bao gồm nhưng không giới hạn ở:
Các phép toán toán học và logic trên mảng
Các quy trình xử lý hình dạng và biến đổi Fourier luôn song hành với nhau
NumPy cung cấp một loạt các phép toán liên quan đến đại số tuyến tính, bao gồm các hàm dựng sẵn để tạo số ngẫu nhiên
Nhiều cá nhân sử dụng NumPy kết hợp với các gói phần mềm khác như SciPy và Matplotlib Sự kết hợp mạnh mẽ này đóng vai trò là giải pháp thay thế khả thi cho MATLAB, một nền tảng được sử dụng rộng rãi cho tính toán kỹ thuật Tuy nhiên, Python hiện đã nổi lên như một ngôn ngữ lập trình hiện đại và toàn diện hơn, thay thế MATLAB một cách hiệu quả Ưu điểm đáng kể nhất là NumPy là thư viện nguồn mở,
có sẵn miễn phí, trong khi MATLAB yêu cầu thanh toán và phí để truy cập vào mã nguồn của nó
5.4 Matplotlib:
Đối với những người dùng Python yêu cầu suy luận thống kê, trực quan hóa dữ liệu là một bước quan trọng và Matplotlib cung cấp giải pháp cho mục đích này Thư viện đồ thị này có sức mạnh to lớn và đặc biệt có giá trị đối với những cá nhân làm việc với Python và NumPy Trong số các mô-đun khác nhau trong Matplotlib, Pyplot nổi bật là mô-đun được sử dụng rộng rãi nhất Nó cung cấp giao diện thân thiện với người dùng gợi nhớ đến MATLAB, nhưng có thêm lợi thế là sử dụng Python Hơn nữa, điều quan trọng cần lưu ý là Matplotlib là một công cụ nguồn mở
5.5 Biểu đồ nhiệt
Heatmap là biểu đồ sử dụng cường độ màu để thể hiện độ lớn của các giá trị Các giá trị lớn hơn khi đó sẽ được làm nổi bật bằng các vùng màu có cường độ ánh sáng mạnh hơn và các giá trị nhỏ hơn sẽ được thể hiện bằng các mảng màu nhạt hơn Các tình huống phổ biến khi sử dụng heatmap:
Đồ thị hệ số tương quan
Sơ đồ địa lý cảnh báo thiên tai
Bản đồ mật độ dân số
Crazy Egg Chart, dùng để đo lường các thành phần được sử dụng thường xuyên trong một trang web hoặc ứng dụng …
5.6 Biểu đồ hình nến
Biểu đồ nến, còn được gọi là biểu đồ nến Nhật Bản hoặc mô hình nến, là biểu đồ tài chính được sử dụng để mô tả biến động giá của chứng khoán dựa trên các mô hình giá trong quá khứ Biểu đồ nến hiển thị giá mở cửa, giá cao nhất, giá thấp nhất và giá đóng cửa Giá của chứng khoán trong một khoảng thời gian nhất định (thường là một ngày)
Trang 17Biểu đồ sẽ bao gồm hàng ngàn ngọn nến khác nhau Mỗi cây nến đều có hai phần: thân nến và bóng:
Thân nến là phần lớn nhất được tô màu cho biết mức giá đóng cửa và giá mở cửa
Bóng nến là 2 que nhỏ nằm ở trên và dưới thân nến, cho biết mức giá cao nhất
và giá thấp nhất trong một khoảng thời gian nhất định
6 Kết quả phân tích
Chúng ta đã phân tích dữ liệu chứng khoán của 4 ngân hàng tại Việt Nam nói trên, đồng thời phân tích những tác động làm biến đổi giá cổ phiếu của 4 ngân hàng từ năm
2020 đến 2023 Qua phân tích, ta thấy được rằng giá cổ phiếu bị tác động bởi nhiều yếu tố như là Thị trường và tình hình kinh tế, hiệu suất tài chính,… Quan trọng nhất là hiệu suất tài chính của công ty Khi một công ty đạt được kết quả tài chính tích cực như tăng trưởng doanh số bán hàng, lợi nhuận tăng, hoặc tỷ suất lợi nhuận cao, giá cổ phiếu thường có xu hướng tăng Tuy nhiên, nếu có các thông tin tiêu cực như lợi nhuận giảm hoặc dự báo kém hơn dự kiến, giá cổ phiếu có thể giảm
7 Kết luận
Sau một thời gian tham vấn, nghiên cứu Việc thực hiện dự án mất một khoảng thời gian nhất định nên một số vấn đề chưa được hoàn thành chính xác Dự án đã đạt được một số kết quả: Tìm hiểu về ngôn ngữ Python, quá trình thu thập và làm sạch dữ liệu, được thực hiện bằng ứng dụng cộng tác của Google Colaboratory và cung cấp biểu đồ phân tích chứng khoán, sử dụng Seaborn để tìm những cổ phiếu tốt dựa trên giá trị trả
về bằng cách sử dụng các ô ghép nối, để có được giá đóng cửa của cổ phiếu trên bằng biểu đồ matplotlib, chúng tôi lặp lại bằng vòng lặp for khung dữ liệu chứng khoán, sử dụng bản đồ nhiệt để xem mối tương quan giữa giá đóng cửa của cổ phiếu, hiểu vấn
đề dự báo, viết chương trình kiểm tra bài toán giá cổ phiếu
Tài liệu tham khảo