Wpis poniższy to odpowiedź na wielokrotnie zadawane mi pytanie o źródła i edycję danych do testów strategii mechanicznych.
Podzielmy je na 3 najczęściej używane rodzaje, w zależności od rynków, które opisują:
1/ Kontrakty terminowe
Ze względu na konieczną rzetelność w wynikach testów, z danymi do kontraktów jest nieco kłopotów. Ich poprawność w zakresie dokładności i ciągłości chronologicznej to tylko jedna sprawa. Dużo ważniejsze znaczenie dla wyników testowanych systemów mają luki powstające przy rolowaniu kolejnych serii czyli sposób tworzenia wykresów kontynuacyjnych.
Pierwsza zasada – twórz i testuj takie wykresy kontynuacyjne jakie używasz w realnym tradingu (albo dopasuj trading do wykresu). Jeśli rolujesz serie ostatniego dnia przy wygasaniu to w ten sam sposób dokonuj zmian na wykresie przy dopisywaniu danych z kolejnej serii.
Zasada druga – testuj te wykresy kontynuacyjne, które logicznie pasują do procedur zastosowanych w kodzie systemu. Chodzi głównie o to by nie testować systemów, w których występują działania polegające na mnożeniu czy dzieleniu, na danych gdzie serie rolowane są według dodawania/odejmowania. Więcej o tym problemie pisałem w dwóch wpisach w historii:
https://blogi.bossa.pl/2008/04/11/wykresy-kontynuacyjne-kontraktow/
https://blogi.bossa.pl/2008/03/28/o-zmianach-procentowych/
Aby ustrzec się pułapki „śmieci wrzucasz- śmieci wychodzą” (garbage in-garbage out) trzeba być może utrzymywać wykresy rolowane na różne sposoby i korzystać z nich tak by do danego kodu użyć odpowiednio i poprawnie sklejanych danych. Trzeba pamiętać przy tym, że nie tylko w naszym własnym kodzie czają się pułapki (jak wspomniane mnożenie/dzielenie), ale również w używanych wskaźnikach, które są już domyślnie podawane w programie do testów. Jeśli ATR jest uśredniany dla 25 dni to luka nie będzie aż tak istotna dla poprawności jego odczytu jak przy ATR z 3 dni.
Dla kontraktów amerykańskich używam danych z tradingbloxa:
http://www.tradingblox.com/tradingblox/free-historical-data.htm
gdzie nowa seria jest dopisywana zawsze określoną ilość dni przed wygasaniem a poprzednie korygowane o luki.
Polskie kontrakty zaciągam oczywiście z Bossa:
http://bossa.pl/index.jsp?layout=mstock&page=0&news_cat_id=706&pkind=metastock
a ponieważ są tam serie rolowane na 2 sposoby więc używam zawsze tej, która nie zgrzyta z kodem, ale mam też swoją własną serię rolowaną przez mnożenie/dzielenie na lukach.
2/ Forex i CFD
Tutaj najprostsza zasada, którą mogę rekomendować brzmi:
Staraj się używać danych brokera, u którego działasz na rachunku.
Bossa udostępnia swoje również:
http://bossafx.pl/index.jsp?layout=fx_8&page=0&news_cat_id=3064
Dane z różnych źródeł/platform mogą różnić się z kilku powodów. Przede wszystkich z okazji różnic w kwotowaniach i transakcjach, a także sposobu gromadzenia- część brokerów magazynuje dane według kursów średnich, inni według kursów kupna. Na to nakładają się luki weekendowe – brokerzy zamykają i rozpoczynają przerwę od piątku do niedzieli w różnych godzinach. Ewentualnie przesunięcia mogą czasem również wypływać z różnic w czasie zamykania sesji codziennych i rozliczania wówczas depozytów/punktów swapowych.
W zasadzie przy danych dziennych nie powinno mieć to większego znaczenia, dobry system musi przetrwać drobne rozbieżności by móc zaufać mu. Stabilny algorytm powinien zresztą radzić sobie z dużo większymi zawieruchami, zwykle zresztą wyniki tradingu realnego i tak są dużo niższe niż w hipotetycznych testach. Problem może być jednak kontrola pozycji rzeczywiście zajętej w stosunku do tej wynikającej z danych ściąganych z innego źródła. Ale dobrze od czasu do czasu puścić kontrolnie system na „obcych” szeregach czasowych.
Oczywiście dane intra będą już wolną amerykanką w zakresie tych różnic, nie mówiąc już o szeregu błędów i dziur. W bossa można dane minutowe/godzinowe ściągać samodzielnie.
3/ Akcje
Wbrew pozorom sprawa nie jest prostsza ponieważ sporo problemów dostarczają wszelkie splity, dywidendy, prawa poboru itd. Podobnie jak luki przy rolowaniu serii kontraktów generują one bóle głowy, być może nawet większe niż w kontraktach. Z jednej strony pozostawianie tych danych bez korekty spowoduje pojawienie się w backtestach nadzwyczajnych zysków lub strat. Z drugiej – korekta uniemożliwi prawidłowe generowanie wyników kiedy w kodach pojawiają się działania mnożenia/dzielenia.
Dla zobrazowania wykres KGHM poniżej. Widać 2 serie kursów zamknięcia – korygowaną i bez korekty:
Obie zaczynają się i kończą w tym samym punkcie (końcówki się nałożyły więc być może nie widać tego dokładnie, dlatego informuję), wszystko pomiędzy może szaleńczo się różnić jeśli spółka prowadzi aktywne działania na własnych papierach.
To, którą serię wybrać, staje się ponownie funkcją celu czyli zależy od tego co mamy w kodzie, który chcemy zweryfikować.
BOŚ kursów historycznych akcji nie koryguje, dzięki czemu ceny stamtąd wydobyte mają swoją realną wartość. Syntetyczne serie udostępniane przez znane serwisy tracą ową realność, ale nadają się do części backtestów programowych.
Ale być może Czytelnicy znają i chcieliby się podzielić swoimi trikami, które pozwolą radzić sobie z tymi obstrukcjami w jeszcze inny sposób?
***Kat***
8 Komentarzy
Dodaj komentarz
Niezależnie, DM BOŚ S.A. zwraca uwagę, że inwestowanie w instrumenty finansowe wiąże się z ryzykiem utraty części lub całości zainwestowanych środków. Podjęcie decyzji inwestycyjnej powinno nastąpić po pełnym zrozumieniu potencjalnych ryzyk i korzyści związanych z danym instrumentem finansowym oraz rodzajem transakcji. Indywidualna stopa zwrotu klienta nie jest tożsama z wynikiem inwestycyjnym danego instrumentu finansowego i jest uzależniona od dnia nabycia i sprzedaży konkretnego instrumentu finansowego oraz od poziomu pobranych opłat i poniesionych kosztów. Opodatkowanie dochodów z inwestycji zależy od indywidualnej sytuacji każdego klienta i może ulec zmianie w przyszłości. W przypadku gdy materiał zawiera wyniki osiągnięte w przeszłości, to nie należy ich traktować jako pewnego wskaźnika na przyszłość. W przypadku gdy materiał zawiera wzmiankę lub odniesienie do symulacji wyników osiągniętych w przeszłości, to nie należy ich traktować jako pewnego wskaźnika przyszłych wyników. Więcej informacji o instrumentach finansowych i ryzyku z nimi związanym znajduje się w serwisie bossa.pl w części MIFID: Materiały informacyjne MiFID -> Ogólny opis istoty instrumentów finansowych oraz ryzyka związanego z inwestowaniem w instrumenty finansowe.
Hmm…
Jak dobrze pamiętam to BOŚ koryguje kursy akcji o splity i dywidendy, natomiast nie koryguje o prawa poboru.
Na wykresie wyżej dane niekorygowane pochodzą z BOŚ. Nie działam z systemami na rynku akcji więc mogę się mylić, ale w poniedziałek przepytam ludzi w bossa i potwierdzę jak wygląda to korygowanie.
thx Dapi!
niekorygowanie o splity to chyba byłoby ekstremum 🙂
WYkresy na pewno wygladałyby dziwnie
Dapi
o splity owszem, o dywidendy i prawa poboru niestety nie ;]
(leniuchy :D)
odnosnie Forexu to troche pobieznie temat zostal przedstawiony. Z mojego doswiadczenia bardzo wazna (jak nie najwazniejsza) kwestia jest jakosc modelowania danych. Dane brokera maja zazwyczaj mniej niz 80-90% – a w niektorych przypadkach spotkalem sie z 30%. Najwazniejsze to miec dane z jakoscia 99%. Mam na mysli glownei systemy na krotkich interwalach dlatego zawsze staram sie zdobyc dane tickowe z ta najwyzsza jakoscia
pytanie w gdzie znaleźć dane do różnych instrumentów jak towary, surowce, waluty, indeksy EM, ETFy, (poza stooq.pl) – a dodatkowo dane min 5 min dla tych instrumentów
Jest jakieś dobre forum/strona internetowa o automatycznych systemach transakcyjnych, najlepiej po polsku?
thx
No właśnie,
skąd dane intraday ?