Qui trình hoạt động của Logic mờ.

Một phần của tài liệu Thực hành trí tuệ nhân tạo (Trang 30 - 43)

NHIỆTĐỌ\ ĐỌ\

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

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.

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.

0 5 10 15 20

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 YỚ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.

Neu 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.

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 đó.

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

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 đồ.

Ket quả thu được sẽ là một hệ thống YỚ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ư.

Xây dựng mô hình

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ờ. Ket 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.

Hình 14 : Mô hình CO' bản của hệ thống phân tích kỹ thuật trong chứng khoán

toán, các hàm, các biến ngôn ngữ và tập luật.

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. (adsbygoogle = window.adsbygoogle || []).push({});

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 = 1 0 - 2 = 8 )

AB = sqrt(BC*BC + AC*AC) - Công thức tính cạnh huyền trong tam giác vuông 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 )

1 A Chậm trung bình

VỊ trí điểm đảo chiêu len 1: 10 VỊ trí điếm đào chiêu len 3: 2 VỊ trí điểm đào chiẽu xuống 1:11 Vị trí điếm đào chiêu xuống 3: 6

Đâ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ưòug 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(-l,l) 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(l 1), max = gia(14), min = gia(2) nên:

Khoangcach = (gia(ll) - gia(14))/(gỉa(l4) - gia(2) ) được một con số trong khoảng ( -1, 0)

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

32

ứng cho hai dữ liệu đầu vào là xuthe và vtht, và một biến kết quả là íVTips, chúng đc khai báo như sau:

Fuzzy Variable jvvtht = J'sTips.InputByNameC'vtht");

Fuzzy Variable jvTips = _fsTips.OutputByName("tips");

Biến fvxuthe lấy tên đại diện là “xuthe”, biến fwtht lấy tên đại diện là “vtht”, biến íVTips lấy tên đại diện là “tips”. Đe gắn các dữ liệu đã tính toán vào hai biến fvxuthe và fwtht ta sử dụng các câu lệnh sau:

ỉnputValues.Add(fvxuthe, xuthe); ỉnputValues.Add(fvvtht,

(double)khoangcach); (adsbygoogle = window.adsbygoogle || []).push({});

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ữ fWtht, 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 _xl, _x2, _x3;

public TriangularMembershipFunction(double xl, double x2, double x3) {

if (Ỉ(xl <= x2 && x2 <= x3)) {

throw new ArgumentException();

}

_xl =xl;

_x2 = x2; _x3 = x3; }'

public double GetValue(double x) { double result = 0; if (x == _xl && X == _x2) { result = 1.0; } else if (x == _x2 && X == _x3) { result = 7. ớ; } else if (x <= _jt/ 11 X >= { result = 0; } else if (x == _x2) { result = 1; } else if ((x> _xl) && (x < _x2)) { result = (x / (_x2 - _xl)) - (_xl / (_x2 - _xl)); } else {

}

return result; }

}

Ta thấy xl,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 xl,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:

FuzzyVariablefvxuthe = new FuzzyVariable(”xuthe", -1.0, 1.0); //Khởi tạo biến ývxuthe nhận giá trị từ dữ liệu xuthe và có giả trị trong khoảng (-1.0,1.0)

jvxuthe.Terms.Add(new FuzzyTerm("xuong", new TrỉanguỉarMembershipFunctỉon(-l, -0.5, 0.0)));

jvxuthe.Terms.Add(new FuzzyTerm("trungbinh", new TrỉanguỉarMembershipFunctỉon(-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

public TrapezoidMembershipFunction(double xl, double x2, double x3, double x4)

{

if (!(xl <= x2 && x2 <=x3 && x3 <= x4)) {

throw new ArgumentException();

} _xl = xl; _x2 - x2; _x3 - x3; _x4 - x4; }

public double GetValue(double x) { double result = 0; if (x — _xl && x == _x2) { result = 1.0; } else if (x == _x3 && x == _x4)

result = 1.0; } else if (x <= _xl 11 x >= _x4) { result = 0; } else if ((x>= _x2) && (x < = _x3)) { result = 1; } else if ((x> _xl) && (x < _x2)) { result = (x / (_x2 - _xl)) - (_xl / (_x2 - _xl)); } else { result = (-x / (_x4 - _x3)) + (_x4 / (_x4 - _x3)); } return result; } }

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 (adsbygoogle = window.adsbygoogle || []).push({});

Fuzzy Variable fvvtht = new Fuzzy Variable("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)));

Neu 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:

jvTips.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);

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

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à íVvtht đã 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 rulel = fsTỉps.ParseRule("ỉf (xuthe ỉs xuong) and (vtht ỉs duoỉl) then tỉps ỉs xuong");

MamdanỉFuzzyRule rule2 = fsTỉps.ParseRule("ỉf (xuthe ỉs xuong ) and (vtht ỉs tren) then tỉps ỉs 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. Ket quả trong 37

100%T

Để gắn mỗi luật vào hệ thống chỉ cần gọi câu lệnh sau fsTips.Rules.Add(rulel); Trong đó rulel là tên luật mà ta đã định nghĩa giống như ở trên.

ứng dụng của mô hình.

Do giá cả thay đổi từng ngàỷ 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. Neu 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

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

Phán đoán giá V_____________ Dưn g biểu đồ Phân tích biểu đồ Quản lý biểu (adsbygoogle = window.adsbygoogle || []).push({});

theo tool tự động.

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

Một phần của tài liệu Thực hành trí tuệ nhân tạo (Trang 30 - 43)