You are on page 1of 35

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

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


-------------------------------------

TIỂU LUẬN CUỐI KỲ


MÔN: TRÍ TUỆ NHÂN TẠO TRONG GIAO DỊCH
ĐỊNH LƯỢNG

SVTH: NHÓM 9

LỚP: D01

KHÓA HỌC: 2023 – 2024

GVHD: TRẦN ANH TUẤN

Tp. Hồ Chí Minh, tháng 10 năm 2023


DANH SÁCH THÀNH VIÊN NHÓM 9

STT Họ Và Tên MSSV

1 Nguyễn Thị Bích Ngọc 030137210336

2 Đồng Văn An 030137210073

3 Nguyễn Kim Thái Hòa 030137210014

4 Lê Trí Dũng 030137210006

5 Ngô Hoàng Như Ý 030137210641

6 Trịnh Minh Khiêm 030137210021

7 Nguyễn Thị Khánh Như 030137210386

8 Nguyễn Phan Yến Ngọc 030137210335

9 Nguyễn Thảo Ly 030137210278

2
Mục Lục
Danh Mục Các Từ Viết Tắt ..............................................................................................................4
Danh Mục Các Hình Ảnh Biểu Đồ .................................................................................................. 5
Lời Mở Đầu ......................................................................................................................................6
Nội dung ...........................................................................................................................................7
1. Giới thiệu về chỉ số SMA .............................................................................................................7
1.1. Chỉ báo SMA là gì? ...........................................................................................................7
1.2. Cách tính chỉ báo SMA và phân loại ................................................................................ 7
1.2.1. Cách tính chỉ báo SMA .......................................................................................... 7
1.2.2. Phân loại .................................................................................................................7
1.3. Cách sử dụng đường SMA trong giao dịch .......................................................................7
1.4. Ý nghĩa của chỉ báo SMA ................................................................................................. 8
2. Phân tích và ứng dụng chỉ số SMA ..............................................................................................9
2.1. Đồ thị biểu diễn giá đóng cửa của cổ phiểu VCB, đường SMA(20) và đường
SMA(50) (Câu 1) ............................................................................................................. 9
2.2. Xây dựng chiến thuật giao dịch trên đường SMA(ngắn hạn) và đường SMA(dài
hạn) (Câu 2) ................................................................................................................... 14
2.3. Nhà đầu tư có thể kiếm được số tiền nhiều nhất sau khi thực hiện chiến thuật giao
dịch dựa trên đường SMA (Câu 3). ............................................................................... 17
2.4. Lựa chọn cổ phiếu có tỷ suất sinh lợi cao nhất (Câu 4) ..........................................26
3. Đánh giá ưu nhược điểm của chỉ số SMA ................................................................................. 34
3.1. Ưu điểm ...........................................................................................................................34
3.2. Nhược điểm .....................................................................................................................34
Tài liệu tham khảo ..........................................................................................................................35

3
Danh Mục Các Từ Viết Tắt

STT Từ Viết Tắt Tên Đầy Đủ ( Cổ phiếu của Ngân Hàng)


1 SMA Simple moving average
2 VCB Ngân hàng Thương mại Cổ phần Ngoại thương Việt Nam
3 CTG Ngân hàng Thương mại Cổ phần Công thương Việt Nam
4 STB Ngân hàng Thương mại Cổ phần Sài Gòn Thương Tín
5 BID Ngân hàng Thương mại Cổ phần Đầu tư và Phát triển Việt Nam
6 ACB Ngân hàng Thương mại Cổ phần Á Châu
7 MBB Ngân hàng Thương mại Cổ phần Quân Đội
8 SHB Ngân hàng Thương mại Cổ phần Sài Gòn – Hà Nội

