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 |
Chia sẻ: lylyngoc | Lượt xem: 4599 | 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