AFFA: Difference between revisions
Line 197: | Line 197: | ||
''' 14. detsember''' | ''' 14. detsember''' | ||
* koodi silumine | * koodi silumine | ||
''' 17.detsember''' | |||
* lõpptoote esitlemine | |||
''' 04. jaanuar''' | ''' 04. jaanuar''' |
Revision as of 23:44, 4 January 2013
Kirjeldus
Eesmärgiks on luua tarkvara AFFA (Automated Financial and Fundamental Analysis), mis teostab USA börsil kaubeldavate ettevõtete finants- ja fundamentaalanalüüsi. Tarkvara automatiseerib finantsanalüüsi jaoks vajalike finantsnäitajate väljaarvutamise ja võimaldab automatiseeritult teoreetilise mudeli järgi välja arvutada ettevõtte väärtuse ning võrrelda seda hetke turuhinnaga. Kokkuvõttes oleks tarkvara abiks ettevõtete finantsanalüüsi ja väärtuse hindamise teostamisel, automatiseerides enamiku tegevusi ning kuvades andmeid kujul (sealhulgas graafilisel), mis võimaldaksid finantsnäitajate võimalikult kiiret analüüsi ja trendide märkamist.
Tööjaotus
Tööjaotus
- Tõnn Talpsepp (projekti juht): Tarkvara idee ja põhiprintsiibid, andmete sisselugemine, arvutuste programmeerimine
- Madis Allikmaa: Kasutajaliides ja disain, andmete sisselugemine, vaatemudelid
- Ranno Rass: Rühmatööks vajalike vahendite (google docs ja github) seadistamine ja kasutajagrupi moodustamine, graafikute esitamise lahenduse väljatöötamine
- Marek Leinjärv: Sissekanded projekti Wiki kodulehele, Programmi analüüs ja skemaatiline kuva, arvutuste programmeerimine
Analüüs
Eesmärgiks on luua tarkvara AFFA (Automated Financial and Fundamental Analysis), mis teostab USA börsil kaubeldavate ettevõtete finants- ja fundamentaalanalüüsi. Programmi loomise ajendiks sai reaalne vajadus sellise abivahendi järele investeerija igapäevases töös. Tarkvara automatiseerib finantsanalüüsi jaoks vajalike finantsnäitajate väljaarvutamise ja annab tulemuseks põhjaliku tabeli koos graafikutega finantsnäitajate muutustest läbi ajaloo ja tuleviku prognoosid, mille põhjal saab asjaga kursis olev investeerija teha oma otsused. Samuti kuvab rakendus väheste väljadega tulemuse, mis näitab firma arvutatud väärtust ja võrdleb seda hetke turuhinnaga ja annab tavainimesest väikeinvestorile soovituse kas osta või müüa antud firma aktsiaid.
Kogu lahenduse võib jagada 4 põhiossa:
Algandmete sisselugemine esialgsel versioonil toimub XML failist, täiustatud versioonil otse Ycharts.com lehelt. XML failist andmete lugemine osutus meile jõukohasemaks ja seetõttu otsustasime alustada sellise sisendiga, et oleks reaalseid sisseloetud andmeid, mille põhjal edasi arendada oma prorgammi. Kuna Ycharts.com lehelt tõmmatavad andmed on saadaval ainult XLS formaadis, siis selle teisenduse jätsime juba täiendatud versiooni koosseisu. Sisseloetud algandmete hoidmisel kaalusime kahte varianti: indekseeritud maatriksis või eraldi muutujates. Valisime eraldi muutujad, et arusaamine nende edasisest liikumises oleks lihtsam.
Teises etapis arvutatakse algandmete põhjal välja perioodide muutused ja kuvakakse analüüsiks vajaliku andmeväljad koos arvutatud muutustega ühtses tabelis. Samuti arvutatakse välja finantsandmetest tuletatud eeldused järgnevate arvutuste tarvis, mis kuvatakse vahevaatel ja kasutajal on võimalik neid eeldusi muuta vastavalt oma soovile.
Kolmandas etapis arvutatakse algandmetest ja sisestatud eeldustest välja vahetulemused. Neid tulemusi esialgse plaani kohaselt ei kuvata vaid kasutataks neljandas etapis.
Neljandas etapis küsitakse Yahoo Finance lehelt börsiettevõtte ajaloolise aktsiahinnainfo ja käivitatakse väljundi arvutaja, mis võrdleb vahetulemustes salvestatud firma väärtust turuhinnaga ja kuvab lõppanalüüsi tulemused koos soovitusega osta või müüa.
Kokkuvõttes oleks tarkvara abiks ettevõtete finantsanalüüsi ja väärtuse hindamise teostamisel, automatiseerides enamiku tegevusi ning kuvades andmeid kujul (sealhulgas graafilisel), mis võimaldaksid finantsnäitajate võimalikult kiiret analüüsi ja trendide märkamist. Rakendust saavad kasutada erinevate teadmiste baasiga investeeijad.
Funktsionaalsus:
Valmis tarkvara teeb kindlasti:
- võtab andmed kasutaja standardformaadis XML faildest
- tõmbab Yahoo Finance lehelt börsiettevõtte ajaloolise aktsiahinnainfo
- kuvab tõmmatud finantsandmed kompaktsemal kujul, arvutades välja erinevad suhtarvud, kvartaalsed muudud ja osakaalud (suhtarvude-, horisontaal ja vertikaalanalüüs)
- laseb kasutajal vormi sisestada eeldused diskonteeritud rahavoogude mudelil põhineva väärtuse hindamise jaoks, pakkudes automaatselt välja lineaarselt finantsandmetest tuletatud sisendid
- genereerib sisestatud eelduste ja varasemate finantsandmete põhjal rahavoogude prognoosid järgnevateks aastateks
- arvutab tõmmatud andmete ja sisestatud eelduste põhjal välja diskonteeritud rahavoogude mudelil põhineva ettevõtte väärtuse
Kui jääb aega üle:
- genereerib graafikud (joon- ja tulpdiagrammid) finantsandmete visualiseerimiseks (5 erineva tüübi finantsandmete jaoks)
- genereerib graafikuid mudeli poolt leitud ettevõtte väärtuse, tulevikuprognooside ja reaalse ajaloolise aktsiahinna kohta
- tõmbab YCharts.com lehelt USA börsiettevõtete finantsandmed, XLS formaadis
- tõmbab finantsandmed ka finance.google.com lehelt
- võimaldab käsitsi rahavoogude prognoose korrigeerida ning seeläbi arvutab ümber leitud ettevõtte väärtuse
- teostab DuPont analüüsi
- tõmbab andmeid ja võrdleb tulemusi ka sama tööstusharu teiste ettevõtete kohta (nt suhtarvudel põhinevad näitajad: P/E, P/B, P/S jne)
- teostab tundlikkuse analüüsi diskonteeritud rahavoogude mudeli puhul
Esialgne plaan klassidest AFFA rakenduses:
FinData: sisuliselt entity klass andmete ühe perioodi andmete hoidmiseks. Sisaldab kõiki vajalikke finantsandmeid (nii algfailidest võetud kui nende põhjal väljaarvutatud suhtarve) mudelile sobivas formaadis. Võimalik, et sisaldab ka meetodeid suhtarvude arvutamiseks (pigem need küll eraldi klassis).
FinDataDAO: FinData klassi data access object. Koondab kokku erinevate perioodide FinData andmeobjektid ja sisaldab meetodeid andmete pärimiseks FinData objektidest. Hoitakse eraldi FinData objekte nii kvartaalsete kui aastaste andmete jaoks.
RatioCalculator: suhtarvude väljaarvutamiseks vajalik nö worker klass. Võtab andmed FinData objektidest, arvutab nende põhjal suhtarvud, millega updeiditakse FinData objektide vastavad väljad.
YChartsScraper: võtab ühendust YCharts.com lehega, on võimeline sealt tulevad andmed sisselugema.
GoogleFScraper: võtab ühendust finance.google.com lehega, on võimeline sealt tulevad andmed sisselugema.
YahooFScraper: võtab ühendust finance.yahoo.com lehega, on võimeline sealt tulevad andmed sisselugema (meie puhul on mõistlik lugeda Yahoo Finance lehelt sisse ajalooline hinnainfo ja ettevõtte profiili-info - s.o. nimi, majandussektor jms).
FinDataAdapter: adapter tüüpi klass, mis vastavalt talle antud käsklusele võtab ühendust soovitud Scraper klassiga ning loeb sealt tulevad andmed standardsele kujule FinData objektidesse.
FinAnalysisVM: view model klass, kutsub FinDataAdapter objekti, mis võtab kasutaja poolt määratud allikast andmed ja salvestab need FinData objektidesse. FinAnalysisVM loeb finantsandmetest FinDataDAO kaudu enda jaoks vajaliku ning konverteerib selle finantsanalüüsi kuvamise jaoks sobivale kujule nt Observable Collectioniteks (muuhulgas arvutab välja nt aastased muudud finantsnäitajates jne). Lisaks kutsub välja DcfInput klassi, mis arvutab välja väärtuse hindamise mudeli jaoks vajalikud sisendid.
DcfInput: saab DcfVM käest kasutaja sisestatud andmed (kui neid on), võtab FinDataDAO käest finantsandmed ja PriceData käest hinnaandmed ning arvutab nende kõigi automaatselt välja (nö naiivne prognoosimine ehk a’la lineaarne prognoos, varasemate keskmiste leidmine) eeldused (sisendid) DCF (discounted cash flow model) mudeli jaoks.
DcfCalculator: võtab FinDataDAO kaudu finantsandmed, DcfInputi-st mudeli ülejäänud sisendid ning arvutab välja nendest tulenevad rahavoogude prognoosid, mis nö salvestatakse DcfData objektidesse.
DcfData: sisuliselt entity tüüpi klass, mis hoiab endas DCF mudeli jaoks vajalikke andmeid.
DcfDataDAO: klass, mis hoiab endas kollektsiooni DcfData objektidest (eraldi kvartaalsed ja aastased) ning omab meetodeid vajalike andmete lugemiseks.
DcfModel: võtab DcfDataDAO kaudu andmed ja DcfInputist mõne täiendava sisendi ja arvutab välja ettevõtte väärtuse.
DcfVM: võtab kasutajalt mõned sisendparameetrid (kui need on määratud), kutsub välja nendega DcfInput objekti, seejärel DcfCalculator objekti ning DcfModel objekti. Saab nendest andmekollektsioonid ja paneb need kasutajale näitamiseks sobival kujul Observable Collectionitesse või mujale.
PriceData: entity tüüpi klass, mis hoiab endas analüüsitava ettevõtte ja võrdlusindeksi (nt S&P 500 indeksi) aktsiahinna aegridu.
PriceDataAdapter: adapter tüüpi klass, mis kutsub välja YahooFScraperi ja salvestab sealt tulevad ajaloolised hinnaaegread PriceData objekti.
ProfileData: entity tüüpi klass, mis hoiab endas ettevõtte profiili andmeid (nt ettevõtte nimi, majandussektor jms).
ProfileDataAdapter: adapter tüüpi klass, mis kutsub välja YahooFScraperi ja salvestab sealt tulevad ettevõtte profiili andmed ProfileData objekti.
ChartGenerator: klass, mis sisaldab meetodeid ja muud vajalikku, et graafikuid genereerida.
Prototüüp
Prototüüp asub siin: [1]
Lõpptoode
Lõpptoode asub siin: [2]
Kasutusjuhend asub siin: [3]
Proovimiseks vajalikud andmefailid asuvad siin: [4]
Log
25.oktoober
- idee arutamine
28. oktoober
- Wiki lehe loomine
29. oktoober
- Meeskonna koosolek
30. oktoober
- Google docs grupi loomine
31. oktoober
- tööülesannete jagamine
- programmi funktsionaalsuse väljatöötamine
- otsus selle kohta mida rakendus peab tegema ja mida veel lisada
1.november
- vaadete prototüübi loomine
2.november
- analüüsi koostamine
3.november
- suhtarvude arvutuste esialgne versioon
4.november
- analüüsi estamine
- finantsanalüüsi vaate tabel täielikult andmetega täidetud
5.november
- Meeskonna koosolek
10.november
- valmis andmete tõmbamine lehelt Yahoo.com
- YCharts.com andmete tõmbamise toorik
11.november
- retsensiooni koostamine
12.november
- Meeskonna koosolek
14. november
- valmis YCharts.com formaadis exceli failide XML-i teisendamine
15. november
- graafikute loomise esialgne versioon
16. november
- valmis YCharts.com andmete sisselugemine (XLS->XML->rakendus)
19.november
- Meeskonna koosolek
22. november
- Meeskonna koosolek
- valmis prognooside arvutaja
23. november
- valmis osade graafikute kuvamine
24. november
- kasutajaliidese muutmine ja täiustamine
- prognooside arvutaja täiendamine
25. november
- veel muutusi ja täiustusi kasutajaliideses
- valmis veel graafikute kuvasid
26. november
- Meeskonna koosolek
- prognooside arvutaja täiendamine
- graafikute kuvamise täiustamine
29. november
- valmis sisendite arvutaja esimene versioon
3.detsember
- Meeskonna koosolek
5. detsember
- veel muutusi ja täiustusi kasutajaliideses
- veahalduse täiustamine
- arvutuste täiendused ja parandused
10.detsember
- Meeskonna koosolek
12. detsember
- YCharts.com tuleva sisendi salvestamine XML failidesse
- graafikute täiendused
14. detsember
- koodi silumine
17.detsember
- lõpptoote esitlemine
04. jaanuar
- lõpptoote retsensiooni koostamine