CHƯƠNG 3: XÂY DỰNG MÔ HÌNH LOGIC MỜ VÀ ỨNG DỤNG TRONG PHÂN TÍCH KĨ THUẬT
3.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, ta đị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ì ta 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.
Hình 13: 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 14: Mô hình tam giác được sử dụng trong mô hình dự báo giá chứng khoán
Code:
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)));
fvxuthe.Terms.Add(new FuzzyTerm("len", new TriangularMembershipFunction(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ì ta 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 = new FuzzyVariable("vtht", -1.0, 1.0); fvvtht.Terms.Add(new FuzzyTerm("duoi1", new
TrapezoidMembershipFunction(0.0, 0.0, 0.15, 0.33))); fvvtht.Terms.Add(new FuzzyTerm("tren", new TrapezoidMembershipFunction(0.2, 0.35, 0.55, 0.7))); fvvtht.Terms.Add(new FuzzyTerm("duoi2", new TrapezoidMembershipFunction(0.6, 0.7, 0.8, 0.9))); fvvtht.Terms.Add(new FuzzyTerm("duoi6", new TrapezoidMembershipFunction(0.85, 0.9, 1.0, 1.0)));
fvvtht.Terms.Add(new FuzzyTerm("duoi3", new TrapezoidMembershipFunction(-0.9, -0.8, -0.7, -0.6))); fvvtht.Terms.Add(new FuzzyTerm("tren2", new TrapezoidMembershipFunction(-0.7, -0.55, -0.35, -0.2))); fvvtht.Terms.Add(new FuzzyTerm("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 = 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)));