Praktikumitöö: aktsiahinnad

Allikas: Lambda

On vaja kirjutada käsurea rakendus, mis avab kasutajaliidese akna, kust on võimalik vaadata valitud aktsia graafikut valitud perioodiks ning kuvada samas kaks moving average graafikut selle aktsia jaoks.

Tutvu kindlasti aktsiagraafiku saitidega, näiteks http://finance.yahoo.com, (vaata kindlasti detailgraafikuid ka: neile saad lihtsale graafikule peale klikkides (või näiteks otse siia vajutades) ja http://stockcharts.com

Konkreetsemad nõuded

Kasutaja sisestab teksti- ja valikuväljadele:

  • alguskuupäeva: päeva, kuu, aasta (vaikimisi üks aasta tagasi)
  • lõpukuupäeva: päeva, kuu, aasta (vaikimisi täna)
  • aktsiasümboli: näiteks F
  • graafiku x-telje punkti valiku: päev/nädal/kuu (vaikimisi päev)
  • esimese moving average päevade arvu (vaikimisi 50, võib tühjaks jätta, siis ei joonistata)
  • teise moving average päevade arvu (vaikimisi 200, võib tühjaks jätta, siis ei joonistata)

NB! Seejuures

  • kuupäevavahemiku väljad ja stiili võid ise valida
  • aktsiasümboli väli ja moving average väljad on lihtsalt väikesed tekstiväljad
  • graafiku punkti valikuks soovitan valikuboksi kolme väljaga

Kasutaja vajutab "Joonista!" nupule

Seepeale asub programm tööle ja teeb järgmist:

  • Kontrollib sisestatu korrektsust (aktsiasümbol sisestatud, kuupäevavalik sisestatud), kuid ei kontrolli, kas aktsiasümbol on reaalselt eksisteeriv ja kuupäevavahemik sisuliselt OK.
  • Kui on viga, näitab kasutajale graafkapinnale veateadet.

Kui sisestatu on OK:

  • Teeb arvumassiivi oodatava suurusega (tee igaks juhuks suurem!)
  • Moodustab URL-i (liites stringe kokku)
  • Avab URL-i ja loeb saabuvad read.
  • Kontrollib, kas tuli OK tabel: kui ei, joonistab graafikapinnale veateate.
  • Võtab igast reast välja "Close" tulba väärtuse ja salvestab massiivi.
  • Kontrollib, kas saadud andmeid saab joonistada (kui graafik ei mahu ära, siis joonistab graafikapinnale veateate).
  • Joonistab graafiku

Graafiku joonistamise detailid/nõuded

  • Graafik olgu lineaargraafik (vertikaalsel teljel arvude vahed samasuured, mitte ülalt kitsamad)
  • Graafikapinna alumine äär peab vastama antud perioodis esinenud KÕIGE MADALAMALE hinnale ja ülemine äär antud perioodis esinenud KÕIGE KÕRGEMALE hinnale. Seega peab graafikujoon puudutama nii alumist kui ülemist äärt (ilusam on jätta paaripiksliline vahe)!
  • Leidmaks neid äärmusi, käi sisseloetud massiiv kõigepealt läbi ja otsi äärmusväärtused välja.
  • Graafik on joongraafik, kus iga väike sirge seob kahe punkti (päeva, nädala, kuu) KOHENDATUD SULGEMISHINDADE (adjusted close) väärtusi. Näiteks, kui kahel kõrvutisel päeval on sulgemishinnad samad, siis neid ühendab horisontaalne sirge.
  • Kohendatud sulgemishind võtab arvesse splitte ja dividende ja modifitseerib vanu hindu (järgmistes peatükkides kirjas, kust selle hinna saab).
  • Moving average graafikud on samasugused joongraafikud.
  • Graafik peab algama joonistuspiirkonna vasakust äärest ja lõppema paremal: kui päevi vähem, tuleb teha päevadel suuremad vahed.
  • Vertikaalteljele peab kirjutama arvväärtused alumisele ja ülemisele äärele.
  • Horisontaalteljel peab olema kirjas alguskuupäev ja lõpukuupäev: vahekuupäevi ei ole vaja.

Moving average: mis see on ja kuidas arvutada

Moving average on jooksev keskmine, mis on arvutatud kui antud päevale eelneva N päeva keskmine hind. See on üks lihtsamaid ja levinumaid tehnilise analüüsi töövahendeid.

Hea ülevaate ja lihtsa õpetuse leiad lehelt http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_averages Lisaks võid vaadata ka keerulisemat ja üldisemat seletust http://en.wikipedia.org/wiki/Moving_average

Sinu rakendus peab joonistama "simple moving average", mitte "exponential moving average".

Programmi suuremad osad

