zastosowania sieci neuronowych -...

Post on 02-Mar-2019

217 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Zastosowania sieci neuronowych

predykcja - giełda

LABORKA © Piotr Ciskowski

INDEKS WIG20AKCJE

• 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

PREDYKCJA „NAIWNA”FUNKCJE TOOLBOX’OWE

Przykład 1

• Naucz sieć przewidywać przyszłe notowania indeksu WIG20na podstawie notowań przeszłych

• wejścia: wartość indeksu dziśwartość indeksu wczorajwartość indeksu przedwczoraj

• wyjście: 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

przykład 1. predykcja „naiwna” – funkcje toolbox’oweźródło: własne

0 500 1000 1500 2000 2500 30000

0.5

1

1.5

2

2.5

3x 10

4 Wszystkie dane uczace - indeksy

0 500 1000 1500 2000 2500 30000

5

10

15x 10

5 Wszystkie dane uczace - obroty

przykład 1. predykcja „naiwna” – funkcje toolbox’oweźródło: własne

0 500 1000 1500 2000 2500 3000-0.5

0

0.5

1

1.5

2

2.5

3

3.5x 10

4 Odpowiedzi sieci - przed uczeniem

nr przykładu

indeks

0 500 1000 1500 2000 2500 3000-3

-2

-1

0

1

2

3x 10

4 Odpowiedzi sieci - przed uczeniem

nr przykładu

indeks

przykład 1. predykcja „naiwna” – funkcje toolbox’oweź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ć 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.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 1. predykcja „naiwna” – funkcje toolbox’owe – sieć 2źródło: własne

PREDYKCJA „NAIWNA”FUNKCJE WŁASNE

Przykład 2

• Naucz sieć przewidywać przyszłe notowania indeksu WIG20na podstawie notowań przeszłych

• wejścia: wartość indeksu dziśwartość indeksu wczorajwartość indeksu przedwczoraj

• wyjście: wartość indeksu jutro

• Użyj własnych funkcji do symulacji sieci: init2dzialaj2ucz2 - metoda najszybszego spadku

z momentumi 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 2. predykcja „naiwna” – funkcje własneźródło: własne

PREDYKCJA PRZYROSTÓW

Przykład 3

• Naucz sieć przewidywać zmiany przyszłych notowań indeksu WIG20na podstawie zmian notowań przeszłych

• wejścia: zmiana% wartości indeksu dziś-wczorajzmiana% wartości indeksu wczoraj-przedwoczrajzmiana% wartości indeksu przedwczoraj-przedprzedwczoraj

• wyjście: 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

przykład 3. predykcja „sprytniejsza” – zmiany indeksuźródło: własne

WALUTY, SUROWCE, INDEKSY

Forex

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

UCZENIE STRATEGII

Przykład 4

• 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óww 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 – SPRZEDAJ0 – brak sygnału1 – 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 MATLABalub własnych funkcji

• wykorzystaj dane: EURUSD – D1, H1, …lub: GOLD - D1lub: W20 - D1lub: 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 4. uczenie strategiiźródło: własne

UCZENIE SYGNAŁÓW

Przykład 5

• Naucz sieć „przewidywać” poprawne sygnały:

– żądane wyjście sieci sygnały: -1 – SPRZEDAJ0 – brak sygnału1 – 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

przykład 5. uczenie sygnałówźródło: własne

TESTER STRATEGII

ZANIM ZACZNIESZ

• strategia Moving Average

- przykładowa w MetaTrader’ze

- parametry domyślne:

• MA – period: 12

• MA – shift: 6

• instrument: EURUSD

• interwał: D1

tester strategii

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

DOBRE RADY

PODSUMOWANIE

• 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…

top related