NGÂN HÀNG NHÀ NƯỚC VIỆT NAMBỘ 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
Trang 31.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.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 giaodị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
Trang 4Danh Mục Các Từ Viết Tắt
Trang 5Danh 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
Trang 6Lờ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.
Trang 7Nộ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
Trang 8Biể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.
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 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ợ.
Trang 9Tì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)
Trang 10Bướ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’]
Trang 11Bướ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ủaDataFrame 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.
Trang 12 df[‘Date’]=pd.to_datetime (df[‘Date’]): thay đổi kiểu dữ liệu của cột “Date” trongDataFrame 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”.
Trang 13Hì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.
Trang 14Hì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 Closetrong 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
Trang 15Hì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
Trang 16Cụ 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
pd.to_datetime(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ủaDataFrame.
Trang 172.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.
Trang 18Bước 3: Vẽ biểu đồ cột giá cuối ngày “Close” đảm bảo chuỗi dữ liệu đã được làm
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).
Trang 19Vớ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.
Trang 20Bướ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ộtClose 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 đồ chocột 'SMA 10' trong DataFrame df, head(2500) chỉ lấy 2500 dòng đầu tiêncủa cột 'SMA 20', label='SMA 10' đặt nhãn cho đường biểu đồ là 'SMA 10'.
Trang 21plt.plot(df['SMA 50'].head(2500),label='SMA 50'): Vẽ đường biểu đồ chocột 'SMA 50' trong DataFrame df, head(2500) chỉ lấy 2500 dòng đầu tiêncủ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.
Trang 22Hì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”.
Trang 23Bướ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: