Strangle / straddle kalkulator
require('../../src/bs_func.php');
// Get parameters
if (isset($_GET["spott"])) $spott = $_GET["spott"];
else $spott = "";
if (isset($_GET["cxt"])) $cxt = $_GET["cxt"];
else $ctx = "";
if (isset($_GET["pxt"])) $pxt = $_GET["pxt"];
else $pxt = "";
if (isset($_GET["cratiot"])) $cratiot = $_GET["cratiot"];
else $cratiot = "1";
if (isset($_GET["pratiot"])) $pratiot = $_GET["pratiot"];
else $pratiot = "";
if (isset($_GET["ccurct"])) $ccurct = $_GET["ccurct"];
else $ccurct = "";
if (isset($_GET["pcurct"])) $pcurct = $_GET["pcurct"];
else $pcurct = "";
if (isset($_GET["cexpt"])) $cexpt = $_GET["cexpt"];
else $cexpt = "";
if (isset($_GET["pexpt"])) $pexpt = $_GET["pexpt"];
else $pexpt = "";
if (isset($_GET["rfratet"])) $rfratet = $_GET["rfratet"];
else $rfratet = "";
if (isset($_GET["cperct"])) $cperct = $_GET["cperct"];
else $cperct = "50";
if (isset($_GET["cvolt"])) $cvolt = $_GET["cvolt"];
else $cvolt = "";
if (isset($_GET["pvolt"])) $pvolt = $_GET["pvolt"];
else $pvolt = "";
// Copy values
if ($cxt == "") $cxt = $pxt;
if ($pxt == "") $pxt = $cxt;
if ($cratiot == "") $cratiot = $pratiot;
if ($pratiot == "") $pratiot = $cratiot;
if ($ccurct == "") $ccurct = $pcurct;
if ($pcurct == "") $pcurct = $ccurct;
if ($cexpt == "") $cexpt = $pexpt;
if ($pexpt == "") $pexpt = $cexpt;
if ($cvolt == "") $cvolt = $pvolt;
if ($pvolt == "") $pvolt = $cvolt;
?>
Vstup
<< Zpet
if (($spott != "") && ($cxt != "") && ($cexpt != "") && ($rfratet != "") && ($cvolt != "")) {
echo "Vysledky
\n";
echo "\n";
// Print first row
echo "Spot cena | ";
$startdate = time();
$cexp = intval($cexpt);
$pexp = intval($pexpt);
$cexpd = mktime(12, 0, 0, intval($cexp/100)%100, $cexp%100, intval($pexp/10000)-1900);
$pexpd = mktime(12, 0, 0, intval($pexp/100)%100, $pexp%100, intval($pexp/10000)-1900);
$stopdate = min($cexpd, $pexpd);
// echo "cexp=$cexp, pexp=$pexp, cexpd=$cexpd, pexpd=$pexpd, stopdate=".strftime("%d. %m. %Y",$stopdate)."
\n";
for($date = $startdate; $date < $stopdate; $date += 30*86400) {
echo "".strftime("%d. %m. %Y", $date)." | ";
}
echo "
\n";
// Get values
$spot = doubleval($spott);
$cx = doubleval($cxt);
$px = doubleval($pxt);
$cratio = doubleval($cratiot);
$pratio = doubleval($pratiot);
$ccurc = doubleval($ccurct);
$pcurc = doubleval($pcurct);
$cvol = doubleval($cvolt)/100;
$pvol = doubleval($pvolt)/100;
$rfrate = doubleval($rfratet)/100;
$callRatio = doubleval($cperct)/100;
// Compute current price & portfolio
// echo "spot=$spot, cx=$cx, rfrate=$rfrate, cvol=$cvol, cratio=$cratio, ccurc=$ccurc, t=".getT($startdate, $cexpd)."
\n";
$csprice = BlackScholes('c', $spot, $cx, getT($startdate, $cexpd), $rfrate, $cvol) * $cratio * $ccurc;
$psprice = BlackScholes('p', $spot, $px, getT($startdate, $pexpd), $rfrate, $pvol) * $pratio * $pcurc;
$ncall = $callRatio / $csprice;
$nput = (1-$callRatio) / $psprice;
// echo "ncall=$ncall, nput=$nput
\n";
// Print data
$rowNo = 1;
for($vc = 8; $vc >= -8; $vc--) {
$perc = ($cvol+$pvol)*$vc/8*100;
$price = $spot * (1+$perc/100);
printf("%.2f [%s%d%%] | \n", $price, ($perc>=0?"+":""), intval($perc));
for($date = $startdate; $date < $stopdate; $date += 30*86400) {
if ($date == $startdate) {
// Initial prices
$cprice = $csprice;
$pprice = $psprice;
}
else {
// Compute prices
$cprice = BlackScholes('c', $price, $cx, getT($date, $cexpd), $rfrate, $cvol) * $cratio * $ccurc;
$pprice = BlackScholes('p', $price, $px, getT($date, $pexpd), $rfrate, $pvol) * $pratio * $pcurc;
}
$pval = $cprice*$ncall + $pprice*$nput;
printf("P%.2f \nC%.2f %.2f\n | \n", $pprice, $cprice, $pval);
}
$rowNo = 1 - $rowNo;
echo "
\n";
}
echo "
\n";
}
?>
Napoveda
Obecne
Pocita teoreticky vykon straddle / strangle kombinace warrantu / opci na zaklade Black-Scholesova modelu.
Pokud je parametr u call i put, staci vyplnit jeden, pokud je druhy prazdny, doplni se z prvniho.
Parametry
- Spotova cena: Aktualni cena aktiva
- Strike: Strike warrantu
- Expirace: Expirace warrantu ve formatu YYYYMMDD (napr. 20071220)
- Impl. volat.: Implicitni volatilita pouzita emitentem (lze zjistit treba v BJ, na Euwaxu), v procentech
- Pomer odberu: Pomer odberu warrantu. Pouze pro konrolu ceny s trzni, neni nutno vyplnovat.
- Koef meny: Koeficient meny - warranty na US indexy v EUR je jeste nutne prepocitat pomerem EUR / USD. Pouze pro konrolu ceny s trzni, neni nutno vyplnovat.
- Bezrizikova urokova mira: Bezrizikova urokova mira v procentech. Vetsinou se bere mira centralni banky.
- Procentualni podil callu: Podil prostredku za ktere byl nakoupen call warrant. Klasicky straddle je 50:50, ale pak je vysledek vyvazen v neprospech vzestupu - timto parametrem to lze kompenzovat.
Vysledky
Vysledky jsou ve forme tabulky, kde je dana hodnota warrantu a portfolia
(straddle / strangle) pro dane casove okamziky a spotovou cenu. Data jsou po
triceti dnech, od aktualniho okamziku do expirace warrantu.
Spot hodnot aktiva je vzdy devet, od aktualni hodnota + 2x implicitni volatilita do aktualni hodnota - 2x implicitni volatilita.
V bunce je:
- Vlevo nahore hodnota call warrantu
- Vpravo nahore hodnota put warrantu
- Na spodnim radku hodnota portfolia
Hodnoty v druhem sloupecku - aktualni datum - jsou vzdy pro aktualni spotovou
cenu, ne pro cenu urcenou v prvnim sloupecku. Proto jsou vsechny stejne. Pokud
jste spravne vyplnili pomer odberu a koeficient meny, muzete tyto hodnoty
vyuzit pro kontrolu aktualni ceny, za kterou emitent warranty nabizi.
require('../footer.html');
?>