30
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. Trong đó hai thành phần chính khi xây dựng một mô hình thực tế là các biến ngôn ngữ và các luật. Các thành phần khác bổ trợ cho hai thành phần này.
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.
Để xây dựng được mô hình dựđoán giá chứng khoán trươc tiên cần xác định các biến ngôn ngữ và giá trị của các biến đó dựa vào các hàm đặc trưng của Logic mờ, sau đó là tạo ra tập luật dựa trên các biến ngôn ngữđó cuối cùng là gắn các luật đó vào chương trình để cho ra dự báo.
2.1.1 Các biến ngôn ngữ
Trong phân tích kỹ thuật chứng khoán, người ta dựa vào các điểm đảo chiều để xác định xu thế của chu kỳ hiện tại là lên hay xuống sau đó kết hợp xu thế này với giá chứng khoán tại thời điểm hiện tại cần dựđoán đểđưa ra được dựđoán cho thời điểm trong tương lai.
Đối với mô hình này, tôi định nghĩa ba biến và giá trị cho chúng đó là biến xu thế (fvxuthe) để xác định tình trạng của chu kỳ hiện tại, biến vị trí hiện tại ( vtht) để xác định vị trí giá hiện tại so với xu thế chung và cuối cùng là biến kết quả (result). Dưới đây là chi tiết về từng biến.
Biến xu thế chu kỳ hiện tại
Để xác định xu thế hiện tại của một mã chứng khoán là tăng hay giảm thì tôi dùng hàm tam giác (TriangularMembershipFunction). Điều kiện để sử dụng hàm tam giác này là trên đồ thị giá chứng khoán phải có đầy đủ một chu kỳ tức là có 3 đỉnh đảo chiều lên hoặc xuống.
31
Hình 15: Cách xác định xem giá lên hay xuống trong mô hình
Như hình vẽ trên, từ một đồ thị chứng khoán ta xác định được vị trí của điểm đảo chiều đầu tiên( điểm B) và điểm đảo chiều thứ 3( điểm A) , chu kỳ nằm trong khoảng đồ thị từ chỉ số 2 đến chỉ số 10 ta thấy B > A nên kết luận trong trường hợp này đồ thị đang lên.
Đểđánh giá được mức độ lên của đồ thị ta tính sin góc A:
xuthe = BC/AB và giá trị nằm trong khoảng 0 1 ( nếu đồ thị có xu thế giảm thì giá trị nằm trong khoảng -1 đến 0 )
Giá trị xuthe thu được sẽ lấy làm một giá trị đầu vào cho hệ thống logic mờ và được đánh giá sử dụng mô hình tam giác
Hình 16: Mô hình tam giác được sử dụng trong mô hình dự báo giá chứng khoán
32
FuzzyVariable fvxuthe = newFuzzyVariable("xuthe", -1.0, 1.0);
fvxuthe.Terms.Add(newFuzzyTerm("xuong", newTriangularMembershipFunction(-1, -0.5, 0.0)));
fvxuthe.Terms.Add(newFuzzyTerm("trungbinh", new
TriangularMembershipFunction(-0.5, 0.0, 0.5)));
fvxuthe.Terms.Add(newFuzzyTerm("len", newTriangularMembershipFunction(0.0, 0.5, 1.0)));
Giải thích:
Fvxuthe là một biến ngôn ngữ, nó được gán giá trị nằm trong ba khoảng “xuống” , “trung bình”, “lên” . Mỗi khoảng này có giá trị nằm trong một khoảng tam giác.
Với khoảng xuống: ba điểm của tam giác lần lượt có giá trị -0.1, -0.5, 0.0 Với khoảng trung bình: ba đỉnh của tam giác lần lượt có giá trị -0.5, 0.0, 0.5 Với khoảng lên: ba đỉnh của tam giác lần lượt có giá trị : 0.0, 0.5, 1.0
Sở dĩ các khoảng tam giác lồng nhau là vì với một giá trị xác định ( BC/AB)nếu giá trị này rơi vào khu vực nhạy cảm giữa hai khoảng thì hệ thống sẽ không quá cứng nhắc coi xu thế lúc này là lên hay xu thế lên hay xuống, đây chính là đặc thù và tính mềm dẻo của Logic mờ.
Biến vị trí hiện tại
Trong mô hình dự báo giá chứng khoán, biến vị trí hiện tại để xác định xem giá hiện tại đang nằm ở vị trí như thế nào so với xu thế giá chung của mã chứng khoán đó trong chu kỳ hiện tại. Tùy từng vị trí mà vị trí hiện tại kết hợp với xu thế sẽ cho ra kết quả khác nhau, đối với biến vị trí hiện tại thì tôi dùng mô hình hình thang dùng để xác định.
Ta coi vtht nằm trong khoảng (-1, 1) nếu vtht rơi vào giá trị ngoài khoảng đó thì sẽ lấy tròn nó làm -1 hoặc là 1. Khi đó ta xây dựng hệ logic mờ hình thang và nhận đầu vào là vtht
FuzzyVariable fvvtht = newFuzzyVariable("vtht", -1.0, 1.0); fvvtht.Terms.Add(newFuzzyTerm("duoi1", new
TrapezoidMembershipFunction(0.0, 0.0, 0.15, 0.33))); fvvtht.Terms.Add(newFuzzyTerm("tren", new
33
TrapezoidMembershipFunction(0.2, 0.35, 0.55, 0.7))); fvvtht.Terms.Add(newFuzzyTerm("duoi2", new
TrapezoidMembershipFunction(0.6, 0.7, 0.8, 0.9))); fvvtht.Terms.Add(newFuzzyTerm("duoi6", new
TrapezoidMembershipFunction(0.85, 0.9, 1.0, 1.0))); fvvtht.Terms.Add(newFuzzyTerm("duoi3", new
TrapezoidMembershipFunction(-0.9, -0.8, -0.7, -0.6))); fvvtht.Terms.Add(newFuzzyTerm("tren2", new
TrapezoidMembershipFunction(-0.7, -0.55, -0.35, -0.2))); fvvtht.Terms.Add(newFuzzyTerm("duoi4", new
TrapezoidMembershipFunction(-0.33, -0.15, 0.0, 0.0))); fvvtht.Terms.Add(newFuzzyTerm("duoi5",new
TrapezoidMembershipFunction(-1.0, -1.0, -0.9, -0.85)));
Biến kết quả
Biến kết quả (fvTips) là sự kết hợp của biến xu thế và biến vị trí hiện tại cùng với một vài phép toán Logic mờ khác tạo thành. Giá trị của biến kết quả nằm trong khoảng từ 0% đến 100% và được quy định thành ba giá trị ( Xuống, trung bình và Lên) như sau:
FuzzyVariable fvTips = newFuzzyVariable("tips", 0.0, 100.0); fvTips.Terms.Add(newFuzzyTerm("xuong", new
TriangularMembershipFunction(0.0, 15.0, 40.0)));
fvTips.Terms.Add(newFuzzyTerm("trungbinh", new
TriangularMembershipFunction(33.0, 44.0, 60.0))); fvTips.Terms.Add(newFuzzyTerm("len", new
TriangularMembershipFunction(60.0, 75.0, 100.0)));
2.1.2 Các luật sử dụng trong mô hình
Để 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. 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.
34
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à danh sách một 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");
MamdaniFuzzyRule rule3 = fsTips.ParseRule("if (xuthe is xuong ) and (vtht is duoi2) then tips is xuong");
MamdaniFuzzyRule rule4 = fsTips.ParseRule("if (xuthe is xuong ) and (vtht is duoi4) then tips is len");
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 fvxuthe 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 fvvtht 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 trường hợp này là “lên”,
2.1.3. Gắn các luật vào chương trình
Rất đơn giản, để 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.
35
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 17: 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 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.