4
Danh Mục Các Hình Ảnh Biểu Đồ
Hình 1 . Bảng dữ liệu VCB ....................................................................................................10
Hình 2 . Đồ thị giá cổ phiếu VCB cột "Close" .......................................................................11
Hình 4 . Thể hiện SMA20, SMA50 vào bảng dữ liệu ............................................................13
Hình 5 . Đồ thị biểu diễn giá đóng cửa, SMA20, SMA50 .....................................................14
Hình 6 . Xây dựng chiến thuật SMA20 và SMA50 ............................................................... 15
Hình 7 . Bảng kết quả chiến thuật SMA ................................................................................ 15
Hình 8 . Biểu đồ giá đóng cửa (SMA10 - SMA50) ............................................................... 18
Hình 9 . Đồ thị biểu diễn giá đóng cửa, SMA10, SMA50 .....................................................20
Hình 10 . Xây dựng chiến thuật SMA10, SMA50 .................................................................21
Hình 11 . Kết quả của chiến thuật SMA10, SMA50 ..............................................................22
Hình 12 . Bảng Kết quả Basktesting ...................................................................................... 25
Hình 13 . Kết quả Basktesting của VCB ................................................................................27
Hình 14 . Kết quả Basktesting của CTG ................................................................................ 28
Hình 15 . Kết quả Basktesting của STB .................................................................................29
Hình 16 . Kết quả Basktesting của SHB ................................................................................ 30
Hình 17 . Kết quả Basktesting của BID ................................................................................. 31
Hình 18 . Kết quả Basktesting của ACB ................................................................................32
Hình 19 . Kết quả Basktesting của MBB ............................................................................... 33

5
Lời Mở Đầu
Thị trường chứng khoán thu hút sự gia nhập mạnh mẽ của các nhà đầu tư thế hệ mới,
nhạy bén với thị trường kết hợp với công nghệ. Nó là một môi trường phức tạp và đầy
biến động, nơi hàng triệu người đầu tư và giao dịch hàng ngày. Việc dự đoán xu hướng
giá cổ phiếu và khả năng định giá chính xác là một trong những thách thức lớn mà các
nhà giao dịch và nhà đầu tư đối mặt. Các nhà nghiên cứu đã phát triển một loạt các mô
hình và công cụ phân tích kỹ thuật.

Trong số các công cụ phân tích kỹ thuật, SMA (Simple Moving Average) đã trở thành
một trong những công cụ quan trọng và phổ biến. SMA là một chỉ báo đơn giản, dựa trên
việc tính toán giá trị trung bình của tài sản trong một khoảng thời gian nhất định. Dựa trên
nguyên lý này, SMA có khả năng cung cấp thông tin quan trọng về xu hướng giá, tín hiệu
mua vào và bán ra, cũng như hỗ trợ và kháng cự trên biểu đồ giá

Mục tiêu của tiểu luận này là cung cấp một cái nhìn tổng quan về SMA và khả năng ứng
dụng của nó trong phân tích thị trường chứng khoán thông qua các vấn đề mà giảng viên
đã đề ra.

6
Nội dung
1. Giới thiệu về chỉ số SMA
1.1. Chỉ báo SMA là gì?
SMA (Simple Moving Average) là một công cụ phân tích kỹ thuật đơn giản, tính toán giá
trung bình của một tài sản trong một khoảng thời gian xác định, thường sử dụng giá đóng
cửa.
1.2. Cách tính chỉ báo SMA và phân loại
1.2.1. Cách tính chỉ báo SMA
SMA được tính bằng cách lấy tổng các giá trị đóng cửa của tài sản trong một số phiên gần
đây và chia cho số lượng phiên đó. Điều này tạo ra một đường trung bình di chuyển mượt
theo giá của tài sản trong khoảng thời gian xác định.
Công thức tính SMA cụ thể như sau: SMA = (P1 + P2 + P3 + … + Pn)/N
- Trong đó:
o P1-Pn: là mức giá đóng cửa trong mỗi chu phiên.
o n: số ngày/phiên giao dịch

Ví dụ:

SMA (10) = tổng mức giá đóng cửa của cổ phiếu VCB 10 phiên giao dịch gần nhất /10

SMA (50) = tổng mức giá đóng cửa của cổ phiếu VCB 50 phiên giao dịch gần nhất /50

SMA (100) = tổng mức giá đóng cửa của cổ phiếu VCB 100 phiên giao dịch gần nhất
/100

1.2.2. Phân loại

Dựa vào chu kỳ tính toán người ta chia SMA làm 3 loại: ngắn hạn, trung hạn và dài hạn.

 SMA ngắn hạn: SMA10, SMA12, SMA20…


 SMA trung hạn: SMA50, SM70, SMA90…
 SMA dài hạn: SMA200, SMA250, SMA500…
1.3. Cách sử dụng đường SMA trong giao dịch
- Sử dụng 1 đường SMA xác định điểm mua bán

7
Biểu đồ giá giảm cắt ngang đường SMA theo hướng từ trên xuống, đường SMA hướng
lên trên và giá đóng cửa trên đường SMA. Đây là thời điểm nên mở lệnh mua.
Biểu đồ giá tăng cắt ngang đường SMA theo hướng từ dưới lên, đường SMA hướng
xuống dưới và giá đóng cửa nằm dưới đường SMA. Đây là thời điểm nên mở lệnh bán.

Khi đường SMA đi ngang, không rõ xu hướng giao dịch.

- Sử dụng 2 đường SMA xác định điểm mua bán


Có thể sử dụng 2 chỉ báo SMA trung hạn (SMA 50) và SMA dài hạn (SMA 200). Đường
SMA 200 ít biến động hơn. Tuy nhiên nó là mức giá trung bình ổn định. Bằng cách này sẽ
bắt được tín hiệu khi SMA-50 di chuyển cắt SMA-200 theo hướng từ trên xuống tạo độ
dốc cao như thác đổ. Lúc này cũng tương tự như biểu đồ giá cắt SMA, đây là thời điểm
bạn nên bán ra để chốt lời khi SMA-50 di chuyển nhanh lên trên và cắt qua đường SMA-
200 theo hướng từ dưới lên. Giá lúc này có dấu hiệu tăng mạnh, đây là lúc bạn nên mua
vào.
1.4. Ý nghĩa của chỉ báo SMA
Đường SMA là công cụ giúp các nhà đầu tư có thể nhận thức rõ hơn xu hướng cơ bản cả
thị trường và đưa ra quyết định chính xác nhất trong giao dịch. Nó có ý nghĩa quan trọn
khi đầu tư vào thị trường chứng khoán.
Xác định xu hướng thị trường: SMA giúp nhà đầu tư nhận biết và xác định xu hướng
chính của thị trường. Bằng cách tính toán giá trị trung bình của một khoảng thời gian nhất
định, SMA làm mờ các biến động ngắn hạn và tạo ra một đường cong mượt mà thể hiện
xu hướng dài hạn của giá cổ phiếu. Điều này giúp nhà đầu tư nhận ra liệu thị trường đang
trong giai đoạn tăng, giảm hoặc đi ngang, từ đó đưa ra quyết định đúng đắn về mua vào
hoặc bán ra.
Xác định hỗ trợ kháng cự: SMA cung cấp thông tin quan trọng về mức hỗ trợ và
kháng cự trên biểu đồ giá. Khi giá cổ phiếu tiếp cận hoặc cắt qua đường SMA, nó có thể
gây ra sự phản ứng từ các nhà đầu tư và ảnh hưởng đến xu hướng giá. SMA có thể được
sử dụng để xác định mức giá quan trọng mà giá cổ phiếu có thể gặp khó khăn trong việc
vượt qua (kháng cự) hoặc mức giá mà giá cổ phiếu có thể được hỗ trợ.

8
Tìm điểm vào lệnh, chốt lời và cắt lỗ: SMA cung cấp tín hiệu mua vào và bán ra
trong quá trình giao dịch. Khi giá cổ phiếu vượt qua đường SMA từ dưới lên (crossover),
đây có thể là tín hiệu mua vào. Ngược lại, khi giá cổ phiếu vượt qua đường SMA từ trên
xuống (crossover ngược), đây có thể là tín hiệu bán ra. Ngoài ra, SMA cũng có thể sử
dụng để xác định điểm chốt lời hoặc cắt lỗ trong giao dịch. Khi giá cổ phiếu vượt qua
đường SMA từ trên xuống và tiếp tục đi xuống, điều này có thể là tín hiệu để cắt lỗ.
Trong khi đó, khi giá cổ phiếu vượt qua đường SMA từ dưới lên và tiếp tục đi lên, đây có
thể là tín hiệu để chốt lời.
2. Phân tích và ứng dụng chỉ số SMA
2.1. Đồ thị biểu diễn giá đóng cửa của cổ phiểu VCB, đường SMA(20) và đường
SMA(50) (Câu 1)

Bước 1: Cài đặt các thư viện Python backtesting và ta vào môi trường Python bằng
lệnh !pip install backtesting ta.

Bước 2: Cài đặt thư viện

 matplotlib.pyplot được import để vẽ đồ thị và hình ảnh


 umpy được import để thực hiện tính toán trên dữ liệu
 pandas được import để xử lý và phân tích dữ liệu trên các bảng dữ liệu
 Backtesting và Strategy được import từ thư viện backtesting. Backtest được dùng
để tạo ra một backtest cho một chiến lược giao dịch cụ thể. Strategy được dùng để
định nghĩa chiến lược giao dịch
 sma_indicator được import từ thư viện ta. Đây là các chỉ báo kỹ thuật để tính toán
đường trung bình động (EMA) và đường trung bình động đơn giản (SMA)

9
Bước 3: Đọc bảng dữ liệu ‘VCB1.csv’

Hình 1. Bảng dữ liệu VCB

Bước 4: Định hình các cột trong DataFrame theo thứ tự [‘Date’, ‘Open’, ‘High’,
‘Low’, ‘Close’, ‘Volume’]

10
Bước 5: Vẽ đồ thị dữ liệu giá cổ phiếu từ cột “Close”.

Hình 2. Đồ thị giá cổ phiếu VCB cột "Close"

 plt.plot(df[‘Close’]): vẽ đồ thị dữ liệu giá cổ phiếu từ cột “Close” của


DataFrame df. Hàm plt.plot() được sử dụng để vẽ đồ thị, trong đó đối số
truyền vào là cột “Close” của DataFrame df

Bước 6: Thay đổi kiểu dữ liệu của cột “Date” và đặt cột "Date" của DataFramedf làm chỉ
mục (index) của DataFrame.

11
 df[‘Date’]=pd.to_datetime (df[‘Date’]): thay đổi kiểu dữ liệu của cột “Date” trong
DataFrame df từ kiểu chuỗi sang kiểu date time. Hàm pd.to_datetime() được sử
dụng để chuyển đổi kiểu dữ liệu của cột “Date”. Khi chuyển đổi sang kiểu
datetime, ta có thể thực hiện các tác vụ liên quan đến thời gian như xác định
khoảng cách thời gian giữa các ngày hoặc lọc dữ liệu theo các ngày cụ thể.
 df=df.set_index(‘Date’): vẽ đồ thị dữ liệu giá cổ phiếu từ cột “Close” của
DataFrame. Khi một cột được đặt làm chỉ mục, các giá trị trong DataFrame sẽ
được sắp xếp và truy xuất dựa trên giá trị của cột chỉ mục đó.

Bước 7: Thực hiện tính toán và thêm hai cột mới vào bảng dữ liệu đang được xử lý với
tên gọi là “SMA 20” và “SMA 50”.

12
Hình 4. Thể hiện SMA20, SMA50 vào bảng dữ liệu

 Đoạn mã trên thực hiện tính toán và thêm hai cột mới vào bảng dữ liệu đang được
xử lý với tên gọi là “SMA 20” và “SMA 50”. Cả hai cột chứa thông tin về giá trị
của đường trung bình động trong 20 ngày và 50 ngày của giá đóng cửa cổ phiếu
tương ứng.
 Chức năng sma_indicator được sử dụng để tính toán giá trị của SMA. Đối với
close chứa thông tin về giá cổ phiếu, window chứa độ dài của cửa sổ tính toán (20
và 50).
 Với SMA, mỗi giá trị trong chuối được tính bằng cách lấy trung bình cộng của giá
trị trong cửa sổ tính toán. SMA thường được sử dụng để đánh giá xu hướng của giá
cổ phiếu và xác định điểm mua bán hoặc các điểm quan trọng khác trong giao dịch
chứng khoán.

Bước 8: Biểu đồ giá đóng cửa (close), SMA20 và SMA50.

13
Hình 5. Đồ thị biểu diễn giá đóng cửa, SMA20, SMA50

 plt.plot(df['Close'].head(2500),label='Close'): Vẽ đường biểu đồ cho cột Close


trong DataFrame df, head(2500) chỉ lấy 2500 dòng đầu tiên của cột 'Close',
label='Close' đặt nhãn cho đường biểu đồ là 'Close'.
 plt.plot(df['SMA 20'].head(2500),label='SMA 20'): Vẽ đường biểu đồ cho cột
