Mô hình phân tích và dự báo giá chứng khoán mà tôi nghiên cứu và xây dựng 
trong đề tài luận văn của mình là sự kết hợp giữa phương pháp phân tích kĩ thuật 
truyền thống với mô hình Logic mờ sẽ tạo ra một công cụ phân tích và dự báo với độ
chính xác cao hơn so với các mô hình cổ điển, đặc biệt đối với thị trường chứng khoán 
của Việt Nam, một thị trường vừa hình thành chục năm lại đây và chưa thể cung cấp 
đầy đủ nguồn tài dữ liệu để tạo ra đường xu hướng chính xác trong các biểu đồ phân 
tích và dự báo.
                
              
                                            
                                
            
 
            
                 63 trang
63 trang | 
Chia sẻ: lylyngoc | Lượt xem: 4972 | Lượt tải: 1 
              
            Bạn đang xem trước 20 trang tài liệu Luận văn -Tìm hiểu và xây dựng mô hình fuzzy logic ứng dụng trong bài toán dự báo tài chính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ta hay nhầm lẫn mức độ đúng với xác suất. Tuy nhiên, hai khái niệm này khác hẳn 
nhau; độ đúng đắn của lôgic mờ biểu diễn độ liên thuộc với các tập được định nghĩa 
không rõ ràng, chứ không phải khả năng xảy ra một biến cố hay điều kiện nào đó. 
Để minh họa sự khác biệt, xét tình huống sau: Bảo đang đứng trong một ngôi nhà 
có hai phòng thông nhau: phòng bếp và phòng ăn. Trong nhiều trường hợp, trạng thái 
của Bảo trong tập hợp gồm những thứ "ở trong bếp" hoàn toàn đơn giản: hoặc là anh ta 
"trong bếp" hoặc "không ở trong bếp". Nhưng nếu Bảo đứng tại cửa nối giữa hai 
phòng thì sao? Anh ta có thể được coi là "có phần ở trong bếp". Việc định lượng trạng 
thái "một phần" này cho ra một quan hệ liên thuộc đối với một tập mờ. Chẳng hạn, nếu 
Bảo chỉ thò một ngón chân cái vào phòng ăn, ta có thể nói rằng Bảo ở "trong bếp" đến 
99% và ở trong phòng ăn 1%. Một khi anh ta còn đứng ở cửa thì không có một biến cố 
nào (ví dụ một đồng xu được tung lên) quyết định rằng Bảo hoàn toàn "ở trong bếp" 
hay hoàn toàn "không ở trong bếp". 
Lôgic mờ cho phép độ liên thuộc có giá trị trong khoảng đóng 0 và 1, và ở hình 
thức ngôn từ, các khái niệm không chính xác như "hơi hơi", "gần như", "khá là" và 
"rất". Cụ thể, nó cho phép quan hệ thành viên không đầy đủ giữa thành viên và tập 
hợp. Tính chất này có liên quan đến tập mờ và lý thuyết xác suất. 
20
Một ví dụ khác để minh họa cho sự mềm dẻo của Logic mờ là việc xác định lứa tuổi: 
Boolean Logic Fuzzy Logic 
Hình 6: Sự khác nhau giữa hai loại Logic trong việc xác định lứa tuổi 
Nhìn ở hình vẽ trên, nếu như đối với Boolean Logic (tương ứng với Crisp Sets) quy 
định tuổi dưới 23 mới được coi là “trẻ tuổi” thì ở Fuzzy Logic (tương ứng với Fuzzy 
Sets) , có sự xác định mềm dẻo hơn khi không quy định khắt khe chính xác bao nhiêu 
tuổi mới là trẻ. Điều này hợp hơn với thực tế bởi vì đôi khi tuổi tác còn do con người 
cảm nhận, có người coi dưới 23 tuổi là trẻ còn có người coi trên 23 tuổi một vài năm 
vẫn là trẻ, hoặc dưới 23 tuổi một vài năm đã không còn là trẻ nữa.Qua đó ở ví dụ này 
ta thấy các giá trị Fuzzy mềm dẻo hơn rất nhiều so với Crisp sets, phù hợp hơn với 
người dùng. 
1.2.2 Công cụ thực hiện hệ Logic mờ. 
Việc thiết kế hệ điều khiển mờ có thể thực hiện bằng các phương pháp khác nhau 
như là thiết kế hệ mềm hoặc thiết kế hệ cứng. Mỗi phương pháp có những ưu nhược 
điểm riêng, thiết kế hệ cứng cho phép người thiết kế đánh giá được các luật mờ một 
cách nhanh chóng nhưng việc thiết kế theo cách này thường rất tốn kém. Thiết kế hệ 
mềm là cách tốt nhất để xây dựng nên một hệ điều khiển mờ, bằng cách sử dụng các 
phần mềm lập trình có sẵn, và có thể mô phỏng hệ thống. 
Thiết kế hệ mềm có thể sử dụng các phần mềm chuyên dụng về xử lý mờ như 
Matlab, FuzzyTech, Winfact,…Việc làm này cho phép xây dung rất nhanh một hệ mờ, 
mô phỏng và đành giá được ngay hệ thống. Nhưng trở ngại lớn vẫn là vấn đề kinh tế. 
Việc thiết kế hệ mềm vẫn có thể thực hiện được với các ngôn ngữ lập trình thông 
21
dụng như C++, Delphi, VB,C# …Việc xử lý mờ sẽ được thực hiện trên máy tính bàng 
phần mềm tự xây dựng. Sau đó là việc trao đổi dữ liệu với thiết bị chấp hành,và các 
thiết bị đo sẽ do một modul khác đảm nhận.Modul đó cũng có thể tự xây dựng hoặc 
cùng các Modul của một hãng khác. 
Trước khi quyết định lựa chọn ngôn ngữ lập trình để giải quyết bài toán Logic 
mờ, chúng ta cần nắm được những nhiệm vụ cần giải quyết: 
- Cài đặt Cấu trúc dữ liệu mô tả tập mờ và các phép toán trên tập mờ. 
- Cài đặt Cấu trúc dữ liệu mô tả các luật suy diễn và các thao tác xử lý liên quan. 
- Cài đặt và vận hành Motor suy diễn mờ. 
- Cài đặt các công cụ đồ họa cho phép người sử dụng soạn thảo trực quan các tập 
mờ, các luật suy diễn. 
- Ghép nối máy tính và thiết bị điều khiển. 
- Các thao tác thông dụng như lưu trữ công việc, kết xuất dữ liệu,... 
Do vậy tôi chọn ngôn ngữ lập trình C#, là một ngôn ngữ cho phép: 
- Quản lý tốt mã nguồn. 
- Thư viện cài đặt các cấu trúc dữ liệu và giải thuật cơ bản được cung cấp đầy đủ, 
sử dụng tiện lợi. 
Trên thị trường hiện nay có một công cụ phát triển sử dụng ngôn ngữ lập trình 
C# rất tốt đó là Microsoft Visual C# trong bộ Visual Studio vì những lý do sau: 
- Thư viện lớp của C# Builder rất phong phú và dễ dàng mở rộng, thừa kế. Đây 
là ưu điểm vượt trội của nó so với các công cụ phát triển khác. 
- C# Builder không ép buộc người lập trình phải theo một khung ứng dụng nào. 
Do vậy, nó rất thích hợp cho người lập trình sáng tạo, có yêu cầu điều chỉnh chi tiết tới 
mọi thành phần của chương trình. 
1.2.3 Một số ứng dụng của Logic mờ. 
Lôgic mờ có thể được sử dụng để điều khiển các thiết bị gia dụng như mý giặt 
(cảm nhận kích thước tải và mật độ bột giặt và điều chỉnh các chu kỳ giặt theo đó) và 
tủ lạnh. 
Một ứng dụng cơ bản có thể có đặc điểm là các khoảng con của một biến liên tục. 
Ví dụ, một đo đạc nhiệt độ cho phanh (anti-lock brake) có thể có một vài hàm 
22
liên thuộc riêng biệt xác định các khoảng nhiệt độ cụ thể để điều khiển phanh một cách 
đúng đắn. Mỗi hàm ánh xạ cùng một số đo nhiệt độ tới một chân giá trị trong khoảng 
từ 0 đến 1. Sau đó các chân giá trị này có thể được dùng để quyết định các phanh nên 
được điều khiển như thế nào. 
Hình 7: Mô hình đoán nhận nhiệt độ 
Trong hình, cold (lạnh), warm (ấm), và hot (nóng) là các hàm ánh xạ một thang nhiệt 
độ. Một điểm trên thang nhiệt độ có 3 "chân giá trị" — mỗi hàm cho một giá trị. Đối 
với nhiệt độ cụ thể trong hình, 3 chân giá trị này có thể được giải nghĩa là 3 miêu tả 
sau về nhiệt độ này: "tương đối lạnh", "hơi hơi ấm", và "không nóng". 
Ví dụ về các ứng dụng khác của lôgic mờ 
• Các hệ thống con của ô tô và các phương tiện giao thông khác, chẳng hạn các 
hệ thống con như ABS và quản lý hơi (ví dụ Tokyo monorail) 
• Máy điều hòa nhiệt độ 
• Phần mềm MASSIVE dùng trong các tập phim Chúa Nhẫn (Lord of the Rings), 
phần mềm đã giúp trình diễn những đội quân lớn, tạo các chuyển động một 
cách ngẫu nhiên nhưng vẫn có thứ tự 
• Camera 
• Xử lý ảnh số(Digital image processing), chẳng hạn như phát hiện biên (edge 
detection) 
• Nồi cơm điện 
• Máy rửa bát 
• Thang máy 
• Trí tuệ nhân tạo trong trò chơi điện tử 
23
• Các bộ lọc ngôn ngữ tại các bảng tin, diễn đàn (message board) và phòng chát 
để lọc bỏ các đoạn văn bản khiếm nhã 
• Nhận dạng mẫu trong Cảm nhận từ xa ( Remote Sensing) 
• Gambit System trong Final Fantasy XII 
Lôgic mờ cũng đã được tích hợp vào một số bộ vi điều khiển và vi xử lý, ví dụ 
Freescale 68HC12. 
1.2.4 Các yếu tố xây dựng mô hình Logic mờ. 
Dữ liệu rõ 
(input) 
Dữ liệu mờ(Input) 
Dữ liệu mờ 
(Output) 
 Dữ liệu rõ (output) 
Hình 8: Cấu trúc và qui trình hoat động của mô hình. 
Một mô hình lôgic mờ bao gồm các yếu tố sau: dữ liệu ( đầu vào và đầu ra) , các hàm 
chuyển đổi, các phép toán logic và các biến ngôn ngữ. 
Dữ liệu 
Dữ liệu được chia làm hai nhóm chính, dữ liệu đầu vào và dữ liệu đầu ra. Mỗi nhóm 
lại chia ra dữ liệu rõ và dứ liệu mờ 
Các hàm 
Để thực hiện việc quy đổi từ dữ liệu cứng về dữ liệu mờ ta cần phải lựa chọn các 
hàm phục vụ cho việc chuyển đổi, thông thường có 4 loại hàm hay sử dụng: hình tam 
giác, hình thang, hình cong và hình que được minh họa dưới đây: 
Quá trình mờ hóa 
Bộ xử lý Logic 
mờ 
Quá trình Giải 
mờ 
24
Hình 9: Các mô hình được sử dụng trong hệ thống Logic mờ 
Các phép toán của logic mờ. 
Logic mờ cũng giống Logic thông thường đều quy định về các phép toán như giao, 
hợp, loại trừ ,cộng, phủ định….Tuy nhiên, cách tính giá trị của mỗi phép toán lại khác 
so với logic thông thương. 
Giả sử cho A và B là hai tập mờ trên không gian nền U, có các hàm liên thuộc μA, 
μB. Khi đó ta có các phép toán sau: 
Stt Phép toán trên tập mờ Định nghĩa hàm liên thuộc 
1 A⊆B μA(u)≤μB(u) 
2 A∪B μA∪B(u)=max{μA(u),μB(u)} 
3 A∩B μA∩B(u)=min{μA(u),μB(u)} 
4 ¬A μ¬A=1-μA 
5 A⊕B μA⊕B=μA(u)+μB(u)-μA(u)μB(u) 
6 U μU(u)=1 
25
7 φ μφ(u)=0 
Ví dụ 
Hợp của hai tập A và B là tập Max của mỗi phần tử con trong hai tập đó. 
– A = {1.0, 0.20, 0.75} 
– B = {0.2, 0.45, 0.50} 
Î A ∪ B = {MAX(1.0, 0.2), MAX(0.20, 0.45), MAX(0.75, 0.50)} 
 = {1.0, 0.45, 0.75} 
