Potřebuji zjistit, jak se chová nákup Put Bear Spreadu s Long Put na ATM strike a vypsanou opcí o tři strike níže, pořizovaný každé pondělí na weeklys opcích s expirací v pátek stejného týdne za posledních pět let na titulu JNJ, k tomu chci zjistit to samé, ale pro třístrikový Call Bull Spread na stejném titulu s Long opcí jeden strike od aktuální ceny, obě zamýšlené strategie pak podrobit testování na různých hladinách Implied Volatility, a pokud bude výsledek uspokojivý, tak stejnou analýzu budu chtít také pro akcii MCD, MSFT a FB. K tomu bych chtěl přidat analýzu osmiletého vypisování Short Put opce ve středu před expiraci dva strike pod aktuální cenou s uzavřením na pátečním Open pro tituly AAPL, SPY a GM a tuto analýzu podrobit sledování, jestli je vhodnější vystoupit v pátek právě na Open v 15:30, nebo na Close ve 22:00. Ještě mě mezitím napadne vyhodnocení měsíčního držení směrového Call Butterfly na SPY za posledních deset let s vyhodnocováním, kam by bylo nejlépe umísťovat nejnižší Long strike. Jak dlouho myslíte, že mi bude taková analýza trvat? S uvařením kávy, vysmrkáním a přečtením nejnovějších příspěvků v diskuzním fóru bych si to troufal stihnout možná během jedné hodiny.

   Nepoužiji k tomu žádný tajuplný a drahý testovací nástroj v podobě nějaké sofistikovaně vymazlené aplikace zakoupené a stažené z webových stránek nějaké pseudovýznamné společnosti, ale využiji k tomu pouze vlastní hlavu, vlastní zkušenosti a znalosti a „značně multiinstrumentální“ aplikaci Excel. V následující minisérii článků ukážu, jak pomocí velmi jednoduchých programátorských pomůcek vyrábět takové analýzy pro originální potřeby každého obchodníka a nemuset sahat po placených a zhusta nepřehledných výtvorech. O co tedy půjde? Ukázat, jak pomocí Excelu, jednoduchých skriptů a volně dostupných dat pro nejrůznější podklady vytvářet nekonečné množství analýz na historických datech s nejrůznějšími vlastnostmi a podmínkami. Nejsem žádný ajťák ani programátor, takže se pro čtenáře, kteří jsou v tomto oboru doma, budou možná zdát mé interpretace, popisky a řešení možná kostrbaté, mě ale vždy dovedly k požadovanému cíli, takže účel, pro který byly vytvořeny světí mé prostředky, prostřednictvím kterých jsem se k němu dobral a nijak se za ně nemám v úmyslu stydět…takže specialisté nechť mi již dopředu prominou..:c). 

   Když jsem před mnoha lety viděl na vlastní oči první VBA skript, který řešil jeden velmi triviální tradingový problém, netušil jsem, jak mi jeho pochopení ulehčí mou vlastí práci a jak nakonec budu základních znalostí schopen využívat. Přiznám se, že nebylo tehdy vůbec snadné osvojit si základní programátorské postupy a metody, protože nebylo mnoho zdrojů, které by se problematikou tvorby VBA skriptů zabývalo. Nakoupil jsem několik odborných publikací a zkoušel navštěvovat několik webů s programátorskou tématikou, abych nakonec vyhodnotil, že většina těchto informačních zdrojů je buď již velmi odborná a vyžadující nějaké minimální programátorské základy nebo prostě tehdy neuměla vyřešit mnou požadované úkoly. Zkoušením, opakováním, prostě cestou „pokus-omyl“ jsem nakonec dospěl do nějakého velmi přízemního stádia a úrovně znalostí, které mohu využít pro řešení základních výpočetních úloh, na které jsou pouze logické funkce Excelu nepohodlné nebo nedostačující. O tyto základy bych se chtěl v článcích podělit a snad ušetřit nějaký čas těm, kteří by si chtěli podobné analýzy vytvářet a mají doposud obavu, že tyto programátorské úkony nezvládnou nebo na jejich zkoumání a aplikaci nemají jednoduše čas. Chtěl bych se oprostit od zabíhání do nějakých zbytečných programátorských specialit, protože to bylo vždy to, co mi na dostupných zdrojích vadilo, proto ukážu jen to, co je (alespoň pro mě) nezbytné pro řešení nejrůznějších tradingových úloh. Pro čtenáře, kterým bude prezentované penzum málo, může dnes posloužit opravdu nepřeberné množství specializovaných webů s problematikou VBA, kde mohou své znalosti a programátorskou zručnost dovádět k větší dokonalosti a budu nakonec také rád, když se o takové znalosti nebo obratnější řešení nejrůznějších programátorských úloh takoví zkušenější nebo zkoumavější čtenáři s námi společně podělí.

   Postup pro seznámení se s principy tvorby VBA kódu jsem si rozvrhnul tak, že nejdříve ukážu, jaké jsou úplné základy práce s tou části Excelu, kde lze takové skripty vytvářet a poté, na jednoduchém konkrétním zadání zamýšleného backtestu prakticky ukážu, jak jsem celou práci postupně tvořil a jak jsem konkrétně po jednotlivých krocích postupoval. Ostatně se mi to osobně také osvědčilo, zkoumání, jak zacházet s VBA jsem odstartoval také na složitějším skriptu, který jsem chtěl pochopit, takže jsem si musel jednotlivé kroky (řádky kódu) nějakým způsobem vysvětlit nebo odvodit, jak fungují, co znamenají a jaká je jejich správná syntaxe. Hned ze začátku musím podotknout, že přestože se bude možná zdát (ze začátku) logika a postupy obtížnými na pochopení nebo zapamatování, nakonec zjistíte, že nejde o nic jiného než o velmi primitivní programátorské kroky založené na jednoduché logice a základních matematických funkcích sčítání, odčítání násobení a dělení…:c)