'SMA 20' trong DataFrame df, head(2500) chỉ lấy 2500 dòng đầu tiên của cột
'SMA 20', label='SMA 20' đặt nhãn cho đường biểu đồ là 'SMA 20'.
 plt.plot(df['SMA 50'].head(2500),label='SMA 50'): Vẽ đường biểu đồ cho cột
'SMA 50' trong DataFrame df, head(2500) chỉ lấy 2500 dòng đầu tiên của cột
'SMA 50', label='SMA 50' đặt nhãn cho đường biểu đồ là 'SMA 50'.
 plt.legend(): Hiển thị chú thích cho các đường biểu đồ, sử dụng các nhãn đã được
đặt trước đó.
2.2. Xây dựng chiến thuật giao dịch trên đường SMA(ngắn hạn) và đường SMA(dài
hạn) (Câu 2)

14
Hình 6. Xây dựng chiến thuật SMA20 và SMA50

Hai đoạn mã đầu ở trên được chia ra 2 trường hợp:


Trường hợp 1: Nếu SMA 20 vượt qua SMA 50 và SMA 20 của ngày trước đó không
vượt qua SMA 50 của ngày trước đó thì đặt giá trị 1 cho cột “position” tại các vị trí tương
ứng. Điều này cho rằng tại các thời điểm đó chúng ta nên mở vị thế mua vì tín hiệu SMA
20 vượt qua SMA 50 và cho thấy đây là xu hướng giá tăng.
Trường hợp 2: Nếu SMA 20 thấp hơn SMA 50 và SMA 50 của ngày trường đó không
vượt qua SMA 20 của ngày trước đó thì đặt giá trị -1 cho cột “position” tại các vị trí
tương ứng. Điều này cho rằng tại các thời điểm đó chúng ta nên mở vị thế bán vì tín hiệu
SMA 20 thấp hơn SMA 50 cho thấy đây là xu hướng giá giảm.
Sau khi thực thi đoạn code này sẽ trả về một DataFrame mới chỉ chứa các hàng trong
DataFrame df mà giá trị trong cột “position” không phải là null.

Hình 7. Bảng kết quả chiến thuật SMA

15
Cụ thể, hàm notnull() được sử dụng để trả về một mảng Boolean cho thấy giá trị
tương ứng trong cột “position” có phải là null hay không. Sau đó, mảng Boolean
này được sử dụng để lọc các hàng trong DataFrame df bằng cách sử dụng
df[df[‘position’].notnull()]. Kết quả là một DataFrame mới chỉ chứa các hàng với
giá trị khác null trong cột “position”.

 df[df.index <= pd.to_datetime('2013-06-07')] được sử dụng để lọc dữ liệu


trong DataFrame df dựa trên điều kiện về chỉ số (index).
 Điều kiện lọc dữ liệu df.index <= pd.to_datetime('2013-06-07') nghĩa là chỉ
lấy các dòng trong DataFrame df có chỉ số (index) nhỏ hơn hoặc bằng ngày
'2013-06-07'.
 pd.to_datetime('2013-06-07') được sử dụng để chuyển đổi chuỗi '2013-06-
07' thành đối tượng kiểu datetime trong pandas để so sánh với chỉ số của
DataFrame.

16
2.3. Nhà đầu tư có thể kiếm được số tiền nhiều nhất sau khi thực hiện chiến thuật
giao dịch dựa trên đường SMA (Câu 3).

Bước 1: Thực hiện công tác cài đặt các thư viện hỗ trợ và tải dữ liệu từ vnstock về định
nghĩa biến df.

Bước 2: Đổi tên các cột để phù hợp định dạng của thư viện backtesting.

17
Bước 3: Vẽ biểu đồ cột giá cuối ngày “Close” đảm bảo chuỗi dữ liệu đã được làm
sạch.

Hình 8. Biểu đồ giá đóng cửa (SMA10 - SMA50)

Bước 4: Định nghĩa chiến thuật SMA 10 - SMA 50.

Đoạn mã trên thực hiện tính toán và thêm hai cột mới vào bảng dữ liệu đang được xử lý
với tên gọi là “SMA 10” và “SMA 50”. Cả hai cột chứa thông tin về giá trị của đường
trung bình động trong 10 ngày và 50 ngày của giá đóng cửa cổ phiếu tương ứng.