Neli põhosa:

  • Kasutajaliides (aken, nupp, valikud, tekstiväli, graafikapind jne)
  • URL-i kokkupaneku ja võrgust lugemise osa (hindu loetakse võrgust justnagu harilikku faili kettalt)
  • Hindade teksti lugemise, "close" numbriks tegemise ja massiivi salvestamise osa
  • Graafika osa (näitab tulemuse nii graafiku kui (algus- ja lõpukuupäevad) tekstina välja)


Kasutajaliides: milline see peab olema

Programmi käivitamisel avaneb aken, kus on järgmised komponendid:

  • Programmi nimi kuskil ülaääres (mõtle ise välja!)
  • Kuupäevavahemiku väljad ja valikuboksid.
  • Aktsiasümboli sisestusväli.
  • Päeva/nädala/kuu valikuboks.
  • moving average kaks sisestusvälja
  • Joonista! nupp.
  • Graafikapind

NB! Iga välja ees või kohal peab olema label, kus on lühike tekst selle kohta, mida sinna väljale tuleb kirjutada.

Leia ise sobiv viis komponentide paigutamiseks! Paigutus peab viks ja loomulik välja nägema, mitte lihtsalt kõik komponendid ühes jorus.


Aktsiahinnad: kust, milliseid ja kuidas lugeda

Aktsiahindu peate lugema saidilt finance.yahoo.com.

Tutvu veidi selle saidiga. Mine näiteks Fordi aktsiat vaatama (sisesta tekstiväljale F ja vajuta "get quotes" nupule) . Avaneval Fordi aktsia lehel vasakus menüüs üpris ülal, "Quotes" all näed linki "Historical prices". Vajuta sinna. Avanevas aknas näed kuupäevavaliku välju, valikut "Daily, Weekly, ..." ja nuppu "Get Prices". Nupule vajutamisel ilmub lehele tabel hindadega.

NB! Tabeli all on link "Download to spreadsheet". Kui sinna vajutad, saad csv faili, mille saab näiteks Exceliga lahti.

Sellesama lingi kaudu peabki sinu programm hindu lugema.

Kui vaatad seda linki täpsemalt, näed, et seal on cgi parameetrid

   s=..., mis sisaldab aktsiasümbolit (tikkerit),
   a=..., b=..., c=...., mis sisaldavad alguspäeva, kuud ja aastat,
   d=..., e=..., f=...., mis sisaldavad lõpupäeva, kuud ja aastat,
   g=..., mis on kas täht d (päeva kaupa), täht w (nädala kaupa)
         või täht m (kuu kaupa). 
   ignore=.csv, mis on alati sama.

NB! Kuude nummerdus on vahemikus 00...11

Näiteks, fordi aktsia (F) periood 1.jaanuar.2000 - 23.oktoober.2004, päeva, nädala ja kuu kaupa:

Sinu rakendus peab niisiis:

  • taolise stringi kasutaja poolt sisestatud väljade järgi ise kokku panema
  • avama selle stringi kui URL-i
  • lugema sisse kõik saabuvad read
  • kontrollima, kas read olid OK või on tegu veaga
  • joonistama kas graafiku või veateate.

Sisseloetavast failist veel:

Kui parameetrid olid OK ja ühendus töötas, saad taolise faili:


   Date,Open,High,Low,Close,Volume,Adj Close
   2008-10-23,2.16,2.16,1.92,2.00,71748200,2.00
   2008-10-22,2.19,2.21,2.07,2.10,43719800,2.10
   2008-10-21,2.22,2.31,2.13,2.17,51350700,2.17
   2008-10-20,2.55,2.61,2.32,2.33,44998900,2.33
   2008-10-17,2.25,2.54,2.16,2.43,65637000,2.43
   2008-10-16,2.48,2.48,2.05,2.27,69276700,2.27
   2008-10-15,2.52,2.55,2.29,2.30,54042400,2.30
   2008-10-14,2.97,2.97,2.40,2.45,82762600,2.45
   2008-10-13,2.98,2.98,2.31,2.39,121924900,2.39
   ...
     

Pane tähele, et esimene on päiserida, eraldajaks on komad.

Sind huvitavad ainult viimases - Adj Close - tulbas olevad arvud.

Juhul, kui Yahoo sait ei saa sinu parameetritest aru (näiteks, on sisestatud olematu aktsiasümbol) siis saad veateate, taolisel kujul tekstina:

   <!doctype html public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
   <html><head><title>Yahoo! - 404 Not Found</title><style>
   ....
   

Sinu rakendus peab aru saama, kas tuli OK tabel või hoopis veateade. Veateate korral peab ta kasutajale graafiku asemel veateate joonistama (veateate teksti võid vabalt ise välja mõelda).

Lisaülesanne

Lisaks eelnevas kirjeldatule võid teha lisaülesande, mis annab täiendavalt ühe punkti. Lisaülesande sisuks on teha graafik hiirele pidevalt reageerivaks: graafikul näidatakse vastavalt hiire asukohale punkti ja kuvatakse graafiku üleval ääres sellele punktile vastav kuupäev ja hind, täpselt nagu sellel graafikul