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
116 trang |
Chia sẻ: NguyễnHương | Lượt xem: 1667 | Lượt tải: 2
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:
- BaoCao LVTN_Khoa2002.pdf