Chức năng sma_indicator được sử dụng để tính toán giá trị của SMA. Đối với close chứa
thông tin về giá cổ phiếu, window chứa độ dài của cửa sổ tính toán (10 và 50).

18
Với SMA, mỗi giá trị trong chuối được tính bằng cách lấy trung bình cộng của giá trị
trong cửa sổ tính toán. SMA thường được sử dụng để đánh giá xu hướng của giá cổ phiếu
và xác định điểm mua bán hoặc các điểm quan trọng khác trong giao dịch chứng khoán.

Sau đó hiển thị df để xác nhận giá trị ngày 51 của data đã xuất hiện giá trị SMA 50.

19
Bước 5: Cập nhật biểu đồ “Close” sau khi thêm 2 giá trị SMA 10 và SMA 50.

Hình 9. Đồ thị biểu diễn giá đóng cửa, SMA10, SMA50

 plt.plot(df['Close'].head(2500),label='Close'): Vẽ đường biểu đồ cho cột


Close trong DataFrame df, head(2500) chỉ lấy 2500 dòng đầu tiên của cột
'Close', label='Close' đặt nhãn cho đường biểu đồ là 'Close'.
 plt.plot(df['SMA 10'].head(2500),label='SMA 20'): Vẽ đường biểu đồ cho
cột 'SMA 10' trong DataFrame df, head(2500) chỉ lấy 2500 dòng đầu tiên
của cột 'SMA 20', label='SMA 10' đặt nhãn cho đường biểu đồ là 'SMA 10'.

20
 plt.plot(df['SMA 50'].head(2500),label='SMA 50'): Vẽ đường biểu đồ cho
cột 'SMA 50' trong DataFrame df, head(2500) chỉ lấy 2500 dòng đầu tiên
của cột 'SMA 50', label='SMA 50' đặt nhãn cho đường biểu đồ là 'SMA 50'.
 plt.legend(): Hiển thị chú thích cho các đường biểu đồ, sử dụng các nhãn đã được
đặt trước đó.

Bước 6: Thực hiện chiến thuật SMA 10 -SMA 50:

Hình 10. Xây dựng chiến thuật SMA10, SMA50

Hai đoạn mã đầu ở trên được chia ra 2 trường hợp:


Trường hợp 1: Nếu SMA 10 vượt qua SMA 50 và SMA 10 của ngày trước đó không
vượt qua SMA 50 của ngày trước đó thì đặt giá trị 1 cho cột “position” tại các vị trí tương
ứng. Điều này cho rằng tại các thời điểm đó chúng ta nên mở vị thế mua vì tín hiệu SMA
10 vượt qua SMA 50 và cho thấy đây là xu hướng giá tăng
Trường hợp 2: Nếu SMA 10 thấp hơn SMA 50 và SMA 50 của ngày trường đó không
vượt qua SMA 10 của ngày trước đó thì đặt giá trị -1 cho cột “position” tại các vị trí
tương ứng. Điều này cho rằng tại các thời điểm đó chúng ta nên mở vị thế bán vì tín hiệu
SMA 10 thấp hơn SMA 50 cho thấy đây là xu hướng giá giảm.
Sau khi thực thi đoạn code này sẽ trả về một DataFrame mới chỉ chứa các hàng trong
DataFrame df mà giá trị trong cột “position” không phải là null.

21
Hình 11. Kết quả của chiến thuật SMA10, SMA50

Kết quả là một DataFrame mới chỉ chứa các hàng với giá trị khác null trong cột “position”.

Kiểm tra ngày Position nhận giá trị 1 lần đầu tiên.

22
Bước 7: Định nghĩa mua bán dựa theo giá trị.

Trong đoạn mã trên, lớp GeneralStrategy được định nghĩa kế thừa từ lớp Strategy của
backtrader. Lớp GeneralStrategy được sử dụng để triển khai một chiến lược giao dịch đơn
giản, dựa trên tín hiệu mua và bán được tạo ra từ các đường trung bình động SMA 10 và
SMA 50 của tài sản. Được triển khai theo 2 phương thức sau:

