AFFA

From EIK wiki

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

  • 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.

AFFA mudel


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