Ngược lại, A giao B là giá trị MIN của mỗi phần tử trong hai tập A và B. Trong trường 
hợp trên thì Min của A và B là : 
A ∩ B = {MIN(1.0, 0.2), MIN(0.20, 0.45), MIN(0.75, 0.50)} = {0.2, 0.20, 0.50} 
Các phép toán nay ảnh hưởng rất nhiều đến một thành phần quan trọng của hệ 
Fuzzy là định khoảng giá trị. Đây cũng là cơ sở cho việc thiết lập các luật trong hệ 
Logic mờ. 
Biến ngôn ngữ. 
Một biến ngôn ngữ quy định đến trường nào đó có giá trị nào đó, hay nói cách 
khác nó chỉ đến một khoảng giá trị trong hệ thống fuzzy logic. Giá trị của biến ngôn 
ngữ cũng là dạng từ ngữ. Thông thường, người ta gắn các khoảng giá trị số cho một từ 
ngữ nào đó thể hiện cho nó.Ta xét ví dụ sau: 
- Biến ngôn ngữ: nhiệt độ 
- Các khoảng giá trị ( fuzzy sets) : cold , warm, hot 
Hình 10: Mô hình minh họa biến ngôn ngữ trong việc đoán nhận nhiệt độ 
26
Trong ví dụ trên, người ta thay những con số chỉ nhiệt độ bằng biến ngôn ngữ là 
nhiệt độ, còn giá trị của biến này là cold, warm và hot. Giá trị cold gắn với khoảng giá 
trị thực từ 0 độ đến 20 độ , giá trị warm gắn với khoảng giá trị thực từ 20 độ đến 60 độ, 
còn giá trị hot gắn với khoảng giá trị thực từ 60 độ tới 100 độ. 
Các biến ngôn ngữ này phục vụ cho việc thiết lập các luật tương ứng và phù hợp 
với thực tế. 
Các luật trong mô hình logic mờ 
Các luật là thành phần điều khiển của một hệ thống logic mờ. Các luật được thực 
hiện dựa trên câu lệnh IF……….THEN và một số phép toán Logic khác như AND, 
OR, NOT….Trong một hệ thống, nếu tập luật càng chính xác thì hiệu quả của hệ 
thống càng cao. Dưới đây là cách tính của các phép toán AND, OR, và NOT 
Mô tả ví dụ: một lò sưởi tự động nhận hai giá trị đầu vào ( input ) là giá dầu đốt 
hiện tại và nhiệt độ hiện tại trong phòng, tùy mức độ nhiệt độ hiện tại nóng hay lạnh và 
giá dầu đốt đắt hay rẻ để nó tự động cung cấp nhiệt trong phòng một cách phù hợp sao 
cho không bị lạnh mà cũng không lãng phí quá. 
“Nếu nhiệt độ là lạnh và giá dầu là rẻ thì nhiệt xả ra là cao” 
Biến ngôn ngữ Giá trị biến ngôn ngữ 
Bảng dưới đây chỉ ra cụ thể luật làm việc của ví dụ trên: 
Bảng 3: Mô tả hoạt động của máy sưởi 
 Nhiệt 