Trong hàm Init(self), Phương thức này được gọi một lần duy nhất khi khởi tạo chiến
lược.

Trong hàm Next(self), kiểm tra điều kiện để tạo ra các tín hiệu giao dịch. Chiến lược
sẽ kiểm tra giá trị của cột ‘position’ trong DataFrame data (sử dụng self.data.position) để
quyết định mua hoặc bán tài sản. Nếu giá trị của cột ‘position’ là 1, tức SMA 10 vượt qua
SMA 50 thì chiến lược mở vị thế mua bằng cách gọi phương thức self.buy(). Nếu giá trị
của cột ‘position’ là -1, tức SMA 10 thấp hơn SMA 50 thì chiến lược đóng vị thế hiện tại
bằng cách gọi phương thức self.position.close().

Bước 8: Đoạn mã trên được sử dụng để thực hiện bước backtesting cho chiến lược giao
dịch được triển khai trong lớp GeneralStrategy. Các giai đoạn thực hiện của đoạn mã trên
như sau:

23
Giai đoạn 1: Tạo một đối tượng Backtest với các tham số sau:

GeneralStrategy: Lớp triển khai chiến lược giao dịch

Cash: Số tiền đầu tư ban đầu

Commission: Phí giao dịch được tính cho mỗi lần mở hoặc đóng vị thế.

Trade_on_close: Xác định liệu chiến lược có giao dịch trên giá đóng cửa (closing price)
hay không.

Exclusive_orders: Xác định liệu chiến lược có phải chỉ mở một vị thế tại một thời điểm
hay không.

Giai đoạn 2: Chạy backtesting bằng cách gọi phương thức run() của đối tượng Backtest.
Kết quả của backtesting được lưu trữ trong biến stats.

Bảng kết quả:

24
Hình 12. Bảng Kết quả Basktesting

Equity Final: Số tiền cuối cùng mà nhà đầu tư nhận được khi thực hiện chiến lược là
khoảng hơn 377 triệu.

Equity Peak: Số tiền cao nhất mà nhà đầu tư từng đạt được trong khoảng thời gian
trên là 458 triệu.
Return: Tỷ lệ lợi nhuận hoặc lỗ của chiến lược giao dịch của chiến lược là 277.37%,
điều này có nghĩa là chiến lược giao dịch đã thu được lợi nhuận với tỷ lệ khoảng 277.37%,
tức là ví dụ nếu bắt đầu với số vốn ban đầu là 100 trđ thì sẽ nhận được 277.37trđ sau khi
kết thúc chiến lược.

25
Tỷ lệ lợi nhuận hoặc lỗ của chiến lược giữ cổ phiếu trong suốt thời gian backtest
(mua và giữ cổ phiếu từ đầu đến cuối). Trong bảng số liệu này, Buy & Hold Return là
537.74%, điều này có nghĩa là chiến thuật SMA 10 - 50 sẽ mang lại lợi nhuận hơn Buy &
Hold 537.74%.
Return (Ann.): Tỷ lệ lợi nhuận hoặc lỗ của chiến lược giao dịch của chiến lược là
14.35%, điều này có nghĩa là nếu chiến lược được giao dịch trong suốt một năm thì tỷ lệ
sinh lời khoảng 14.35%/ năm.
Volatility (Ann.) là mức độ biến động của chiến lược giao dịch là 25.76%, điều này
có nghĩa là mức độ biến động của kết quả giao dịch của chiến lược là 25.76% hàng năm.
Max. Drawdown: Tỷ lệ tổn thất tối đa của chiến lược giao dịch của chiến lược là -
28.92%, điều này cho thấy khối lượng lỗ lớn nhất mà chiến lược đã chịu trong quá trình
giao dịch.
Avg. Drawdown: Tỷ lệ tổn thất trung bình của chiến lược giao dịch của chiến lược
là -5.57%, điều này cho thấy mức độ rủi ro trung bình của chiến lược trong các khoảng
thời gian lỗ.
Max. Drawdown Duration: Thời gian tổn thất tối đa tổn thất của chiến lược giao
dịch là 856 ngày.
Avg. Drawdown Duration: Thời gian tổn thất trung bình của chiến lược giao dịch là
75 ngày.
2.4. Lựa chọn cổ phiếu có tỷ suất sinh lợi cao nhất (Câu 4)

