Đề tài Thiết kế hệ thống giải các bài toán tài chính thông qua Matlab

Matlab là gì? (Xem chi tiết trong [1] [2], TLTK2 )

Matlab (Matrix Laboratory) là phần mềm của tập đoàn The Math Works,

Inc. of Natick, Massachusetts – Mỹ, được phân chia thành các lĩnh vực ứng

dụng dựa vào các hộp công cụ (toolbox), đặc biệt là dùng trong tính toán kỹ

thuật. Matlab kết hợp việc tính toán, hiển thị và lập trình trong một môi

trường dễ sử dụng. Ở đó, các vấn đề và giải pháp được trình bày bằng những

ký hiệu toán học quen thuộc.

Nhà phân tích số học Cleve Moler đã xây dựng phiên bản đầu tiên của

Matlab vào những năm 1970 bằng FORTRAN. Sau đó, Matlab được viết

bằng ngôn ngữ C trên cơ sở các thư viện đã có và phát triển thêm nhiều lĩnh

vực ứng dụng khác. Nó đưa ra nhiều tác vụ thực tế được kết hợp với việc giải

quyết các vấn đề số học. Điều này làm giảm bớt thời gian suy nghĩ và khuyến

khích các thử nghiệm. Matlab cung cấp các lệnh mạnh và hiệu quả, giúp hiện

thực những tác vụ phức tạp chỉ bằng một hoặc hai dòng lệnh. Ngoài những

hàm được Matlab cung cấp sẵn, ta cũng có thể tạo ra hàm mới để phục vụ cho

các ứng dụng riêng của mình