độ 
Giá dầu 
Lạnh Ấm Nóng 
Rẻ Cao Cao Trung bình 
Bình thường Cao Trung bình Thấp 
Đắt Trung bình Thấp Thấp 
27
1.2.5 Qui trình hoạt động của Logic mờ. 
Hình 11: Quy trình hoạt động của hệ Logic mờ 
Đầu tiên ta sử dụng các dữ liệu thực tế (dữ liệu rõ) là dữ liệu đầu vào, qua bước 
mờ hóa (Fuzzification) sẽ cho ta dữ liệu “mờ”, kết quả này sẽ được sử dụng làm đầu 
vào cho hệ xử lý logic mờ (Fuzzy Logic) và cho ra kết quả tiêp theo là dữ liệu mờ đầu 
ra, dữ liệu này này tiếp tục được sử dụng làm dữ liệu đầu vào cho hệ thống giải mờ 
(De–Fuzzificationg), sau bước cuối cùng này cho ta kết quả là dữ liệu rõ. 
Khâu mờ hoá (Fuzzification): thực hiện biến đổi các giá trị rõ đầu vào thành 
một miền giá trị mờ với hàm thuộc và biến ngôn ngữ tương ứng. 
Khâu thiết bị hợp thành (Fuzzy Logic or FAM): biến đổi các giá trị mờ của 
biến ngôn ngữ đầu vào thành các giá trị mờ của biến ngôn ngữ đầu ra dựa trên các luật 
hợp thành đã xây dựng. 
Khâu giải mờ (De-Fuzzification): biến đổi các giá trị mờ của biến ngôn ngữ 
đầu ra thành các giá trị rõ để thực hiện điều khiển đối tượng. 
1.2.6 Phương pháp xây dựng mô hình. 
Như đã nói ở trên trong phần giới thiệu về FuzzyLogic, có nhiều mô hình phục 
vụ cho việc xây dựng hệ Fuzzy Logic, trong khóa luận tốt nghiệp, tôi sử dụng hai mô 
hình cơ bản là mô hình tam giác và mô hình hình thang. Sau đây chúng ta sẽ tìm hiểu 
kỹ hơn về hai mô hình này và ứng dụng cụ thể của nó trong khóa luận tốt nghiệp. 
Mô hình tam giác 
Đây là mô hình Fuzzy Logic được sử dụng trong trường hợp mà giá trị của các 
biến ngôn ngữ được xác định một cách nhạy cảm và độ mờ biến thiên nhanh. 
28
1 Chậm trung bình nhanh 
0 5 10 15 20 
Hình 12: Mô hình tam giác trong việc xác định tốc độ 
Ví dụ như biết “Tốc độ” bao gồm có ba giá trị ngôn ngữ là “nhanh”, “chậm” và 
“trung bình” tuy nhiên với một tốc độ thực tế là 40km/h thì tùy từng hoàn cảnh ta cho 
là nhanh, tùy từng hoàn cảnh lại cho là không nhanh. Như với tốc độ trong một cuộc 
đua xe đạp thì đó là chậm nhưng tốc độc của một người bình thường đi xe đạp thì lại 
có thể cho là nhanh, trong những trường hợp khác ta lại coi tốc độ đó ở mức trung 
bình. Hơn nữa trong cụ thể một hoàn cảnh nào đó thì lại tùy từng lúc chúng ta coi là 
nhanh mà có lúc lại coi là chậm, ví dụ như trong cuộc đua thì lại đối với vận động viên 
xuất sắc thì đó được coi là tốc độ chậm nhưng so với mặt bằng chung thì đó có thể coi 
là trung bình. Như vậy có nghĩa là đối với mô hình tam giác, tại từng “hoàn cảnh” sẽ 
lại có một sự đánh giá khác nhau hay nói cách khác thì độ “mờ” biến thiên nhanh hơn. 
Mô hình hình thang 
Nếu như mô hình tam giác là mô hình Fuzzy Logic được sử dụng trong trường 
hợp mà giá trị của các biến ngôn ngữ được xác định một cách nhạy cảm và độ mờ biến 
thiên nhanh thì mô hình hình thang lại mang tính chất gần với logic boolean hơn và nó 
có độ biến thiên mờ tương đối thấp 
Ta xét ví dụ sau: Một hệ thống Logic mờ đo nhiệt độ và xác định mức độ nóng 
lạnh với ba khoảng cold, warm và hot. 
29
Hình 13: Mô hình hình thang 
Theo hình vẽ trên ta có thể thấy khoảng nhiệt độ lạnh kéo dài hơn với độ dài là 
đỉnh hình thang, trong khoảng nhiệt độ này hệ thống giữ cố định việc coi nhiệt độ độ 
là lạnh, sự biến thiên (mờ hóa) chỉ xảy ra ở các cạnh bên (không vuông góc ) của hình 
thang. Theo ví dụ trên thì trong khoảng nhiệt độ xung quanh 20 độ, có sự mềm dẻo khi 
coi thời tiết lúc đó nằm trong khoảng lạnh hay ấm, tương tự đối với khoảng nhiệt độ 
xung quanh 60 độ. Ở khóa luận tốt nghiệp, mô hình hình thang được dùng để xác định 
tiềm năng lên hay xuống của giá chứng khoán ngày hôm nay so với xu thế của cả một 
khoảng thời gian trước đó. 
Tổng kết 
Chương này tôi đã trình bày về cơ sở lý thuyết để xây dựng bài toán, trong đó có 
hai cơ sở chính là lý thuyết về kinh tế (phân tích kỹ thuật trong chứng khoán) và lý 
thuyết về máy tính ( tìm hiểu về Fuzzy Logic). 
Thông qua chương này , người đọc có thể dễ dàng hơn trong việc hiểu được cách 
kết hợp giữa lý thuyết về kinh tế và lý thuyết về tin học trong việc tạo ra bộ đoán nhận 
giá chứng khoán nói riêng và đoán nhận biểu đồ tài chính nói chung. 
30
Chương 2. 
Xây dựng mô hình Logic mờ và ứng dụng trong phân 
tích kỹ thuật 
Bên cạnh trường phái phân tích cơ bản, trường phái phân tích kĩ thuật ngày càng 
khẳng định vai trò quan trọng và ưu việt của mình trong việc phân tích xu hướng biến 
động của các chỉ số chứng khoán trên thị trường. Tuy nhiên, số lượng nhà đầu tư hiểu 
và ứng dụng hệ thống phân tích kĩ thuật còn hạn chế, bên cạnh đó tính ứng dụng và 
tính chính xác của hệ thống phân tích kĩ thuật vẫn còn nhiều bất cập. Lý do cơ bản là 
chưa có một công cụ nào thực sự đưa ra được những dự báo có độ chính xác cao tại 
từng thị trường nhất định trong từng giai đoạn cụ thể. 
Mô hình Logic mờ cung cấp một cơ chế mềm dẻo để giúp cho việc dự đoán. 
Trong mô hình này, logic mờ được kết hợp với các biểu đồ để đưa ra dự đoán dựa vào 
các dấu hiệu quan trọng ở trên biểu đồ. 
Hình 14 : Mô hình cơ bản của hệ thống phân tích kỹ thuật trong chứng khoán 
Kết quả thu được sẽ là một hệ thống với tính năng chính là đoán nhận và dự báo 
xu hướng giá chứng khoán, ngoài ra còn một số tính năng khác hỗ trợ người chơi 
chứng khoán trong việc đầu tư. 
2.1 Xây dựng mô hình 
31
Như đã nói ở chương 1, các thành phần tạo nên một hệ logic mờ bao gồm: dữ 
liệu, các phép toán, các hàm, các biến ngôn ngữ và các luật. Dữ liệu người dùng đưa 
vào chương trình trở thành tham số cho các hàm trong hệ Logic mờ. Kết quả trả về của 
các hàm này lại chính là giá trị của các biến ngôn ngữ. Các biến ngôn ngữ này kết hợp 
với các phép toán Logic mờ sẽ tạo thành tập luật để điều khiển chương trình. 
Như vậy trong mô hình này tôi xây dựng được năm yếu tố: dữ liệu, các phép toán, các 
hàm, các biến ngôn ngữ và tập luật. 
2.1.1 Dữ liệu đầu vào cho mô hình 
Mô hình tôi xây dựng có hai dữ liệu đầu vào ( input) là xuthe và vtht. Cả hai loại 
dữ liệu đầu vào đều được tính dựa trên các điểm đặc biệt trên biểu đồ. Dưới đây tôi sẽ 
trình bày cách tính toán ra từng loại dữ liệu. 
Hình 15: Cách xác định xem giá lên hay xuống trong mô hình 
- Dữ liệu xuthe: 
Đây là dữ liệu đầu vào của chương trình cho biết tình hình xu thế chu kỳ hiện 
tại của đồ thị giá chứng khoán là đang lên hay xuống. Đầu tiên ta tìm giá trị tại các 
điểm đảo chiều trong xu thế cần xem xét sau đó lấy giá trị tại điểm đảo chiều gần nhất 
và điểm đảo chiều thứ 3 gần nhất. Như ở hình 15 là giá trị tại điểm A và điểm B ta 
tính: 
BC = giá tại điểm B – Giá tại điểm A 
AC = chỉ số tại C – chỉ số tại A ( như trên hình vẽ 15 thì AC = 10 – 2 = 8 ) 
AB = sqrt(BC*BC + AC*AC) – Công thức tính cạnh huyền trong tam giác vuông 
32
Cuối cùng ta tính xuthe = BC/AB : đây chính là giá trị của cos góc A nên tập giá trị 
của dữ liệu xuthe nằm trong khoảng ( -1 , 1 ) 
- Dữ liệu khoangcach 
Đây là dữ liệu để xác định quan hệ giữa giá hiện tại ( giá ngày hôm nay) so với xu 
thế giá trong cả một chu kỳ ngay trước nó. Để tìm được giá trị của khoangcach ta cần 
tính được: 
• Giá trị nhỏ nhất của chu kỳ: getMin(yp,yp.Length) 
• Giá trị lớn nhất của chu kỳ : getMax(yp,yp.Length) 
• Các điểm đảo chiều lên gần nhất: dinhl[0] 
• Các điểm đảo chiều xuống gần nhất : dinhx[0] 
• Giá trị hiện tại cần xem xét: yp[yp.Length - 1] 
Sau khi tìm được giá trị của khoảng cách như sau: 
Trong trường hợp xu thế đang xuống: 
khoangcach = (yp[yp.Length - 1] - dinhx[0])/(getMax(yp,yp.Length)-
getMin(yp,yp.Length)); 
Trường hợp xu thế đang lên 
khoangcach = (-yp[yp.Length - 1] + dinhl[0])/(getMax(yp,yp.Length)-
getMin(yp,yp.Length)); 
Giá trị của biến khoảng cách nằm trong khoảng(-1,1) nếu như các trường hợp khác( 
phá giá thì mới dẫn tới trường hợp khác) thì ta quy khoangcach = giá trị max là -1 
hoặc 1. 
Ví dụ ở hình 15, ta xác định được xuthe > 0 nên xu thế của giá chứng khoán là 
đang lên, giá trị hiện tại nằm ở chỉ số 14 gọi là gia(14) , dinhx là gia(11), max = 
gia(14), min = gia(2) nên: 
Khoangcach = (gia(11) – gia(14))/(gia(14) – gia(2) ) được một con số trong khoảng ( 
-1 , 0 ) 
2.1.2 Các biến ngôn ngữ và giá trị của chúng. 
Sau khi đã tính toán được dữ liệu đâu vào cho chương trình ta cần khởi tạo và 
thiết lập giá trị các biến ngôn ngữ. Có hai biến đầu vào là fvxuthe và fvvtht tương 
33
ứng cho hai dữ liệu đầu vào là xuthe và vtht, và một biến kết quả là fvTips, chúng đc 
khai báo như sau: 
FuzzyVariable fvxuthe = _fsTips.InputByName("xuthe"); 
FuzzyVariable fvvtht = _fsTips.InputByName("vtht"); 
FuzzyVariable fvTips = _fsTips.OutputByName("tips"); 
Biến fvxuthe lấy tên đại diện là “xuthe”, biến fvvtht lấy tên đại diện là “vtht”, 
biến fvTips lấy tên đại diện là “tips”. Để gắn các dữ liệu đã tính toán vào hai biến 
fvxuthe và fvvtht ta sử dụng các câu lệnh sau: 
 inputValues.Add(fvxuthe, xuthe); 
 inputValues.Add(fvvtht, (double)khoangcach); 
