Cyber-trep

Wkraczamy w lata 20-te! Rok 2019 się kończy, a wraz z nim pierwszy okres mojego regularnego inwestowania. O tym jak sobie pomagam w automatyzowaniu tego procederu zacząłem pisać w poprzednim, a zarazem pierwszym wpisie o programowaniu w Pythonie (link). Wiem na pewno, że jedna osoba z grona moich znajomych zaczęła interesować się giełdą po lekturze poprzedniego spisu. To jest mój wielki sukces! Zainspirowany postanowiłem kontynuować i jeszcze w tym roku uchylić kolejnego rąbka tajemnicy. Dziś o czymś przyjemnym, czyli rejestrowaniu dokonanych transakcji. Oczywiście nie ręcznie (a na pewno nie w 100% manualnie), ale z wykorzystaniem małego automatu napisanego w języku Python.

W Wężu na Parkiecie ujawniłem, że zbieram dane o wynikach sesji na rynku głównym GPW i zapisuje je do bazy MSSQL postawionej na moim komputerze. W tej samej bazie zapisuje sobie całą historię inwestowania: transakcje kupna i sprzedaży papierów wartościowych, jak również (co w przypadku mojego planu inwestowania ważniejsze) wypłaty dywidend i odsetek.

Dwa słowa o moim planie: jest prosty. W kilku słowach więcej: zakłada on comiesięczne odkładanie nadwyżki pieniędzy, aby raz na kwartał kupić papiery wartościowe za zgromadzoną kwotę. Mój kolega, z którym wywiad możesz obejrzeć np. w tym filmie , ma na to swoją nazwę. Bardzo przypadła mi ona do gustu, a chodzi o określenie tej strategii mianem „strategii inwestycyjnej trepa”. Inwestuję w dwa główne rodzaje papierów wartościowych: obligacje korporacyjne oraz akcje spółek dywidendowych, w szczególności takich, które co najmniej kilka lat z rzędu dzielą się wypracowanym zyskiem z akcjonariuszami.

Dygresja: dlaczego żołnierza określa się mianem „trepa” możecie dowiedzieć się z bardzo ciekawego artykułu, który ukazał się na łamach Polski Zbrojnej.

Historię transakcji przechowuję w bazie w dedykowanej tabeli. Dodanie wpisu wiąże się z uruchomieniem kwerendy SQL o mniej więcej takiej strukturze:

INSERT INTO TABELA (COL1, COL2, COL3, …) VALUES (VAL1, VAL2, VAL3, …)

Poza samą komendą SQL trzeba zrobić też parę innych rzeczy, np. włączyć Microsoft SQL Server Management Studio, połączyć się z bazą, otworzyć nowe okno kwerendy… Uznałem, że mi się nie będzie chciało tego robić i w końcu przestanę zapisywać transakcje i system upadnie. W związku z powyższym postanowiłem napisać sobie kod w Pythonie, który uprzejmie zapyta mnie o szczegóły transakcji i odpowiednio je zapisze w bazie.

Połączenie z bazą i egzekucję komend SQL opisałem już w Wężu na Parkiecie. W moim nowym programiku wykorzystuję dokładnie ten sam schemat, więc ten element pominę. Opiszę natomiast jak zbudowałem proces interakcji z użytkownikiem (czyli mną samym).

Po pierwsze chciałem mieć możliwość weryfikacji, czy dobrze podałem detale transakcji oraz możliwość dokonania więcej niż jednego wpisu do bazy przy jednym uruchomieniu programu. Dlatego większość kodu programu zawarta jest w klauzuli while zakładającej że używana przez nią zmienna restart ma wartość True. Jeżeli na pytanie od programu, czy podane detale są transakcji są prawdziwe, użytkownik odpowie, że tak – zmienna restart zmieni wartość na False i program się zakończy. Jeżeli zaś coś się będzie nie zgadzało lub też będę chciał załadować nową transakcję – zmienna nie zmieni wartości i kod uruchomi się ponownie. Na diagramie procesu wygląda to mniej więcej tak:

Drugą ważną dla mnie kwestią jest jako taka elastyczność w udzielaniu odpowiedzi na pytania stawianie przez program. Skoro mam używać go raz na kwartał przy kupowaniu papierów wartościowych (na ten moment nie zakładam sprzedawania) plus ileś tam razy w roku zapisując historię dywidend i odsetek, to jest szansa granicząca z pewnością, ze zapomnę jakie są zrozumiałe dla programu odpowiedzi. Dlatego dla każdego pytania postanowiłem przygotować kafeterię. I tak na przykład problem typu tak / nie powinien być również rozwiązywalny jedną literką t czy też słowem prawda. Koncepcja mojego programu wymaga trzech słowników/kafeterii zawierających możliwe odpowiedzi na pytania zamknięte tak / nie, o typ transakcji oraz o rodzaj papieru wartościowego jakiego transakcja dotyczyła.

Rozbudowując trochę proces pokazany wyżej, ujawnia się klika pętli, z których można wyjść podając odpowiedź pasującą do listy oczekiwanych przez program. Pętle te są, podobnie jak w przypadku „restartu” uzyskane przez zastosowanie klauzuli while i zmiennej, którą tym razem nazwałem success. Proces wygląda w całości tak:

Ostatecznie po trzecie: wszystkie pytania i dodatkowe zdania „wypowiadane” przez program mają stwarzać atmosferę współpracy z komputerem. Warto przecież czasem porozmawiać z kimś o podobnym poziomie inteligencji. Chociaż przecież testu Turinga mój programik nie przeszedłby z pewnością 🙂 Jeżeli nie wiesz co to za test – poczytaj tu na Wikipedii, a potem obejrzyj film Ex Machina i odpowiedz sobie na pytanie, czy Ava jest człowiekiem. Obejrzałem ten film raz, a wciąż mam ciary jak sobie ten film przypomnę 😀

Kontynuując nową świecką tradycję z Węża na Parkiecie, kod udostępniam na GitHubie (link na dole wpisu). I jeszcze mała zajawka na koniec: wspominałem wyżej, że do bazy z wykorzystaniem programu-bohatera tego wpisu łąduję detale transakcji kupna i sprzedaży papierów wartościowych oraz informacje o dywidendach i odsetkach. Odsetki pochodzą rzecz jasna z posiadanych obligacji korporacyjnych. W kolejnym wpisie dotyczącym mojego kodowania w Pythonie na cele inwestycyjne, podzielę się sposobem na szybkie i bezbolesne zbieranie informacji o obligacjach korporacyjnych aktualnie notowanych na rynku Catalyst. Do zobaczenia!

GPW (this link opens in a new window) by Ukasz123D (this link opens in a new window)

Experimenting with Python for the sake of gathering and analysing Warsaw Stock Exchange data

4 odpowiedzi do “Cyber-trep”

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *