Při vývoji opčních strategií jsme narazili na problém s rychlostí výpočtu skriptů. V některých opčních strategiích využíváme výpočet řeckých písmenek (z Black-Scholesovy rovnice) a náš software k tomu využíval software pro statistiky s názvem R. „Erko“ je mocná zbraň, bohužel nám však výrazným způsobem zpomaloval výpočty.

„Vždyť vy ale neobchodujete rychlé algoritmy ne, tak na co rychlost,“ odtušil kamarád na mé stížnosti na rychlost skriptů. Kamarád měl pravdu, jenže ono nejde o rychlost skriptu při samotném obchodování. Jde o rychlost skriptu při testech na historických datech. Přece jen je rozdíl, jestli každý test strategie zabere tři sekundy nebo tři minuty. Při vývoji strategií dochází ke spuštění skriptu stokrát a víc a tam se projeví každé zdržení.

Studovali jsme způsoby, jakými lze zkrátit dobu běhu daného skriptu. Nejvíc času zabíraly funkce z balíku R. Jejich vynecháním lze zrychlit skript až 20×. Vytvořili jsme si proto vlastní funkce pro výpočet implikované volatility, teoretické opční ceny a dalších parametrů. Naše funkce jsou mnohem rychlejší než volání R a dokonce poskytují správnější výsledky.

Určení nejpomalejších míst ve skriptu

Zjišťovali jsme, jak jednotlivé funkce ve výpočtu ovlivňují délku běhu programu. K tomu byl využitý modelový skript, kde se pro soubor 10 podkladů při testovacím období jednoho roku každý den počítaly tržní ceny podkladu i opcí a jejich další parametry, zejména historické i implikované volatility (HV, IV). Časová náročnost skriptu v závislosti na tom, jaké všechny hodnoty se počítají a vypisují, je uvedena níže

Popis Čas výpočtu
Počítá a vypisuje se pouze HV a tržní ceny opcí 3 s
Do skriptu se zavede funkce pro výpočet ceny opce z volatility 22 s
Do skriptu se zavede funkce na výpočet implikované volatility 73 s
Spočítají se i všechny řecké symboly 78 s

Z tabulky je patrné, že k časové náročnosti nejvíc přispívají funkce z balíku R. Řešili jsme tedy otázku, jestli bychom se mohli v rámci úspory času bez těchto funkcí obejít.

Ano, mohli. Vytvořením vlastních funkcí. A tak se také stalo, vytvořili jsme je.

Vlastní funkce na výpočet Black-Scholesovy rovnice

Ověřovali jsme naše funkce s nezávislým výpočtem v Excelu. Zpočátku nám bylo divné, že teoretická cena zjištěná pomocí funkce z R dává výsledek systematicky nižší, než při počítání naším způsobem.

    V následujícím grafu je zobrazen rozdíl naší spočítané ceny call opce a ceny spočítané funkcemi z R pro opce at the money, out of the money a in the money. Pro všechny druhy opcí je rozdíl zhruba stejného řádu, tzn. největší relativní chyba vzniká u out of the money opcí.

    V obou grafech výše znázorňuje vodorovná osa čas. Tento průběh nápadně připomíná průběh dvanácti denní historické volatility (viz graf níže, jeho prudké nárůsty očividně souvisí s earnings). Jde o akcii MSFT.

    Nakonec jsme pomocí dalších testů ověřili, že tento nesoulad je způsobený různými způsoby, jakými se normalizuje na roční hodnoty HV a IV. Jednou se používal pro výpočet HV počet pracovních dní v roce, tj. 252, jindy počet kalendářních dní, tj. 365!

    Tím pádem ve výpočtu vznikala systematická chyba při porovnání HV a IV. Přestože se nejednalo o zásadní problém, je samozřejmě vhodnější vše napravit a obojí počítat stejným způsobem. To nyní pomocí nově definovaných vlastních funkcí můžeme. Rozdíl mezi IV počítanými různými způsoby je v grafu níže:

    Modře je IV počítaná pomocí balíku R, červeně je IV spočtená naší vlastní funkcí při použití normalizace na rok s 365 dny (modrá a červená jsou prakticky totožné), zelená je IV při použití 256 dní, šedá je historická volatilita počítaná za 12 dní. Asset je „T“. V nejspodnějším grafu jsou pomocí dvojice úseček ohraničeny earnings.

    Vývoj opčních strategií nebo obecně strategií na obchodování na burze je složitý právě z toho důvodu, že při něm narážíte na tisíc a jednu takových drobností. Pozitivní ale je, že ve výsledku se posouváme dopředu a strategie jsou funkční jak pro nás, tak pro naše partnery.

    Autor studie: Mgr. Martin Šubr