edokumentace: Simulátor investiního rozhodování Umístní hry Hru je možno sehrát na webu http://investice.wz.cz/, kde je k dispozici v php. Na webu je také k dipozici ke stažení tato dokumentace ve formátu pdf a verze hry zpracovaná pro prostedí JRE (Java). Další obsah webu tvoí stránky s instrukcemi pro hráe, top skóre a credits (informace o autorech). Cíl manažerské hry Cílem hry je zjednodušen simulovat vztah mezi rizikem a výnosem pi investování. Existuje pedpoklad, že vyšší výnos znamená také vyšší riziko. Hra má u hráe trénovat schopnost intuitivn rozhodnout o struktue investiního portfolia. Výsledkem hry bude dosažené skóre po 5ti kolech hry. Po nkolika sehrávkách bychom mli pozorovat odlišný vztah k riziku u rzných hrá a také sledovat optimální riziko v rámci modelu na kterém je hra založena. V modelu jsou zakomponovány empiricky pozorované souvislosti mezi riziky v rzných odvtvých. S rostoucím potem sehrávek by ml hrá získávat pehled o tom, jak tyto souvislosti využít pro optimalizaci svého portfolia a dosahovat tak lepšího skóre. Z velké ásti bude ale i tak skóre dílem náhody. Jedním z cíl hry je bourat zažité vnímání rizika, jako negativního jevu (pozitivní riziko) a trénovat u hrá schopnost využít pozitivního rizika. Pro hráe je cílem dosažení nejvyššího skóre za 5 kol. Skóre odpovídá celkovému výnosu, který hrá v kolech získal. Pi dosažení jednoho z deseti nejlepších výsledk se hrá zapíše do Top 10. Hra z pohledu hráe Hra se hraje na 5 kol, která odpovídají každé jednomu roku. Hrá zaíná s výchozím balíkem 100 000 K a možností úvru do 100 000 K (celkem 200 000 K). Tento balík mže jednou za rok rozdlit do rzných odvtví s daným výnosem a rizikem: Index íslo Odvtví Oekávaný výnos Riziko Korelace 1 Farmaceutický prmysl (FP) 10% 10 0 2 Strojní výroba (SV) 9% 15-0,4 3 Nízkonákladová zábava (NZ) 8% 9 +0,1 4 Stavebnictví (ST) 3% 1 +0,4 5 Tžba surovin (TS) 9% 6-0,6 6 Retail (RT) 6% 2-0,2 7 Doprava (DP) 5% 10-0,6 8 Bžný úet 2% 0 0
Informace o korelaci (viz kapitola Mechanismus výpotu výnos po konci kola ) je hrái skryta. Na bžný úet se automaticky ukládají neproinvestované prostedky, pípadn se z nho erpá úvr. Hrá rozdlí svj aktuální balík mezi jednotlivé investiní píležitosti. Má na to asu kolik chce a mže používat libovolné nástroje mimo hru. Zvolí konec kola a hra mu propoítá výnosy z jednotlivých investic a nový aktuální balík. Hrá mže ponechat stávající rozdlení, nebo upravit portfolio a pokraovat ve he. Po posledním kole se hrái zobrazí výsledek. Skóre je zapsáno do výsledkové listiny (Top 10) a hrá se k nmu mže podepsat. Mechanismus výpotu výnos po konci kola Jakmile hrá rozdlí finanní prostedky, které má k dispozici, a stiskne tlaítko "start", nastartuje se následující proces (viz také píloha: Tabulka mechanismus výpotu výnosu): Pes N[E(I);(I)] se vygeneruje výnos prvního základního aktiva, v našem pípad farmaceutického prmyslu, který oznaujeme jako (I) - ímskými íslicemi oznaujeme skutené výnosy jednotlivých aktiv a rovnž je používáme jako indexy pro piazení oekávané výnosnosti, rizikovosti a korelací píslušným odvtvím. Pomocí takto vygenerovaného ísla a následujícího vzorce (I)*vložená ástka se spoítá hodnotu prostedk na konci kola vložených do základního aktiva. Podle vzorce uvedeného v piložené tabulce v buce E3 se spoítá zkorelované riziko pro druhé odvtví (II)*. V tomto pípad využíváme napozorovaných empirických vztah mezi vývojem volatility (rizikovosti) v obou odvtví. ím více se korelace blíží +1, tím více se volatility obou odvtví pohybují stejným smrem. To znamená, že pokud je vysoký rozdíl mezi skutenou výnosností a její stední hodnotou mžeme oekávat obdobn vysoký relativní rozdíl mezi skutenou a oekávanou výnosností i v druhém odvtví. Nutno podotknout, že v obou pípadech hovoíme o rozdílu v absolutní hodnot. Oekávaný rozsah tchto možných odchylek je vyjáden práv rizikem (volatilitou). S využitím takto zkorelovaného oekávaného rizika se pomocí normálního rozdlení N[E(II);(II)*] vygeneruje výnos druhého odvtví (II). Hodnotu prostedk na konci kola vložených do druhého aktiva se spoítá pomocí následujícího vztahu (II)*vložená ástka. Stejným zpsobem se postupn pro zbývající odvtví nejprve propoítá zkorelované riziko dalšího odvtví, které se spolen s oekávaným výnosem dosadí do formule normálního rozdlení a vygeneruje se skutená výnosnost pro dané odvtví v daném roce. Následn se souinem skutené výnosnosti a vložené ástky do píslušného odvtví dopoítá hodnota prostedk ke konci kola a cyklus pokrauje do té doby, než program vypoítá zstatek u posledního aktiva. Na konci posledního kola se sete hodnota všech aktiv a odete se hodnota
aktuálního dluhu vetn úrok a tato ástka pedstavuje finální dosažený výsledek, který uživatel mže v pípad dostatené úspšnosti zanést do top-tenu.
Mechanismus je zjednodušen (jen pro ti investiní píležitosti) znázornn na následujícím schématu:
Programátorská dokumentace Naši hru jsme se rozhodli naprogramovat pomocí skriptovacího jazyka PHP s použitím databázového systému MySQL. Rozhraní naší hry je webové a hra je pístupná na internetové adrese uvedené na poátku tohoto dokumentu. Samotné rozhraní hry se skládá z tchto ástí: Úvodní stránka zde je umístn základní popis hry a dále je tu pak výbr z možností (ve form odkaz), jak dále pokraovat (bu si peíst Nápovdu nebo rovnou spustit Hru). Samotná hra po stisku odkazu Hraj na úvodní stránce se objeví hlavní hrací stránka, která se pak po pevn stanovený poet kol opakuje. Podrobnosti jsou v dalším odstavci. Výsledková stránka podrobnosti viz další odstavce. Definování poáteních hodnot Jako pevn dané poátení vstupy byly zvoleny tyto: oekávaná výnosnost (jednotlivé procenta uvedena v úvodní ásti tohoto dokumentu), riziko (jednotlivé procenta uvedena v úvodní ásti tohoto dokumentu), startovní limit pro investice ve výši 100 000 K, limit pro zadlužení ve form úvru ve výši 100 000 K. poet kol (resp. let), který je nastaven hodnotu 5. Mezi volné ( mnitelné ) vstupy hry patí výše jednotlivých ástek, které jsou investovány do daných odvtví. V prbhu hry se nemní vstupy Oekávaná výnosnost, Riziko a Poet kol. Bhem hry se mní jen penžní limit pro jednotlivé investice, a to v závislosti na výsledku daného kola (bu máme k dispozici limit vtší o zisk nebo menší o ztrátu). Samotná funknost hry Po zadání vstupních hodnot investic pro daná odvtví dochází k tmto postupným krokm (zdrojový kód hlavního skriptu je uveden v píloze): Nejprve probhnou kontrolní skripty je provedena kontrola soutu jednotlivých ástek, který nesmí pesáhnout stanovený limit kola (poátení limit plus úvr). Na základ vstupních parametr (oekávaná výnosnost, riziko) je vypoítáno normální rozdlení pro první odvtví pomocí skriptu Gaussova funkce. Pomocí výsledku normálního rozdlení prvního odvtví dojde k výpotu korelovaných hodnot rizik pro odvtví ostatní. Nov získaná rizika se použijí pro výpoet normálního rozdlení pro ostatní odvtví. Nakonec se provede výpoet hodnot jednotlivých investic a skuteného výnosu za dané kolo. V posledním kole je zpístupnna možnost zapsání se do výsledkové listiny (ta lze zobrazit i na úvodní stránce hry odkazem Topten).
Výstupy hry V prbhu hry jsou výstupy tyto: pvodní hodnoty investic pro daná odvtví, zisk (resp. ztráta) z jednotlivých investic, skutený výnos (v procentech) daných investic, prbžný stav konta. V posledním kole se prbžný stav konta mní na konený stav konta. Dalším výstupem hry je pak již zmínná výsledková listina. Podíl autor na tvorb simulátoru Na simulátoru se podíleli tito lidé následujícím zpsobem: Jakub Kížek: Námt, definice matematického modelu, dokumentace, texty, testování, prezentace. Jií Horník: Námt, dokumentace, texty, testování, prezentace, koordinace. Rudolf Menšík: Programování a programátorská dokumentace. Pínos všech len týmu ke konenému výsledku hodnotíme vyrovnan na 1/3 pro každého.
Mechanismus výpotu výnos po konci kola Odvtví/titul Oekávaná výnosnost E(i) Riziko (i) Korelace s 1.odvtví Výpoet zkorelovaného (i)* Generování výnosu Výsledek generaního procesu Hodnota vloženého kapitálu 1. odvtví (I) E(I) (I) kor (I-I) není teba N[E(I);(I)] - (I) (I)*vložená ástka 2. odvtví (II) E (II) (II) kor (I-II) N[E(II);(II)*] - zkorelované 3. odvtví (III) E (III) (III) kor (I-III) N[E(III);(III)*] - zkorelované 4. odvtví (IV) E (IV) (IV) kor (I-IV) N[E(IV);(IV)*] - zkorelované 5. odvtví (V) E (V) (V) kor (I-V) N[E(V);(V)*] - zkorelované 6. odvtví (VI) E (VI) (VI) kor (I-VI) N[E(VI);(VI)*] - zkorelované 7. odvtví (VII) E (VII) (VII) kor (I-VII) N[E(VII);(VII)*] - zkorelované Bžný úet Pevn stanovena na 2 % E( I ) ( I ) σ ( I ) E( I) ( I ) σ( I ) E( I) ( I ) σ( I ) E( I ) ( I ) σ ( I ) E( I ) ( I ) σ ( I ) E I I σ( I) ( ) ( ) kor II kor I III + 1 σ III = σ III kor I IV + 1 σ IV = σ IV kor I V + 1 σ V = σ V kor I VI + 1 σ VI = σ VI kor I VII + 1 σ VII = σ VII ( I II ) + 1 σ ( II ) = σ ( ) * ( ) ( ) ( ) * ( ) ( ) ( ) * ( ) ( ) ( ) * ( ) ( ) ( ) * ( ) ( ) ( ) * (II) (III) (IV) (V) (VI) (VII) (II)*vložená ástka (III)*vložená ástka (IV)*vložená ástka (V)*vložená ástka (VI)*vložená ástka (VII)*vložená ástka 0 není nutné není nutné není nutné není nutné 1,02*zstatek/dluh na bankovním útu
Píloha hlavní skript hry <?php //kontrola formulare if (!$t1) exit ("Nebyla zadána èástka pro farmaceutický prùmysl!!!"); if (!$t2) exit ("Nebyla zadána èástka pro strojní výrobu!!!"); if (!$t3) exit ("Nebyla zadána èástka pro nízkonákladovou zábavu!!!"); if (!$t4) exit ("Nebyla zadána èástka pro stavebnictví!!!"); if (!$t5) exit ("Nebyla zadána èástka pro tìžbu surovin!!!"); if (!$t6) exit ("Nebyla zadána èástka pro retail!!!"); if (!$t7) exit ("Nebyla zadána èástka pro dopravu!!!"); $soucet=$t1+$t2+$t3+$t4+$t5+$t6+$t7; $ucet=$limitbu-$soucet; $pom=$limitbu+100000; if ($soucet>$limituver) exit ("Souèet jednotlivých èástek pøesahuje povolený limit!!!"); //vypocty - zadani hodnot $q_t1=0.1; $e_t1=0.1; $q_t2=0.15; $e_t2=0.09; $kor_t2=-0.4; $q_t3=0.09; $e_t3=0.08; $kor_t3=0.1; $q_t4=0.01; $e_t4=0.03; $kor_t4=0.4; $q_t5=0.06; $e_t5=0.09; $kor_t5=-0.6; $q_t6=0.02; $e_t6=0.06; $kor_t6=-0.2; $q_t7=0.1; $e_t7=0.05; $kor_t7=-0.6; $e_ucet=0.02; //vypocty - vypocet normalnich rozdeleni function gauss() {$x=random_0_1(); $y=random_0_1(); $u=sqrt(-2*log($x))*cos(2*pi()*$y); $v=sqrt(-2*log($x))*sin(2*pi()*$y); return $u;} function gauss_ms($m=0.0,$s=1.0) {return gauss()*$s+$m;} function random_0_1() {return (float)rand()/(float)getrandmax();} $pom=gauss_ms(); $nor_t1=$pom*$q_t1+$e_t1; $nor_t2=$pom*$q_t2+$e_t2; $nor_t3=$pom*$q_t3+$e_t3; $nor_t4=$pom*$q_t4+$e_t4; $nor_t5=$pom*$q_t5+$e_t5; $nor_t6=$pom*$q_t6+$e_t6; $nor_t7=$pom*$q_t7+$e_t7; //vypocty - vypocet korelovanych hodnot rizik $kor_qt2=((((abs($e_t1-$nor_t1)/$q_t1)-1)*$kor_t2)+1)*$q_t2; $kor_qt3=((((abs($e_t1-$nor_t1)/$q_t1)-1)*$kor_t3)+1)*$q_t3; $kor_qt4=((((abs($e_t1-$nor_t1)/$q_t1)-1)*$kor_t4)+1)*$q_t4; $kor_qt5=((((abs($e_t1-$nor_t1)/$q_t1)-1)*$kor_t5)+1)*$q_t5;
$kor_qt6=((((abs($e_t1-$nor_t1)/$q_t1)-1)*$kor_t6)+1)*$q_t6; $kor_qt7=((((abs($e_t1-$nor_t1)/$q_t1)-1)*$kor_t7)+1)*$q_t7; //vypocty - vypocet hodnot titulu $vysl_t1=$nor_t1*$t1; $vysl_t2=$nor_t2*$t2; $vysl_t3=$nor_t3*$t3; $vysl_t4=$nor_t4*$t4; $vysl_t5=$nor_t5*$t5; $vysl_t6=$nor_t6*$t6; $vysl_t7=$nor_t7*$t7; $vysl_ucet=$e_ucet*$ucet; //vypocty - skutecne vynosy $vynos_t1=$nor_t1*100; $vynos_t2=$nor_t2*100; $vynos_t3=$nor_t3*100; $vynos_t4=$nor_t4*100; $vynos_t5=$nor_t5*100; $vynos_t6=$nor_t6*100; $vynos_t7=$nor_t7*100; $vynos_ucet=$e_ucet*100; $puvsuma=$t1+$t2+$t3+$t4+$t5+$t6+$t7+$ucet; $suma=$vysl_t1+$vysl_t2+$vysl_t3+$vysl_t4+$vysl_t5+$vysl_t6+$vysl_t7+$vysl_ucet+$puvsuma; $prumvynos=(($suma-$puvsuma)/$puvsuma)*100; //vysledky a prehled echo "<table border=3 valign=top align=center>"; echo "<tr><th>odvìtví</th><th>pùvodní èástky (Kè)</th><th>Zisky/ztráty (Kè)</th><th>Skuteèná výnosnost</th></tr>"; echo "<tr><td>farmaceutický prùmysl</td><td align=center>".$t1."</td><td align=center>".round($vysl_t1,2)."</td><td align=center>".round($vynos_t1,1)." %</td></tr>"; echo "<tr><td>strojní výroba</td><td align=center>".$t2."</td><td align=center>".round($vysl_t2,2)."</td><td align=center>".round($vynos_t2,1)." %</td></tr>"; echo "<tr><td>nízkonákladová zábava</td><td align=center>".$t3."</td><td align=center>".round($vysl_t3,2)."</td><td align=center>".round($vynos_t3,1)." %</td></tr>"; echo "<tr><td>stavebnictví</td><td align=center>".$t4."</td><td align=center>".round($vysl_t4,2)."</td><td align=center>".round($vynos_t4,1)." %</td></tr>"; echo "<tr><td>tìžba surovin</td><td align=center>".$t5."</td><td align=center>".round($vysl_t5,2)."</td><td align=center>".round($vynos_t5,1)." %</td></tr>"; echo "<tr><td>retail</td><td align=center>".$t6."</td><td align=center>".round($vysl_t6,2)."</td><td align=center>".round($vynos_t6,1)." %</td></tr>"; echo "<tr><td>doprava</td><td align=center>".$t7."</td><td align=center>".round($vysl_t7,2)."</td><td align=center>".round($vynos_t7,1)." %</td></tr>"; echo "<tr><td>bìžný úèet</td><td align=center>".$ucet."</td><td align=center>".round($vysl_ucet,2)."</td><td align=center>".round($vynos_ucet,1)." %</td></tr>"; echo "</table>"; echo "<br>"; $prom=$kolo+1; $nt1=round($t1+$vysl_t1); $nt2=round($t2+$vysl_t2); $nt3=round($t3+$vysl_t3); $nt4=round($t4+$vysl_t4); $nt5=round($t5+$vysl_t5); $nt6=round($t6+$vysl_t6); $nt7=round($t7+$vysl_t7); $pomsuma=round($suma); if ($prom<6) {echo "<table border=3 valign=top align=center>"; echo "<tr><th>prùbìžný stav konta</th><th>".round($suma)." Kè</th></tr>"; echo "<tr><th>prùmìrná výnosnost za toto kolo</th><th>".round($prumvynos,2)." %</th></tr>"; echo "</table>"; echo "<br>"; echo "<form action=http://investice.wz.cz/vloz2.php method=post>"; echo "<input type=hidden name=suma value=$suma>"; echo "<input type=hidden name=kolo value=$prom>"; echo "<input type=hidden name=st1 value=$nt1>"; echo "<input type=hidden name=st2 value=$nt2>"; echo "<input type=hidden name=st3 value=$nt3>"; echo "<input type=hidden name=st4 value=$nt4>"; echo "<input type=hidden name=st5 value=$nt5>"; echo "<input type=hidden name=st6 value=$nt6>"; echo "<input type=hidden name=st7 value=$nt7>"; echo "<table align=center><tr><td><input type=submit value=dale></td></tr></table>";
echo "</form>";} else {echo "<div align=center><font color=red><b>gratulujeme, úspìšnì jste dokonèil hru!!!</b></font><div><br>"; echo "<table border=3 valign=top align=center>"; echo "<tr><th>koneèný stav konta</th><th>".round($suma)." Kè</th></tr>"; echo "</table>"; echo "<br>"; echo "<form action=http://investice.wz.cz/vlozdotop.php method=post>"; echo "<table align=center><tr><td>zadej jméno:<input type=text name=jmeno value=anonymous></td><td><input type=submit value=topten></td></tr></table>"; echo "<input type=hidden name=konto value=$pomsuma>"; echo "</form>";};?> V Praze 14.12.2006 Autoi Jakub Kížek (xkrij23@vse.cz) Jií Horník (xhorj37@vse.cz) Rudolf Menšík (xmenr04@vse.cz)