Dane do systemów transakcyjnych

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***

[Głosów:4    Średnia:5/5]

8 Komentarzy

  1. Dapi

    Hmm…
    Jak dobrze pamiętam to BOŚ koryguje kursy akcji o splity i dywidendy, natomiast nie koryguje o prawa poboru.

  2. kathay (Post autora)

    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!

  3. gzalewski

    niekorygowanie o splity to chyba byłoby ekstremum 🙂
    WYkresy na pewno wygladałyby dziwnie

  4. Darkh

    Dapi

    o splity owszem, o dywidendy i prawa poboru niestety nie ;]
    (leniuchy :D)

  5. Bartek

    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

  6. marek

    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

  7. andy

    Jest jakieś dobre forum/strona internetowa o automatycznych systemach transakcyjnych, najlepiej po polsku?

    thx

  8. Mariposa

    No właśnie,

    skąd dane intraday ?

Dodaj komentarz

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

Proszę podać wartość CAPTCHA: *