. Serii Financiare de Timp. Programul Si Analiza Tehnica a Datelor

Cap.1

Introducere

Seriile de timp reprezintă o formă de prezentare ordonată a datelor statistice în care se reflectă nivelul de manifestare a fenomenelor într-un anumit moment sau perioadă de timp. Altfel spus, seria cronologică reprezintă un șir de valori ale unui indicator economic sau de altă natură, observate în timp, oglindind procesul de schimbare și dezvoltare a unei colectivități statistice în perioade succesive de timp.

Seriile dinamice se împart în:

1. serii de stoc sau serii de momente, care caracterizează nivelul de dezvoltare a fenomenelor la anumite momente de timp. Caracteristica acestor serii este faptul că indicatorii prezentați nu pot fi însumați întrucât nivelul de 1a un moment dat cumulează nivelurile tuturor momentelor anterioare. Prin însumare, aceeași mărime ar fi luată în calcul de mai multe ori, ceea ce este lipsit de sens. Din această cauză, termenii acestor serii se mai numesc și mărimi de stoc.

2. serii de intervale, care reflectă evolutia unui proces sau fenomen pe anumite perioade de timp. Nivelurile indicatorilor se pot evidenția pe ani, luni sau alte fracțiuni de timp. Caracteristica seriilor de intervale o reprezintă posibilitatea de însumare a mărimilor succesive ale indicatorilor. Acestă caracteristică are o deosebită importanță atât în formarea seriilor, în iterațiile de optimizare a mărimii intervalelor de grupare, cât și în analiza economică în vederea stabilirii rezultatelor pe intervale mari de timp. In literatura de specialitate aceste serii sunt numite de unii autori cumulative.

Modelarea statistică a seriiior de timp se fundamentează pe acceptarea unor ipoteze privind evoluția acestor serii, și anume:

• mișcarea în timp a unui fenomen social-economic este rezultatul acțiunii unui număr mare de factori care, chiar dacă în viitor unii dintre aceștia își vor modifica acțiunea pe o anumită perioadă de timp, influența lor nu va provoca perturbații bruște și semnificative asupra legității de evoluție a fenomenului, acesta continuându-și mișcarea sub impulsul efectului inerțial;

• legea de mișcare a fenomenului în timp, tendința, nu poate fi cunoscută decât prin cercetarea trecutului și prezentului fenomenelor socio-economice, evoluția lor fiind privită ca efect al unui sistem caracterizat printr-un ansamblu de relații care au o relativă stabilitate în timp.

Ca atare, descrierea statistică a seriilor de timp pornește de la analiza factorilor ce provoacă mișcarea acestora. In general, evolutia unui fenomen este generată de acțiunea unor grupe de factori:

– factori esențiali, cu acțiune de lungă durată, ce imprimă fenomenelor tendința de evoluție a acestora; acțiunea acestor factori știindu-se în funcție de unitățile de timp pentru care a fost măsurat fenomenul analizat;

– factori sezonieri, cu acțiune pe perioade mai mici de un an, care determină abateri de la tendința fenomenului imprimată de factorii esențiali;

– factori ciclici, cu acțiune pe perioade mai mari de un an, ce imprimă o evoluție oscilantă a fenomenului în cazul unor serii construite pe perioade lungi de timp;

– factori întâmplători, (cu acțiune aleatoare), a caror acțiune se compensează dacă datele înregistrate se referă la un număr mare de perioade de timp.

În continuare în această lucrare voi prezenta Financial Time Series Toolbox pentru Matlab care este o colecție de funcții pentru analiza datelor seriilor de timp în domeniul financiar. Aceasta conține un constructor și mai multe funcții care lucrează cu obiectele create de constructor. Seriile fînanciare de timp se folosesc pentru a analiza fluctuațiile dintr-o anumită perioadă (zi,săptămârii,luni,ani) a unor diferite variabile (de exemplu prețuri, stocuri, etc), în felul acesta avându-se o reprezentare mai intuitivă a datelor decât atunci când s-ar folosi vectori sau matrice.

Cap. 2

Cum se crează o serie financiară de timp

Aceasta se poate crea în două moduri:

1. De la linia de comandă, folosind constructorul fints

2. De la un fișier text, folosind funcția ascii2fts

2. 1 Crearea seriilor Financiare de timp folosind constructorul “fints”

Constructorul fints are 5 sintaxe diferite:

1. fts =fints (matrice timp și date)

În această formă (cea mai simplă), intrarea trebuie să fie cel puțin o matrice de două coloane.Prima coloană conține momentele de timp corespunzătoare seriilor de date de pe celelalte coloane. Matricea de intrare poate conține mai mult de două coloane, fiecare coloană adițională reprezentând un set diferit de date ale seriei sau un set de observații.

Dacă intrarea este o matrice de două coloane, obiectul creat va conține patru câmpuri: “desc” ‚ “freq” ‚ “dates” și «seriesl». Valoarea implicită a câmpului descriptor “desc” este blank(‘ '), iar a câmpului de frecvență “freq” este 0.Câmpul momentelor de timp “dates” conține datele primei coloane ale matricei de intrare, în timp ce câmpul de date “seriesl” conține datele celei de a doua coloane ale matricei de intrare.

În primul exemplu voi crea două obiecte fts. Primul are numai un singur câmp de date, pe când cel de al doilea are mai mult de unul. Intervalul de timp este ales folosindu-se funcția MATLAB today:

Date_series = (today:today+10)’;

data_series = exp (randn(1,11))’;

dates_and_data = [date_series data_series];

ftsl =fints (dates_and_data);

Rezultatul este următorul:

Ftsl =

desc: (none)

freq: Unknown (0)

‘dates: (11)’ ‘seriesl: (11)’

‘12-Jun-2002’ [0.3 124]
‘13-Jun-2002’ [3.2665]
‘14-Jun-2002’ [0.9847]
‘15-Jun-2002’ [1.7095]
‘16-Jun-2002’ [0.4885]
‘17-Jun-2002’ [0.5192]
‘18-Jun-2002’ [1.3694]
‘19-Jun-2002’ [1.1127]
‘20-Jun-2002’ [6.3485]
‘21-Jun-2002’ [0.7595]
‘22-Jun-2002’ [9.1390]

Înainte de a putea face orice operație cu aceste noi obiecte create trebuie ca să fie setat câmpul “freq” cu o frecvență validă a momentelor de timp conținute în obiect (în cazul nostru 1 sau zilnic).

Câmpul “desc” se poate lăsa gol.

Pentru a seta indicatorul de frecvență la o frecvență de o zi, trebuie să fie introduse următoarele comenzi MATLAB:

fts1 .freq=1

sau

fts 1 .freq =‘daily’

Indicatorii de frecvență disponibili în MATLAB sunt:

UNKNOWN, Unknown, unknown’ U’ u, 0

DAILY, Daily, daily, D, d, 1

WEEKLY, Weekly, weekly, W, w, 2

MONTHLY, Monthly, monthly, M, m, 3

QUARTERLY, Quarterly, quarterly, Q, q, 4

SEMIANNUAL, Semiannual, semiannual, S, s, 5

ANNUAL, Annual, annual, A, a, 6

Default = Unknown.

2. fts = fints (vector_timp, matrice_date)

În această formă, vectorul momentelor de timp și matricea corespunzătoare de date sunt separate.

Vector_timp trebuie să fie un vector cu o singură coloană, pe când matrice_ date poate fi o matrice. Fiecare coloană a matricei de date indică un set diferit de observații.

dates (today:today+10)’;

data_seriesl =exp(randn(1,11))’;

data_series2 = exp(randn(1,11))’;

data = [data_seriesl data_series2]; fts = fints (dates, data)

Rezultatul este următorul:

fts=

desc: (none)

freq: Unknown (0)

‘dates: (11)’ ‘series: (11)’ ‘series2:

’12-Jun-2002’ [0.5816] [1.2816]

’13-Jun-2002’ [5.1253] [0.9262]

’14-Jun-2002’ [2.2824] [5.6869]

’15-Jun-2002’ [1.2596] [5.0631]

’16-Jun-2002’ [1.9574] [1.8709]

’17-Jun-2002’ [0.6017] [1.0962]

’18-Jun-2002’ [2.3546] [0.4459]

’19-Jun-2002’ [1.3080] [0.6304]

’20-Jun-2002’ [1.8682] [0.2451]

’21-Jun-2002’ [0.3509] [ 0.6876]

’22-Jun-2002’ [4.6444] [0.6244]

Rezultatul este asemănător cu cel din primul exemplu, diferența constând în modul în care sunt introduse datele în constructor și în faptul că acum sunt de fapt două serii de date (seriesl și series2)

3.fts = fints (vector_timp, matrice_date, nume)

Cea de a treia sintaxă este asemănătoare cu cea de a doua, numai că se mai introduce o noua variabilă numită nume care semnifică numele fiecărei serii de date a matricei matrice_date.

Variabila nume trebuie să fie un string MATLAB .Dacă se folosește o matrice de date cu mai multe coloane, variabila nume trebuie să fie un vector de variabile string.

dates = (today:today+1O)’;

data = exp (randn(1,11))’;

ftsl = fints (dates, data,’First’);

Rezultatul este următorul:

fts1 =

desc: (none)

freq: Unknown (0)

‘dates: (11)’ ‘First: (11)’

’12-Jun-2002’ [0.4615]

’13-Jun-2002’ [1.1640]

’14-Jun-2002’ [0.7140]

’15-Jun-2002’ [2.6400]

’16-Jun-2002’ [0.8983]

’17-Jun-2002’ [2.7552]

’18-Jun-2002’ [0.6217]

’19-Jun-2002’ [1.0714]

’20-Jun-2002’ [1.4897]

’21-Jun-2002’ [3.0536]

’22-Jun-2002’ [1.8598]

Notă: Pentru variabila nume, singurul caracter nealfanumeric permis este underscor(_).

4. fts =fints (vector_timp, vector-date, nume, frecvență)

În această formă se introduce în plus variabila frecvență fără de care nu se pot folosi obiectele fts rezultate.Variabila frecvență trebuie să fie un indicator Matlab valid.

dates = (today:today+6)’;

data_seriesl = exp(randn(1, 7))’;

data_series2 =exp(randn(1, 7))’;

data = [data_series 1 data_series2];

fts = fints (dates, data, {‘First’, ‘Second’},1);

Rezultatul este următorul:

fts =

desc: (none)

freq: Daily (1)

‘dates: (7)’ ‘First (7)’ ‘Second: (7)’

‘12-Jun-2002’ [1.2305] [0.7396]

’13-Jun-2002’ [1.2473] [2.6038]

’14-Jun-2002’ [0.3657] [0.5866]

’15-Jun-2002’ [0.6357] [0.4061]

’16-Jun-2002’ [4.0530] [0.4096]

’17-Jun-2002’ [0.6300] [1.3214]

’18-Jun-2002’ [1.0300] [0.4744]

fts = fints ( vector_timp, vector_date, nume, frecvență, des)

În această formă se atribuie câmpului descriptor “desc” al seriei financiare de timp valoarea variabilei des . Această valoare poate fi oricare, deoarece ea nu este folosita în nici o operatie cu obiectul fts.

dates = (today:today+6)’;

data_series1 = exp(randn(1,7))’;

data_series2 = exp(randn(1,7))’;

data = [data_series 1 data _series2];

fts = fints (dates, data, {‘First’, ‘Second’ }, 1, ‘Test TS’ );

Rezultatul este urmatorul:

fts =

desc: Test TS

freq: Daily (1)

‘dates: (7)’ ‘First: (7)’ ‘Second: (7)’

’12-Jun-2002’ [0.5428] [1.2491]

’13-Jun-2002’ [0.6649] [6.4969]

’14-Jun-2002’ [0.2428] [1.1163]

’15-Jun-2002’ [1.2550] [0.6628]

’16-Jun-2002’ [1.2312] [0.6674]

’17-Jun-2002’ [0.4869] [0.3015]

’18-Jun-2002’ [2.1335] [0.9081]

Crearea seriilor financiare de timp ce ajutorul unui fișier text

Se face folosindu-se functia ascii2fls. Formatul general al fișierului text este:

Poate conține câmpuri de descriere

Poate conține nume de cap de coloană care este obligatoriu să preceadă coloanele de serii de date dacă nu este specificat nr_rând_omis

Coloana cea mai din stânga trebuie să fie coloana momentelor de timp

Datele trebuie sa fie în format valid de date de genul:

ddmmyy sau ddmmyyyy

mm/dd/yy sau mm/dd/yyyy

dd-mm-yy sau dd-mm-yyyy

Fiecare coloană trebuie să fie separată de celelalte printr-un spațiu sau un tab

Sintaxa funcției este:

fts = ascii2fts (nume_fișier, nr_rând_desc,nr_rând_câmp_nume, nr_rând_omis)

unde

nume_fișier = numele fișierului care conține datele

nr_rând_des = numărul rândului din fișier de unde se ia câmpul descriptor

nr_rând_camp_nume = numarul randului din fisier de unde se ia câmpul(nrece ea nu este folosita în nici o operatie cu obiectul fts.

dates = (today:today+6)’;

data_series1 = exp(randn(1,7))’;

data_series2 = exp(randn(1,7))’;

data = [data_series 1 data _series2];

fts = fints (dates, data, {‘First’, ‘Second’ }, 1, ‘Test TS’ );

Rezultatul este urmatorul:

fts =

desc: Test TS

freq: Daily (1)

‘dates: (7)’ ‘First: (7)’ ‘Second: (7)’

’12-Jun-2002’ [0.5428] [1.2491]

’13-Jun-2002’ [0.6649] [6.4969]

’14-Jun-2002’ [0.2428] [1.1163]

’15-Jun-2002’ [1.2550] [0.6628]

’16-Jun-2002’ [1.2312] [0.6674]

’17-Jun-2002’ [0.4869] [0.3015]

’18-Jun-2002’ [2.1335] [0.9081]

Crearea seriilor financiare de timp ce ajutorul unui fișier text

Se face folosindu-se functia ascii2fls. Formatul general al fișierului text este:

Poate conține câmpuri de descriere

Poate conține nume de cap de coloană care este obligatoriu să preceadă coloanele de serii de date dacă nu este specificat nr_rând_omis

Coloana cea mai din stânga trebuie să fie coloana momentelor de timp

Datele trebuie sa fie în format valid de date de genul:

ddmmyy sau ddmmyyyy

mm/dd/yy sau mm/dd/yyyy

dd-mm-yy sau dd-mm-yyyy

Fiecare coloană trebuie să fie separată de celelalte printr-un spațiu sau un tab

Sintaxa funcției este:

fts = ascii2fts (nume_fișier, nr_rând_desc,nr_rând_câmp_nume, nr_rând_omis)

unde

nume_fișier = numele fișierului care conține datele

nr_rând_des = numărul rândului din fișier de unde se ia câmpul descriptor

nr_rând_camp_nume = numarul randului din fisier de unde se ia câmpul(nume)

nr_rând_omis = numărul rândului din fișier care nu este luat în considerare

În continuare voi considera fișierul Intel.dat care are următorul conținut :

Intel (INT)

Daily prices (3/29/96 to 3/29/99)

DATE OPEN HIGH LOW CLOSE VOLUME

3/29/02 33.0625 33.188 32.75 33.063 6320500

3/26/02 33.125 33.375 32.75 32.938 552800

3/25/02 33.5 33.625 32.875 33.375 7936000

3/24/02 33.0625 33.25 32.625 33.188 6025400

Dacă folosesc comanda:

disfts=ascii2fts(‘Intel.dat’, 1, 3,2)

Rezultatul este următorul:

disfts=

desc: Intel(INT)

freq: Unknown (0)

‘dates: (782)’ ‘OPEN: (782)’ ‘HIGH: (782)’ ‘LOW: (782)’

‘29-Mar-2002’ [33.0625] [33. 1880] [32.7500]
‘26-Mar-2002’ [33 .3 125] [33.3750] [32.7500]
‘25-Mar-2002’ [33.5000] [33.6250] [32.8750]
‘24-Mar-2002’ [33.0625] [33.2500] [32.6250]
‘23-Mar-2002’ [34.1250] [34.1880] [32.8130]
‘22-Mar-2002’ [34.9375] [35] [34.2500]
‘19-Mar-2002’ [35.7500] [35 .8130] [34.8750]
‘I 8-Mar-2002’ [34.8125] [35.6880] [34.6880]
‘17-Mar-2002’ [35.2500] [35.5630] [34.5000]
‘16-Mar-2002’ [35.7500] [36.4380] [35.0630]
‘15-Mar-2002’ [36.1250] [36.5630] [35.1250]
‘12-Mar-2002’ [35.6250] [36.4380] [35.6250]
‘11-Mar-2002’ [34.1250] [34.9380] [34.1250]
‘10-Mar-2002’ [34.6875] [35 .0630] [34.3750]
‘09-Mar-2002’ [35.7500] [35.8130] [34.3130]
‘08-Mar-2002’ [35.9375] [36.6880] [35.9380]
‘05-Mar-2002’ [35.8125] [36] [35.5630]

Alte functii care au fost folosite in programul sursa sunt:

– ftse = extfield(fts, 'Close')

Funcția "extfield" extrage dintr-un obiect "tsobj" datele și seria de date specificate de câmpul nume într-un nou obiect serie financiară de timp "ftse" cu mențiunea că va conține un număr mai mic de serii de date.

– newfts = chfield(oldfts, oldname, newname)

Funcția chfield schimbă numele obiectului serie de timp financiară din nume vechi (oldname) în nume nou (newname). Pentru a schimba numele a mai multor componente odată se va specifica seria veche și cea nouă a numelor corespunzătoare coloanelor.

Nu se poate schimba numele componentelor obiectelor desc, freq și dates.

sfts = sortfts(tsobj)

sfts = sortfts(tsobj, flag)

sfts = sortfts(tsobj, seriesnames, flag)

[sfts, sidx] = sortfts(…)

Funcția sortfts sorteaza in obiectul seriilor financiare de timp tsobj in ordine crescatoare numai pe baza datelor din vectorul dates numai daca tsobj nu contine informatii despre timp. Daca obiectul contine informatii despre timp, sortarea este bazata pe o combinatie a vectorilor timp si dates. Vectorul timp nu poate fi sortat decat individual.

Cap. 3

Vizualizarea obiectelor fts

Se face cu ajutorul funcției chartfts care oferă o reprezentare vizuală a obiectelor fts. Cu această funcție se poate observa întregul interval de date acoperit de seriile de timp.

Această funcție oferă unealta “Zoom Tool” specializată în extragerea informațiilor adiționale despre seriile afișate.

Funcția chartfts

Sintaxa este următoarea:

chartfts (tsobj)

Această comandă produce o singură fereastră în care sunt afișate unul sau mai multe grafice (pentru fiecare serie de date se afișează un grafic).

Funcția chartfts necesită un singur argument tsobj care reprezintă numele seriei financiare de timp pe care vrem să o afișăm.Cele mai multe obiecte fts conțin patru serii de prețuri cum sunt : prețul de deschidere, prețul de închidere, prețul maxim, prețul minim, plus încă o serie adițională care conține volumul de marfă vândută. Totuși chartfts nu este limitată numai la serii de preț și volum de marfă vândută. Poate fi folosită pentru a afișa orice serie de timp.

Pentru a arăta cum se folosește funcția chartfts voi crea un obiect fts dis care conține cinci câmpuri: OPEN,HIGH, LOW, CLOSE, VOLUME.

Exemplu:

Voi folosi funcția chartfts pentru a afîșa valorile pe un grafic:

dis= ascii2fts (‘Intel.dat’, 1, 3, 2);

chartfts (dis)

Rezultatul este:

Graficul conține cinci reprezentări pentru fiecare dintre seriile de date ale obiectului dis. Dacă se mișcă cursorul peste grafic va apare o bară verticală. Această bară selectează un set de date care sunt afișate în cutia de jos. Dacă se mișcă această bară, setul de date se modifică corespunzător.

Unealta Zoom

Caracteristica “Zoom” permite o detaliere mai mare a datelor. Unealta Zoom este găsită în meniul “Zoom”:

Când această caracteristică este activată se vor vedea două butoane inactive (Do Zoom și Reset Zoom) dedesubtul axelor. Butoanele vor deveni active după ce s-au efectuat anumite operații.

Pentru a mări o porțiune din grafic trebuie să definim momentul de timp de început cât și pe cel de sfârșit. Acest lucru se face mutând cursorul deasupra graficului până când data dorită este afișată în partea din stînga jos, după care se dă click. O linie verticală albastră indică data de început selectată. După aceea, se va muta cursorul până când data de sfârșit dorită este afișată, după care se dă un click. De data aceasta este afișată o linie verticală roșie și butonul Do Zoom este activ.

Pentru a mări efectiv imaginea, apăsați butonul Do Zoom:

Pentru a ne întoarce la starea inițială, trebuie să apăsăm butonul Reset Zoom.

Cap. 4.

Lucrul cu obiecte fts

4.1 Structura obiectelor fts

Un obiect fts are întotdeauna trei componente:

– câmpul descriptor (“desc”)

– indicatorul de frecvență (“freq”)

– seriile de date și timp

Dacă se construiește un obiect folosindu-se constructorul fints, valoarea implicită a câmpului descriptor este blank. Dacă se construiește un obiect, folosindu-se date dintr-un fișier cu ajutorul comenzii ascii2fts, valoarea implicită a câmpului descriptor(desc) este numele fișieru1ui text.

Valoarea implicită a indicatorului de frecvență este 0 (frecvență necunoscută). Seriile de date “dates” nu au un set de va1ori implicite. Când se crează un obiect trebuie construite seriile de date și timp.

Dacă nu se dă un nume seriei, numele implicit este “seriesl”. Dacă există mai multe serii de date care nu au nume, valoarea imp1icită a fiecărei serii este “series”, urmată de un număr (seriesl,series2, etc.)

Cum se extrag informațiile dintr-un obiect fts

Următorul exemplu arată cum se extrage informația dintr-un obiect fts.

dates= (datenum(’05/11/101’):datenum(’05/11/101 ‘)+ 10)’; data_seriesl =exp(randn(1,11))’; data_series2=exp(randn(1,11 ))‘;

data = [data_seriesl data_series2];

myfts =fints (dates, data);

obiectul myfts arată:

myfts=

desc: (none)

freq: Unknown(0)

‘dates: (11)’ ‘seriesl: (11)’ ‘series2: (11)’
‘11-May-2002’ [2.8108] [0.9323]
‘12-May-2002’ [0.2454] [0.5608]
‘13-May-2002’ [0.3568] [1.5989]
‘14-May-2002’ [0.5255] [3.6682]

‘l5-May-2002’ [1.1862] [5.1284]
‘l6-May-2002’ [3.8376] [0.4952]

‘17-May-2002’ [6.9329] [2.2417]
‘l8-May-2002’ [2.0987] [0.3579]
‘19-May-2002’ [2.2524] [3.6492]
‘2O-May-2002’ [0.8669] [1.0150]
‘21-May-2002’ [0.9050] [1.2445]

Voi crea un nou obiect srs2, care conține numai valorile seriei series2 a obiectului myfts:

srs2 = myfts.series2

Rezultatul este următorul:

srs2 =

desc: (none)

freq: Unknown (0)

‘dates: (101)’ ‘series2: (101)’

‘11-May-2002’ [0.9323]

‘12-May-2002’ [0.5608]

‘13-May-2002’ [1 .5989]

‘14-May-2002’ [3 .6682]

‘15-May-2002’ [5. 1284]

‘16-May-2002’ [0.4952]

‘17-May-2002’ [2.2417]

‘18-May-2002’ [0.3579]

‘19-May-2002’ [3.6492]

‘20-May-2002’ [1.0150]

‘21-May-2002’ [1.2445]

Noul obiect srs2 conține toate momentele de timp din myfts, dar datele sunt numai cele corespunzătoare coloanei series2. Numele noii coloane a seriei srs2 este identic cu cel al seriei myfts . series2.

43 Cum se extrag datele dintr-un obiect fts și se pun într-o matrice

Operația se face cu ajutorul funcției fts2mtx care extrage momentele de timp și/sau datele dintr-un obiect fts și le pune într-un vector sau într-o matrice. Comportarea implicită a funcției permite extragerea numai a seriilor de date și punerea acestora într-un vector sau într-o matrice.

srs2_vec = fts2mtx (myfts. series2)

rezultatul este:

srs2_vec =

0.9323

0.5608

1.5989

3 .6682

5.1284

0.4952

2.2417

0.3579

3.6492

1 .0150

1.2445

Dacă se vrea și includerea seriei de timp, atunci trebuie introdus un al doilea argument care trebuie setat cu 1. Rezultatul este o matrice, a cărei prime coloane este un vector de timp.

format long g

srs2mtx =fts2mlx (myfts.series2, 1)

rezultatul este:

srs2_mtx =

730251 0.932251754559576
730252 0.560845677519876
730253 1.5988872183914
730254 3.6681500883527
730255 5. 12842215360269
730256 0.49519254119977
730257 2.24174134286213
730258 0.357918065917634
730259 3.64915665824198
730260 1.01504236943148
730261 1 .24446420606078

Vectorul srs2_vec conține nuniai valorile series2, pe când matricea srs2_mtx conține și vectorul de timp în prima coloană și valorile seriei series2 în a doua coloană. Momentele de timp din prima coloană sunt în format serial de timp. În formatul serial de timp, de exemplu 1, este echivalentul lui 1 ianuarie anul 0000. Formatul “long g” afișează numerele fără exponent cu 15 zecimale. Pentru a se afișa în formatul standard, folosim “format short” care afișează numerele fără exponent cu 5 zecimale.

4.4 Indexarea unui obiect fts

4.4.1 Indexarea câmpului de date

Prin indexarea câmpului de date se obțin valori dintr-un obiect fts.

În următorul exemplu, voi extrage valorile din 11 mai 2002 ale seriei myfts:

format short

myfts (‘05/11/2002’)

rezultatul este:

ans=

desc: (none)

freq: Unknown (0)

‘dates: (1)’ ‘seriesl: (1)’ ‘series2: (1)’

‘11-May-2002’ [2.8108] [0.9323]

În exemplul următor, voi extrage numai valorile câmpului series2, din data de 11 mai 2002:

myfts.series2(’05/11/2002’)

rezultatul este:

ans =

desc: (none)

freq: Unknown (0)

‘dates: (1)’ ‘series2: (1)’

‘11-May-2002’ [0.9323]

În exemplu1 următor, voi extrage toate valorile a trei date diferite:

myfts({’05/11/2002’, ‘05/21/101’, ‘05/31/101’})

rezultatul este:

ans=

desc: (none)

freq: Unknown (0)

‘dates: (3)’ ‘seriesl: (3)’ ‘series2: (3)’
‘11-May-2002’ [2.8108] [0.9323]
‘21-May-2002’ [0.9050] [1.2445]
‘31-May-2002’ [1.4266] [0.6470]

În exemplul următor, voi extrage numai câmpul series2 ale acelorași trei date:

myfts.series2({’05/11/2002’, ‘05/21/2002’, ‘05/31/2002’})

rezultatul este:

ans=

desc: (none)

fieq: Unknown (0)

‘dates: (3)’ ‘series2: (3)’

‘11-May-2002’ [0.9323]
‘21-May-2002’ [1.2445]
‘31-May-2002’ [0.6470]

4.4.2 Indexarea câmpului de date cu un domeniu de timp

O serie financiară de timp permite indexarea unui obiect cu un domeniu de timp. Un domeniu de timp este format din două momente de timp separate de (::). Un exemplu de domeniu de timp este (05/11/101 :: 05/31/101), care înseamnă toate zilele dintre aceste două date, incluzând data de început și pe cea de sfârșit.

Iată câteva exemple:

myfts (‘05/11/2002::05/15/2002’)

rezultatul este:

ans =

desc: (none)

freq: Unknown (0)

‘dates: (5)’ ‘seriesl: (5)’ ‘series2: (5)’
‘11-May-2002’ [2.8108] [0.9323]
‘12-May-2002’ [0.2454] [0.5608]
‘13-May-2002’ [0.3568] [1.5989]
‘14-May-2002’ [0.5255] [3.6682]
‘l5-May-2002’ [1.1862] [5.1284]

Dacă tastez:

myfts.series2(’05/11/2002: :05/15/2002’)

rezultatul este:

ans

desc: (none)

freq: Unknown (0)

‘dates: (5)’ ‘series2: (5)’
‘11-May-2002’ [0.9323]
‘12-May-2002’ [0.5608]
‘13-May-2002’ [1.5989]
‘14-May-2002’ [3.6682]
‘15-May-2002’ [5.1284]

Dacă se întâmplă ca o dată să nu existe în obiectul fts, o eroare indică că una sau ambele date nu sunt în domeniu. Se poate folosi comanda ftsbound, pentru a determina prima și ultima dată din obiect.

4.4.3 Indexarea cu un întreg

Indexarea cu un întreg este forma normală a indexării în MATLAB. Indexarea începe de la 1 (nu de la 0); index=1 corespunde primului element, index=2 corespunde celui de al doilea element, etc. Iată câteva exemple:

Cum se obține primul element al seriei series2:

myfts .series2(1)

rezultatul este:

ans =

desc: (none)

freq: Unknown (0)

‘dates: (1)’ ‘series2: (1)’

‘1 l-May-2002’ [0.9323]

Cum se obțin primul, al treilea și al cincilea element al seriei series2:

myfts.series2([1, 3, 5])

rezultatul este:

ans =

desc: (none)

freq: Unknown (0)

‘dates: (3)’ ‘series2: (3)’

‘11-May-2002’ [0.9323]

‘13-May-2002’ [1.5989]

‘15-May-2002’ [5.1284]

Cum se obțin valorile de la 16 la 20 ale seriei series2:

myfts. series2( 16:20)

rezultatul este:

ans=

desc: (none)

freq: Unknown (0)

‘dates: (5)’ ‘series2: (5)’
‘26-May-2002’ [0.2105]
‘27-May-2002’ [1 .8916]
‘28-May-2OO2’ [0.6673]
‘29-May-2002’ [0.668 l]
‘30-May-2002’ [1 .0877]

Cum se obțin elementele de la 16 la 20 ale seriei myfts:

myfts( 16:20)

rezultatul este:

ans=

desc: (none)

freq: Unknown (0)

‘dates: (5)’ ‘seriesl: (5)’‘series2: (5)’
‘26-May-2002’ [0.7571] [0.2105]
‘27-May-2002’ [1.2425] [1.8916]
‘28-May-2002’ [1.8790] [0.6673]
‘29-May-2002’ [0.5778] [0.6681]
‘30-May-2002’ [1.2581] [1.0877]

Cum se obține ultimul element al obiectului myfts:

myfts(end)

rezultatul este:

ans =

desc: (none)

freq: Unknown (0)

‘dates: (1)’ ‘seriesl: (1)’ ‘series2: (1)’
‘19-Jun-2002’ [1.4692] [3.4238]

4.5 Operații cu obiecte fts

4.5.1 Funcții aritmetice de bază

Obiectele fts permit adunarea, scăderea, înmulțirea, împărțirea întregului obiect sau numai a unui câmp anume. Aceasta este o proprietate pe care structurile MATLAB nu o au. Nu se pot face operații cu întreaga structură MATLAB, ci numai cu anumite domenii a1e structurii.

Se pot face operații aritmetice cu două obiecte fts, dacă sunt compatibile (conținuturile obiectelor fts sunt la fel, cu excepția câmpului descriptor și a valorilor asociate datelor).

Notă: obiecte fts compatibile nu înseamnă că sunt egale. Două obiecte fts sunt ega1e, dacă totul, în afară de câmpul descriptor, este ega1.

Iată câteva exemple:

myfts1 =

desc: Intel.dat

freq: Daily(l)

‘dates: (5)’ ‘Open: (5)’ ‘High: (5)’ ‘Low: (5)’ ‘Close:(5)’

‘04-Mar-2002’[3830.90] [3868.04] [3800.50] [3832.30]
‘07-Mar-2002’ [3851.72][3882.40] [3824.71] [3856.22]
‘08-Mar-2002’ [3858.48] [3881.55] [3822.45] [3851.72]
‘09-Mar-2002’ [3853.97] [3874.52] [3817.95] [3853.41]
‘10-Mar-2002’ [3852.57] [3865.51] [3801.63] [3830.62]

Se crează alt obiect fts cu ajutorul funcției fints:

newfts =fints (myfts1.dates,fts2mtx(myftsl)/100, {‘Open’,’High’,’Low’, ‘C1ose’, 1,’New FTS’)

rezultatul este:

newfts =

desc: New FTS

freqDaily(1)

‘dates: (5)’ ‘Open: (5)’ ‘High: (5)’ ‘Low: (5)’ ‘Close:(S)’

‘04-Mar-2002’ [38.31] [38.68] [38.01] [38.32]
‘07-Mar-2002’ [38.52] [38.82] [38.25] [38.56]
‘08-Mar-2002’ [38.58] [38.82] [38.22] [38.52]
‘09-Mar-2002’ [38.54] [38.75] [38.18] [38.53]
‘10-Mar-2002’ [38.53] [38.66] [38.02] [38.31]

Se face suma celor două obiecte fts:

addup=myftsl + newfts

rezultatul este:

addup =

desc: Intel.dat

freq: Daily (1)

‘dates: (5)’ ‘Open: (5)’ ‘High: (5)’ ‘Low: (5)’ ‘Close:(5)’
‘04-Mar-2002’ [3869.21] [3906.72] [3838.51] [3870.62]
‘07-Mar-2002’ [3890.24][392 l .22] [3862.96][3 894.78]
‘08-Mar-2002’ [3897.06] [3920.37] [3860.67] [3890.24]
‘09-Mar-2002’ [3892.51] [3913.27] [3856.13] [3891.94]
‘10-Mar-2002’ [3891.10] [3904.17] [3839.65] [3868.93]

Se face diferența celor două obiecte fts:

subout = myfts- newfts

rezultatul este:

subout =

desc: Intel.dat

freq: Daily(1)

‘dates: (5)’ ‘Open: (5)’ ‘High: (5)’ ‘Low: (5)’ ‘Close:(5)’

‘04-Mar-2002’ [3792. 59] [3829.36] [3 762.49] [3793 .98]
‘07-Mar-2002’ [3813.20] [3843.58] [3786.46] [3817.66]
‘08-Mar-2002’ [3819.90] [3842.73] [3784.23] [3813.20]
‘09-Mar-2002’ [3815.43] [3835.77] [3779.77] [3814.88]
‘10-Mar-2002’ [38 14.04] [3826.85] [3763.61] [3792.3l]

Operații cu obiecte fts și cu matrici

Se pot efectua operații cu un obiect fts și cu o matrice sau sca1ar.

addscalar = myftsl + 10000

rezultatul este:

addscalar =

desc: Intel.dat

freq: Daily(1)

‘dates: (5)’ ‘Open: (5)’ ‘High: (5)’ ‘Low: (5)’ ‘Close:(5)’

‘04-Mar-2002’ [13830.90] [13868.04] [13800.50] [13832.30]

’07-Mar-2002’ [13851.72] [13882.40] [13824.71] [13856.22]

‘08-Mar-2002’ [13858.48] [13881.55] [13822.45] [13851.72]

‘09-Mar-2002’ [13853.97] [13874.52] [13817.95] [13853.41]

‘10-Mar-2002’ [13852.57] [13865.51] [13801.63] [13862.70]

Pentru operații cu o matrice și cu un obiect fts, trebuie ca dimensiunea matricii să fie identică cu dimensiunea obiectului. De exemplu, o matrice care să fie scăzută din obiectul myftsl, trebuie să aibă 5 linii și 4 coloane, deoarece myftsl are 5 zile și 4 serii de date.

submtx=myftsl —randn (5, 4)

rezultatul este:

submtx =

desc: Intel.dat

freq: Daily(l)

‘dates: (5)’ ‘Open: (5)’ ‘High: (5)’ ‘Low: (5)’ ‘Close:(5)’
‘04-Mar-2002’ [3831.331 [3867.75] [3802.10] [3832.63]
‘07-Mar-2002’ [3853.39] [3883.74] [3824.45] [3857.06]
‘08-Mar-2002’ [3858.35] [3880.84] [3823.51] [3851.22]
‘09-Mar-2002’[3853 .68] [3872.90] [38 16.53] [3851.92]
‘10-Mar-2002’ [3853.72] [3866.20] [3802.44] [3831.17]

4.5.3 Operații aritmetice cu obiecte fts care au numele seriilor de date diferite

Operațiile aritmetice cu două obiecte fts care au aceeași mărime, dar au numele seriilor de date diferite se fac cu ajutorul funcției ‘fts2mtx” Această funcție extrage valorile dintr-un obiect și le pune într-o matrice sau vector.

Pentru a vedea un exemplu, voi crea a1t obiect fts cu aceeași dimensiune cu a obiectului myftsl, dar care are valori diferite și numele seriilor de date diferite.

newfts2 =fints(myfts 1.dates,fts2mtx(myftsl)/10000),{’Rat1’,’Rat2’, ‘Rat3’,’Rat4’}, 1, ‘NewFTS’)

Dacă voi încerca să adun (scad, etc.) acest nou obiect cu myftsl, o eroare îmi va spune că obiectele nu sunt compatibile. Deși ele conțin aceleași momente de timp, număr de date, număr de serii de date și aceeași secvență, cele două obiecte nu sunt compatibile, deoarece seriile de date nu au aceleași nume. De aceea voi folosi funcția ‘fts2mtx’ pentru a rezolva problema.

addother = myftsl +fts2mtx (newfts2);

4.5.4 Alte operații aritmetice

Există și a1te operații aritmetice care se pot aplica obiectelor fts. Aceste funcții sunt:

funcția exponențială (exp), funcția logaritmică (log), funcția logaritmică în baza 10 (log10), etc.

4.6 Transformarea datelor si a frecvențelor

Prin transformarea datelor și a frecvențelor se convertesc obiectele fts în alt format.

Funcție Scop

Boxcox Transformare Box-Cox
Fillts Umple valorile lipsă
Filter Filtrează
Leadts Leagă obiecte fts
Peravg Medie periodică
Smoothts “Rotunjește” datele
Tsmovavg Medie “mișcătoare”

Funcții de conversie a frecvenței:

Funcție Noua frecvență

Convertto Așa cum este specificată
Resamplets Așa cum este specificată

Toannual Anuală

Todaily Zilnică

Tomonth1y Lunară

Toquartery Trimestrială

Tosemi Bianuală

Toweekly Săptămânală

Exemplu:

Voi folosi funcția “BoxCox”. Această funcție transformă o serie financiară de timp într-una cu distribuție relativă normală.

Mai întâi voi crea un obiect fts de la un fișier, cu ajutorul functiei ascii2fts:

whrl = ascii2fts (‘whirlpool.dat’ 1, 2,[]);

Voi umple toate valorile lipsă cu altele, folosindu-se metoda liniară:

f whrl =fillts (whrl);

Voi transforma distribuția “nenormală” într-una normală folosind transformarea Box-Cox:

bc whrl = boxcox (f whrl);

Voi compara rezultatul câmpului “Close” a seriei, cu distributia normală (Gaussiană) cu cea a distribuției negausiene:

subplot (2,1,1);

plot (f_whrl,Close);

title(’Distribuție negaussiană’);

subplot(2, 1,2);

plot (bcwhrl,Close);

title (‘Distribuție după transformarea Box-Cox’);

Rezultatul este:

Prima reprezentare este aceea a seriei f whrl, care este formată din seria whrl, cu valorile lipsă interpolate cu ajutorul metodei liniare. Distributia este mai mare înspre stânga (nu este o distribuție gaussiană). Cea de-a doua reprezentare este mai puțin “înclinată” spre stânga și este aproape o distribuție gaussiană.

Dacă se examinează conținutul obiectului bc_whrl, se va observa că este identic cu cel a1 obiectului whrl, cu excepția va1orilor.

Exemplu:

Voi folosi funcția smoothts pentru a rotunji un obiect fts.

Pentru început voi crea un obiect fts cu date dintr-un fișier:

ibm = ascii2fts (‘ibm9599.dat’, 1, 3, 2);

Apoi, voi umple datele lipsă (pentru că în weekend nu se lucrează), folosind funcția fillts, cu argumentul “Spline”, care înseamnă că se va folosi o metodă “spline”, de adăugare a datelor:

fibm =fillts (ibm, ‘Spline’);

Voi rotunji seria obținută, folosind metoda imp1icită Box:

sm ibm =smoothts (f_ibm);

Voi afișa cele două serii:

plot(f_ibm. CLOSE(’ 11/01/97: : 02/28/98’), ‘r’) hold on plot(smibm.CLOSE(‘11/01/97: :02/28/98’), ‘b’) hold off

legend(’Filled’, ‘Smoothed’)

title(’Stocul IBM înainte și după aplicarea funcției Smooth’)

Rezultatul este:

Fig.3

Cap. 5

Program demonstativ:

Acest capitol demonstrează utilitatea practică a seriilor financiare de timp. Dându-se un set de date format dintr-o serie de stocuri de închidere (de exemplu, profiturile zilnice realizate de o întreprindere), o serie de dividente care trebuie plătite din stoc (de exemplu dividentele pe care ea le platește în anumite perioade), programul calculează stocul rămas (de exemplu profitul rămas care poate fi folosit pentru retehnologizare) cât și rata dividentelor.

Pașii necesari pentru a face aceste ca1cule sunt:

1. încărcarea datelor

2.crearea unor serii financiare de timp cu ajutorul datelor încărcate (t0, d0)

3. crearea unei serii din dividentele plătite pentru a ajusta stocul de închidere (dadj3)

4. modificarea stocului de închidere și transformarea acestora în stoc rămas “spot”

5 crearea seriei de întoarcere

6 ca1culul ratei dividentelor

5. 1 Încărcarea datelor

Datele folosite de acest program demonstrativ sunt încărcate folosind comanda:

load aur.mat

Fisierul aur.mat conține patru vectori:

– vectorul sdates care conține datele corespunzătoare stocurilor de închidere

– vectorul sdata care conține stocul de închidere

– vectorul divdates care conține datele de plată a dividentelor

– vectorul divdata care conține valoarea dividentelor care trebuiesc plătite

5.2 Crearea unei serii financiare de timp cu ajutorul datelor încărcate

Este mai avantajos lucrul cu seriile financiare de timp decât lucrul cu vectori. Folosind obiectele financiare de timp se pot manipula mai ușor datele, deoarece seriile țin cont de timp. Voi folosi constructorul fints, pentru a construi trei serii financiare de timp:

t0= fints(sdates, sdata, {‘Close’}, ‘d’, ‘Inc’);

d0 =fints(divdates, divdata, {‘Dividends’}, ‘u’, ‘Inc’);

x0 = fints(expdates, expdata, {'Metric'}, 'w', 'Index');

variabilele t0, d0 sunt două serii financiare de timp, care conțin stocurile de închidere și dividentele de plată.

De exemplu, conținutul seriei d0 este:

d0 =

‘desc:’ ‘Inc’

‘freq:’ ‘Unknown (0)’

«»

‘dates: (4)’ ‘Dividends: (4)’
‘03/3 1/99’ ‘0.3000’

‘06/30/99’ ‘0.2500’
‘09/30/99’ ‘0.5000’

‘12/31/99’ ‘0.3800’

Voi afișa pe același grafic cele două serii:

rezultatul este:

fig,4

5.3 Crearea seriei de ajustare a stocurilor de închidere (dadj3)

Stocul de închidere este afectat de plata dividentelor. În ziua de dinaintea plății dividentelor, stocul trebuie să contină dividentele care trebuie plătite a doua zi. In ziua plății dividentelor, stocul scade cu valoarea dividentelor care au fost plătite. Este necesară crearea unei serii financiare de timp, care să reflecte acest factor de ajustare:

dadj1 =d0;

dadj1.dates = dadj1.dates -1;

Acum voi crea seria care ajustează prețurile din ziua plății dividentelor. Această ajustare are valoarea 0. Este de asemenea nevoie să fie adăugată data în care s-a făcut ultima plată a dividentelor, din moment ce datele stocului reflectă perioada anterioară acelei zile. Data anterioară plații dividentelor este 31 decembrie 1998:

dadj2=d0;

dadj2.Dividends = 0;

dadj2 ‘fillts(dadj2, ‘linear’,’ 22/0 1/2004’);

dadj2(’22/01/2004’) = 0;

Combinând cele două obiecte de mai sus, voi putea obține datele de care am nevoie pentru a ajusta prețurile. Totuși, din moment ce prețurile de închidere sunt raportate zilnic, iar dividentele care trebuie plătite sunt raportate numai în anumite perioade de timp, plata dividentelor va fi împărțită liniar, folosindu-se funcția fillts.

dadj3 = [dadj1; dadj2]

În acest moment, seria dadj3 are următoarea va1oare:

dadj3=

desc: Inc || Filled Inc

freq: Unknown (0)

‘dates: (9)’ ‘Dividends: (9)’
‘30-Mar- 1999’ [0.3000]

‘29-Jun -1999’ [0.2500]
‘29-Sec-1999’ [0.5000]
‘30-Dec-1999’ [0.3800]
‘15-Apr-1999’ [0 ]
‘30-Jun-1999’ [0 ]
‘02-Oct-1999’ [0 ]
‘30-Dec-1999’ [0 ]
‘31-Dec-1998’ [0 ]

Voi folosi funcția fillts:

dadj3 =fillts (dadj3, ‘linear’, t0.dates);

5.4 Modificarea stocului de închidere si transformarea acestora în stoc rămas

Seria dadj3 reflectă efectul plății dividentelor, împărțit pe fiecare zi, a seriei t0. Pentru a obține stocul “corect” din fiecare zi a seriei t0, trebuie să scădem dividentele care revin de plată din fiecare zi a seriei t0, din stocurile din ziua respectivă. Voi pune rezultatul în același obiect t0, cu numele de “Spot”.

Pentru a fi sigur că voi face scăderea dintre două serii financiare de timp, care au aceleași momente de timp, voi “scoate” datele seriei dadj3 numai la momentele de timp care sunt definite în seria t0. Voi folosi funcția “datestr”, deoarece t0.dates întoarce momentele de timp în format de date seria1. De asemenea, am văzut în capitolul precedent că nu se pot scădea două serii de timp care nu au aceleași nume de coloane. Cum seria dadj3 are numele de coloane aceleași cu ale seriei d0 (este formată din seria d0), iar numele de coloane ale seriei d0 nu coincid cu numele de coloane ale seriei t0, voi folosi funcția fts2mtx pentru a face scăderea dintre cele două serii:

t0. Spot= t0.C1ose -fts2mtx (dadj3(datestr(t0.dates)));

5. 5 Crearea seriei de întoarcere

Este calculată prin împărțirea diferenței dintre stocul rămas curent și stocul rămas precedent, la stocul rămas precedent:

tret = (t0. Spot – lagts(t0.Spot, 1 ))/lagts(t0. Spot, 1);

tret = chfield (tret, ‘Spot’, ‘Return’);

Funcția lagts(serie,perioadă) păstrează valorile seriei serie, numai că shiftează la stânga cu valoarea perioadă momentele de timp ale seriei serie.

Funcția chfield (serie, numecâmpvechi, numecâmpnou) schimbă numele câmpului numecâmpvechi al seriei serie, cu va1oarea variabilei numecâmpnou.

5.6 Datorită faptului că datele sunt date cu o frecvență săptămânală ("weekly") trebuie să ne asigurăm că acestea vor corespunde astfel că vom seta frecvența zilnic("daily ")

x1 = todaily(x0);

Trebuie să adăugăm o constantă nulă astfel încât atunci când realizăm regresia, această constantă să poată fi scoasă din regresie.

x1.Const = 1;

Creem o serie de timp comună combinând conținutul seriei rezultante și cel al seriei metrice ale căror date există în ambele serii. Când compunem pe orizontală două serii numele câmpului data_series va avea terminația "_N ", unde N reprezintă numărul de ordine al obiectului serie de timp. În acest caz N=1 face referință la 'tret' și N=2 la 'x1'.

dcommon = intersect(tret.dates, x1.dates);

regts0 = [tret(datestr(dcommon)), x1(datestr(dcommon))];

Căutăm valorile care nu sunt finite după care le eliminăm având în vedere că valorile infinite conțin NaN și Inf.

finite_regts0 = find(all( isfinite( fts2mtx(regts0) ), 2));

regts1 = regts0( finite_regts0 );

Scoatem valorile din obiect astfel încât să putem face regresia.

DataMatrix = fts2mtx( regts1 );

XCoeff = DataMatrix(:, 2:3) \ DataMatrix(:, 1);

Se calculează coeficienții regresiei folosind operatorul backslash.

XCoeff = XMatrix \ RetMatrix;

Calculăm predicția:

RetPred = DataMatrix(:, 2:3) * XCoeff;

Introducem predicția în seria de timp:

tret.PredReturn( datestr(regts1.dates) ) = RetPred;

Afișarea rezultatelor

Afișarea diagramei "Spot și Closing Prices", a rezultatului curent și a celui presupus:

subplot(2, 1, 1);

plot(t0);

title('Spot and Closing Prices of Stock');

subplot(2, 1, 2);

plot(tret);

title('Actual and Predicted Return of Stock');

5.8 Calculul ratei dividentelor

În ultima parte a programului demonstrativ, voi calcula rata dividentelor prin împărțirea dividentelor la stocurile de închidere.

Voi verifica dacă am prețuri în zilele de dividente:

datestr(d0.dates, 2)

rezultatul este:

ans =

03/31/99

06/30/99

09/30/99

12/31/99

t0(datestr(d0.dates))

rezultatul este:

ans =

‘desc:’ ‘Inc’”

‘freq:’ ‘Daily (1)’”

„ „ „

‘dates: (3)’ ‘Close: (3)’ ‘Spot: (3)’

‘03/31/99’ ‘10.3369’ ‘10.3369’
‘06/30/99’ ‘11.4707’ ‘11.4707’

‘12/31/99’ ‘11.2244’ ‘11.2244’

Se observă că nu există prețuri de închidere în data de 2 Octombrie 1999. Voi folosi funcția ‘fillts’, pentru a îndrepta acest lucu. Apoi, voi seta indicatorul de frecvență la ‘zilnic’:

t1 =fillts (t0,’nearest’,d0.dates);

t1.freq = ‘d’;

Voi calcula rata dividentelor:

tdr = d0./fts2mtx(t1 .Close(datestr(d0.dates)))

Rezultatul este următorul:

tdr =

‘desc:’ ‘Inc’

‘freq:’ ‘Unknown (0)’

„ „

‘dates: (4)’ ‘Dividends: (4)’
‘03/31/99’ ‘0.0193’
‘06/30/99’ ‘0.0305’
‘09/30/99’ ‘0.0166’
‘12/31/99’ ‘0.0134’

Cap. 6

Analiza tehnică

Analiza tehnică sau analiza grafică este folosită de către unii manageri pentru a-i ajuta să administreze portofolii. Analizele tehnice se bazează în special pe disponibilitatea datelor. Managerii calculează diferiți indicatori cu ajutorul datelor disponibile și le așează pe grafice. Observarea diferiților indicatori pe grafic, îi ajută pe aceștia să ia decizii. Funcțiile de analiză tehnică din acest toolbox ajută la analizarea investițiilor.Aceste funcții sunt grupate în patru categorii: oscilatori, funcții stochastice, indecși și indicatori.

Oscilatorii

Funcție Tip

Adosc Oscilatorul de acumulare/distiibuție

Chaikosc Oscilatorul Chaikin

Macd Media alunecătoare de convergență/divergență

Stochosc Oscilatorul stochastic

Tsaccel Accelerația

Tsmom Viteza

Funcțiile stochastice

Funcție Tip
Chaikvolat Volatilitatea Chaikin
Fpctkd Stochastice rapide
Spctkd Stochastice lente
Willpctr William’s %R

Indecșii

Funcție Tip

Negvolidx Indexul volumului negativ

Posvolidx Indexul volumului pozitiv

Rsindex Indexul puterii relative

Indicatorii

Funcție Tip

Adline Linia de distribuție/acumulare

Bollinger Banda Bollinger

Hhigh Highest high

Llow Lowest low

Medprice Prețul rnediu

Onbalvol On balance volume

Prcroc Rata de modificare a prețului

Pvtrend Trendul preț – volum

Typprice Prețul tipic

Volroc Rata de modificare a volumului

Willad Acumulare/distribuție William

6.1 Oscilatorii

6.1.1 Oscilatorul de acumutare/distribuție (funcția adosc)

Sintaxa este următoarea:

ado = adosc (highp, lowp, openp, closep)

ado = adosc ([highp lowp openp closep])

adots adosc (tsobj)

adots = adosc (tsobj, ParameterName, ParameterValue, …)

unde:

highp vectorul prețurilor maxime
lowp vectorul prețurilor minime
openp vectorul prețurilor de deschidere
closep vectorul prețurilor de închidere
tsobj seria financiară de timp

Sintaxa:

ado adosc (highp, lowp, openp, closep)

returnează un vector ado, care reprezinată oscilatorul de Acumulare/Distribuție.

Oscilatorul de Acumulare/Distibuție este calculat pe baza prețului maxim, minim, de deschidere și de închidere a fiecărei perioade. Fiecare perioadă este tratată individual.

Sintaxa:

ado = adosc ([higup lowp openp closep])

Acceptă o matrice formată din patru coloane ca intrare. Ordinea coloanelor trebuie să fie:

prețul maxim, prețul minim, prețul de deschidere și prețul de închidere.

Sintaxa:

adots adosc (tsobj)

Calculează oscilatorul de acumulare/distribuție având ca dată de intrare o serie financiară de timp tsobj. Seria trebuie să conțină prețul maxim, minim, de deschidere și de închidere. Funcția presupune că seria are coloanele numite ‘High’, ‘Low’, ‘Open’, ‘Close’.

Sintaxa:

adots adosc (tsobj, ParameterName, ParameterValue, ..)

Acceptă ca intrări ParameterName, respectiv ParameterValue care se folosesc în cazul în care numele coloanelor din seria financiară de timp diferă față de numele acceptate. Parametrii acceptați pentru ParameterName sunt: HighName, LowName, OpenName și respectiv CloseName.

Exemp1u:

Voi calcula oscilatorul de Acumulare/Distribuție pentru stocul Intel și voi afișa rezultatele.

load Intel.mat

dis_ADOsc adosc(dis)

plot (dis_ADOsc)

title(’Oscilatorul de acumulare/distribuție pentru Intel’)

Rezultatul este:

Fig.5

6.1.2 Oscilatorul Chaikin (functia chaikosc)

Sintaxa este următoarea:

chosc = chaikosc (highp, lowp, closep, tvolume)

chosc = chaikosc ([highp lowp closep tvolumej)

choscts = chaikosc (tsobj)

choscts = chaikosc (tsobj, ParameterName, ParameterValue, …)

unde:

highp = vectorul prețurilor maxime

lowp = vectorul prețurilor minime

closep = vectorul prețurilor de închidere vectorul vânzărilor

tsobj = seria financiară de timp

Oscilatorul Chaikin este calculat prin scăderea mediei alunecătoare exponențiale, calculată pe zece perioade, a liniei de acumulare/distribuție(AID), din media alunecătoare exponențială, calculată pe trei perioade, a liniei de acumulare/distribuție.

Sintaxa:

chosc = chaikosc (highp, lowp, closep, tvolume)

Permite calcularea Oscilatorului Chaikin (vectorul chosc) dându-se un set de prețuri și volumul vânzărilor. Prețurile care trebuiesc date sunt prețurile maxime(highp), prețurile minime(lowp) și prețurile de închidere (closep).

Sintaxa:

chosc= chaikosc ([highp lowp closep tvolume])

acceptă la intrare o matrice de patru coloane.

Sintaxa:

choscts = chaikosc (tsobj)

Calculează oscilatorul Chaikin (vectorul chosc) folosindu-se datele din seria financiară de timp tsobj. Aceasta trebuie să conțină patru serii cu numele:

“HIGH” ‚“LOW” ‚ “CLOSE” ‚ “VOLUME”.

Aceste serii trebuie să reprezinte prețurile maxime, minime, de închidere, cât și vânzările efectuate.

Sintaxa:

choscts = chaikosc (tsobj, ParameterName, ParameterValue, …)

Acceptă ca intrări perechi de parametri nume/parametru. Aceste perechi specifică numele seriilor de date dacă acestea nu au numele de mai sus. Parametrii valizi sunt:

HIGHNAME, LOWNAME, CLOSENAME, VOLUMENAME.

Exemplu:

Voi calcula oscilatorul Chaikin pentru un stoc Intel și voi afișa rezultatele:

load Intel.mat

dis_CHAIKosc = chaikosc(dis)

plot(dis_CHAIKosc)

title(’Oscilatorul Chaikin pentru Intel’)

Rezultatul este următorul:

Fig.6

6.1.3 Media alunecătoare de convergență/divergență

Sintaxa este următoarea:

[macdvec, nineperma] = macd (data)

[macdvec, nineperma] = macd (data,dim)

macdts = macd (tsobj, series_name)

unde:

data = vector de date

dim = dimensiune, în mod implicit aceasta este 2

tsobj =seria financiară de timp
series_name= numele coloanelor seriei financiare de timp

Sintaxa:

[macdvec, nineperma] = macd (data)

Calculează media alunecătoare de convergență/divergență pe care o bagă în vectorul macdvec, cât și media alunecătoare exponențială calculată pe nouă perioade pe care o bagă în matricea nineperma.

Când cele două grafice sunt afișate, se poate obține o indicație dacă este timpul de a vinde sau de a cumpăra un stock.

Media alunecătoare de convergență/divergență este calculată prin scăderea a 7.5% din media alunecătoare exponențială cu 15% din media alunecătoare. 20% din media alunecătoare este folosită ca linie de semnal. De exemplu, când 20% din media alunecătoare se întâlnește cu media MACD și media MACD coboară dedesubtul celeilalte medii, este timpul de a vinde.

Sintaxa:

[macdvec, nineperma] = macd (data,dim)

Permite specificarea orientării direcției datelor de intrare. Dacă datele de intrare data sunt într-o matrice poți speciflca dacă fiecare rând sau fiecare coloană este un set de observații.

Dacă orientarea nu este specificată, se presupune că fiecare coloană este un set de observații (dim =2).

Sintaxa:

macdts =macd (tsobj, series_name)

Permite ca1culul celor două medii având ca date de intrare o serie financiară de timp tsobj. MACD este calculată cu ajutorul coloanei prețului de închidere din seria tsobj, fiind presupus că această coloană se numește ‘Close’. Rezultatul este o serie flnanciară de timp macdts. Această serie are aceleași momente de timp ca și seria tsobj și conține numai două serii numite MACDLine și NinePerMA.

Prima serie conține valorile reprezentând media MACD, iar a doua serie conține valorile exponenția1ei MACD.

Exemplu:

Voi ca1cula media MACD pentru un stock și voi aflșa rezultatele:

Ioad Intel.mat

dis_C1oseMACD = macd(dis);

dis_OpenMACD=macd(dis,‘OPEN’);

plot (dis_CloseMACD);

plot (dis_OpenMACD);

title (‘MACD pentru Intel’)

rezultatul este următorul:

fig.7

6.1.4 Oscilatorul aleator (funcția stochosc)

Sintaxa este următoarea:

stosc =stochosc (highp, lowp, closep)

stosc = stochosc ([highp lowp closep])

stosc = stochosc (highp, lowp, closep, kperiods, dperiods dmamethod)

stosc = stochosc ([highp lowp closep], kperiods, dperiods, dmamethod])

stoscts=stochosc (tsobj, kperiods, dperiods, dmamethod)

stoscts=stochosc (tsobj, kperiods, dperiods,dmamethod,ParameterName,ParameterValue,…)

unde:

Highp = vectorul prețurilor maxime

Lowp = vectorul prețurilor minime

Closep = vectorul prețurilor de închidere

Kperiods =(opțional) %k perioade. Implicit 10

Dperiods =(opțional) %d perioade. Implicit 3

Damamethod =(opțional) %d metoda mediei alunecătoare. Implicit exponențială ‘e’

Tsobj = seria financiară de timp

Sintaxa:

stosc = stochosc (highp, lowp, closep)

permite calculul FastPercentK (F%K) și FastPercentD(F%D) de la un stock de prețuri maxime,minime și de închidere. Matricea stosc este o matrice de două coloane în care pe prima coloană sunt valorile F%K și pe a doua coloană sunt valorile F%D.

Sintaxa:

stosc = stochosc ([highp lowp closep])

este asemănatoare cu cea de mai sus numai că acum ca date de intrare este o matrice de trei coloane corespunzătoare prețurilor maxime, minime și de închidere (în această ordine)

Sintaxa:

stosc = stochosc (highp, lowp, closep, kperiod, dperiods dmamethod)

permite calculul FastPercentK (F%K) și FastPercentD(F%D) de la un stock de prețuri maxime, minime și de închidere. Variabila kperiods setează perioada %K, iar variabila dperiods setează variabila %D. Variabila damethod specifică tipul de medie a1unecătoare. Mediile alunecătoare valide sunt exponențiala (‘e’), și triunghiulara(’t’).

Sintaxa:

stosc = stockosc ([highp lowp closep], kperiods, dperiods, dmamethod)

este asemănatoare cu cea de mai sus, numai că acum se acceptă la intrare o matrice cu trei coloane corespunzatoare prețurilor maxime(highp), minime(lowp) și de închidere(closep).

Sintaxa:

stoscts=stochosc (tsobj, kperiods, dperiods, dmamethod)

permite calculul FastPercentK (F%K) și FastPercentD(F%D), având ca intrare o serie financiară de timp (tsobj). Această serie trebuie să cuprindă cel puțin prețurile maxime, minime și de închidere. Seria financiară (de timp rezultantă este asemănatoare cu seria tsobj, numai că mai are în plus două serii de date numite “SOK” si “SOD”.

Sintaxa:

stoscts=stochosc (tsobj, kperiods, dperiods, dmamethod,ParameterName’ParameterValue,…)

acceptă la intrare perechi de nume/parametri. Aceste perechi specifică numele datelor necesare dacă acestea diferă de numele implicite ( High pentru seria prețurilor maxime, Low pentru seria prețurilor minime și Close pentru seria prețurilor de închidere).

Numele parametrilor Parameternames valide sunt :HighName, LowName și CloseName.

Exemplu:

Voi calcula oscilatorul aleator pentru un stoc Intel și voi afișa rezultatele:

load Intel.mat

dis_StochOsc = stochosc(dis)

plot(dis_StochOsc)

title(’Oscilatorul aleator pentru un stoc Intel’)

rezultatul este următorul:

fig.8

Viteza dintre perioade

Sintaxa este următoarea:

mom =tsmom (data,nperiods)

momts = tsmom (tsobj, nperiods)

unde:

data = seria de date
nperiods = numărul de perioade (implicit 12)
tsobj = seria financiară de timp

Viteza este diferența dintre două date (de exemplu două prețuri) separate de un număr de perioade.Acest indicator oferă o analiză a schimbărilor prețurilor. Când este atins un maxim de preț, piața se zice că este saturată și va urma o scădere de preț. Invers, când este atins un minim de preț, piața este deficitară și va urma o creștere a prețurilor.

Sintaxa:

mom = tsmom (data,nperiods)

permite calculul vitezei unei serii de date. Dacă este specificată va1oarea nperiods,funcția tsmom folosește acestă va1oare îri locul celei implicite.

Sintaxa:

momts =tsmom (tsobj, nperiods)

permite calculul vitezei tuturor seriilor de date dintr-o serie financiară de timp tsobj. Fiecare serie de date ale seriei financiare de timp este tratată individual. Seria financiară de timp rezultată (momts) este asemănătoare cu seria tsobj, dar mai conține o serie de viteze.

Exemp1u:

Voi calcula viteza unui stoc Intel și voi afișa rezultatele:

load Intel.mat

dis = rmfield (dis,’VOLUME’) % îndepărtez seria “Volume”

dis Mom = tsmom(dis);

plot(dis_Mom)

title(’Viteza unui stoc Intel’)

Rezultatul este:

Fig.9

6.1.6 Accelerația dintre perioade (funcția tsaccel)

Sintaxa este următoarea:

acc =tsaccel(data, nperiods, datatype)

accts =tsaccel (tsobj, nperiods, datațype)

unde:

data =seria de date

nperiods = număr de perioade. Implicit 12 (opțional)

datatype =indică dacă seria de date conține date sau viteze de date:

dacă datatype = 0 vectorul data conține numai date;

dacă datatype= 1 vectorul data conține viteze de date.

tsobj =numele seriei financiare de timp

Sintaxa:

acc =tsaccel(data, nperiods, datatype)

permite calculul accelerației seriei de date, adică diferența dintre viteza curentă și viteza unor perioade dinainte. Dacă este specificată valoarea nperiods, funcția tsaccel calculează accelerația seriei de date data față de acum nperiods.

Sintaxa:

accts = tsaccel (tsobj, nperiods, datatype)

permite ca1culul accelerației seriei de date din seria financiară de timp tsobj. Fiecare serie de date din tsobj este tratată individual. Seria financiară de timp rezultată (accts) este asemănătoare cu seria tsobj, numai că mai are o serie a accelerațiilor.

Exemplu:

Voi calcula accelerația pentru un stoc Intel și voi afișa rezultatele:

load Intel.mat

dis = rmfield (dis,’VOLUME’)

dis_Accel =tsaccel(dis);

plot (dis_Accel)

title (‘Accelerația pentru un stoc Intel’)

rezultatul este următorul:

fig.10

6.2 Funcțiile stochastice

6.21 Volatilitatea Chaikin

Sintaxa este următoarea;

chvol = chaikvolat (highp, lowp)

chvol = chaikvolat ([highp lowp])

chvol =chaikvolat (highp, lowp, nperdiff,manper)

chvol =chaikvolat ([highp lowp], nperdiff,manper)

chvts = chaikvolat (tsobj)

chvts = chaikvolat (tsobj, nperdiff, manper, ParameterName, ParameterValue, …)

unde:

highp = vectorul prețurilor maxime

lowp = vectorul prețurilor minime

nperdiff=vectorul diferențelor perioadelor. Implicit 10

manper=lungimea în perioade a mediei alunecătoare exponențiale. Implicit 10 tsobj = serie financiară de timp

Sintaxa:

chvol = chaikvolat(highp, lowp)

calculează volatilitatea Chaikin a unor prețuri maxime și minime. Chvol este un vector care conține va1orile volatilitățiiChaikin.

Sintaxa:

chvol = chaikvolat ([highp lowp])

permite ca la intrare să fie o matrice de două coloane

Sintaxa:

chvol =chaikvolat (highp, lowp, nperdiff,manper)

permite setarea diferenței de perioade și lungimea mediei alunecătoare exponenția1e (în perioade)

Sintaxa.

chvol = chaikvolat ([highp lowp], nperdiff,manper)

acceptă la intrare o matrice de două coloane

Sintaxa:

chvts = chaikvolat (tsobj)

calculează volatilitatea Chaikin folosindu-se datele dintr-o serie financiară de timp tsobj. Seria trebuie să conțină cel puțin două serii de date numite High și Low, reprezentând prețurile maxime și minime din fiecare perioadă. Chvts este o serie financiară de timp care conține volatilitatea Chaikin.Sintaxa:

chvts = chaikvolat (tsobj, nperdiff, manper, ParameterName, ParameterValue, …)

acceptă ca intrari perechi de parametri nume/parametru. Aceste perechi specifică numele seriilor de date, dacă acestea nu au numele de mai sus. Parametrii valizi sunt: HIGHNAME, LOWNAME.

Exemplu:

În exemplul următor voi calcula volatilitatea Chaikin a unui stoc Intel:

load Intel.mat

dis_CHAIKvo1 =chaikvolat (dis)

plot (disCHAIKvol)

title (‘Volatilitatea Chaikin a unui stoc Intel’)

rezultatul este:

fig.11

6.2.2 Stochastice rapide

Sintaxa este:

[pctk, pctd] = fpctkd (highp, lowp, closep)

[pctk, pctd] =fpctkd ([highp lowp closep])

[pctk, pctd] =fpctkd (highp, lowp, closep, kperiods, dperiods, dmamethod)

[pctk, pctd] =fpctkd ([highp iowp closep], kperiods, dperiods, dmamethod)

pkdts = fpctkd (tsobj, kperiods, dperiods, dmamethod)

pkdts = fpctkd (tsobj, kperiods, dperiods, dmamethod, ParameterName, ParameterValue,…)

unde:

Highp = vectorul prețurilor maxime

Lowp = vectorul prețurilor minime

Closep = vectorul prețurilor de închidere

Kperiods = (opțional) %k perioade. Implicit 1 O

Dperiods = (opțional) %d perioade. Implicit 3

Dmamethod = (opțional) %d metoda mediei alunecătoare. Implicit exponențial ‘e’

Tsobj = seria financiară de timp

Sintaxa:

[pctk, pctd] = fpctkd (highp, lowp, closep)

permite calculul FastpercentK(F%K) și FastPercentD(F%D), avându-se ca date de intrare prețurile maxime(highp), minime(lowp) și prețurile de închidere(closep)

Sintaxa:

[pctk, pctd] =fpctkd ([highp lowp closep])

acceptă la intrare o matrice de trei coloane corespunzătoare prețurilor maxime, minime și de închidere (în această ordine).

Sintaxa:

[fpctk, pctd] =fpctkd (highp, lowp, closep, kperiods, dperiods, dmamethod)

permite calculul FastPercentK(F%K) și FastPercentD(F%D) avându-se ca date de intrare prețurile maxime (highp), minime(lowp) și prețurile de închidere (closep).

Variabila kperiods setează perioada %K, iar variabila dperiods setează perioada “%D”. Variabila damethod speciftcă felul mediei alunecătoare.

Sintaxa:

[pctk, pctd] = fpctkd ([highp lowp closep], kperiods, dperiods, dmamethod)

acceptă la intrare o matrice de trei coloane corespunzătoare prețurilor maxime, minime și de închidere (în această ordine).

Sintaxa:

pkdts = fpctkd (tsobj, kperiods, dperiods, dmamethod)

permite calculul FastPercentK (F%K) și FastPercentD(F%D) având ca intrare o serie financiară de timp (tsobj). Această serie trebuie să cuprindă cel puțin prețurile maxime, minime și de închidere. Seria financiară de timp rezultantă este asemănatoare cu seria tsobj, numai că mai are în plus două serii de date numite “PercentK” și “PercentD”.

Sintaxa:

pkdts = fpctkd (tsobj, kperiods, dperiods, dmamethod, ParameterName, ParameterValue, …)

acceptă la intrare perechi de nume/parametri. Aceste perechi specifică numele datelor necesare dacă acestea diferă de numele implicite (High pentru seria prețurilor maxime, Low pentru seria prețurilor minime și Close pentru seria prețurilor de închidere). Numele pararnetrilor ParameterNames valide sunt :HighName, LowName, CloseName;

Exemplu:

Voi ca1cula oscilatorul stochastic rapid pentru un stoc Intel și voi afișa rezultatele:

load Intel.mat

dis_FastStoc =fpctkd (dis)

plot (disFastStoc)

title (‘Oscilatorul stochastic rapid pentru un stoc Intel’)

rezultatul este:

fig.12

6.2.3 Funcția William’s %R

Sintaxa este urrnatoarea:

wpctr = willpctr (highp, lowp, closep, nperiods)

wpctr = willpctr ([highp lowp closep], nperiods)

wpctrts = willpctr (tsobj)

wpctrts = willpctr (tsobj, nperiods)

wpctrts =willpctr (tsobj, nperiods, ParameterName, ParameterValue,…)

unde:

highp = vectorul prețurilor maxime lowp vectorul prețurilor minime

closep = vectorul prețurilor de închidere

nperiods = numărul de perioade (scalar). Implicit nperiods = 14
tsobj = serie financiară de timp

Sintaxa:

wpctr = willpctr (highp, lowp, closep, nperiods)

permite calculul valorilor William’s %R pentru prețurile cuprinse în numărul de perioade specificat de către nperiods. Este nevoie de prețurile maxime (highp), minime (lowp) și prețurile de închidere (closep). Vectorul de la ieșire wpctr reprezintă valorile William’s%R.

Sintaxa:

wpctr = willpctr ([highp lowp closep], nperiods)

acceptă ca prețurile de intrare să fie date ca o matrice de trei coloane, reprezentând (în această ordine) prețurile maxime, minime și de închidere.

Sintaxa:

wpctrts = willpctr (tsobj,nperiods)

calculează valorileWillia’s %R pentru o serie financiară de timp tsobj. Obiectul trebuie să conțină cel puțin trei serii numite ‘High’ (corespunzătoare prețurilor maxime), ‘Low’ (corespunzătoare prețurilor minime), ‘Close’ (corespunzătoare prețurilor de închidere). Seria de la ieșire wpctrts este un obiect cu seria de timp identică cu cea a obiectului tsobj și o serie de date numită ‘WillPctR’.

Sintaxa:

Wpctrts=willpctr (tsobj, nperiods)

calculează va1orile William’s%R ale seriei tsobj dar numai pentru un număr de perioade egal cu nperiods.

Sintaxa:

wpctrts =willpctr (tsobj, nperiods, ParameterName, ParameterValue, …)

acceptă perechi de nume/parametri la intrare. Aceste perechi furnizează numele seriilor de date, dacă acestea diferă de cele care sunt așteptate.

Numele valide sunt:

HighName=(numele seriei prețurilor maxime),

LowName=(numele seriei prețurilor minime),

CloseName=(numele seriei prețurilor de închidere).

Voi calcula valorile William’s%R pentru un stock Intel

load Intel.mat

dis Wpctr = willpctr (dis)

plot (disWpctr)

title (‘William's %R pentru Intel’)

rezultatul este:

fig.13

6.3 Indecși

6.3.2 Indexul volumului negativ

Sintaxa este următoarea:

nvi = negvolidx (closep, tvolume, initnvi)

nvi = negvolidx ([closep tvolume], initnvi)

nvits = negvolidx (tsobj)

nvits = negvolidx (tsobj, initnvi, ParameterName, ParameterValue,…)

unde:

closep = vectorul prețurilor de închidere

tvolume = vectorul volumului de marfă vândut

initnvi =(opțional) valuarea inițială a indexului volumului negativ(Implicit 100)

tsobj = seria financiară de timp

Sintaxa:

nvi = negvo1idx (closep, tvolume, initnvi)

calculează indexul volumului negativ având ca date de intrare un set de prețuri de închidere și de volum de marfă vândut. Vectorul nvi este un vector care conține indexul volumului negativ. Dacă este specificată variabila initnvi, funcția folosește această valoare în locul celei implicite(100)

Sintaxa:

nvi = negvolidx ([closep tvolume], initnvi)

este asemănătoare cu prima, numai că acum intrările pot fi date sub formă de matrice.

Sintaxa.

nvits = negvolidx (tsobj)

permite ca1culul indexului volumului negativ avându-se ca date de intrare seria financiară de timp tsobj care trebuie să conțină cel puțin două serii numite “Close” și “Volume”. Va1oarea inițială a indexului volumului negativ este 100.

Sintaxa.

nvits = negvolidx (tsobj, initnvi, ParameterName, ParameterValue,…)

este utilizată în cazul în care seria financiară de timp nu are câmpurile de nume denumite

“Close” și “Volume”. În acest caz, se specifică (în variabilele ParameterValue) numele sub care aceste câmpuri apar în serie. Valorile valide a variabilelor ParameterName sunt “CloseName” și “VolumeName”.

Exemplu:

Voi calcula indexul volumului negativ al unui stoc Intel și voi afișa rezultatul:

load Intel.mat

dis_NegVol = negvolidx(dis)

plot (dis_Negvol)

title (‘Indexul volumului negativ al unui stoc Intel’)

rezultatul este:

fig.14

Indexu1 volumului pozitiv

Sintaxa este următoarea:

pvi = posvolidx (closep, tvolume, iniipvl)

pvi = posvolidx ([closep tvolume], initpvi)

pvits = posvolidx (tsobj)

pvits = posvolidx (tsobj, initpvi, ParameterName, ParameterValue,…)

unde:

closep = vectorul prețurilor de închidere

tvolume = vectorul volumului de marfă vândut

initpvi =(opțional) valoarea inițială a indexului volumului pozitiv(Implicit 100)

tsobj = seria financiară de timp

Sintaxa:

pvi = posvolidx (closep, tvolume, initpvi)

calculează indexul volumului pozitiv având ca date de intrare un set de prețuri de închidere și de volum de marfă vândut. Vectorul pvi este un vector care conține indexul volumul pozitiv. Dacă este specificată variabila initpvi, funcția folosește această va1oare în locul celei implicite(100).

Sintaxa:

pvi = posvolidx ([closep tvolume], initnvi)

este asemănatoare cu prima, numai că acum intrarile pot fi date sub formă de matrice.

Sintaxa:

pvits = posvolidx (tsobj)

permite calculul indexului volumului negativ avându-se ca date de intrare seria financiară de timp tsobj care trebuie să conțină cel puțin două serii numite “Close” și “Volume”. Valoarea inițială a indexului volumului pozitiv este 100.

Sintaxa:

pvits = posvolidx (tsobj, initnvi, ParameterName, ParameterValue,..)

este utilizată în cazul în care seria financiară de timp nu are câmpurile de nume denumite “Close” și “Volurne”. În acest caz se specifică (în variabilele ParameterValue) numele sub care aceste câmpuri apar în serie. Valorile valide a variabilelor ParameterName sunt “CloseName” și “VolumeName”.

Exemplu:

Voi ca1cula indexul volumului pozitiv a1 unui stoc lntel și voi afișa rezultatul:

load Intel.mat

dis_PosVol = posvolidx (dis)

plot (disPosVol)

title (‘Indexul volumului pozitiv a1 unui stoc Intel’)

rezultatul este:

fig15

6.3.4 Indexul puterii relative

Sintaxa este urmatoarea:

rsi = rsindex (closep, nperiods)

rsits = rsindex (tsobj, nperiods)

rsits = rsindex (tsobj, ‚nperiods, ParameterName, Parameter Value)

unde:

closep =vectorul prețurilor de închidere
nperiods =numărul perioadelor. Valoarea implicită este 14
tsobj =serie financiară de timp

Sintaxa:

rsi = rsindex (closep, nperiods)

permite calculul indexului puterii relative (RSI) având ca intrare vectorul prețurilor de închidere closep.

Sintaxa:

rsits = rsindex (tsobj, nperiods)

permite calculul RSI cu ajutorul prețurilor de închidere a seriei financiare de timp tsobj. Obiectul tsobj trebuie să conțină cel puțin seria numită “Close”, care reprezintă prețurile de închidere. rsits este o serie financiară de timp a cărei serii de timp este aceeași cu a seriei tsobj și care are seria de date numită “RSI”.

Sintaxa:

rsits = rsindex (tsobj, nperiods, ParameterName, Parameler Value)

acceptă ca intrare o pereche de parametri nume/parametru. Perechea specifică numele seriei de date care este necesară, dacă acest nume diferă de va1oarea ‘Close’. Numele valid al parametrului ParameterName este ‘CloseName’ (numele seriei prețurilor de închidere). Variabila ParameterValue este un string care reprezintă numele existent al seriei de date.

Exemplu:

Voi ca1cula indexul RSI și voi afișa rezultatul:

load Intel.mat

dis RSI = rsindex(dis)

plot (dis_RSI)

title (‘Indexul puterii relative a unui stoc Intel’)

rezultatul este:

fig16

6.4 Indicatori

6.4.1 Linia de acumulare/distribuție

Sintaxa este următoarea:

adln = adline (hîghp. io~p, closep, tvolume)

adln = adline ([highp lowp closep tvolume])

adlnts = adline (tsobj)

adlnts = adline (tsobj, ParameterName, ParameterValue,…)

unde:

highp = vectorul prețurilor maxime

lowp = vectorul prețurilor minime

closep = vectorul prețurilor de închidere

tvolume = vectorul volumului de marfă vândut
tsobj = seria financiară de timp

Sintaxa:

adln = adline (highp, lowp, closep, tvolume)

permite calculul liniei de acumulare/distribuție pentru un set de prețuri maxime, minime, de închidere, cât și a volumului de marfă vândut.

Sintaxa:

adln = adline ([highp lowp closep tvolume])

este asemănătoare cu prima, numai că acum intrarea este sub forma unei matrici cu patru coloane corespunzătoare celor patru vectori de mai sus.

Sintaxa:

adlnis = adline (tsobj)

permite calculul liniei de acumulare/distribuție, folosindu-se ca dată de intrare o serie financiară de timp, care conține patru serii numite “High”, “Low”, “Close” și “Volume”. Ieșirea este o serie financiară de timp adlnts, cu seria de timp identică cu tsobj, dar cu o singură serie de date numită “ADLine”, care conține linia de acumulare/distribuție.

Sintaxa:

adlnts = adline (tsobj, ParameterName, ParameterValue,…)

acceptă la intrare perechi de parametri nume/parametru. Aceste perechi specifică numele seriilor de date în cazul în care acestea sunt diferite de va1orile de mai sus. Parametrii valizi sunt “HighName”, “LowName”, “CloseName” și “VolumeName”.

Exemplu:

Voi calcula linia de acumulare/distribuție a unui stoc Intel și voi afișa rezultatele:

load Intel.mat

dis_ADLine = adline (dis)

plot (disADLine)

title (‘Linia de acumulare/distribuție a unui stoc Intel’)

rezultatul este:

fig17

Banda Bollinger

Sintaxa este următoarea:

[mid, uppr, lowr] = bollinger (data, wsize, wts, nstd)

[midfts, upprfts, lowrfts] = bollinger (tsobj, wsize, wts, nstd)

unde:

data = vector de date

wsize =(opțional) Windowsize(implicit 20)

wts = (opțional) determină tipul de medie alunecătoare folosită. Are valoarea imp1icită 0(box)

nstd = (opțional) numărul de deviații standard pentru banda superioară și cea inferioară (implicit 2)

tsobj = serie financiară de timp

Sintaxa:

[mid, uppr, lowr] = bollinger (data, wsize, wts, nstd)

permite calculul benzii mijlocii, inferioare și superioare care împreună alcătuiesc banda Bollinger. Vectorul mid reprezintă banda mijlocie, care este o medie alunecătoare simplă cu Window size = 20(dacă variabila “wsize” nu are altă valoare). Vectorii uppr și lowr reprezintă banda superioară și respectiv inferioară. Aceste benzi reprezintă media alunecătoare a vectorului dată cu două perioade mai înainte, respectiv înapoi, decât banda mijlocie.

Sintaxa:

[midfts, upprfts, lowrfts] = bollinger (tsobj, wsize, wts, nstd)

este asemănătoare cu prima, numai că acum se iau datele dintr-o serie financiară de timp.

La ieșire, sunt serii financiare de timp cu aceeași serie de timp cu a seriei tsobj.

Exemplu:

Voi calcula banda Bollinger pentru un stoc Intel și voi afișa rezultatele:

load Intel.mat

[dis_Mid dis_Uppr,dis_Lowr] = bollinger(dis);

dis_CloseBo11ing = [dis_Mid.CLOSE,disUppr.CLOSE, dis_Lowr. CLOSE];

plot (dis_CloseBolling)

title (‘Banda Bollinger a prețurilor de închidere pentru un stoc Intel’)

rezultatul este:

fig18

Indicatorul celor mai mari prețuri maxime

Sintaxa este următoarea:

hhv = hhigh (data)

hhv = hhigh (data, nperwds, dim)

hhvts = hhigh (tsobj, nperiods)

hhvts = hhigh (tsobj, nperiods, ParameterName, ParameterValue)

unde:

data = matrice de date
nperiods = (opțional) Număr de perioade. Valoarea implicită este 14
dim = (opțional) dimensiune
tsobj = serie financiară de timp

Sintaxa:

hhv = hhigh (data)

generează un vector cu cele mai mari prețuri maxime din ultimile 14 perioade.

Sintaxa:

hhv = hhigh (data, nperiods, dim)

generează un vector cu valorile maxiine a prețurilor maxime din ultimile nperiods. “dim” indică direcția în care sunt căutate aceste va1ori. Dacă, în loc de o valoare pentru nperiods se introduce”[]”, atunci se va considera va1oarea implicită 14.

Sintaxa:

hhvts = hhigh (tsobj, nperiods)

permite calculul valorilor maxime ale prețurilor maxime folosindu-se la intrare o serie financiară de timp, care trebuie să conțină cel puțin o serie numită “High”. La ieșire este o serie financiară de timp hhvts, care are aceeași serie de timp ca și seria tsobj, iar ca serie de date, conține câmpul numit “HighestHigh”.

Sintaxa:

hhvts = hhigh (tsobj, nperiods, ParameterName, ParameterValue)

permite specificarea numelui seriei de date în cazul în care acesta diferă de valoarea implicită “High”. Parametrul ParameterName acceptat este “HighName’.

Exemplu:

Voi calcula valorile maxime ale prețurilor maxime pentru un stoc Intel și le voi pune pe același grafic cu prețurile maxime.

load Intel.mat

dis_HHigh = hhigh (dis)

subplot(2, 1, 1);

plot (dis_HHigh)

title (‘Highest High pentru un stoc Intel’)

subplot (2, 1, 2)

plot (dis_HHigh);

title (‘prețurile maxime pentru un stoc Intel’);

rezultatul este:

fig.19

6.4.4 Indicatorul valorilor minime ale prețurilor minime

Sintaxa este următoarea:

llv = llow (data)

llv = llow (data, nperiods, dim)

llvts =llow (tsobj, nperiods)

llvts =llow (tsobj, nperiods, ParameterName, ParameterValue)

unde:

data =matrice de date
nperiods = (opțional) număr de perioade. Valoarea implicită este 14

dim = (opționa1) dimensiune

tsobj = serie financiară de timp

Sintaxa:

llv = llow (data)

generează un vector, cu cele mai mici valori minime a ultimilor 14 perioade a matricei data.

Sintaxa:

llv = llow (data, nperiods, dim)

generează un vector, cu va1orile minime a prețurilor minime din ultimile nperiods. “dim” indică directia în care sunt căutate aceste valori. Dacă în loc de o valoare pentru nperiods se introduce”[]”, atunci se va considera va1oarea imp1icită 14.

Sintaxa:

llvts = llow (tsobj, nperiods)

permite ca1culul va1orilor minime a prețurilor minime folosindu-se la intrare o serie financiară de timp, care trebuie să conțină cel puțin o serie numită “Low”. La ieșire este o serie financiară de timp llvts, care are aceeași serie de timp ca și seria tsobj, iar ca serie de date conține câmpul numit “LowestLow”.

Sintaxa:

llvts = llow (tsobj, nperiods, ParameterName, ParameterValue)

permite speciflcarea numelui seriei de date, în cazul în care acesta diferă de valoarea implicită “Low”. Parametrul ParameterName acceptat este “LowName”.

Exemplu:

Voi calcula valorile minime ale prețurilor minime pentru un stoc Intel și le voi pune pe același grafic cu prețurile minime.

load Intel.mat

dis_LLow = llow (dis)

subplot(2, 1, 1);

plot (disLLow)

title (‘Lowest Low pentru un stoc Intel’)

subplot(2, 1 ‚2)

plot (disLLOW);

title (‘prețurile minime pentru un stoc Intel’);

6.4.5 Prețul mediu

Sintaxa este următoarea:

mprc = medprice (highp, lowp)

mprc = medprice ([highp lowp])

mprcts = medprice (tsobj)

mprcts = medprice (tsobj, ParatneterName, ParameterValue, …)

unde:

highp = vectorul prețurilor maxime

lowp = vectorul prețurilor minime

tsobj = serie financiară de timp

Sintaxa:

mprc = medprice (highp, lowp)

permite calculul prețurilor medii mprc, făcându-se media prețurilor maxime (highp) cu cele minime(lowp), în fiecare perioadă.

Sintaxa:

mprc = medprice ([highp lowp])

este asemănătoare cu prima, numai că acum intrarea este o matrice cu două coloane.

Sintaxa:

mprcts = medprice (tsobj)

permite calculul prețurilor medii, avându-se la intrare o serie financiară de timp, care trebuie să conțină cel puțin două serii numite “High” și “Low”. Ieșirea este tot o serie financiară de timp, a cărei serie de timp este identică cu prima și care conține o serie de date numită “MedPrice”.

Sintaxa

mprcts = medprice (tsobj, ParameterName, ParameterValue, …)

acceptă perechi de parametri nume/va1oare în cazul în care seria financiară de timp nu conține două serii numite “High” și “Low”. Valorile va1ide a variabilei ParameterName sunt:

“HighName” și LowName.

Exemplu:

Voi calcula prețurile medii pentru un stoc Intel și le voi atașa împreună cu prețurile maxime și minime.

load Intel.mat

dis Med_price = medprice (dis)

subplot (3, 1, 1)

plot (dis_MedPrice)

title (‘Prețurile medii pentru Intel’)

subplot (3, 1, 2)

plot (dis.LOW);

title (‘Prețurile minime pentru Intel’); subplot (3, 1, 3);

plot (dis.HIGH);

title (‘Prețurile maxime pentru Intel’);

rezultatul este:

fig.20

Indicatorul ‘On balance volume’

Sintaxa este următoarea:

obv = onbalvol (closep, tvolume)

obv = onbalvol ([closep tvolume])

obvts = onbalvol (tsobj)

obvts = onbalvol (tsobj, ParameterName, ParameterValue,…)

unde

closep = vectorul prețurilor de închidere

tvolume = volumul vândut

tsobj = seria financiară de timp

Sintaxa:

obv = onbalvol (closep, tvolume)

calculează OBV-ul prețurilor de închidere (closep) și volumul vândut (tvolume).

Sintaxa:

obv = onbalvol ([closep tvolume])

acceptă o matrice de două coloane, reprezentând (în această ordine) prețurile de închidere (closep) și volumul vândut (tvolume).

Sintaxa:

Obvts = onbalvol (tsobj)

permite calculul OBV folosind Ia intrare o serie financiară de timp (tsobj). Obiectul trebuie să conțină cel puțin două serii numite ‘Close’ și ‘Volume’. Ieșirea obvts este o serie financiară de timp cu aceleași momente de timp ca și seria tsobj și o serie de date numită OnBalVol.

Sintaxa:

obvts = onbalvol (tsobj, ParameterName, ParameterValue,…)

acceptă ca parametri de intrare perechi de valori nume/parametru. Aceste perechi specifică numele seriilor de date de care funcția are nevoie, dacă acestea nu sunt numite Close și respectiv Volume. Parametrii valizi pentru ParameterName sunt: CloseName( numele seriei prețurilor de închidere) și VolumeName (numele seriei volumului tranzacționat). Parametrul ParameterValue este un string care reprezintă numele existente ale seriei de date.

Exemplu:

Voi calcula OBV și voi afișa rezultatele:

load Intel.mat

dis_OnBalVol = onbalvol (dis)

plot (dis_OnBalVol)

title (‘On-Balance Volume pentru un stoc Intel’)

rezultatul este următorul:

On-Balance Volume pentru un stoc Intel

fig.21

6. 4. 7 Rata de modificare a prețurilor Sintaxa este următoarea:

proc = prcroc (closep, nperiods)

procts = prcroc (tsobj, nperiods)

procts = prcroc (tsobj, nperiods, ParameterName, ParameterValue)

unde:

closep = vectorul prețurilor de închidere

nperiods = (opționa1) perioada de diferență(implicit 12)

tsobj = serie financiară de timp

Sintaxa.

proc = prcroc (closep, nperiods)

calculează rata de modificare a prețurilor de închidere closep. Rata de modificare a prețurilor este calculată făcându-se diferența dintre prețul de închidere curent și cel de acum nperiods.

Sintaxa:

procts = prcroc (tsobj, nperiods)

permite ca1culul ratei de modificare a prețurilor, avându-se ca argument de intrare, o serie financiară de timp, care trebuie să conțină cel puțin o serie de date numită “Close”. Ieșirea procts este tot o serie financiară de timp, care are aceeași serie de timp cu seria de la intrare, dar care are o unică serie de date numită “PriceROC”.

Sintaxa:

procts = prcroc (tsobj, nperiods, ParameterName, ParameterValue)

specifică numele seriei de date, dacă acesta este diferit de valoarea implicită. Numele valid al variabilei ParameterName, este “CloseName”.

Exemplu:

Voi ca1cula rata de modificare a prețurilor de închidere a unui stoc Intel și o voi afișa împreună cu prețurile de închidere:

load Intel.mat

dis_PriceRoc = prcroc (dis);

subplot (2, 1, 1)

plot (dis.CLOSE);

title (‘Prețurile de închidere pentru un stoc Intel’);

subplot (2, 1 ‚2);

plot (dis_PriceRoc)

title (‘Rata de modificare a prețurilor de închidere pentru un stoc Intel’)

rezultatul este:

fig.22

6. 4. 8 Trendul prețurilor și al volumului de marfă vândut

Sintaxa este următoarea:

pvt = pvtrend (closep, tvolume)

pvt = pvtrend ([closep tvolume])

pvtts = pvtrend (tsobj)

pvtts = pvtrend (tsobj, ParameterName, Parameter Value, …)

unde:

closep = vectorul prețurilor de închidere

tvolume = vectorul volumului de marfă vândut
tsobj =serie financiară de timp

Sintaxa:

pvt = pvtrend (closep, tvolume)

permite calculul trendului prețurilor și al volumului de marfă vândut, avându-se ca date de intrare vectorul prețurilor de închidere și vectorul volumului de marfă comercializat.

Sintaxa:

pvt = pvtrend ([closep tvolume])

este asemănătoare cu cea de mai sus, numai că acum se acceptă la intrare o matrice de două coloane, cu prețurile de închidere și volumul de marfă comercializat.

Sintaxa:

pvtts = pvtrend (tsobj)

permite calculul trendului prețurilor și al volumului de marfă comercializată, avându-se la intrare o serie financiară de timp, cu cel puțin două serii de date numite “Close” și “Volume”. Ieșirea este tot o serie financiară de timp, care are seria de timp aceeași cu tsobj, dar care are ca serie de date o serie numită “PVT”.

Sintaxa:

pvtts = pvtrend (tsobj, ParameterName, Parameter Value, …)

acceptă ca parametri, perechi de nume/parametru în cazul în care numele seriei de date a seriei de timp “tsobj”, diferă de cele de mai sus. Numele parametrilor ParameterName va1ide Sunt :“CloseName” și “VolumeName”

Exemplu:

Voi calcula trendul prețurilor și al volumului de marfă vândut pentru un stoc Intel și î1 voi a6șa împreună eu prețul de închidere și volumul de marfă vândut.

load Intel.mat

dis_PVTrend =pvtrend (dis)

subplot (3, 1, 1)

plot (dis_PVTrend)

title (‘Trendul prețurilor și al volumului de marfă pentru un stoc Intel’)

subplot(3, 1, 2)

plot (dis.CLOSE);

title (‘Prețurile de închidere pentru un stoc Intel’);

subplot(3, 1 ‚3)

plot (dis.VOLUME);

title (‘Volumul de marfă vândut pentru un stoc Intel’);

Prețul tipic

Sintaxa este următoarea:

tprc = typprice (highp, lowp, closep)

tprc = typprice ([highp lowp closep])

tprcts = typprice (tsobj)

tprcts =typprice (tsobj, ParameterName, ParameterVaiue, …)

unde:

highp = vectorul prețurilor maxime

lowp = vectorul prețurilor minime

closep = vectorul prețurilor de închidere

tsobj = serie financiară de timp

Sintaxa:

tprc = typprice (highp, lowp, closep)

permite calculul prețului tipic, făcându-se media dintre prețul maxim, minim și de închidere, din fiecare perioadă.

Sintaxa:

tprc = typprice ([highp lowp closep])

este asemănătoare cu prima, numai că acum la intrare se acceptă o matrice formată din trei coloane.

Sintaxa:

Tprcts = typprice (tsobj)

calculează prețul tipic, având ca date de intrare o serie financiară de timp cu trei serii de date numite “High”, “Low” și “Close”. Ieșirea este tot o serie financiară de timp, cu seria de timp aceeași cu a seriei de intrare, iar cu seria de date numită “TypPrice”.

Sintaxa:

tprcts = typprice (tsobj, ParameterName, ParameterValue, …)

acceptă perechi de parametri nume/parametru, atunci când numele seriilor de date ale seriei de intrare diferă de valorile așteptate. Numele valide ale valorilor ParameterName sunt:

“HighName”, “LowName”, “CloseName”.

Exemplu:

În următorul exemplu, voi calcula prețul tipic pentru un stoc Intel și voi afișa rezultatul:

load Intel.mat

dis_Typ = typprice (dis);

plot (dis_Typ)

title (‘Prețul tipic pentru un stoc Intel’)

rezultatul este:

Prețul tipic pentru un stoc Intel

fig.23

Rata de modificare a volumului de marfă vândută

Sintaxa este următoarea:

vroc= volroc (tvolume, nperiods)

vrocts = volroc (tsobj, nperiods)

vrocts = volroc (tsobj, nperiods, ParameterName, ParameterValue)

unde:

tvolume = volumul de marfă vândut

nperiods= (opțional) diferența de perioade (implicit 12)

tsobj = seria financiară de timp

Sintaxa:

vroc = volroc (tvolume, nperiods)

permite ca1culul ratei de modificare, avându-se ca date de intrare, vectorul volumului de marfă vândut și variabila nperiods. Această variabilă calculează rata, ca diferența dintre volumul curent și volumul acum nperiods.

Sintaxa:

vrocts = volroc (tsobj, nperiods)

permite calculul ratei de modificare a volumului de marfă vândut, avându-se ca dată de intrare, o serie financiară de timp, care trebuie să conțină volumul de marfă vândut. La ieșire este o serie, care are aceleași momente de timp ca și seria de la intrare, dar care are ca serie de date, rata de modificare numită “VolumeRoc”.

Sintaxa:

vrocts = volroc (tsobj, nperiods, ParameterName, ParameterValue)

acceptă perechi de parametri nume/parametru, atunci când numele seriilor de date a1e seriei de intrare diferă de valorile așteptate. Numele valide ale valorilor ParameterName sunt:

“VolumeName”.

Exemplu:

Voi calcula rata de modificare a volumului de marfă vândut al unui stoc Intel și îl voi afișa împreună cu volumul de marfă vândut:

load Intel.mat

dis_VolRoc = volroc (dis)

subplot (2, 1, 1)

plol (dis_VolRoc)

title (‘Rata de modificare a volumului pentru un stoc Intel’)

subplot (2, 1, 2)

plot (dis.VOLUME);

title (‘Volumul de marfă vândut pentru un stoc Intel’);

Rezultatul este:

fig.24

6. 4. 11 Linia William de acumulare/distribuție

Sintaxa este următoarea:

wadl= willad (highp, lowp, closep)

wadl = willad ([highp lowp closep])

wadlts = willad (tsobj)

wadlts = willad (tsobj, ParameterName, ParameterVaiue, …)

unde:

highp = vectorul prețurilor maxime

lowp = vectorul prețurilor minime

closep vectorul prețurilor de închidere

tsobj = seria financiară de timp

Sintaxa:

wadl= willad (highp, lowp, closep)

permite calculul liniei de acumulare/distribuție William, avându-se la intrare prețurile maxime(highp), minime(Iowp) și de închidere(closep).

Sintaxa:

wadl= willad ([highp lowp closep])

este asemănătoare cu prima, numai că se acceptă Ia intrare o matrice formată din patru coloane.

Sintaxa:

wadlts = willad (tsobj)

calculează linia de acumulare/distribuție William, având ca intrare o serie financiară de timp, care conține trei serii, numite “High”, “Low” și “Close”. Ieșirea este tot o serie financiară de timp, care are o singură serie de date, numită “WillAD” și care conține seria de acumulare/distribuție William.

Sintaxa:

wadlts = willad (tsobj, ParameterName, ParameterValue,…)

accepta perechi de parametri nume/parametru atunci când numele seriilor de date ale seriei de intrare diferă de va1orile așteptate. Numele valide ale va1orilor ParameterNarne sunt:

“HighName”, “LowName”,”CloseName"

Exemplu:

Voi ca1cula linia de acumulare/distribuție William și voi afișa rezultatele:

load Intel.mat

dis_Willad = willad (dis)

plot (dis_willad)

title (‘Linia de acumulare/distribuție William pentru un stoc Intel’)

rezultatul este:

Linia de acumulare/distribuție pentru un stoc Intel

fig.25

Cap. 7

Interfața grafică cu utilizatorul (GUI)

Este folosită pentru a analiza datele unor obiecte fts și a afișa rezultatele fără a se tasta nimic la linia de comandă. GUI permite vizualizarea datelor și a rezultatelor în același timp. Interfața grafică oferă accesul la toate funcțiile fts.

Fereastra principală

Interfața grafică se pornește de la linia de comandă, tastând comanda:

ftsgui.

Meniul principal este format din 6 meniuri: File, Data Analysis, Graphs, Window și Help. Sub meniul principal este o fereastră care afișează pașii pe care utilizatorul îi face.

Meniul FiIe

Meniul File conține comenzi de intrare și ieșire. Se pot citi și sa1va (Load, Save și Save As) flșiere Matlab, fișiere ASCII, precum se pot și importa (Import) fișierele Excel (XLS). Deocamdată Matlab nu suportă și exportul fișierelor Excel.

Meniul File oferă și posibilitatea printării (Page Setup, Print Preview și Print). De asemenea meniul File poate să închidă interfața grafică GUI (Close FTS GUI), sau poate să iasă din Matlab (Exit MATLAB).

Meniul Data

Meniul data oferă o colecție de funcții de manipulare și conversie a datelor. Pentru a folosi orice funcție de aici este bine să ne asigurăm că în “title bar” este afișat obiectul fts dorit.

Meniul Analysis

Meniul Ana1ysis oferă:

• Un set de funcții exponenția1e și logaritmice.

• Funcții statistice (Basic Statistics) care ca1culează și afișează minimul, maximul, media, obiectului fts curent.

• Diferențe de date (Difference) și medii periodice (Periodic Avererage). Difference generează un vector de date care este diferența dintre primul punct și al doilea, al doilea și al treilea etc. Media periodică calculează media unei anumite perioade de timp (de exemplu media pe 5 zile).

• Funcții de analiză tehnică (vezi capitolul precedent) pentru o 1istă a funcțiilor.

La fel ca și la Meniul Data este bine să ne asigurăm că în “title bar” este afișat obiectul fts dorit.

Meniul Graphs

Meniul Graphs conține funcții care afișează grafic obiectul fts curent (conținut în “title bar”). Se pot de asemenea folosi funcțiile interactive charfts din acest meniu.

Meniul Window

Meniul Window afișează ferestrele deschise în cadrul unei sesiuni MATLAB.

Meniul Help

Meniul Help oferă un set standard de linkuri către alte meniuri Help.

ANEXA

date_series = (today:today+ 10)';

data_series = exp(randn( 1, 11 ))'

dates_and_data = [date_series data_series];

fts1 = fints(dates_and_data);

date_series = (today:today+10)';

data_series1 = exp(randn( 1, 11))';

data_series2 = exp(randn( 1, 11))';

dates_and_data = [date_series data_series1 dataseries2];

fts2 = fints(dates_and_data);

dates = (today:today+10)';

data_series1 = exp(randn( 1, 11))';

data_series2 = exp(randn(1, 11))';

data = [data_seriesl data_series2];

fts = fints(dates, data)

dates = (today:today+10)';

data = exp(randn( 1, 11 ))';

fts1 = fints(dates, data, 'First')

dates = (today:today+10)';

data_series 1 = exp(randn( 1, 11 ))';

data_series2 = exp(randn( 1, 11 ))';

data = [data_series1 data_series2];

fts2 = fints(dates, data, {'First', 'Second'})

fts = fints(dates, data, ('First', 'Second'}, 1);

dates = (today:today+10)';

data_series1 = exp(randn( 1, 11))';

data_series2 = exp(randn( 1, 11 ))';

data = [data_series1 data_series2];

fts = fints(dates, data, ('First', 'Second'}, 1, 'Test TS')

disfts = ascii2fts('Intel.dat', 1, 3, 2)

chartfts(dis)

dates = (datenum('05/11/02'): datenum('05/11/02')+ 10)';

data_series 1 = exp(randn( 1, 11 ))';

data_series2 = exp(randn( 1, 11 ))';

data = [data_series1 data_series2];

myfts = fints(dates, data);

srs2 = myfts.series2

srs2_vec = fts2mtx(myfts.series2)

format long g

srs2_mtx = fts2mtx(myfts.series2, 1)

format short

myfts('05/11/02')

myfts.series2('05/11/02')

myfts({'05/11/02', '05/21/02', '05/31/02'))

myfts. series2( {'05/11/02', '05/21/02', '05/31/02'})

myfts ('05/11/02::05/15/02')

myfts.series2('05/11/02::05/15/02')

myfts. series2(1)

myfts.series2([1, 3, 5])

myfts.series2(16:20)

myfts( 16:20)

myfts(end)

newfts = fints(myftsl.dates, fts2mtx(myfts1)/100,{'Open','High','Low','Close'},1, ‘New FTS’)

addup = myfts1 + newfts

subout = myfts1 – newfts

addscalar = myfts1 + 10000

submtx = myfts1 – randn(20, 4)

newfts2 = fints(myfts1.dates,fts2mtx(myfts1)/10000),{'Rat1','Rat2','Rat3',' Rat4'} , 1, 'New FTS')

addother = myftsl + fts2mtx(newfts2);

whrl = ascii2fts('whirlpool.dat', 1, 2, []);

f_whrl = fillts(whrl);

bc_whrl = boxcox(fwhrl);

subplot(2, 1, 1);

hist(fwhrl.Close);

grid; title('Distributie negaussiana');

subplot(2, 1, 2);

hist(bc_whrl. Close);

grid; title('Distributie dupa transformarea Box-Cox');

ibm = ascii2fts('ibm9599.dat',1,3,2);

f_ibm = fillts(ibm,'Spline');

sm_ibm = smoothts(f_ibm);

plot(f_ibm.CLOSE(' 11/01/97: : 02/28/98'), 'r')

datetick('x', 'mmmyy')

hold on

plot(sm_ibm. CLOSE('11/01/97: : 02/28/98'), 'b')

hold off

datetick('x', 'mmmyy')

legend('Filled', 'Smoothed')

title('Stocul IBM inainte si dupa aplicarea functiei Smooth’)

load aur.mat

t0 = fints(sdates, sdata, {'Close'}, 'd', 'Inc');

d0 = fints(divdates, divdata, {'Dividends'}, 'u', 'Inc');

x0 = fints(expdates, expdata, {'Metric'}, 'w', 'Index');

subplot(2, 1, 1);

plot(t0);

title('Seria t0'); subplot(2, 1, 2);

plot(d0);

title('Seria d0');

dadjl = d0;

dadj 1 .dates = dadj 1.dates- 1;

dadj2 =d0;

dadj2.Dividends = 0;

dadj2 = fillts(dadj2,'linear',' 12/31/98');

dadj2('12/31/98') = 0;

dadj3 = [dadj1; dadj2];

dadj3 fillts(dadj3, 'linear', t0.dates);

t0.Spot = t0.Close – fts2mtx(dadj3(datestr(t0.dates)));

tret = (t0. Spot – lagts(t0.Spot, 1)) ./ lagts(t0.Spot, 1);

tret = chfield(tret, 'Spot', 'Return');

h=figure;

plot(t0);

h=figure;

plot(tret);

datestr(d0.dates, 2)

t0(datestr(d0.dates))

t1 = fillts(t0,'nearest′,d0.dates);

tl.freq = ′d′;

tdr = d0./fts2mtx(t1.Close(datestr(d0.dates)))

load Intel.mat

dis_ADOsc = adosc(dis);

plot(dis_ADOsc)

title(′Oscilatorul de acumulare/distributie pentru Intel') pause

h=figure;

load Intel.mat

dis_CHAIKosc = chaikosc(dis);

plot(dis_CHAIKosc)

title(’Oscilatorul Chaikin pentru Intel’) pause

h=figure;

load Intel.mat

dis_C1oseMACD = macd(dis);

dis_OpenMACD = macd(dis, 'OPEN'); plot(dis_C1oseMACD)

plot(dis_OpenMACD)

title('MACD pentru Intel') pause

h=figure;

load Intel.mat

dis_StochOsc = stochosc(dis);

plot(dis_StochOsc)

title(’Oscilatorul aleator pentru Intel’)

pause

h=figure;

load Intel.mat

dis = rmfield(dis,'VOLUME'); % remove VOLUME field

dis_Accel = tsaccel(dis);

plot(disAccel)

title(’Acceleratia pentru un stoc Intel’)

pause

h=figure;

load Intel.mat

dis = rmfield(dis,’VOLUME’);

dis_Mom = tsmom(dis);

plot(dis_Mom)

title(’Viteza uni stoc Intel’)

load Intel.mat

dis_CHAIKvoI=chaikvolat(dis);

plot(dis_CHAIKvo1)

title(’Volatilitatea Chaikin pentru un stoc Intel’)

h=figure;

load Intel.mat

dis_FastStoc = fpctkd(dis);

plot(dis_FastStoc)

title(’Oscilatorul Stochastic rapid pentru un stoc Intel’)

h=figure;

load Intel.mat

dis_Wpctr = willpctr(dis);

plot(disWpctr)

title(’Williains %R pentru un stoc Intel’)

h=figure;

load Intel.mat

dis_NegVol = negvolidx(dis)

plot(disNegvol)

title(’Indexul volumului negativ aI unui stoc Intel’)

h=figure;

load Intel.mat

dis_PosVol = posvolidx(dis)

plot(dis_PosVol)

title(’Indexul volumului pozitiv al unui stoc Intel’)

h=figure;

load Intel.mat

dis_RSI = rsindex(dis)

plot(dis_RSI)

title(’Indexul puterii relative a unui stoc Intel’)

h=figure,

load Intel.mat

dis_ADLine = adline(dis)

plot(dis_ADLine)

title(’Linia de acumulare/distributie a unui stoc Intel’)

h=figure;

load Intel.mat

[disMid dis_Uppr,dis_Lowr]= bollinger(dis);

dis_CloseBolling = [dis_Mid.CLOSE, dis_Uppr.CLOSE,dis_Lowr.CLOSE]; plot(dis_CloseBolling)

title(’Banda Bollinger a preturilor de inchidere pentru un stoc Intel’)

h=figure;

load Intel.mat

dis_HHigh = hhigh(dis)

subplot(2, 1 ‚ 1);

plot(dis_HHigh)

title(’Highest High pentru un stoc Intel’)

subplot(2,1,2)

plot(dis.HIGH);

title(’Preturile maxime pentru un stoc Intel’)

h=figure;

load Intel.mat

dis_LLow = llow(dis)

subplot(2,1,1);

plot(dis_LLow)

title(’Lowest Low pentru un stoc Intel’)

subplot(2,1‚2)

plot(dis.LOW);

title(’Preturile minime pentru un stoc Intel’)

h=figure;

load Intel.rnat

dis MedPrice = medprice(dis)

subplot(3,1‚1)

plot(dis_Medprice)

title(’Preturile medii pentru un stoc Intel’)

subplot(3,1,2)

plot(dis.LOW);

title(’Preturile minime pentru un stoc Intel’)

subplot(3, 1 ‚3)

plot(dis.HIGH);

title(’Preturile maxime pentru un stoc Intel’)

h=figure;

load Intel.mat

dis_OnBalVol = onbalvol(dis)

plot(dis OnBalVol)

title(’On-Balance Volume pentru un stoc Intel’)

h=figure;

load Intel.mat

disPriceRoc = prcroc(dis)

subplot(2, 1, 1)

plot(dis.CLOSE);

title(’Preturile de inchidere pentru un stoc Intel’);

subplot(2, 1 ‚2)

plot(disPriceRoc)

title(’Rata de modificare a preturilor de inchidere pentru un stoc Intel’)

h=figure;

load Intel.mat

dis_PvTrend = pvtrend(dis)

subplot(3,1,1)

plot(dis_PvTrend)

title(’Trendul preturilor si al volumului de marfa pentru un stoc Intel’)

subplot(3, 1 ‚2)

plot(dis. CLOSE);

title(’Preturile de inchidere pentru un stoc Intel’)

subplot(3,1,3)

plot(dis.VOLUME);

title(’Volumul de marfa vandut pentru un stoc Intel’)

h=figure;

load Intel.mat

disTyp = typprice(dis);

plot(dis Typ)

title(’Pretul tipic pentru un stoc Intel’)

h=figure;

load Intel.mat

dis VoIRoc = volroc(dis)

subplot(2, 1, 1)

plot(dis_VolRoc)

title(’Rata de modificare a volumului pentru un stoc Intel’)

subplot(2, 1 ‚2)

plot(dis.VOLUME)

title(’Volumul de marfa vandut pentru un stoc Intel’)

h=figure;

load Intel.mat

dis_Willad = willad(dis)

plot(disWillad)

title(’Linia de acumulare/distributie pentru un stoc Intel’)

Similar Posts