pdf116 trang | Chia sẻ: NguyễnHương | Lượt xem: 1692 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế hệ thống giải các bài toán tài chính thông qua Matlab, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
umber = datenum(DateString, Pivot) - DateNumber = datenum(Year, Month, Day) - DateNumber = datenum(Year, Month, Day, Hour, Minute, Second) ƒ Đối số nhập: - DateString: chuỗi ngày tháng muốn hiển thị. - Pivot: 2 số chỉ năm nằm trong khoảng 100 năm tính từ Pivot. Mặc định Pivot là năm nhỏ hơn năm hiện tại 50 năm. ¾ datestr: ƒ Cú pháp: - DateString = datestr(Date, DateForm) - DateString = datestr(Date, DateForm, Pivot) - DateString = datestr(Date) ƒ Đối số nhập: - Date: số chỉ ngày tháng. - DateForm: định dạng chuỗi ngày tháng (mặc định là 2). Xem Phụ lục (2) - Pivot: các số chỉ năm nằm trong khoảng 100 năm tính từ Pivot. Mặc định Pivot là năm nhỏ hơn năm hiện tại 50 năm. ¾ m2xdate: ƒ Cú pháp: DateNum = m2xdate(MATLABDateNumber, Convention) ƒ Đối số nhập: - MATLABDateNumber: véc_tơ hoặc vô hướng của dãy các số chỉ ngày tháng trong Matlab. - Convention (tùy chọn): hệ ngày tháng trong Excel. Là véctơ hoặc vô hướng. Convention = 0 (mặc định), thì hệ ngày tháng Excel1900 được sử dụng. Convention = 1 thì dùng Excel1904. Chú ý: Các đối số véc-tơ phải có kích thước phù hợp. SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 43 /116 ¾ x2mdate: ƒ Cú pháp: MATLABDate = x2mdate(ExcelDateNumber, Convention) ƒ Đối số nhập: - ExcelDateNumber: véc-tơ hoặc vô hướng của dãy các số chỉ ngày tháng trong Excel. - Convention (tùy chọn): hệ ngày tháng trong Excel. Là véctơ hoặc vô hướng. Convention = 0 (mặc định), thì hệ ngày tháng Excel1900 được sử dụng. Convention = 1 thì dùng Excel1904. ¾ datevec: ƒ Cú pháp: - DateVector = datevec(Date) - DateVector = datevec(Date, Pivot) - [Year, Month, Day, Hour, Minute, Second] = datevec(Date) ƒ Đối số nhập: - Date: dãy các số hoặc chuỗi ngày tháng. - Pivot: các số chỉ năm nằm trong khoảng 100 năm tính từ Pivot. Mặc định Pivot là năm nhỏ hơn năm hiện tại 50 năm. 9 Thời gian và ngày hiện tại: ¾ Hàm today và now trả về dãy các số chỉ ngày tháng lần lượt là ngày hiện tại và ngày + giờ hiện tại. Ví dụ: >> today ans = 733018 >> now ans = 7.3302e+005 ¾ Hàm date của Matlab trả về một chuỗi của ngày hiện hành. Ví dụ: >> date ans = 06-Dec-2006 3.2.2 Định dạng tiền tệ: Hàm Ý nghĩa cur2frac Chuyển đổi giá trị tiền tệ dạng thâp phân sang phân số. Giá trị trả về là một chuỗi. cur2str Chuyển một giá trị sang định dạng ngân hàng trong hộp công cụ tài chính. frac2cur Chuyển đổi giá trị tiền tệ dạng phân số sang thập phân. Bảng 3. 2: Một số hàm định dạng tiền tệ SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 44 /116 ¾ cur2frac: ƒ Cú pháp: Fraction = cur2frac(số thập phân, mẫu số). ƒ Ví dụ: >> Fraction = cur2frac(12.125, 8) Fraction = 12.1 ¾ cur2str: ƒ Cú pháp: String = cur2str(giá trị, số số lẻ) Mặc định số số lẻ là 2 và Matlab tự làm tròn số lên. Nếu giá trị là số âm thì kết quả trả về là một chuỗi nằm trong cặp ngoặc đơn. ƒ Ví dụ: >> String = cur2str(-8264.126) String = ($8264.13) ¾ frac2cur: ƒ Cú pháp: Decimal = frac2cur('phân số', mẫu số) ƒ Ví dụ: >> Decimal = frac2cur('12.1', 8) Decimal = 12.1250 3.2.3 Vẽ đồ thị dữ liệu tài chính: Hàm Ý nghĩa bolling Vẽ biểu đồ dãy đường hình cây. candle Hàm vẽ biểu đồ giá đỡ nến. pointfig Biểu đồ hình dạng (figure) và điểm. Vẽ biểu đồ điểm và figure cho véc-tơ dữ liệu giá cả của tài sản. Xu hướng giá tăng lên được vẽ như là “X’s” và xu hướng giá giảm được vẽ như “O’s”. highlow Vẽ biểu đồ giá cuối ngày, đầu ngày, mức thấp, mức cao của tài sản. movavg Vẽ đồ thị thể hiện độ dịch chuyển trung bình của dữ liệu đi trước và độ trễ. Bảng 3. 3: Các hàm vẽ đồ thị dữ liệu tài chính ¾ bolling: ƒ Cú pháp: bolling(Asset, Samples, Alpha) ƒ Đối số nhập: - Asset: véc-tơ của dữ liệu tài sản. - Samples: số mẫu dùng để tính độ dịch chuyển trung bình. Samples phải > 1 và < số phần tử của Asset. - Alpha (tùy chọn): số mũ được dùng để tính trọng số (weights) của độ dịch chuyển trung bình. Mặc định là 0. - Width (tùy chọn):số độ lệch chuẩn bao gồm cả hình bao.Mặc định là 2. ƒ Đối số xuất: Nếu dùng hàm có đối số xuất thì hàm trả về lần lượt là độ dịch chuyển trung bình, dãy trên và dãy dưới mà không vẽ đồ thị. SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 45 /116 ¾ candle: ƒ Cú pháp: candle(High, Low, Close, Open, Color) ƒ Đối số nhập: - High: các giá cao cho cổ phiếu. Véc-tơ cột. - Low: các giá thấp của cổ phiếu. Véc-tơ cột. - Close: giá cuối ngày của cổ phiếu. Véc-tơ cột. - Open: giá đầu ngày của cổ phiếu. Véc-tơ cột. - Color (tùy chọn): màu của giá đỡ nến. Một chuỗi. Matlab sẽ lấy màu mặc định nếu Color không được xác định. Các màu mặc định khác nhau tùy thuộc vào màu nền của cửa sổ figure. ¾ pointfig: ƒ Cú pháp: pointfig(Asset) ƒ Đối số nhập: - Asset: véc-tơ của dữ liệu tài sản. ¾ highlow: ƒ Cú pháp: highlow(High, Low, Close, Open, Color) ƒ Đối số nhập: như đối số nhập của hàm candle Hàm vẽ đồ thị là các đường thẳng đứng có đỉnh là High, đáy là Low, Open là thanh nằm ngang ngắn về phía trái và Close là thanh nằm ngang ngắn về phía phải. ¾ movavg: ƒ Cú pháp: - movavg(Asset, Lead, Lag, Alpha) - [Short, Long] = movavg(Asset, Lead, Lag, Alpha) ƒ Đối số nhập: - Asset: dữ liệu chứng khoán, thường là một véc-tơ giá cả theo chuỗi thời gian. - Lead: số mẫu dùng trong việc tính toán trung bình quan trọng (leading). Một số nguyên dương. Lead phải nhỏ hơn hoặc bằng Lag. - Lag: số mẫu dùng trong việc tính toán trung bình lagging. Số nguyên dương. - Alpha (tùy chọn): tham số điều khiển xác định loại của độ dịch chuyển trung bình. 0 = độ dịch chuyển trung bình đơn (mặc định), 0.5 = dịch chuyển trung bình theo góc vuông, 1 = dịch chuyển trung bình tuyến tính, 2 = dịch chuyển trung bình vuông, Để tính độ dịch chuyển trung bình theo số mũ, cho Alpha = 'e'. SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 46 /116 3.3 Hệ thống lãi đơn 3.3.1 Tiền lãi ƒ Cú pháp: AccruInterest = acrudisc(Settle, Maturity, Face, Discount, Period, Basis) Đối số nhập Mô tả Settle Ngày chiết khấu. Nhập theo dãy các số chỉ ngày tháng hoặc chuỗi ngày tháng. Settle <= Manturity Maturity Ngày đáo hạn. Nhập theo dãy các số chỉ ngày tháng hoặc chuỗi ngày tháng. Face Mệnh giá Discount Tỉ lệ chiết khấu. Nhập kiểu phân số thập phân. Period Không dùng thuộc tính này. Nhập vào [] hay ' ' Basis Đếm số ngày cơ sở của văn bản. Một mảng số nguyên. 0 = thực tế /thực tế (mặc định), 1 = 30 /360 (SIA), 2=thựctế/360, 3 = thực tế /365, 4 = 30 /360 (PSA), 5 = 30 /360 (ISDA), 6 = 30 /360 (European), 7 = thực tế / 365 (Japanese). Bảng 3. 4: Thông số nhập của hàm tính tiền lãi đơn ƒ Ví dụ: >> AccruInterest=acrudisc('05/01/1992', '07/15/1992', 100, 0.1, [], 2) AccruInterest = 2.0833 3.3.2 Lãi suất ƒ Cú pháp: Yield = ylddisc(Settle, Maturity, Face, Price, Basis) Đối số nhập Mô tả Settle Ngày thanh toán. Nhập theo dãy các số chỉ ngày tháng hoặc chuỗi ngày tháng. Settle <= Manturity Maturity Ngày đáo hạn. Nhập theo dãy các số chỉ ngày tháng hoặc chuỗi ngày tháng. Face Mệnh giá Price Hiện giá sau chiết khấu Basis (tùy chọn) Đếm số ngày cơ sở của văn bản. Một mảng số nguyên. 0 = thực tế /thực tế (mặc định), 1 = 30 /360 (SIA), 2=thựctế/360, 3 = thực tế /365,4 = 30 /360 (PSA), 5 = 30 /360 (ISDA), 6 = 30 /360 (European), 7 = thực tế / 365 (Japanese). Bảng 3. 5: Thông số nhập của hàm tính lãi suất đơn ƒ Ví dụ: >> Yield = ylddisc('12-jan-2000', '11-feb-2000', 102, 100, 2) Yield = 0.2400( 24%) SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 47 /116 3.3.3 Lãi suất chiết khấu ƒ Cú pháp: DiscRate = discrate(Settle, Maturity, Face, Price, Basis) Đối số nhập Mô tả Settle Ngày chiết khấu. Nhập theo dãy các số chỉ ngày tháng hoặc chuỗi ngày tháng. Settle <= Manturity Maturity Ngày đáo hạn. Nhập theo dãy các số chỉ ngày tháng hoặc chuỗi ngày tháng. Face Mệnh giá Price Hiện giá Basis (tùy chọn) Đếm số ngày cơ sở của văn bản. Một mảng số nguyên. 0 = thực tế /thực tế (mặc định), 1 = 30 /360 (SIA), 2=thựctế/360, 3 = thực tế /365,4 = 30 /360 (PSA), 5 = 30 /360 (ISDA), 6 = 30 /360 (European), 7 = thực tế / 365 (Japanese). Bảng 3. 6: Thông số nhập của hàm tính lãi suất chiết khấu * Discrate: Lãi suất chiết khấu / năm ƒ Ví dụ >> DiscRate = discrate('12-jan-2000', '25-jun-2000', 100, 97.74, 2) DiscRate = 0.0493 (4.93%) 3.3.4 Giá trị hiện tại ƒ Cú pháp: Price = prdisc(Settle, Maturity, Face, Discount, Basis). Đối số nhập Mô tả Settle Ngày chiết khấu. Nhập theo dãy các số chỉ ngày tháng hoặc chuỗi ngày tháng. Settle <= Manturity Maturity Ngày đáo hạn. Nhập theo dãy các số chỉ ngày tháng hoặc chuỗi ngày tháng. Face Mệnh giá Discount Tỉ lệ chiết khấu. Nhập kiểu phân số thập phân. Basis (tùy chọn) Đếm số ngày cơ sở của văn bản. Một mảng số nguyên. 0 = thực tế /thực tế (mặc định), 1 = 30 /360 (SIA), 2=thựctế/360, 3 = thực tế /365, 4 = 30 /360 (PSA), 5 = 30 /360 (ISDA), 6 = 30 /360 (European), 7 = thực tế / 365 (Japanese). Bảng 3. 7: Thông số nhập của hàm tính giá trị hiện tại đơn ƒ Ví dụ: >> Price = prdisc('10/14/2000', '03/17/2001', 100, 0.087, 2) Price = 96.2783 SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 48 /116 3.3.5 Giá trị tương lai ƒ Cú pháp: - FutureVal = fvdisc(Settle, Maturity, Price, Discount, Basis). Đối số nhập Mô tả Settle Ngày chiết khấu. Nhập theo dãy các số chỉ ngày tháng hoặc chuỗi ngày tháng. Settle <= Manturity Maturity Ngày đáo hạn. Nhập theo dãy các số chỉ ngày tháng hoặc chuỗi ngày tháng. Price Giá trị hiện tại Discount Tỉ lệ chiết khấu. Nhập kiểu phân số thập phân. Basis (tùy chọn) Đếm số ngày cơ sở của văn bản. Một mảng số nguyên. 0 = thực tế /thực tế (mặc định),1 = 30 /360 (SIA), 2=thựctế/360, 3 = thực tế /365, 4 = 30 /360 (PSA),5 = 30 /360 (ISDA), 6 = 30 /360 (European), 7 = thực tế / 365 (Japanese). Bảng 3. 8: Thông số nhập của hàm tính giá trị tương lai đơn ƒ Ví dụ: >> FutureVal = fvdisc('02/15/2001', '05/15/2001', 100, 0.0575, 2) FutureVal = 101.4420 3.4 Các khoản thanh toán theo chu kỳ 3.4.1 Giá trị tương lai của các khoản thanh toán cuối kỳ (đầu kỳ) ƒ Cú pháp: FutureVal = fvfix(Rate, NumPeriods, Payment, PresentVal, Due) Đối số nhập Mô tả Rate Lãi suất áp dụng của một chu kỳ, là phân số thập phân NumPeriods Số chu kỳ thanh toán Payment Số tiền trả định kỳ. PresentVal (tùy chọn) Giá trị ban đầu (mặc định là 0). Due (tùy chọn) Hạn kỳ thanh toán. = 0 :thanh toán cuối kỳ (mặc định). = 1 : thanh toán đầu kỳ. Bảng 3. 9: Thông số nhập của hàm tính Giá trị tương lai của các khoản thanh toán cuối kỳ (đầu kỳ) ƒ Ví dụ:Một tài khoản tiết kiệm có mức cân đối ban đầu là $1500. Vào cuối mỗi tháng thì thêm vào $200 và tài khoản trả 9% tiền lãi, được thanh toán hàng tháng. Giá trị tương lai được tính như sau: >> FutureVal = fvfix(0.09/12, 12*10, 200, 1500, 0) FutureVal = 4.2380e+004 SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 49 /116 3.4.2 Giá trị hiện tại của các khoản thanh toán cuối kỳ ( đầu tư) ƒ Cú pháp: - PresentVal = pvfix(Rate, NumPeriods, Payment, ExtraPayment, Due) Đối số nhập Mô tả Rate Lãi suất áp dụng của một chu kỳ, là phân số thập phân NumPeriods Số chu kỳ thanh toán Payment Số tiền trả định kỳ. ExtraPayment (tùy chọn) Số tiền trả ngoài số tiền trả trong kỳ trước Due (tùy chọn) Hạn kỳ thanh toán. = 0 :thanh toán cuối kỳ (mặc định). = 1 : thanh toán đầu kỳ. Bảng 3. 10: Thông số nhập của hàm tính Giá trị hiện tại của các khoản thanh toán cuối kỳ (đầu kỳ) ƒ Ví dụ: Mỗi tháng phải trả 200 cho một tài khoản tiết kiệm, thì lợi nhuận kiếm được là 6%. Số tiền trả vào cuối mỗi tháng trong 5 năm. Để tìm giá trị hiện tại cho số tiền trả này ta có biểu thức sau: >> PresentVal = pvfix(0.06/12, 5*12, 200, 0, 0) PresentVal = 1.0345e+004 (10345.11) 3.4.3 Định giá các khoản tiền thanh toán cuối kỳ (đầu kỳ) ƒ Cú pháp: Payment = payper( Rate, NumPeriods, PresentValue, FutureValue, Due) Đối số nhập Mô tả Rate Lãi suất áp dụng của một chu kỳ, là phân số thập phân NumPeriods Số chu kỳ thanh toán PresentValue Giá trị hiện tại FutureValue (tùy chọn) Giá trị tương lai sau n chu kỳ. Mặc định = 0 Due (tùy chọn) Hạn kỳ thanh toán. = 0 :thanh toán cuối kỳ (mặc định). = 1 : thanh toán đầu kỳ. Bảng 3. 11: Thông số nhập của hàm Định giá các khoản tiền thanh toán cuối kỳ (đầu kỳ) ƒ Ví dụ: Tìm số tiền thanh toán cuối mỗi tháng cho khoản vay 900.000 trong ba năm với lãi suất 12% / năm. >> Payment = payper( 0.12/12, 36, 900.000, 0, 0 ) Payment = 29.893đ SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 50 /116 3.5 Các tác vụ phổ biến của đối tượng FTS 3.5.1 Tạo đối tượng FTS ƒ Cú pháp: - tsobj = fints(dates_and_data) - tsobj = fints(dates, data) - tsobj = fints(dates, data, datanames) - tsobj = fints(dates, data, datanames, freq) - tsobj = fints(dates, data, datanames, freq, desc) ƒ Đối số nhập: Đối số nhập Mô tả dates_and_data Ma trận cột chứa cột ngày và cột chuỗi dữ liệu. Ngày nhập vào phải là định dạng số. Nếu ngày nhập vào chứa thời gian, đối tượng xuất ra gồm cột ‘dates’ chứa ngày và cột ‘times’ chứa thời gian dates Vector cột chỉ ngày. Dữ liệu ngày có thể là chuỗi ngày tháng hay dãy số chỉ ngày và có thể chứa thời gian. Định dạng chuỗi thời gian và ngày hợp lý là: 9 'ddmmmyy hh:mm' hay 'ddmmmyyyy hh:mm' 9 'mm/dd/yy hh:mm' hay 'mm/dd/yyyy hh:mm' 9 'dd-mmm-yy hh:mm' hay 'dd-mmm-yyyy hh:mm' 9 'mmm.dd,yy hh:mm' hay 'mmm.dd,yyyy hh:mm' Ban đầu, ngày và thời gian được chia ra thành các vector cột, nhưng chúng phải nối với nhau trong ma trận cột đơn trước khi chuyển vào hàm fints. data Ma trận cột chứa cột chuỗi dữ liệu. Số giá trị trong mỗi chuỗi dữ liệu phải hợp với số ngày. Nếu một ghép đôi không xứng xuất hiện, MatLab không tạo ra FTS và thông báo lỗi xuất hiện. datanames Mảng chuỗi dữ liệu chỉ tên. Tên chuỗi dữ liệu mặc định là series1, series2,. freq Dấu hiệu nhận biết tần số xuất hiện. Các giá trị : 9 UNKNOWN, Unknown, unknown, U, u,0 9 DAILY, Daily, daily, D, d, 1 9 WEEKLY, Weekly, weekly, W, w, 2 9 MONTHLY, Monthly, monthly, M, m, 3 9 QUARTERLY, Quarterly, quarterly, Q, q, 4 9 SEMIANNUAL, Semiannual, semiannual, S, s, 5 9 ANNUAL, Annual, annual, A, a, 6 Mặc định: Unknown. desc Chuỗi cung cấp tên mô tả cho FTS. Mặc định là ' '. Bảng 3. 12: Thông số nhập của hàm tạo đối tượng FTS SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 51 /116 ƒ Ví dụ: >> desc = 'Information of fints function'; >> f = fints([730852; 730853], [ 1; 2], 'DataSeries', 'd', desc) f =desc: Information of fints function freq: Daily (1) 'dates: (2)' 'DataSeries: (2)' '01-Jan-2001' [ 1] '02-Jan-2001' [ 2] 3.5.2 Tạo đối tượng FTS từ file ASCII ƒ Cú pháp: - tsobj = ascii2fts(filename, descrow, colheadrow, skiprows) - tsobj = ascii2fts(filename, timedata, descrow, colheadrow, skiprows) ƒ Đối số: Đối số nhập Mô tả filename File ASCII. Descrow (tùy chọn) Số thứ tự của hàng trong file chứa các miêu tả được dùng cho trường miêu tả của FTS. Colheadrow (tùy chọn) Số hàng có tựa đề/tên cột. Skiprows(tùy chọn) Số vector hàng hay vô hướng bị bỏ qua trong file. timedata Đặt ‘T’ nếu dữ liệu thời gian có trong file ASCII hoặc ‘NT’ nếu không có dữ liệu thời gian. Bảng 3. 13: Thông số nhập của hàm tạo đối tượng FTS từ file ASCII ƒ Mô tả: Tạo FTS từ file ASCII. Định dạng chung của file dạng text: - Có thể chứa dòng tiêu đề - Có thể chứa thông tin tiêu đề cột. Thông tin tiêu đề cột phải đi liền trước cột chuỗi dữ liệu trừ khi skiprows xác định. - Cột cực tả phải là cột ngày. Ngày phải là các định dạng sau: ‚ 'ddmmmyy' hay 'ddmmmyyyy' ‚ 'mm/dd/yy' hay 'mm/dd/yyyy' ‚ 'dd-mmm-yy' hay 'dd-mmm-yyyy' ‚ 'mmm.dd,yy' hay 'mmm.dd,yyyy' - Mỗi cột phải được chia ra bởi những khoảng trống hay 1 phím tab. SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 52 /116 ƒ Ví dụ: Xem tập tin staples.dat trong phụ lục >> spls = ascii2fts('staples.dat', 1, 3, [4 5]) spls = desc: Staples, Inc. (SPLS) freq: Unknown (0) 'dates: (2)' 'OPEN: (2)' 'HIGH: (2)' 'LOW: (2)' '08-Apr-1996' [ 19.5000] [ 19.7500] [19.2500] '09-Apr-1996' [ 19.7500] [ 20.1250] [19.3750] 3.5.3 Cộng FTS ƒ Cú pháp: - newfts = tsobj_1 + tsobj_2 (1) - newfts = tsobj + array (2) - newfts = array + tsobj (3) ƒ Đối số: Đối số nhập Mô tả tsobj_1, tsobj_2 Một cặp đối tượng FTS. array Một giá trị hoặc mảng vô hướng với số hàng bằng số hàng của thuộc tính ngày trong tsobj và số cột bằng với số chuỗi dữ liệu trong tsobj. Bảng 3. 14: Thông số nhập của hàm cộng FTS ƒ Mô tả: (1): Cộng các đối tượng FTS. Nếu một đối tượng được cộng với một đối tượng khác thì cả hai phải cùng ngày và chuỗi dữ liệu chỉ tên, mặc dù thứ tự không cần giống nhau. Khi hai FTS được cộng với nhau, thứ tự của đối tượng kết quả sẽ ưu tiên cho thứ tự của đối tượng đầu. Ví dụ: >> first = fints((today:today+1)', (1:2)','DataSeries','d'); >> second = fints((today:today+1)', (11:12)','DataSeries','d'); >> newfts = first + second >> newfts = desc: (none) freq: Daily (1) 'dates: (2)' 'DataSeries: (2)' '10-Dec-2006' [ 12] '11-Dec-2006' [ 14] (2): Cộng từng thành phần tương ứng của mảng với đối tượng FTS. SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 53 /116 Ví dụ: >> array = [5; 5 ]; >> newfts = first + array >> newfts = desc: (none) freq: Daily (1) 'dates: (2)' 'DataSeries: (2)' '10-Dec-2006' [ 6] '11-Dec-2006' [ 7] (3): Cộng từng thành phần tương ứng của đối tượng FTS với mảng. Ví dụ: >> newfts = array + first >> newfts = desc: (none) freq: Daily (1) 'dates: (2)' 'DataSeries: (2)' '10-Dec-2006' [ 6] '11-Dec-2006' [ 7] Ö Tương tự cho các tác vụ trừ, nhân, chia, lũy thừa FTS 3.5.4 Tổng tích lũy ƒ Cú pháp: newfts = cumsum(oldfts) ƒ Mô tả: Tính tổng tích lũy của mỗi chuỗi dữ liệu, chuỗi thời gian riêng biệt trong đối tượng FTS oldfts. newfts chứa chuỗi dữ liệu chỉ tên giống oldfts. ƒ Ví dụ: >> newfts = cumsum(first) >> newfts = desc: CUMSUM of freq: Daily (1) 'dates: (2)' 'DataSeries: (2)' '11-Dec-2006' [ 1] '12-Dec-2006' [ 3] 3.5.5 Lấy nội dung của field xác định ƒ Cú pháp: fieldval = getfield(tsobj, field) hay fieldval = tsobj.field ƒ Mô tả: Trả về nội dung của field xác định. Hàm fieldval = getfield(tsobj, field, {dates}) tương tự. ƒ Các đối số: Đối số nhập Mô tả tsobj Đối tượng FTS. field. Tên field trong tsobj dates Khoảng thời gian. Các ngày có thể bao gồm thời gian. Bảng 3. 15: Thông số nhập của hàm lấy nội dung field xác định SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 54 /116 ƒ Ví dụ: >> dates = ['01-Jan-2001';'01-Jan-2001'] >> times = ['11:00';'12:00'] >> dates_times = cellstr([dates, repmat(' ',size(dates,1),1), times]) >> AnFts = fints(dates_times,[1; 5],{'Data1'},1,... 'Yet Another Financial Time Series') >> FF = getfield(AnFts,'Data1', '01-Jan-2001 12:00') FF = 5 3.5.6 Gán nội dung của field xác định ƒ Cú pháp: newfts = setfield(tsobj, field, V) hay S.field = V. ƒ Mô tả: Gán nội dung của field xác định thành giá trị V. Hàm newfts = setfield(tsobj, field, {dates}, V) tương tự. ƒ Các đối số: Đối số nhập Mô tả tsobj Đối tượng FTS. field. Tên field trong tsobj dates Khoảng thời gian. Các ngày có thể bao gồm thời gian. V Giá trị được gán cho field. Bảng 3. 16: Thông số nhập của hàm gán nội dung của field xác định ƒ Ví dụ: >> S = setfield(AnFts,'Data1',... {'01-Jan-2001 11:00::01-Jan-2001 12:00'},(104:105)') >> S = desc: Yet Another Financial Time Series freq: Daily (1) 'dates: (2)' 'times: (2)' 'Data1: (2)' '01-Jan-2001' '11:00' [ 104] ' " ' '12:00' [ 105] SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 55 /116 3.6 Dự báo theo chuỗi thời gian 3.6.1 Dự báo theo dịch chuyển trung bình ƒ Cú pháp: - output = tsmovavg(tsobj, 's', lag) - output = tsmovavg(vector, 's', lag, dim) ƒ Ví dụ: >> thirdfts = fints((today:today+2)', (21:23)', 'DataSeries', 'd'); >> output = tsmovavg(thirdfts, 's', 2) >> output = desc: (none) freq: Daily (1) 'dates: (5)' 'DataSeries: (5)' '30-Dec-2006' [ NaN] '31-Dec-2006' [ 21.5000] '01-Jan-2007' [ 22.5000] 3.6.2 Dự báo theo dịch chuyển trung bình có trọng số ƒ Cú pháp: - output = tsmovavg(tsobj, 'w', weights) - output = tsmovavg(vector, 'w', weights, dim) ƒ Mô tả: Tính độ dịch chuyển trung bình có trọng số bằng cách cung cấp các trọng số cho mỗi yếu tố trong cửa sổ dịch chuyển. Chiều dài của vectơ trọng số xác định kích cỡ cửa sổ. Nếu các trọng số lớn hơn được dùng cho nhiều giá gần đây và các trọng số nhỏ hơn dùng cho giá trước đó thì xu hướng thuận lợi hơn cho thị trường chứng khoán gần đây. ƒ Ví dụ: >> output = tsmovavg(thirdfts, 'w', [3 2 1]) >> output = desc: (none) freq: Daily (1) 'dates: (3)' 'DataSeries: (3)' '30-Dec-2006' [ NaN] '31-Dec-2006' [ NaN] '01-Jan-2007' [ 21.6667] SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 56 /116 3.6.3 Dự báo theo hàm trơn đơn ƒ Cú pháp: output = smoothts(input, 'e', n) ƒ Ví dụ: >> a = [1 2 3; 6 7 8 ]; >> output = smoothts(a, 'e', 0.5) >> output = 2500.75000.60000.6 2500.25000.10000.1 3.6.4 Các đối số Đối số nhập Mô tả tsobj Đối tượng FTS vector Vectơ hàng hay ma trận hàng. Mỗi hàng là một bộ quan sát. 's' Xác định tính độ dịch chuyển trung bình đơn 'w' Xác định tính độ dịch chuyển trung bình có trọng số lag Điểm dữ liệu trước được dùng chung dữ liệu hiện tại khi tính độ dịch chuyển trung bình. dim (Tùy chọn) Chỉ rõ chiều khi đầu vào là vectơ hoặc ma trận. Mặc định là 2( Ma trận hàng: mỗi hàng là một biến và mỗi cột là một bộ quan sát ). Nếu dim = 1 thì đầu vào là vectơ cột hoặc ma trận cột( mỗi cột là một biến và mỗi hàng là một bộ quan sát). output giống định dạng của đầu vào. weights Trọng số của các yếu tố. Bảng 3. 17: Thông số nhập của hàm dự báo theo hàm trơn đơn SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 57 /116 Chương 4 THIẾT KẾ HỆ THỐNG GIẢI CÁC BÀI TOÁN TÀI CHÍNH THÔNG QUA MATLAB 4.1 Giới thiệu hệ thống Hệ thống gồm hai thành phần cơ bản 4.1.1 Cài đặt các công thức bằng MatLab Thành phần này gồm các M – file phục vụ cho việc tính các bài toán tài chính. Ngoài một số hàm Matlab hỗ trợ, hệ thống còn sử dụng các hàm được cài đặt bổ sung cho bài toán lãi kép và tính chỉ số. 4.1.2 Chương trình giải các bài toán tài chính bằng C# Các module trong hệ thống - Module Tính lãi đơn. - Module Tính lãi kép. - Module Thanh toán theo chu kỳ. - Module Tính chỉ số. - Module Tính dự báo theo chuỗi thời gian. Các module này cho phép người dùng giải các bài toán tài chính như tính tiền lãi, lãi suất, giá trị hiện tại, các khoản tiền thanh toán theo chu kỳ, tính độ chênh lệch giá trị giữa hai mốc thời gian và dự báo các số liệu tài chính trong tương lai gần, Khi cần tính toán, lấy hoặc xuất dữ liệu, chương trình sẽ gọi hàm từ Matlab (các M – file trên). Hệ thống có thể lấy và xuất dữ liệu theo các định dạng lưu trữ khác nhau. SVTH: Nguyễn Thị Cẩm Nhân–02ĐHTH143 Nguyễn Thị Hồng Nhi–02ĐHTH150 Trang 58 /116 4.2 Phân tích nghiệp vụ: 4.2.1 Đặc tả: 4.2.1.1 ThemMoiMoHinh (Thêm mô hình) 9 Tóm tắt Usecase này cho phép người dùng lặp lại quá trình tính toán. 9 Dòng sự kiện ƒ Dòng sự kiện chính - Người dùng nhấn vào nút Thêm - Hệ thống sẽ kiểm tra xem có mô hình nào đang tồn tại hay không. Nếu có nhưng chưa lưu thì hiện thông báo để hỏi người dùng có muốn lưu lại không. ° Người dùng chọn Lưu, hệ thống sẽ lưu mô hình và xóa trắng màn hình để người dùng vẽ mô hình cho một bài toán mới. ° Nếu người dùng chọn Không thì màn hình sẽ được xóa và không lưu mô hình đang có. - Nếu không có mô hình nào thì xóa trắng màn hình. ƒ Các dòng sự kiện khác: Người dùng chọn “Bỏ qua” thì hủy thao tác thêm mới. 9 Các yêu cầu đặc biệt: Không có. 9 Điều kiện tiên quyết: Không có. 9 Post-Conditions Nếu usecase thành công, giao diện sẽ được xóa trắng. Người dùng có thể thực hiện lại các thao tác tính toán cho một bài toán mới. Ngược lại, thì trạng thái hệ thống không thay đổi. 4.2.1.2 LuuMoHinh (Lưu

Các file đính kèm theo tài liệu này:

  • pdfBaoCao LVTN_Khoa2002.pdf
Tài liệu liên quan