26
Lợi nhuận trung bình hàng năm của VCB cho ra kết quả là: 14.355744%

Hình 13. Kết quả Basktesting của VCB

27
Lợi nhuận trung bình hàng năm của CTG cho ra kết quả: 9.557419 %

Hình 14. Kết quả Basktesting của CTG

28
Lợi nhuận trung bình hàng năm của STB cho ra kết quả: 11.555243%

Hình 15. Kết quả Basktesting của STB

29
Lợi nhuận trung bình hàng năm của SHB cho ra kết quả: 16.284694%

Hình 16. Kết quả Basktesting của SHB

30
Lợi nhuận trung bình hàng năm của BID cho ra kết quả: 12.169189%

Hình 17. Kết quả Basktesting của BID

31
Lợi nhuận trung bình hàng năm của ACB cho ra kết quả: 10.534121%

Hình 18. Kết quả Basktesting của ACB

32
Lợi nhuận trung bình hàng năm của MBB cho ra kết quả: 13.011526%

Hình 19. Kết quả Basktesting của MBB

33
Trong giai đoạn từ ngày 01/01/2013 đến ngày 01/01/2023. Ta có những ngân hàng
như VCB, CTG, SHB, STB, BID, ACB, MBB trong rổ các cổ phiếu ngành ngân hàng:
['CTG', 'STB', 'HDB', 'EIB', 'BID', 'VPB', 'ACB', 'TCB', 'MBB', 'VIB', 'SHB', 'VCB', 'LPB',
'TPB']. Với số tiền đầu tư là 100.000.000 đồng, phí giao dịch là 0.2% và lượng cổ phiếu
trong mỗi giao dịch là 100 cổ phiếu/giao dịch. Khi sử dụng chiến thuật giao dịch theo các
đường SMA để lựa chọn cổ phiếu có tỷ suất sinh lợi cao nhất nhà đầu tư nên chọn cổ
phiếu của ngân hàng SHB với lợi nhuận trung bình hàng năm là: 16.284694%.

3. Đánh giá ưu nhược điểm của chỉ số SMA


3.1. Ưu điểm

Tăng khả năng đưa ra quyết định đầu tư chính xác hơn: Đường trung bình động SMA
phản ứng chậm nên sẽ loại bỏ được những biến động nhiễu ngắn hạn. Về dài hạn đường
SMA cho chỉ báo chính xác khi quan sát đồ thị giá giúp nhà đầu tư phát hiện ra các bẫy
phân tích sử dụng các khung thời gian dài như khung biểu đồ ngày hoặc biểu đồ tuần (dài
hạn), giảm thiểu những rủi ro có thể xảy ra .Vì vậy đường SMA có độ tin cậy khá cao.

Xác định xu hướng chung của thị trường: SMA là đường trung bình MA sử dụng phổ biến
nhất trên thị trường nên nó sẽ phản ánh khá sát sao với tâm lý của nhà đầu tư tại những
ngưỡng hỗ trợ hoặc kháng cự khá sát thực tế.

3.2. Nhược điểm

Không phải là phương pháp đầu tư hoàn hảo: Đường trung bình động SMA bộc lộ yếu
điểm khá rõ ràng trong ngắn hạn khi phát ra tín hiệu mua bán chậm với những thay đổi
giá nhanh thường xảy ra tại các điểm đảo chiều (revasal) thị trường, không đặt nặng bất
kỳ các mức giá đột biến nào, coi trọng số của giá tất cả các ngày là như nhau và sử dụng
số liệu của quá khứ và không thể dự đoán đúng 100%, không xét đến những biến động
của giá trong ngày giao dịch. Do đó, độ nhạy của đường trung bình SMA ở mức độ tương
đối thấp và thiếu độ nhạy so với những biến động lớn của giá trong ngắn hạn.

34
Tài liệu tham khảo

• Mitrade (2023, June 5). Đường SMA là gì? Giải thích về đường trung bình động đơn
giản (SMA). https://vn.mitrade.com/khoa-hoc-cao-cap/chi-bao-ma-macd/duong-sma.

• Minh Tuệ (2022). MA - EMA và SMA - Hướng dẫn sử dụng. https://bigtrade.vn/ema-


sma-n115.html.

35

You might also like