Kalkulator strike / expirace

Vstup

Spotova cena: Put/call: />Auto    />Call    />Put
Cilove datum [YYYYMMDD]: Cilova cena:
Impl. volat. [%]: Bezrizikova urokova mira [%]:
Pomer odberu: Koef. meny:
Strike k testu:
Expirace k testu [YYYYMMDD]:
<< Zpet
$spot) $wtype = 'c'; else $wtype = 'p'; } $tdate = doubleval($tdatet); $vol = doubleval($volt)/100; $ratio = doubleval($ratiot); $curc = doubleval($curct); $rfrate = doubleval($rfratet)/100; echo "

Vysledky

\n"; echo "\n"; $now = time(); $tdated = mktime(12, 0, 0, intval($tdate/100)%100, $tdate%100, intval($tdate/10000)-1900); $timeDiff = $tdated - $now; $timeCoefs = array(1.01, 1.25, 1.5, 2, 3, 4, 6, 10); // Get expirations $expirations = array(); if ($expirationst == "") { // Generate expirations foreach($timeCoefs as $c) { $expirations[] = $now + $c*$timeDiff; } } else { // Get user expirations $a = preg_split("/[, ;]+/", $expirationst); foreach($a as $d) { $expirations[] = mktime(12, 0, 0, intval($d/100)%100, $d%100, intval($d/10000)-1900); } } // Get strikes if ($strikest == "") { // Generate strikes $strikes = array(); for($sc = -8; $sc <= 4; $sc++) { $strikes[] = ($tspot - $spot)*($sc/4)*($wtype=='c'?1:-1) + $spot; } } else { // Get user strikes $strikes = preg_split("/[, ;]+/", $strikest); } // Print first row echo ""; foreach($expirations as $date) { echo ""; } echo "\n"; // Print data $rowNo = 1; $tspots = preg_split("/[, ;]+/", $tspott); foreach($strikes as $strike) { printf("\n", $strike); foreach($expirations as $expiration) { echo "\n"; } $rowNo = 1 - $rowNo; echo "\n"; } echo "
Expirace\n
\nStrike
".strftime("%d. %m. %Y", $date)."
%.2f"; $first = 1; $firstGain = 0; foreach($tspots as $tspot) { $price1 = BlackScholes($wtype, $spot, $strike, getT($now, $expiration), $rfrate, $vol) * $ratio * $curc; $price2 = BlackScholes($wtype, doubleval($tspot), $strike, getT($tdated, $expiration), $rfrate, $vol) * $ratio * $curc; // echo "price1=$price1, wtype=$wtype, spot=$spot, strike=$strike, T=".getT($now, $expiration).", rfrate=$rfrate, vol=$vol
\n"; // echo "price2=$price2, wtype=$wtype, spot=$stpot, strike=$strike, T=".getT($tdated, $expiration).", rfrate=$rfrate, vol=$vol
\n"; if ($price1 == 0) $price1 = 0.001; $gainp = doubleval($price2-$price1)/$price1*100; if ($first) { $firstGain = $gainp; $first = 0; $rrrf = "    "; $rrr = 0; } else { $rrr = $firstGain / -$gainp; $rrrf = " %.2f"; } printf("
P%.2f
N%.2f
Zisk %s%.2f%%$rrrf
\n", $price2, $price1, ($gainp>=0)?"+":"" ,$gainp, $rrr); } echo "
\n"; } ?>

Napoveda

Obecne

Pocita zisk z warrantu pri danem vyvoji (cilove datum / cena) pro ruzne strike a expirace. Warrant je ocenovan na zaklade Black-Scholesova modelu.

Poznamka: Jelikoz se zadava jen jedna hodnota IV, nepocita tento formular s tzv. "volatility smile", ktery ale v praxi existuje. Pokud zadate IV podle te, kterou uvadi emitent u ATM warrantu, budou ITM i OTM warranty drazsi, nez je ukazano, protoze budou mit vyssi IV. Cim vice jsou ITM/OTM, tim bude rozdil volatilit / cen vetsi.

Technicka poznamka: Desetinna cisla zadavejte s desetinnou teckou (0.1), ne s carkou (0,1)!

Parametry

Vysledky

Vysledky jsou ve forme tabulky, kde ve sloupeccich jsou ruzne expirace a v radcich ruzne strike.

V bunce je: