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

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.

pdf63 trang | Chia sẻ: lylyngoc | Lượt xem: 4599 | Lượt tải: 1download
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:

  • pdfLUẬ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