Je ze mě „Vývojář“ :c)

   Slovo „Vývojář“ má pro mě dost dynamický náboj, protože evokuje představu, že dělám něco fantasticky inovativního, co ještě nikdo přede mnou „nevyvíjel“. Ono to tak ve skutečnosti nakonec při psaní kódu také je, protože do něj vepisujete vlastní myšlenkové pochody a postupy, které mohou být velmi často originální a slouží k řešení nějakého vlastního výpočetního problému. Vývojář je také název sekce Excelu, která zobrazí pracovní plochu pro tvorbu takového kódu a je tak pomyslnou dílnou, ve které budu tyto kódy vyrábět. Spouští se kliknutím na ikonu „Vývojář“ z pásu karet Excelu  

   Pokud na pásu karet nevidím tuto možnost, musím si takovou iniciační ikonu na pás karet přidat volbou z nastavení Excelu v umístění – Soubor/Možnosti/Přizpůsobit pás karet

   Z nabízených možností přetáhnu z levé nabídky nebo potvrdím zatržítkem na pravé straně možnost „Vývojář“. Tím bych měl na pás karet dostat spouštěcí tlačítko pro otevření okna Vývojáře, jehož nabídka bude vypadat následovně.

   Z nabídky možností mě pak budou prozatím stačit za zaznamenání možnosti v červených obdélnících, které budu ke své práci zpočátku nejvíce využívat.


První makro = první VBA skript

   Proniknout do tajů psaní VBA skriptů může mít mnoho důvodů. Hlavními z nich pak je nalézání řešení úloh, které předpřipravené nástroje Excelu neumí nebo mechanicky se opakující procedury s velkým počtem jednotlivých postupných úkonů prováděných často na obrovských objemech dat nejsou nijak nastaveny. Pro prvotní představu zmechanizování nějakého jednoduchého úkonu mohu chtít po svém Excelu, abych měl v buňce A2 otevřeného sešitu zapsána slova „dobré trejdy“, do buňky B3 zapsáno „sestavují“ a v buňce C4 měl uvedeno slovní spojení „VBA skript“. Není nic jednoduššího, jednoduše do vybraných buněk taková požadovaná slova napíšu pomocí klávesnice počítače a nemusím přemýšlet o nějakém programování. Výsledek je následující.

   Mohu si však představit, že budu potřebovat do třiceti devíti různých buněk zapsat různá slova nebo slovní spojení, a to již může působit nejen problémy s orientací mezi buňkami, ale také s možností chyby zvolit správné slovo nebo v něm udělat nějakou pravopisnou chybu. Pokud bych navíc musel buňky v sešitu vymazat a provést stejnou tuto úlohu znovu, byl bych patrně silně otráven. Mohu si tak můj postup s vepisováním určitých slov do určitých buněk, tedy zcela mechanický proces se značným potenciálem udělat chybu, vylepšit právě pomocí „Vývojáře“. Z jeho nabídky při otevřeném prázdném excelovském sešitu kliknu na tlačítko „Zaznamenat makro“

   Pokud takto kliknu na tuto volbu záznamu, otevře se mi okno pro zadání popisku (názvu) vytvářeného makra, tedy postupu, jakým budu do jednotlivých buněk zapisovat předem určená slova a slovní spojení.

   Svou první proceduru a programátorský pokus nazvu „ZapisovaniSlov“ a potvrdím tlačítkem „OK“. Název makra se uvádí striktně bez mezer a české diakritiky. Po potvrzení této volby záznamu začne můj excelovský sešit zaznamenávat všechny mé kroky v otevřeném excelovském sešitu a na příslušném listu, začnu tedy po stisknutí tlačítka záznamu a jeho pojmenování opět do zvolených buněk zapisovat požadovaná slova podle zadaného úkolu. Vyplněním všech tří buněk požadovanými slovy mám úkol splněn a proto budu chtít sled jednotlivých kroků ukončit, toto provedu kliknutím na volbu „Zastavit záznam“

   Tím je práce hotova a mohu nyní tuto proceduru – vyplnění tří buněk zadanými slovy nesčetněkrát opakovat a nemusím přemýšlet, jestli jsem zvolil správné buňky nebo správně bez chyb napsal požadovaný text. Na obrázku níže je postup, jak uvedené buňky, jejichž obsah jsem vymazal, znovu naplním textem podle zaznamenaného sledu jednotlivých kroků.

   Vymazáním obsahu buněk zadáním mazané oblasti myší a potvrzením „Delete“ na klávesnici buňky vyprázdním (1) a kliknu na volbu „Makra“ na pásu nástrojů „Vývojáře“ (2). Tím vyvolám okno s nabídkou všech zaznamenaných maker v mém otevřeném sešitu.

   Mám prozatím pouze jedno makro, které jsem vytvořil, a tím je „ZapisováníSlov“ (1). Toto tedy obsahuje proceduru s vyplněním tří různých textových údajů do tří různých buněk a tuto proceduru chci nyní opakovat, protože jsem buňky již vymazal, takový pokyn pak provedu výběrem makra a kliknutím na povelové tlačítko „Spustit“ (2). Ve zlomku sekundy se procedura vyplnění buněk zaznamenaná do makra provede. Nyní, opojen automatizací zápisu zvoleného textu do zvolených buněk mého otevřeného sešitu, budu chtít také obdobně zautomatizovat proceduru mazání buněk. Budu postupovat stejně, tedy kliknu na „Zaznamenat makro“

  Toto nově zaznamenávané makro pojmenuji, například „MazaniBunek“

   Záznam makra na mazání buněk opět odstartuji potvrzením tlačítka „OK“. Poté již vyberu oblast buněk zaplněnou textem a provedu jejich vymazání stisknutím „Delete“ na klávesnici.

   Po vyprázdnění obsahu buněk dám pokyn k zastavení záznamu „mazacího makra“

  Po tomto úkonu již bude můj excelovský sešit registrovat dvě makra, která mohu libovolně spouštět, abych prováděl zadané procedury vyplňování buněk textem a jejich následné mazání. Vyvolání nabídky volbou „Makra“ na pásu nástrojů „Vývojáře“ vyvolám již známou nabídku seznamu dostupných a mnou vytvořených maker, jejich výběrem a potvrzením „Spustit“ pak budu jednotlivé navolené sledy úloh na svém sešitu provádět.         

   Vyvolávání jednotlivých maker z nabídky „Makra“ a jejich potvrzování tlačítkem „Spustit“ nemusí být zrovna komfortní, zejména v případě, že budu mít v sešitu více těchto maker a mohu tak ztrácet orientaci, co vlastně které makro může znamenat a jakou proceduru vlastně spustí. Takovou situaci mohu vylepšit umístěním „spouštěcího tlačítka“ na plochu listu mého sešitu, kterému přiřadím příslušné makro a toto tak budu spouštět na jedno kliknutí. Na pásu karet „Vývojáře“ kliknu na nabídku „Vložit“ (1) a z výběru možností vyberu tlačítko označené (2).      

   Potvrzením této volby se změní ukazovátko myši na malý křížek, kterým mohu tažením v ploše sešitu vykreslit obdélníkové tlačítko.

   Kliknutím pravým tlačítkem myši na oblast tlačítka vyvolám nabídku možností jeho úpravy, zejména mě bude zajímat možnost přiřadit tlačítku požadované makro. Tato nabídka je v této volbě označena „Přiřadit makro…“ (1). Mohu pak ještě změnit název tlačítka volbou „Upravit text“ (2).

   Volbou „Přiřadit makro…“ otevřu nabídku již vytvořených zaznamenaných maker, ze kterých vyberu a přiřadím nyní zpracovávanému tlačítku. V mém případě budu chtít tímto tlačítkem spouštět zapisování slov do buněk mého excelovské listu.

   Výběr přiřazovaného makra „ZapisovaniSlov“ (1) potvrdím volbou OK (2). Z menu vlastností tlačítka také upravím text na tlačítku, abych měl jasno, jakou proceduru bude tlačítko spouštět. Já obdařím své tlačítko například názvem „Zápis textu do buněk“. Pokud toto provedu, mohu pak kliknutím na interaktivní tlačítko zapsat do buněk mého listu požadované výrazy.

   Stejným postupem mohu vytvořit také druhé tlačítko, kterému přiřadím makro „MazaniBunek“, abych mohl vyzkoušet, jak jednotlivá makra v mém sešitu fungují. Toto druhé tlačítko jsem si nazval „Mazání obsahu buněk“ a ve výsledku pak mohu vidět obě tlačítka například takto.

   Klikáním na tlačítka se bude objevovat a mizet zaznamenaný text ve vybraných buňkách podle mých požadavků. V případě, že budu chtít celý excelovský sešit uložit, musím při ukládání vybrat z možností uložení excelovského sešitu zvolit „sešit Excelu s podporou maker“, aby tato makra zůstala součástí sešitu také při dalším otevření.

   Kde je ale ten VBA skript, o kterém jsem psal v úvodu odstavce? Je třeba připomenout, že zadávání procedur, které budu chtít ve svém sešitu provádět, nebudu řešit záznamy makra tak, jak jsem jej nyní popisoval. Je to jen malý návod, jak si ulehčit práci s nějakým jednodušším problémem a při kterém nechci pronikat do hloubky nějakého programování, může to být ale na této uživatelské úrovni velmi praktická pomůcka. Pokud tedy tvrdím, že s prvním napsaným makrem vzniká první VBA skript, chtěl bych si jej nyní prohlédnout a mohu tak učinit jednoduše. Z pásu nástrojů „Vývojáře“ vyberu možnost „Visual Basic“, kterou potvrdím.

   Touto akcí se propracuji do pracovního prostředí programovacího modulu Visual Basic for Application (VBA) mého Excelu, které bude po několik následujících článků mým domovem. Je tvořeno několika okny, která jsem na obrázku označil.

   Jednotlivé nástroje ve VBA jsou v pásu nástrojů (1). Pro prvotní náhled upozorním na sekci tlačítek, která jsem vyznačil červeným obdélníkem a která suplují výše v článku popsanou klikací proceduru na spuštění vybraného makra. Pomocí těchto tlačítek bude možné tvořenou proceduru (makro) spouštět přímo pomocí tlačítka šipky, zastavovat ji pozastavovacím tlačítkem nebo ji ukončovat tlačítkem ve tvaru malého čtverce. Ve druhém okně mám možnost vidět všechny mé otevřené Excelovské sešity (2). Můj sešit má název Sešit1 a je již označen jako VBA Project (Sešit1.xlsm) (2.1). Mohu pak zjistit, že tento můj excelovský sešit má jeden aktivní list s názvem „List1“ (2.2) a také, že součástí sešitu je jakýsi „Module1“ (2.3). Pro mé aktuální potřeby bude existence Module1 velmi důležitá, protože tento Module1 skrývá v sobě právě naprogramovaná makra, tedy jakési sady VBA skriptů, které si budu sám vytvářet a budou spouštět požadované výpočetní procedury. Sekce označená (3) obsahuje popisky vlastností vybrané části mého sešitu, kliknu-li například na „List1“, objeví se mi v tomto okně vlastnosti tohoto listu, které mohu podle svých potřeb měnit (prozatím nepodstatné). Základní programovací sekce, která bude středobodem mého zájmu, je pak okno VBA označené (4). Tato část obsahuje jednotlivá makra vyjádřená v řádcích psaných pomocí VBA skriptu a tento se pak budu snažit v tomto okně zapisovat, opravovat a spouštět. Mohu již nyní vidět, že můj sešit obsahuje právě dvě makra, která jsem si vytvořil záznamem, tedy makro ZapisovaniSlov (4.1) a makro MazaniBunek (4.2) obě makra jsou pak oddělena černou oddělovací linkou. Pro vyzkoušení nyní mohu kliknout myší do části, kde je skript makra ZapisovaniSlov (4.1) a spustit takto označené makro malou spouštěcí šipkou z panelu (1) v části označené červeným obdélníkem. Tento úkon by měl provést to, co je úkolem takto zaznamenaného makra ZapisovaniSlov vyjádřeném ve VBA skriptu v této části. Zkouším, funguje to bezchybně.

   Module1 je tak místem, kde budu mít zapsán skript pro má dvě dosavadní makra pro vyplňování a mazání textu do buněk mého excelovského sešitu. Na obrázku níže je pak vidět volba možností, která mohu se sekcí Module provádět.

   Kliknutím pravým tlačítkem na řádek Module1 mohu zjistit, že si mohu do svého sešitu přidat další Module (1), mohu tak svá makra třídit podle nějakého svého záměru nebo vlastností, abych je neměl například nepřehledně pouze v jednom Module1. Mám ale také možnost naimportovat jiné makro volbou Insert File… (1) do mého excelovského sešitu, tedy například nějakou staženou vychytávku od nějakého zkušenějšího kolegy nebo prostě libovolný již hotový skript. Importovaný soubor s „cizími makry“ pak vytvoří nový další Module s importovaným obsahem, který mohu ve svém sešitu spouštět (pokud to bude skript dovolovat). Stejně tak mohu svůj obsah nechat vyexportovat na nějaké místo ve svém počítači volbou Export File… (2) a tento soubor pak například odeslat e-mailem kamarádovi k importu do jeho excelovských sešitů. Nakonec mohu celý Module1 také smazat (4) a zbavit se všech maker se svými skripty najednou.

   Pokud nebudu mít ve svém sešitu po otevření sekce Visual Basic žádné Module k dispozici (například při otevření nového prázdného sešitu), tento do něj vložím volbou Insert z hlavní nabídky prostředí Visual Basic.


   Tento úvodní článek popisuje pouze základní vhled do problematiky, jak si přizpůsobit Excelovský sešit pro provádění nějakých komplexnějších výpočtů na větších objemech dat. Ukázal jsem, jak pomocí záznamu několika postupných libovolných úkonů (zapisování slov do buněk a jejich mazání) vzniká VBA skript a kde jej mohu vyhledat, samotného skriptu jsem se však prozatím nedotkl. Je to záměr, ve skutečnosti totiž nebudu vytvářet sled úkonů, abych mohl pozorovat vygenerovaný VBA skript, ale přesně naopak – budu vytvářet VBA skript, abych mi tento v prostředí Excelu generoval požadované výpočetní úkony v požadovaném sledu.

   Proč je vlastně dobré si takové vlastnosti a možnosti Excelu osvojit a zabíhat do míst, která nejsou v Excelu nastavena a která si budu vytvářet sám? Má to minimálně dva dobré důvody. Zjistil jsem, že omezené možnosti Excelu se tímto rozšiřují do nečekaných dimenzí, které mohu využívat nikoliv pouze pro mé tradingové úkony, ale využít je také pro práci v jiných oblastech života spojených s využitím Excelu, ve své firmě, ve své práci atd. Druhým dobrým důvodem, proč takové rozšířené možnosti Excelu znát, je plastičnost přístupu k řešení mých individuálních úkolů. Mohu si tak vymyslet jakýkoliv svůj vlastní tradingový nápad, který pak pouhou velmi drobnou úpravou VBA skriptu mohu vyzkoušet a otestovat a nemuset se spoléhat, že autor nějakého komerčního řešení na takovou možnost testu zapomněl nebo jej prostě nenapadla….:c)       

   Komentáře a příspěvky k tomuto článku prosím směrujte do Diskuzního fóra do tohoto vlákna k tomuto článku nebo do obecnější diskuze o Excelu :c) 

Sleduj facebook, napiš e-mail nebo tweet

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *