36
của biểu đồ và sử dụng các công thức được xây dựng kết hợp với Logic mờ để tính toán ra được xu hướng lên hay xuống của đồ thị trong tương lai. Chương trình sẽ đưa ra một con số trong khoảng 0% đến 100%, nếu số đó càng lớn thì khả năng biểu đồ đi lên tương ứng với giá lên sẽ càng tăng , ngược lại thì khả năng giá xuống sẽ càng tăng.
2.2.5 Chức năng đưa ra phán đoán dựa vào kết quả phân tích giá chứng khoán.
Chức năng này dựa vào chức năng phân tích xu hướng, nếu kết quả của xu hướng nằm trong khoảng nào thì sẽđưa ra phán đoán và tư vấn tương ứng.
Tổng kết
Ở chương này, tôi đã trình bày chi tiết về các thành phần, quy trình hoạt động của mô hình Logic mờứng dụng trong bài toán dự báo giá chứng khoán. Đây là mô hình được áp dụng trong việc thực hiện chương trình dự báo giá chứng khoán.
Chương 3.
Thực nghiệm và kết quả
Nếu nhưở hai chương trên chỉ mang tính chất giới thiệu và nghiên cứu lý thuyết thì chương này là phần thực hành của khóa luận tốt nghiệp. Ở chương này tôi trình bày quy trình thực hiện và kết quả thu được của bộ đoán nhận giá chứng khoán được thực hiện dựa vào Fuzzy Logic thực hiện trên ngôn ngữ lập trình C# kết hợp với các luật trong phân tích kỹ thuật chứng khoán.
3.1 Xây dựng chương trình mô phỏng và chạy chương trình.
Dựa vào những lý thuyết về các thành phần ở trên tôi đã thực hành và phác thảo ra mô hình mô phỏng việc áp dụng Logic mờ vào phân tích kỹ thuật trong chứng khoán. Phần này sẽ trình bày về hệ thống mô phỏng đó bao gồm:cơ sở dữ liệu, các chức năng chính trong chương trình, các hàm chính trong chương trình ,giao diện chương trình và quá trình kiểm thử chức năng của chương trình.
37
3.1.1 Cơ sở dữ liệu.
Chương trình mô phỏng khá đơn giản về mặt cơ sở dữ liệu, chỉ có một bảng đặt tên là stock với các trường : MaCK, GiaCK, Date, chiso lưu lần lượt các thông tin : mã chứng khoán, giá chứng khoán, ngày tháng và chỉ số, trong đó chiso đóng vai trò là khóa chính.
Hình 18: Bảng cơ sở dữ liệu được sử dụng trong chương trình
Dưới đây là các thao tác với cơ sở dữ liệu được sử dụng cho các chức năng của chương trình:
- Insert: Chèn một bản ghi vào cơ sở dữ liệu
- Delete: Xóa một bản ghi ra khỏi cơ sở dữ liệu
- Update: Sửa một bản ghi trong cơ sở dữ liệu
- Select: Xem một bản ghi trong cơ sở dữ liệu
Với các câu lệnh trên, tạm thời đã đáp ứng được các chức năng chính của chương trình, tiếp theo ta sẽ tìm hiểu kỹ về các chức năng chương trình cung cấp
3.1.2 Các chức năng chính.
Trước khi đi vào tìm hiểu các chức năng của chương trình chúng ta hãy xem lại hình 1.1 về luồng làm việc của chương trình để có thể dễ dàng hơn trong việc nắm được từng chức năng và tác dụng của chúng trong chương trình.
3 Nhập và lưu trữ giá chứng khoán.
Đây là chức năng cơ bản nhất của chương trình, người dùng nhập vào thông tin cho giá chứng khoán bao gồm: mã chứng khoán, ngày, chỉ số, giá chứng khoán. Trong đó:
- Mã chứng khoán: là mã của một công ty trên sàn giao dịch. - Ngày: là ngày – tháng – năm xác định giá của chứng khoán.
38
khoán- đây có thể coi là khóa của một giá theo ngày. - Giá chứng khoán: giá cuối ngày của một mã chứng khoán.
Trường hợp người dùng nhập thiếu một trong số 4 thông tin trên , hệ thống sẽ thông báo yêu cầu người dùng nhập đầy đủ các thông tin. Khi người dùng nhập đầy đủ các thông tin thì hệ thống sẽ lưu các thông tin đó lại bởi câu lệnh Insert.
4 Sửa thông tin giá chứng khoán theo ngày.
Người dùng có thể nhập đầy đủ các thông tin vào trong các textbox sau đó nhấn nút “Sửa thông tin” thì cơ sở dữ liệu sẽ tựđộng cập nhật thông tin mới theo chỉ số của giá chứng khoán bởi câu lệnh Update. Trường hợp người dùng nhập thiếu một trong số 4 thông tin trên , hệ thống sẽ thông báo yêu cầu người dùng nhập đầy đủ các thông tin.
5 Xóa thông tin của giá chứng khoán theo ngày.
Người dùng chỉ cần nhập đủ 2 thông tin là “mã chứng khoán” và “chỉ số” sau đó nhấn nút “Xóa” thì hệ thống sẽ tựđộng xóa giá của ngày đó đi bởi câu lệnh Delete. Trường hợp người dùng nhập thiếu một trong số 2 thông tin trên, hệ thống sẽ thông báo yêu cầu người dùng nhập đầy đủ các thông tin.
6 Xem chi tiết thông tin của một giá chứng khoán theo ngày hay một nút trên biểu đồ chứng khoán.
Chức năng này phục vụ cho việc xem chi tiết từng giá chứng khoán phục vụ cho việc xóa, sửa…Tương tự như việc xóa thông tin, Người dùng chỉ cần nhập đủ 2 thông tin là“mã chứng khoán” và “chỉ số” sau đó nhấn nút “Chi tiết” thì hệ thống sẽ tự động hiện ra thông tin về giá chứng khoán ngày hôm đó ở Richtextbox. Trường hợp người dùng nhập thiếu một trong số 2 thông tin trên , hệ thống sẽ thông báo yêu cầu người dùng nhập đầy đủ các thông tin.
7 Xây dựng biểu đồ giá chứng khoán.
Ở chức năng này, người dùng chỉ cần nhập mã chứng khoán sau đó nhấn nút “Phân tích”, hệ thống sẽ tựđộng hiển thị ra đồ thị của giá chứng khoán đó dựa vào dữ liệu đã có trong cơ sở dữ liệu. Biểu đồ giúp cho người dùng có thể nhìn nhận xu hướng giá một cách trực quan hơn là chỉ nhìn vào dữ liệu giá. Trường hợp người dùng nhập thiếu thông tin mã chứng khoán , hệ thống sẽ thông báo yêu cầu người dùng nhập đầy đủ thông tin.Trường hợp nếu như mã chứng khoán chưa đủ ít nhất 5 giá thì hệ thống sẽ hiển thị thông báo chưa thể vẽ biểu đồ
39
8 Phân tích xu hướng và đưa ra dựđoán, tư vấn.
Đây là chức năng quan trọng nhất của chương trình, chức năng này dựa vào số liệu trong cơ sở dữ liệu chứ không phải dựa vào biểu đồ. Chỉ cần nhập mã chứng khoán sau đó nhấn nút “phân tích” ,hệ thống sẽ tính toán dựa vào các công thức thích hợp để đưa ra % khả năng lên xuống ( trong khoảng 1% đến 100% ), con số này sẽ xuất hiện ở phần dự báo khả năng lên xuống. Nếu con số đưa ra càng cao chứng tỏ xu hướng chứng khoán tăng giá càng mạnh. Đồng thời trong Richtextbox sẽ hiện lên các thông tin về các điểm đảo chiều trên đồ thị, người dùng có thể kết hợp việc nhìn vào đồ thị để xác thực các thông tin này. Trường hợp người dùng nhập thiếu thông tin mã chứng khoán , hệ thống sẽ thông báo yêu cầu người dùng nhập đầy đủ thông tin. Ngoài các chức năng chính ở trên, hệ thống còn cung cấp các chức năng hỗ trợ người dùng khác như bắt lỗi dữ liệu khi người dùng nhập sai dạng dữ liệu, đểđảm bảo rằng dữ liệu đưa vào cơ sở dữ liệu là dữ liệu chuẩn trước khi đưa ra biểu đồ.
3.1.3. Các hàm chính trong chương trình.
Dưới đây là danh sách các hàm cơ bản và một vài câu lệnh, sự kiện hay các thông tin quan trọng của hàm đó.
Bảng 4: Mô tả các hàm của chương trình 1. Các hàm quản lý cơ sở dữ liệu
DatabaseQuery() Hàm khởi tạo kết nối
string connString = @" server = NGHIEPTB-PC\SQLEXPRESS;
integrated security = true; database = chungkhoan ";
Kết quả thu được: có kết nối được CSDL không
Void deleteStock (string ma, int chiso)
Hàm xóa một giá chứng khoán
string sql = @" delete from stock where MaCK = '"+ma+"' and chiso ='"+chiso+"' "; Kết quả thu được: xóa được một hàng trong CSDL không
40 Void addStock (string ma,
float gia, string date, int chiso)
Hàm thêm một giá chứng khoán
string sql = @"insert into stock values('" + ma + "','" + gia + "','" + date + "','"
+ chiso + "')";
Kết quả thu được: thêm được một hàng vào cơ sở dữ liệu
String getInf (string mack, int chiso)
Hàm lấy thông tin một giá chứng khoán string sql = @"select * from stock where MaCK='" + mack + "' and chiso='" + chiso +
"'";
Kết quả thu được: hiển thị ra richtextbox thông tin của một giá chứng khoán của một chỉ số nào đó.
String GetY (string mack) Hàm lấy giá chứng khoán trong một ngày nào đó while (reader.Read()) { a[i] =float.Parse(reader[1].ToString()); giax = giax + a[i].ToString() + ","; i++; }
Kết quả thu được: Dãy giá chứng khoán của một mã chứng khoán, dưới định dạng là 1 xâu trước khi xuất thành mảng giá phục vụ cho việc vẽ biểu đồ
41
Void DeleteStock() Hàm thực hiện xóa một bản ghi với chỉ số được nhập vào textbox từ trước
connection.deleteStock(mack.Text,int.P arse(chiso.Text));
Void addStock() Hàm thực hiện thêm một bản ghi với các thông tin đã được nhập vào textbox, sau đó hiển thị tất cả dữ liệu của chứng khoán đó lên biểu đồ
Float getMax(float[] a) Hàm xác định giá trị lớn nhất trên một đoạn biểu đồ
Float getMin(float[] a) Hàm xác định giá trị nhỏ nhất trên một đoạn biểu đồ
Public voi phantich() Hàm thực thi các chức năng của hệ thống khi nhấn vào nút “Phân tích”
Kết quả thu về bao gồm:
a. Hiện biểu đồ giá của mã chứng khoán đã nhập vào textbox
b. Tính toán và phán đoán khả năng lên xuống của xu thế giá của mã chứng khoán đó
c. Hiện ra các thông tin quan trọng của biểu đồ ra richtextbox
Publicvoid chitiet() Hàm thực thi việc hiện ra thông tin chi tiết một giá có chỉ số nhất định nào đó.
Hàm này được kich hoạt khi nhấn vào nút “Chi tiết”
3.1.4. Giao diện chương trình và kiểm thử chức năng.
Chương trình tôi thực hiện dưới đây mang tính chất mô phỏng cho mô hình fuzzy logic ứng dụng trong bài toán dự báo tài chính. Phần này chúng ta sẽ cùng kiểm
42
nghiệp sự hoạt động của các chức năng giới thiệu ở trên kết hợp với việc giới thiệu về giao diện của chương trình.
9 Giao diện màn hình chính.
Hình 19: Giao diện màn hình chính
Màn hình chính được chia ra làm bốn vùng, vùng thứ nhất là vùng nhập liệu để nhập thông tin về giá chứng khoán, bên phải vùng này là vùng hiển thị biểu đồ kỹ thuật, bên dưới vùng biểu đồ kĩ thuật là vùng hiển thị thông tin và các câu tư vấn được định nghĩa của hệ thống. Bên trái vùng hiển thị thông tin là vùng dự báo khả năng lên ( xuống ) của mã chứng khoán được chọn.
10 Nhập giá chứng khoán
Như giao diện nhập bên dưới, ta nhập một bản ghi với thông tin.
♦ Mã chứng khoán: FPT
♦ Ngày: 14/04/2009
♦ Chỉ số : 19
43
Hình 20: Giao diện nhập giá chứng khoán
Sau khi nhấn vào nút “Lưu” sẽ có thông báo insert thành công và phần hiển thị biểu đồ sẽ xuất hiện biểu đồ của mã chứng khoán FPT đã bao gồm cả giá vừa cập nhật ( với chỉ số 19 )
11 Xem thông tin một bản ghi ( hay một nút trên biểu đồ ).
Hình 21: Giao diện xem thông tin một bản ghi
Ở giao diện trên, ta nhập vào hai thông tin là mã chứng khoán và chỉ số sau đó nhấn vào nút “Chi tiết” , hệ thống sẽ sinh ra báo cáo về giá đó ở trong khu vực
44 richtextbox.
12 Xóa một bản ghi giá chứng khoán.
Nhưở hình vẽ bên dưới, chương trình cho phép chúng ta xóa bất cứ một bản ghi nào trong cơ sở dữ liệu hay xóa thông tin của một giá chứng khoán nào đó. Chỉ cần nhập mã chứng khoán và chỉ số của chứng khoán sau đó nhấn nút “Xóa”, hệ thống sẽ tự động xóa bản ghi của giá chứng khoán đó ra khỏi cơ sở dữ liệu và sau đó đưa ra thông báo đã xóa thành công.
Hình 10: Giao diện xóa một bản ghi
Để muốn xóa chính xác nút nào trên biểu đồ, ta có thể xem chi tiết về nút đó sử dụng chức năng xem chi tiết ở trên.
13 Màn hình phân tích biểu đồ.
Đây có thể coi là chức năng phức tạp nhất của chương trình, để sử dụng chức năng này, chỉ cần nhập vào một thông tin là mã chứng khoán sau đó click vào nút “Phân tích” , hệ thống sẽ cho ra các kết quả sau đây:
- Biểu đồđược thay đổi phù hợp với mỗi mã chứng khoán.
- Trong khu đánh giá kết quả, hệ thống sẽ tính ra được con số phần trăm lên ( xuống ) của giá chứng khoán.
- Trong khu vực thông tin, hệ thống sẽ hiện ra các thông tin về các điểm nút quan trọng trên biểu đồ giúp cho việc đánh giá.
45
Hình 11: Giao diện chức năng phân tích biểu đồ
Như hình trên ta thấy được biểu đồ của mã chứng khoán AGC, vị trí các điểm đảo chiều quan trọng và chứng khoán này đang nằm trong khoảng dập dềnh giữa lên và xuống, có một chút xu thế là tăng giá.
3.2 Đánh giá và phân tích.
3.2.1 Độ chính xác so với thực tế.
Đểđánh giá độ chính xác của chương trình so với thực tế, tôi đã thực hiện khảo sát giá cụ thểở các sàn giao dịch chứng khoán so với sựđánh giá tăng/giảm của chương trình. Dưới đây là mẫu bảng kết quảđánh giá trong khoảng thời gian từ 21/04/09 đến 13/05/09 của mã chứng khoán FPT.
46 Bảng 5: Kết quả minh họa của chương trình Ngày Giá (1000 vnđ) Đánh giá ( % ) Dựđoán Thay đổi Kết quả 21/04/09 51.5 78.4 Tăng mạnh + 2.5 T 22/04/09 54 45.8 Giảm nhẹ - 0.5 T 23/04/09 53.5 18.6 Giảm nhẹ + 0.5 F 24/04/09 54 38 Giảm + 1 F 27/04/09 55 38 Giảm 0 T 28/04/09 55 18.6 Giảm mạnh + 0.5 F 29/04/09 55.5 78.6 Tăng mạnh + 2.5 T 04/05/09 58 66.9 Tăng + 1.5 T 05/05/09 60.5 65.2 Tăng 0 T 06/05/09 60.5 78.9 Tăng mạnh + 3.5 T 07/05/09 63.5 78.9 Tăng mạnh + 0.5 T 08/05/09 64 52.4 Tăng nhẹ + 2 T 11/05/09 66 52.4 Tăng nhẹ + 2 T 12/05/09 68 52.4 Tăng nhẹ - 3 F 13/05/09 65 18.7 Mô tả bảng kết quả:
47
quả thực và Kết quả chung. Trong đó quan trọng có cột đánh giá của chương trình (cột thứ 3 ) , hệ thống sẽ đưa ra một con số % nào đó dựa vào dữ liệu giá trước đó. Nếu con số hệ thống đưa ra năm trong khoảng 50% đến 100% thì mã chứng khoán có khả năng tăng giá, và con sốđó càng cao thì khả năng lên giá càng lớn và nhà đầu tư nên mua vào. Do đó, cột dựđoán ( cột 4 ) chỉ là mô tả lại kết quảđánh giá của cột 3 bằng lời, có bốn giá trị có thể nằm trong cột bốn là : tăng mạnh, tăng nhẹ, giảm nhẹ và giảm mạnh. Các giá trị này tương ứng với các con sốở cột 3 là lớn hay bé. Cột kết quả thực (cột 5) là xác định lại xem chính xác ngày hôm sau tăng hay giảm để có thể so sánh với cột 4 từđó rút ra kết luận ở cột 6 là đúng ( T) hay sai ( F).
Ví dụ như bảng trên ngày 21/04 giá chứng khoán là 51.5, chương trình đưa ra con số dựđoán là ở cột 3 là 78.4, con số này khá cao( > 50 % ) do vậy, chương trình dự đoán khả năng giá ngày kế tiếp ( ngày 22/4) sẽ là tăng giá mạnh. Thực tế ngày 22/04 giá cổ phiếu là 54 ( tăng 54 – 51.5 = 2.5 ) , như vậy phán đoán ở ngày 21/04 là chính xác. Và ở cột 6, giá trịở hàng đó là T ( đúng ) .
Ngày 22/04 giá chứng khoán là 54, chương trình đưa ra con số dựđoán ở cột 3 là