Program służy do przewidywania wyników na giełdzie. Służy do wyboru najlepszych reguł przewidujących wyniki giełdowe (wzrosty albo spadki akcji analizowanej spółki).Inwestorzy do tego celu używają analizy fundamentalnej oraz analizy technicznej.
Analiza techniczna opiera się na 3 podstawowych założeniach:
Do rozwiązania problemu użyłam programowania genetycznego i analizy technicznej.
Każdy osobnik populacji reprezentuje jakąś strategię przewidywania wzrostów oraz spadków cen akcji.Każdy członek populacji reprezentowany był przez drzewo. Osobniki były ze sobą krzyżowane oraz mutowane.
Powyższy osobnik reprezentuje pewną strategie przewidywania zmian cen akcji. Aby mógł on przewidzieć cenę w x-tym dniu musi znać dane z poprzednich dni. Jeśli average(k) > value(i) to powyższy osobnik dla x-tego dnia przewidzi wzrost cen. W przeciwnym wypadku przewidzi spadek.
Mutacja osobnika polega na zamianie losowo wybranego węzła z nowym wygenerowanym węzłem.
Funkcja przystosowania - Jakość osobników jest oceniana na podstawie funkcji przystosowania. Wartością tej funkcji jest znormalizowana liczba poprawnie przewidzianych zmian dla pewnych danych.
Algorytm został zaimplementowany w Javie.
Algorytm działa dwuetapowo. W pierwszym etapie formuje się najlepsza populacja dla danych przeznaczonych do nauki. W drugim etapie jest ona używana do przewidywania wyników dla danych testowych.
- Wizualizacja przykładowych danych na których działa algorytm:1. Pierwszy etap działania algorytmu - formuje się w procesie ewolucji najlepsza populacja. Na każdym etapie ewolucji są
wybierane do kolejnej populacji osobniki o dobrej funkcji przystosowania.
Powyższy wykres przedstawia jak zmienia się przystosowanie populacji wraz z kolejnymi pokoleniami
2. Drugi etap działania algorytmu - populacja końcowa jest testowana na danych, których wcześniej nie znała
Powyższy wykres przedstawia jak populacja wytworzona w procesie ewolucji w 100 - nym pokoleniu
przewiduje wyniki dla danych testowych.
Poniższe trzy wykresy przedstawiają jakość kolejnych populacji powstałych w czasie trwania ewolucji
Testy opisane poniżej zostały przeprowadzone po to, aby sprawdzić jak podczas procesu ewolucji zmienia się skuteczność przewidywania zmian przez kolejne pokolenia dla nieznanych danych.
Każda z populacji była testowana na 50-ciu zestawach danych przeznaczonych do testów. Każdy z zestawów zawierał dane z 30 sesji. Średnie wyniki dla każdego zestawu testowego i testowanej populacji zostały przedstawione na wykresach.
Jak widać z powyższych wykresów skuteczność przewidywania wzrostów oraz spadków akcji rośnie z pokolenia na pokolenie. Jednak wzrost ten jest dość mały. Populacja wytworzona w 100 - nym pokoleniu niestety nie daje zachwycających wyników, średnio przewiduje ona poprawnie w około 54% przypadków.
Dla problemu wyboru najlepszych strategi gry na giełdzie rozwiązanie korzystające z programowania genetycznego wydaje się być dość sensownym rozwiązaniem. Algorytm przedstawiony przeze mnie generuje reguły, których zastosowanie daje rozwiązania lepsze niż losowe. Celem projektu był uzyskanie właśnie takich wyników. Dużym minusem tego programu jest to że niektóre osobniki nie przedstawiają czasem żadnej rozsądnej strategii. Dużym plusem jest natomiast to że generowane osobniki mogą reprezentować jakieś wskaźniki analizy technicznej.
Pierwotnie algorytm miał wyglądać trochę inaczej. Osobniki zamiast struktury drzewiastej miały być ciągami zero jedynkowymi, w których ostatni bit prognozowałby spadek bądź wzrost ceny, a pozostałe bity mówiłyby czy w danym dniu nastąpił spadek czy wzrost w stosunku do ceny z zamknięcia poprzedniej sesji. Przykładowo osobnik (0111) reprezentuje regułę: jeżeli w (k-3) dniu cena spadła , w (k-2) oraz (k-1) wzrosła to w k-tym dniu cena wzrośnie. Jednak takie rozwiązanie nie brałoby wogóle pod uwagę wielkości wzrostów oraz spadków cen, co było głównym powodem rezygnacji z jego implementacji.