2.1.3 Các hàm được sử dụng trong mô hình 
Mô hình dự báo giá chứng khoán tôi thực hiện bao gồm có hai hàm chính trong 
đó một hàm là hàm tam giác để thiết lập giá trị cho các biến ngôn ngữ fvxuthe nhận 
đầu vào là dữ liệu xuthe ở 2.1.1 và một hàm là hàm hình thang để thiết lập giá trị cho 
biến ngôn ngữ fvvtht, hàm này nhận đầu vào là dữ liệu khoangcach. 
Xây dựng lớp để tạo hàm tam giác ( dưới đây chỉ là code minh họa, không đầy đủ) 
public class TriangularMembershipFunction : IMembershipFunction 
 { 
 double _x1, _x2, _x3; 
 public TriangularMembershipFunction(double x1, double x2, double x3) 
 { 
 if (!(x1 <= x2 && x2 <= x3)) 
 { 
 throw new ArgumentException(); 
 } 
 _x1 = x1; 
 _x2 = x2; 
 _x3 = x3; 
 } 
 public double GetValue(double x) 
 { 
 double result = 0; 
 if (x == _x1 && x == _x2) 
 { 
 result = 1.0; 
 } 
 else if (x == _x2 && x == _x3) 
34
 { 
 result = 1.0; 
 } 
 else if (x = _x3) 
 { 
 result = 0; 
 } 
 else if (x == _x2) 
 { 
 result = 1; 
 } 
 else if ((x > _x1) && (x < _x2)) 
 { 
 result = (x / (_x2 - _x1)) - (_x1 / (_x2 - _x1)); 
 } 
 else 
 { 
 result = (-x / (_x3 - _x2)) + (_x3 / (_x3 - _x2)); 
 } 
 return result; 
 } 
 } 
Ta thấy x1,x2,x3 là các mốc quan trọng trong khoảng giá trị có thể của các biến 
được đưa vào, tùy giá trị biến x đưa vào nằm trong khoảng nào của x1,x2,x3 mà giá trị 
trả về của hàm getvalue(double x): result sẽ là một giá trị tương ứng. 
Dưới đây là một vài ví dụ minh họa cho việc gọi hàm: 
FuzzyVariable fvxuthe = new FuzzyVariable("xuthe", -1.0, 1.0); // Khởi tạo biến 
fvxuthe nhận giá trị từ dữ liệu xuthe và có giá trị trong khoảng ( -1.0,1.0) 
 fvxuthe.Terms.Add(new FuzzyTerm("xuong", new 
TriangularMembershipFunction(-1, -0.5, 0.0))); 
 fvxuthe.Terms.Add(new FuzzyTerm("trungbinh", new 
TriangularMembershipFunction(-0.5, 0.0, 0.5))); 
Như ví dụ trên, ta đặt giá trị của biến ngôn ngữ fvxuthe nằm trong khoảng -1 
đến 1 và giá trị của nó là xuong và trungbình, khi dữ liệu đưa vào nằm trong khoảng (-
1, -0.5, 0) thì biến fvxuthe sẽ được gán giá trị là xuống, nếu nằm trong khoảng (-0.5, 0, 
0.5) thì giá trị của nó là trung bình. 
Xây dựng lớp tạo hàm hình thang 
35
 public TrapezoidMembershipFunction(double x1, double x2, double x3, double x4) 
 { 
 if (!(x1 <= x2 && x2 <= x3 && x3 <= x4)) 
 { 
 throw new ArgumentException(); 
 } 
 _x1 = x1; 
 _x2 = x2; 
 _x3 = x3; 
 _x4 = x4; 
 } 
 public double GetValue(double x) 
 { 
 double result = 0; 
 if (x == _x1 && x == _x2) 
 { 
 result = 1.0; 
 } 
 else if (x == _x3 && x == _x4) 
 { 
 result = 1.0; 
 } 
 else if (x = _x4) 
 { 
 result = 0; 
 } 
 else if ((x >= _x2) && (x <= _x3)) 
 { 
 result = 1; 
 } 
 else if ((x > _x1) && (x < _x2)) 
 { 
 result = (x / (_x2 - _x1)) - (_x1 / (_x2 - _x1)); 
 } 
 else 
 { 
 result = (-x / (_x4 - _x3)) + (_x4 / (_x4 - _x3)); 
 } 
 return result; 
 } 
 } 
36
Tương tự như hàm tam giác, hàm hình thang nhận giá trị đầu vào là biến khoangcach 
để cho ra kết quả tương ứng như ở trong hàm getValue ( double x).Ta có thể gọi hàm 
này như sau 
FuzzyVariable fvvtht = new FuzzyVariable("vtht", -1.0, 1.0); 
 fvvtht.Terms.Add(new FuzzyTerm("tren", new 
TrapezoidMembershipFunction(0.2, 0.35, 0.55, 0.7))); 
 fvvtht.Terms.Add(new FuzzyTerm("duoi", new 
TrapezoidMembershipFunction(-1.0, -1.0, -0.9, -0.85))); 
Nếu giá trị khoangcách đưa vào nằm trong khoảng ( 0.2, 0.35, 0.55, 0.7) thì giá trị biến 
ngôn ngữ vtht là “trên” còn lại thì là “dưới” 
 Sau khi xác định xong giá trị của các biến đầu vào thì ta dùng hàm tam giác để xác 
định giá trị của biến đầu ra bằng việc gọi hàm như sau: 
FuzzyVariable fvTips = new FuzzyVariable("tips", 0.0, 100.0); 
 fvTips.Terms.Add(new FuzzyTerm("xuong", new 
TriangularMembershipFunction(0.0, 15.0, 40.0))); 
 fvTips.Terms.Add(new FuzzyTerm("trungbinh", new 
TriangularMembershipFunction(33.0, 44.0, 60.0))); 
 fvTips.Terms.Add(new FuzzyTerm("len", new 
TriangularMembershipFunction(60.0, 75.0, 100.0))); 
 fsTips.Output.Add(fvTips); 
2.1.4 Tập luật 
Để thực hiện việc đánh giá xu thế giá chứng khoán ta cần xây dựng tập luật để 
xác định khi nào thì giá sẽ tăng và khi nào thì giảm. Các luật bao gồm các biến ngôn 
ngữ, giá trị của chúng và các phép toán Logic để kết hợp theo câu điều kiện 
IF…………………THEN và các phép toán khác như AND, OR, NOT. Thông thường 
có nhiều luật khác nhau để cùng diễn tả một biểu đồ nên để luật mang lại hiệu quả thì 
cần phải kết hợp kỹ lưỡng với phương pháp phân tích kỹ thuật trong chứng khoán. 
Cơ sở để xây dựng tập luật 
Trong mô hình này tôi mới dừng lại ở những cơ sở đơn giản để xây dựng đánh 
giá xu hướng của giá chứng khoán đó là xu thế cấp 1 và xu thế cấp 2 của lý thuyết 
DOW. 
Nếu như mỗi đợt tăng giá liên tiếp đều đạt đến mức cao hơn mức trước đó và 
mỗi điều chỉnh cấp 2 đều dừng lại ở mức đáy cao hơn mức đáy của lần điều chỉnh 
37
trước thì xu thế cấp 1 lúc này là tăng giá. Còn ngược lại nếu mỗi biến động giảm đều 
làm cho giá xuống những mức thấp hơn còn mỗi điều chỉnh đều không đủ mạnh để 
làm cho giá tăng lên đến mức đỉnh của những đợt tăng giá trước đó thì xu thế cấp 1 
của thị trường lúc này là giảm giá 
Xu thế cấp 2 là những điều chỉnh có tác động làm gián đoạn quá trình vận động 
của giá theo xu thế cấp 1. Chúng là những đợt suy giảm tạm thời (trung gian) hay còn 
gọi là những điều chỉnh xuất hiện ở các thị trường tăng giá; hoặc những đợt tăng giá 
hay còn gọi là hồi phục xuất hiện ở các thị trường giảm giá. Thường thì những biến 
động trung gian này kéo dài từ 3 tuần đến nhiều tháng. Chúng sẽ kéo ngược lại khoản 
1/3 đến 2/3 mức tăng (hay giảm tùy loại thị trường) của giá theo xu thế cấp 1. Do đó, 
chẳng hạn trong thị trường tăng giá, nếu chỉ số giá bình quân công nghiệp tăng liên tục 
ổn định hoặc có gián đoạn rất nhỏ và mức tăng đạt đến 30 điểm, khi đó xuất hiện xu 
thế điều chỉnh cấp 2, thì người ta có thể trông đợi xu thế điều chỉnh này có thể làm 
giảm từ 10 đến 20 điểm cho đến khi thị trường lặp lại xu thế tăng cấp 1 ban đầu của 
nó. Dẫu sao cũng cần lưu ý là qui tắc giảm 1/3 đến 2/3 không phải là một luật lệ không 
thể phá vỡ mà nó đơn giản chỉ là một nhận xét về khả năng có thể xảy ra mà hầu hết 
các biến động cấp 2 đều bị giới hạn trong mức này. Rất nhiều trong số đó ngừng tác 
động ở điểm gần với mức 50% mà rất hiếm khi đạt đến mức 1/3. 
Trong mô hình tôi xây dựng các tập luật dựa trên hai biến ngôn ngữ là fvxuthe 
và fvvtht đã trình bày ở trên. Dưới đây là ví dụ một số luật được sử dụng trong mô 
hình 
MamdaniFuzzyRule rule1 = fsTips.ParseRule("if (xuthe is xuong ) and (vtht is duoi1) 
then tips is xuong"); 
 MamdaniFuzzyRule rule2 = fsTips.ParseRule("if (xuthe is xuong ) and (vtht 
is tren) then tips is len"); (1) 
 Giải thích: 
Ta lấy ví dụ về luật có mã là (1): 
if (xuthe is xuong ) and (vtht is tren) then tips is len"; 
Luật này có nghĩa là nếu xu thế trong chu kỳ hiện tại là đang di xuống( giá 
chứng khoán giam, giá trị của xuthe nằm trong khoảng( -1, -0.5, 0)) đồng thời vị trí 
hiện tại là “trên” (nằm ở vị trí cao hơn so với điểm đảo chiều gần nhất, giá tị của biến 
vtht nằm trong khoảng (0.2, 0.35, 0.55, 0.7) thì khả năng đảo chiều trong thời gian tới 
là rất cao, đây có thể coi như là một tín hiệu cho việc đảo chiều lên. Kết quả trong 
38
trường hợp này là “lên”, tức là giá trị của biến fvTips nằm trong khoảng 60% đến 
100%. 
Để gắn mỗi luật vào hệ thống chỉ cần gọi câu lệnh sau 
fsTips.Rules.Add(rule1); 
Trong đó rule1 là tên luật mà ta đã định nghĩa giống như ở trên. 
2.2 Ứng dụng của mô hình. 
Do giá cả thay đổi từng ngày nên từng thời điểm chương trình sẽ đưa ra những 
biểu đồ khác nhau và những phán đoán phân tích khác nhau sau mỗi lần cập nhật. Nếu 
như mỗi ngày biểu đồ có một trạng thái thì thì trạng thái ngày hôm trước sẽ là đầu vào 
cho trạng thái ngày hôm sau. 
Với mô hình Logic mờ kết hợp với phương pháp học máy viết trên ngôn ngữ lập trình 
C# ta có thể tạo ra được chương trình với quy trình chức năng chính như sau: 
Hình 16: Quy trình thực hiện của hệ thống phân tích kỹ thuật trong chứng khoán 
2.2.1 Chức năng nhập dữ liệu. 
Chương trình cho phép người dùng nhập các tham số dữ liệu bao gồm các 
trường: Mã chứng khoán, giá chứng khoán, ngày, chỉ số - dùng để phục vụ việc tìm 
kiếm thông tin giá theo ngày. Thông tin do người dùng nhập vào sẽ được chuyển vào 
39
cơ sở dữ liệu. Người dùng có thể sử dụng cách thức nhập “bằng tay” hoặc là chọn 
nhập theo tool tự động. 
2.2.2 Chức năng xây dựng biểu đồ. 
Sau khi nhập dữ liệu vào cơ sở dữ liệu, hệ thống sẽ tự xây dựng và cập nhật 
biểu đồ giá dựa vào số liệu trong cơ sở dữ liệu. 
2.2.3 Chức năng xem, xóa biểu đồ theo mã chứng khoán. 
Khi người dùng muốn xem biểu đồ của một mã chứng khoán nào đó chỉ cần 
nhập mã chứng khoán và click vào nút nhấn thì hệ thống sẽ hiện ra biểu đồ của đúng 
mã chứng khoán đó trên màn hình. Khi người dùng xóa 1 giá trong cơ sở dữ liệu thì 
trên biểu đồ giá đó cũng bị xóa. 
2.2.4 Chức năng phân tích đánh giá xu hướng giá chứng khoán. 
Khi người dùng yêu cầu phân tích biểu đồ, chương trình sẽ tìm ra các điểm đảo 
chiều 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. 
40
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. 
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 17: 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 
41
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. 
- Chỉ số dùng để quản lý giá và thông tin từng ngày của mỗi chứng 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. 
42
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 đồ 
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 
43
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 
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 đó. 
44
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 đồ 
2. Các hàm chức năng của chương trình 
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 đồ 
45
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 
Public void 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 
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. 
46
Hình 18: 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 
♦ Giá : 57.5 
47
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 
48
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 9: 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á. 
49
Hình 10: 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. 
50
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ả: 
Bảng kết quả có 6 cột là : Ngày, Giá, Đánh giá của chương trình, Dự đoán, Kết 
51
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à 
45.8%, con số này nằm ở khoảng trung bình( gần bằng 50 % ) do vậy, chương trình dự 
đoán khả năng giá ngày kế tiếp ( ngày 23/4) sẽ là giảm nhẹ. Thực tế ngày 23/04 giá cổ 
phiếu là 53.5 ( giảm 54 – 53.5 = 0.5 ) , như vậy phán đoán ở ngày 22/04 là chính xác. 
Và ở cột 6, giá trị ở hàng đó là T ( đúng ). 
Ngày 23/04 giá chứng khoán là 53.5 chương trình đưa ra con số dự đoán ở cột 3 
là 18.6%, con số này là thấp(< 50 % ) do vậy, chương trình dự đoán khả năng giá ngày 
kế tiếp ( ngày 24/4) sẽ là giảm mạnh. Thực tế ngày 24/04 giá cổ phiếu là 54 ( tăng 54 – 
53.5 = 0.5 ) , như vậy phán đoán ở ngày 23/04 là không chính xác. Và ở cột 6, giá trị ở 
hàng đó là F ( Sai ). 
Tương tự như vậy trong bảng trên ta thống kê ra có 10 lần hệ thống đoán đúng và 
có 4 lần hệ thống đoán sai. 
3.2.2 Phân tích và đánh giá. 
Thực tế tôi đã thử nghiệm độ chính xác trong vòng 6 tháng từ ngày 24/12/2008 
đến ngày13/05/2009 với các phương thức đánh giá theo kỳ hạn: quý, tháng và tuần và 
thu được kết quả về độ chính xác như biểu đồ dưới đây 
52
54%
56%
58%
60%
62%
64%
66%
Quý 1 Quý 2
Số lần đoán chính xác
Hình 24: Biểu đồ tính độ chính xác theo từng quý 
Quý 1 dự đoán trong 42 lần trong đó có 24 lần chính xác, 18 lần dự đoán sai, tỉ lệ đoán 
chính xác là 58%, quý 2 dự đoán trong vòng 48 lần thì có 32 lần chính xác, 16 lần dự 
đoán sai. Tỉ lệ đoán chính xác là 66% 
54%
56%
58%
60%
62%
64%
66%
Tháng 1 Tháng 2 Tháng 3 Tháng 4
Số lần đoán chính xác
Hình 25: Biểu đồ tính độ chính xác theo tháng 
Tháng 1 dự đoán 15 lần thì có 10 lần đúng, 5 lần sai tỉ lệ chính xác là 66%. Tháng 2 dự 
đoán 19 lần trong đó 11 lần đúng 8 lần sai tỉ lệ chính xác là 58%, tháng ba dự đoán 22 
lần trong đó có 14 lần đúng 8 lần sai tỉ lệ chính xác là 64%, Tháng 4 dự đoán 20 lần 
trong đó 12 lần đúng 8 lần sai tỉ lệ chính xác là 60%. 
53
0%
10%
20%
30%
40%
50%
60%
70%
80%
1 2 3 4 5 6 7 8 9 10 11 12
Số lần đoán chính xác
 Hình 26: Biểu đồ tính độ chính xác theo tuần 
Với cách tính như trên thì tỉ lệ chính xác khi dự đoán theo tuần được chỉ rõ ra ở 
trên hình 3. 
Đối với lần thực nghiệm cùng mã chứng khoán FPT này, ta có nhận xét kết quả 
hệ thống đưa ra có độ chính xác nằm ở mức tương đối khi mà tỉ lệ đoán chính xác chỉ 
nằm trong khoảng 50 đến 80% và độ chính xác này khá ổn định khi đánh giá theo các 
kỳ hạn quý, tháng hay tuần, số lượng lần đoán chính xác của chương trình đều cao hơn 
so với số lần đoán không chính xác và đặc biệt là tại những điểm tăng giá mạnh hệ 
thống thường đoán chính xác còn những dự đoán sai thì thiệt hại là không đáng kể. 
Tuy nhiên một lời khuyên cho các nhà đầu tư là không nên quyết định vội vàng 
đối với những con số dập dềnh của hệ thống ( trong khoảng 40 Æ 60%) hơn nữa để 
đầu tư lâu dài thì không nên chỉ dựa vào những con số từng ngày hệ thống đưa ra để 
quyết định đầu tư mà nên kết hợp chúng lại. 
3.2.3. Những hạn chế của mô hình. 
Về giao diện: Cách bố trí biểu đồ còn sơ sài và chưa đầy đủ hết các chức năng, thuộc 
tính của biểu đồ chứng khoán. Màu sắc chưa thực sự hấp dẫn người dùng. 
Về mặt chức năng: Chương trình đến bước này gần như đã hoàn thành được các 
mục đích cơ bản nhất của nó, tuy nhiên nhược điểm của nó là chưa có các chức năng 
hỗ trợ tốt cho người dùng. Người sử dụng vẫn phải nhập trực tiếp dữ liệu hay còn gọi 
là “nhập bằng tay”. Hoặc chưa có module tìm kiếm. 
Về mặt nghiệp vụ: Do chưa có nhiều thời gian đặc biệt là kinh nghiệm thực tế về 
chứng khoán còn ít nên sự am hiểu về chứng khoán chưa được nhiều , chính vì vậy 
ác tập luật xây dựng để đánh giá còn ít và chưa tính được đến đầy đủ các yếu tố 
54
để đánh giá về mặt kinh tế ,do đó chất lượng đánh giá xu thế giá chứng khoán còn 
chưa có độ chính xác cao. 
3.2.4. Hướng phát triển của mô hình. 
Thời gian tới, tôi sẽ hoàn thiện tiếp những vấn đề sau đây: 
• Về mặt giao diện. 
- Nghiên cứu lại cho phù hợp hơn với các chức năng chương trình đưa ra. 
• Về chức năng 
- Đánh giá theo các kiểu biểu đồ khác nhau: Mỗi khi chúng ta chọn một kiểu biểu 
đồ thì đồ thị sẽ hiển thị đúng như dạng biểu đồ đó, ví đụ dạng bollinger, trung bình 
động hay dạng biểu đồ hình nến. .. 
- Cập nhật giá tự động: Việc giá chứng khoán cập nhật tự động sẽ giảm thiểu rất 
nhiều thời gian cho người dùng, do vậy đây là một vấn đề cấp thiết cần thực hiện đối 
với hệ thống này. 
- Lựa chọn đánh giá theo từng chu kỳ 
- Ý kiến đánh giá: Với mỗi con số đánh giá mà chương trình đưa ra, sẽ có những 
ý kiến nhận xét phù hợp 
• Về nghiệp vụ. 
- Tìm hiểu để phát triển tập luật trong việc đánh giá xu thế tiếp theo của từng mã 
chứng khoán. 
- Kết hợp với các chuyên gia am hiểu về chứng khoán để đưa ra những lời nhận 
xét phù hợp cho từng biểu đồ 
Tổng kết 
Chương 3 đã trình bày lại toàn bộ quá trình xây dựng thí nghiệm mô hình dự báo 
giá chứng khoán dựa trên mô hình Fuzzy Logic. Kết quả thu được là khá khả quan, 
điều này chứng tỏ khả năng ứng dụng của FuzzyLogic là rất tốt. Tuy nhiên để có thể 
sử dụng được trong thực tế thì cần phải chau chuốt về mặt chức năng cũng như nghiên 
cứu thêm về mặt nghiệp vụ chứng khoán. 
55
56
Kết luận 
Phương pháp phân tích kĩ thuật ngày càng thể hiện tính ưu việt và vai trò quan 
trọng trong việc phân tích và dự báo giá chứng khoán. Chính vì vậy, sự ra đời và nâng 
cấp của các công cụ phân tích kĩ thuật mang ý nghĩa khoa học cũng như thực tiễn rất 
cao. Mô hình phân tích và dự báo giá chứng khoán mà tôi nghiên cứu và xây dựng 
trong đề tài luận văn của mình là sự kết hợp giữa phương pháp phân tích kĩ thuật 
truyền thống với mô hình Logic mờ sẽ tạo ra một công cụ phân tích và dự báo với độ 
chính xác cao hơn so với các mô hình cổ điển, đặc biệt đối với thị trường chứng khoán 
của Việt Nam, một thị trường vừa hình thành chục năm lại đây và chưa thể cung cấp 
đầy đủ nguồn tài dữ liệu để tạo ra đường xu hướng chính xác trong các biểu đồ phân 
tích và dự báo. Thực vậy, thực nghiệm và kết quả trên mã chứng khoán FPT đã minh 
chứng rõ luận điểm vừa nêu trên. 
Do hạn chề về thời gian thực hiện khóa luận tốt nghiệp cũng như hạn chế về 
mặt kiến thức chuyên môn của bản thên nên mô hình tôi nghiên cứu và xây dựng vẫn 
còn một số hạn chế và một số hướng phát triển chưa thực hiện được cũng như chưa 
thực hiện được thêm nhiều kiểm chứng trong thực tế để chứng minh cho tính ưu việt 
của mô hình. Tuy nhiên, module chính là “Phân tích và dự đoán xu thế giá” đã khá 
hoàn thiện và cho kết quả tương đối thuyết phục nên khả năng phát triển để hoàn thiện 
chương trình là hoàn toàn khả thi. 
Tôi hi vọng trong thời gian tới cùng với sự giúp đỡ của các chuyên gia, các thầy 
cô giáo và bạn bè, tôi sẽ hoàn thiện được sản phẩm nghiên cứu của mình và đưa vào áp 
dụng trong thực tế. 
Tôi xin chân thành cảm ơn! 
57
Tài liệu tham khảo 
Tiếng Việt: 
[1]. ôgic_mờ 
[2]. TS Lê Đạt Trí, Phan Thị Bích Nguyệt. Phân Tích Kỹ Thuật Ứng Dụng Trong 
Đầu Tư Chứng Khoán 
Tiếng Anh: 
[3]. TS Nguyễn Hà Nam. Bài giảng về Fuzzy Logic 
[4]. Wee Mien Cheun, Uzay Kaymark. A Fuzzy Logic Based Trading System 
[5]. Geogre Bojadziev & Maria Bojadziev. Fuzzy Logic for Bussiness, Finance 
and Management 
[6]. Martin Hellman, March 2001. Fuzzy Logic Introduction 
[7]. Steven B. Achelis. Technical Analysis From A to Z 
[8]. Greg Cunningham. Artificial Intelligence: Fuzzy Logic and Artificial Neural 
Networks 
[9]. Kosko, B. (1993) Fuzzy Thinking 
            Các file đính kèm theo tài liệu này:
 LUẬN VĂN-TÌM HIỂU VÀ XÂY DỰNG MÔ HÌNH FUZZY LOGIC ỨNG DỤNG TRONG BÀI TOÁN DỰ BÁO TÀI CHÍNH.pdf LUẬN VĂN-TÌM HIỂU VÀ XÂY DỰNG MÔ HÌNH FUZZY LOGIC ỨNG DỤNG TRONG BÀI TOÁN DỰ BÁO TÀI CHÍNH.pdf