Zastosowania sieci neuronowych predykcja - giełda LABORKA Piotr Ciskowski
AKCJE INDEKS WIG20
plik giełda-wig.xlsx : dane: indeks WIG od 1991 do 2005 ok. 3000 sesji bez ostatniej szalonej hossy dla każdej sesji: - indeks open/high/low/close + zmiana% - obroty + zmiana% analiza: wykresy długie i krótkie, z całości i z części proste podsumowanie statystyczne: min, max, średnia itp. skąd brać dane: z biur maklerskich, np. www.bossa.pl - dane tekstowe w formacie Metastocka z programów platform transakcyjnych, np. Metatrader Centrum historii
Przykład 1 PREDYKCJA NAIWNA FUNKCJE TOOLBOX OWE
przykład 1. predykcja naiwna funkcje toolbox owe źródło: własne Naucz sieć przewidywać przyszłe notowania indeksu WIG20 na podstawie notowań przeszłych wejścia: wyjście: wartość indeksu dziś wartość indeksu wczoraj wartość indeksu przedwczoraj wartość indeksu jutro Użyj funkcji toolbox owych MATLABa
przykład 1. predykcja naiwna funkcje toolbox owe źródło: własne skrypt wigstudpredykcjanaiwnafunkcjetoolbox.m : dane: indeks WIG od 1991 do 2005 dla każdej sesji: - indeks open/high/low/close + zmiana% - obroty + zmiana% wskazówki, co w jakiej kolejności robić: wybór danych wejściowych preprocessing / skalowanie danych przygotowanie zbioru uczącego podział danych uczących na ciągi: uczący, sprawdzający i testujący wybór architektury sieci utworzenie / inicjalizacja sieci nauka sieci na ciągach: uczącym/sprawdzającym sprawdzenie działania sieci na ciągu testującym
przykład 1. predykcja naiwna funkcje toolbox owe źródło: własne clear all; WIG = [... % DATA OPEN HIGH LOW CLOSE zmiana% VOL zmiana% 19910416 1000.00 1000.00 1000.00 1000.00 0.00 3.960 0.0 ; 19910423 967.70 967.70 967.70 967.70-3.23 54.630 1279.55 ;... 20050131 25858.64 26010.14 25804.16 25992.99 0.78 387246.372-38.03 ; 20050201 25988.00 26313.54 25978.94 26297.25 1.17 675357.745 7 ] ; % ----------------------------------------------------------------------- % predykcja naiwna % % - wejścia sieci: - notowanie dziś % - notowanie wczoraj % - notowanie przedwczoraj % - żądane wyjście: - notowanie jutro
przykład 1. predykcja naiwna funkcje toolbox owe źródło: własne 3 x 104 Wszystkie dane uczace - indeksy 2.5 2 1.5 1 0.5 0 0 500 1000 1500 2000 2500 3000 15 x 105 Wszystkie dane uczace - obroty 10 5 0 0 500 1000 1500 2000 2500 3000
przykład 1. predykcja naiwna funkcje toolbox owe źródło: własne 3.5 x 104 Odpowiedzi sieci - przed uczeniem 3 2.5 2 indeks 1.5 1 0.5 0-0.5 0 500 1000 1500 2000 2500 3000 nr przykładu
przykład 1. predykcja naiwna funkcje toolbox owe źródło: własne 3 x 104 Odpowiedzi sieci - przed uczeniem 2 1 indeks 0-1 -2-3 0 500 1000 1500 2000 2500 3000 nr przykładu
przykład 1. predykcja naiwna funkcje toolbox owe sieć 1 źródło: własne Podaj liczbę neuronów w warstwie ukrytej: 10 Podaj maksymalną liczbę epok uczących: 1000 Podaj docelowy błąd MSE: 0.001
przykład 1. predykcja naiwna funkcje toolbox owe sieć 1 źródło: własne Podaj liczbę neuronów w warstwie ukrytej: 10 Podaj maksymalną liczbę epok uczących: 1000 Podaj docelowy błąd MSE: 0.001
przykład 1. predykcja naiwna funkcje toolbox owe sieć 2 źródło: własne Podaj liczbę neuronów w warstwie ukrytej: 10 Podaj maksymalną liczbę epok uczących: 1000 Podaj docelowy błąd MSE: 0.00001
przykład 1. predykcja naiwna funkcje toolbox owe sieć 2 źródło: własne Podaj liczbę neuronów w warstwie ukrytej: 10 Podaj maksymalną liczbę epok uczących: 1000 Podaj docelowy błąd MSE: 0.00001
przykład 1. predykcja naiwna funkcje toolbox owe sieć 2 źródło: własne Podaj liczbę neuronów w warstwie ukrytej: 10 Podaj maksymalną liczbę epok uczących: 1000 Podaj docelowy błąd MSE: 0.00001
przykład 1. predykcja naiwna funkcje toolbox owe sieć 2 źródło: własne Podaj liczbę neuronów w warstwie ukrytej: 10 Podaj maksymalną liczbę epok uczących: 1000 Podaj docelowy błąd MSE: 0.00001
Przykład 2 PREDYKCJA NAIWNA FUNKCJE WŁASNE
przykład 2. predykcja naiwna funkcje własne źródło: własne Naucz sieć przewidywać przyszłe notowania indeksu WIG20 na podstawie notowań przeszłych wejścia: wyjście: wartość indeksu dziś wartość indeksu wczoraj wartość indeksu przedwczoraj wartość indeksu jutro Użyj własnych funkcji do symulacji sieci: init2 dzialaj2 ucz2 - metoda najszybszego spadku z momentum i adaptacyjnym współczynnikiem uczenia - wykres błędu MSE podczas uczenia
przykład 2. predykcja naiwna funkcje własne źródło: własne skrypt wigstudpredykcjanaiwnafunkcjewlasne.m : dane: indeks WIG od 1991 do 2005 dla każdej sesji: - indeks open/high/low/close + zmiana% - obroty + zmiana% wskazówki, co w jakiej kolejności robić: wybór danych wejściowych preprocessing / skalowanie danych przygotowanie zbioru uczącego podział danych uczących na ciągi: uczący, sprawdzający i testujący wybór architektury sieci utworzenie / inicjalizacja sieci nauka sieci na ciągach: uczącym/sprawdzającym sprawdzenie działania sieci na ciągu testującym
Przykład 3 PREDYKCJA PRZYROSTÓW
przykład 3. predykcja sprytniejsza zmiany indeksu źródło: własne Naucz sieć przewidywać zmiany przyszłych notowań indeksu WIG20 na podstawie zmian notowań przeszłych wejścia: wyjście: zmiana% wartości indeksu dziś-wczoraj zmiana% wartości indeksu wczoraj-przedwoczraj zmiana% wartości indeksu przedwczoraj-przedprzedwczoraj zmiana% wartości indeksu jutro-dziś Użyj funkcji toolbox owych MATLABa
przykład 3. predykcja sprytniejsza zmiany indeksu źródło: własne % ----------------------------------------------------------------------- % wybranie danych % w drugiej kolumnie jest indeks - otwarcie % w trzeciej indeks - high % w czwartej indeks - low % w piątej indeks - zamknięcie % w szóstej indeks - zamknięcie zmiana od dnia poprzedniego % w siódmej obroty % w ósmej obroty - zmiana od dnia poprzedniego indeks = WIG(:,6); obroty = WIG(:,8);
przykład 3. predykcja sprytniejsza zmiany indeksu źródło: własne % ----------------------------------------------------------------------- % skalowanie danych- dla przyrostów nie trzeba % - przecież one są w większości od -10 do +10
Forex WALUTY, SUROWCE, INDEKSY
FOREX - źródło danych: Centrum historii
plik dane.forex.2009.rar : dane (prn): EURUSD MN, W1, D1, H1 EURPLN D1 GBPUSD D1 USDJPY D1 USDPLN D1 GOLD D1, H4 OIL D1, H4 US500,100,30 D1 W20 D1, H1 plik dane.forex.2013.7z : dane (csv): EURUSD MN, W1, D1, H1, M30, M15, M5, M1 EURPLN, USDPLN W1, D1, H1 GOLD, OIL W1, D1, H1 W20 W1, D1, H1
Przykład 4 UCZENIE STRATEGII
przykład 4. uczenie strategii źródło: własne Naucz sieć prostej strategii opartej na średnich ruchomych: (źródło poniższej: J.J. Murphy. Analiza techniczna rynków finansowych) o średnia krótkookresowa: 5 okresów o średnia długookresowa: 20 okresów o sygnał KUP: - przecięcie od dołu średniej 20 przez średnią 5 o sygnał SPRZEDAJ: - przecięcie od góry średniej 20 przez średnią 5 zysk ok. 4000 pipsów w ok. 47 dni
przykład 4. uczenie strategii źródło: własne wejścia sieci: średnia krótkookresowa (z historią) średnia długookresowa (z historią) żądane wyjście sieci sygnały: -1 SPRZEDAJ 0 brak sygnału 1 KUP lub: -1 SPRZEDAJ - cały czas gdy średnia krótka pod długą 1 KUP - cały czas gdy średnia krótka nad długą o strategia typu zawsze na rynku = zawsze otwarte zlecenie o zlecenie KUP zamyka otwarte wcześniej zlecenie SPRZEDAJ i otwiera KUP o zlecenie SPZREDAJ zamyka otwarte wcześniej zlecenie KUP i otwiera SPRZEDAJ sygnał ma się pojawiać na początku bieżącej świeczki, więc na wejściach mogą się pojawić tylko wielkości z poprzedniej świeczki i z wcześniejszych
przykład 4. uczenie strategii źródło: własne do uczenia sieci użyj funkcji toolbox owych MATLABa lub własnych funkcji wykorzystaj dane: EURUSD D1, H1, lub: GOLD - D1 lub: W20 - D1 lub: jakiekolwiek inne
przykład 4. uczenie strategii źródło: własne sprawdź przydatność innych średnich zastanów się, co podawać na wejście sieci zastanów się nad lepszym wyjściem z transakcji wyeliminuj mało przydatne sygnały
Przykład 5 UCZENIE SYGNAŁÓW
przykład 5. uczenie sygnałów źródło: własne Naucz sieć przewidywać poprawne sygnały: żądane wyjście sieci sygnały: -1 SPRZEDAJ 0 brak sygnału 1 KUP wg założonej strategii wejścia sieci: wg uznania przykładowe założenia strategii: dla zlecenia KUP poziom SL będzie ustawiony na min. cenie z 5 poprzednich świeczek dla zlecenia SPRZEDAJ na max. cenie z 5 poprzednich świeczek sygnał KUP/SPRZEDAJ gdy w przyszłych 5 świeczkach stosunek zysk/ryzyko będzie >= 3 sygnał ma się pojawiać na początku bieżącej świeczki, więc na wejściach mogą się pojawić tylko wielkości z poprzedniej świeczki i z wcześniejszych
ZANIM ZACZNIESZ TESTER STRATEGII
tester strategii strategia Moving Average - przykładowa w MetaTrader ze - parametry domyślne: MA period: 12 MA shift: 6 instrument: EURUSD interwał: D1
tester strategii założenia, liczba otwartych zleceń
tester strategii rozmiar zlecenia (zarządzanie kapitałem)
tester strategii czy jest sygnał do otwarcia zlecenia?
tester strategii czy trzeba zamknąć zlecenie
tester strategii funkcja start
tester strategii
tester strategii podsumowanie - wykres
tester strategii podsumowanie - raport
PODSUMOWANIE DOBRE RADY
jak można bawić się w sieci neuronowe na giełdzie: za bardzo się nie napalać nie oczekiwać kokosów maszynki do zarabiania czarnej skrzynki nie przeceniać sieci to, że sieć daje ładne wykresy / mały błąd MSE, nie oznacza jeszcze, że dobrze działa po ich przybliżeniu może się okazać, że sieć zachowuje się jak zwykły filtr MA z akcentem na ostatnią próbkę więc sieć przewiduje po prostu, że jutro będzie to, co było dziś ale wykres wygląda ładnie może nawet i błąd wyjdzie nie za duży poczytać o giełdzie pograć samemu, a dopiero potem wysyłać na parkiet sieci neuronowe
jak można bawić się w sieci neuronowe na giełdzie: nie przesadzać nie używać bardzo dużych sieci nie podawać wszystkich dostępnych danych na wejścia
jak można bawić się w sieci neuronowe na giełdzie: podawać na wejścia sieci nie surowe dane, lecz przetworzone co najmniej wyskalowane najlepiej starannie wybrane zamiast wartości indeksu przyrosty zamiast danych z całego tygodnia średnią albo kombinacje: ten tydzień dokładnie + średnia z tygodnia + średnia z miesiąca zamiast/oprócz cen wskaźniki analizy technicznej itd.
jak można bawić się w sieci neuronowe na giełdzie: a może dodać na wejścia dane towarzyszące (kontekstowe) np. kurs EURUSD obrazujący stan gospodarki amerykańskiej/europejskiej albo kurs ropy obrazujący również sytuacje polityczną na świecie albo np. stopy procentowe itp. dane makroekonomiczne porę roku, dzień tygodnia byle nie za dużo i z sensem nie podawać na wejścia sieci czegoś, czego w danej chwili nie znamy! przez przypadek
jak można bawić się w sieci neuronowe na giełdzie: odpowiednio wykorzystywać ciąg uczący: odpowiednio podzielić na ciąg uczący, sprawdzający i testujący - hossa, bessa i stagnacja równo reprezentowane w każdym z nich odpowiednio pokazywać przykłady w trakcie uczenia: - lepiej losowo niż sekwencyjnie - kilka przykładów w jednym kroku, poprawki skumulowane
jak można bawić się w sieci neuronowe na giełdzie: a może zmienić zadanie dla sieci, np. predykcja klasyfikacja nie wymagać od sieci, żeby przewidywała dokładnie wartość instrumentu za 5 dni - niech tylko przewiduje, czy wzrośnie, czy spadnie wyjścia -1 1 - np. czy w ciągu tych 5 dni wzrośnie o co najmniej 5%, czy nie wzrośnie - wyjścia 0 1 czy w ciągu tych 5 dni spadnie o co najmniej 5%, czy nie spadnie - wyjścia 0 1 - jednocześnie nie spadając / nie rosnąc o więcej niż 1% (stosunek TP/SL > 3:1) wymyśleć sobie strategię inwestycyjną - pod nią przygotować dane uczące - wejścia: wybrane wielkości, wskaźniki itp. - żądane wyjścia: sygnały kup / sprzedaj / nic nie rób wyjścia np. 1/ -1 / 0 - skonstruować i nauczyć sieć - pod każdą strategię przygotować nowe dane i nową sieć
jak można bawić się w sieci neuronowe na giełdzie: a może zmienić zadanie dla sieci, np. predykcja rozpoznawanie wzorców nauczyć sieć rozpoznawać formacje analizy technicznej: M, W, podwójne dna i szczyty, ramiona-głowa-ramiona nauczyć kilka sieci rozpoznawać daną formację w różnych horyzontach czasowych nauczyć kilka sieci rozpoznawać różne formacje w tym samym horyzoncie rozpoznawać formacje za pomocą map samoorganizujących spróbować architektur hybrydowych: np. wyjście takiej mapy podać jako jedno z wielu wejść na sieć MLP podejmującą ostateczną decyzję: kup / sprzedaj na inne wejścia np. wartości instrumentu, średnie, wskaźniki techniczne itp. na inne wejścia np. wyjścia sieci rozpoznających formacje itp.
jak można bawić się w sieci neuronowe na giełdzie: stosować odpowiednie miary jakości działania sieci sieć jest tylko częścią decyzyjną - systemu transakcyjnego równie ważne, jeśli nie najważniejsze, jest zarządzanie kapitałem ważne jest także zarządzanie transakcją/wielkością pozycji sam błąd sieci (MSE) nie wystarczy do oceny systemu należy przetestować cały system na danych historycznych (backtest), a najlepiej przez jakiś czas na żywo (forward test) i obliczyć jego parametry: oczekiwaną stopę zwrotu stosunek zysków do strat największe obsunięcie kapitału itp.
jak można bawić się w sieci neuronowe na giełdzie: spróbować innych instrumentów - forex: giełda amerykańska: S&P500 (USBCASH) waluty: EURUSD, GPBUSD, USDJPY surowce: GOLD, OIL oraz powiązań między nimi zagrać na próbę w konkursie wygrać Porsche, Mercedesa itd