Algorytm genetyczny do spekulacji

Jeżeli masz pomysł lub używasz ciekawego systemu albo strategii gry, opisz ja tutaj.
Awatar użytkownika
Sigmalko
Stały bywalec
Stały bywalec
Posty: 40
Rejestracja: 20 sty 2010, 17:15

Algorytm genetyczny do spekulacji

Nieprzeczytany post autor: Sigmalko »

Mam kilka pytań do osób, które interesują się wykorzystaniem algorytmów genetycznych do wspomagania podejmowania decyzji o wejściu na rynek. Wydaje się, że temat jest do ogarnięcia przez osobę o podstawowych wiadomościach na temat programowania. O algorytmach genetycznych za dużo nie wiem, jak się patrzy na niektóre książki z tej dziedziny, to rzygać się chce od tych wzorów. Podejrzewam, że można to ugryźć bez tego całego teoretycznego tłuszczu.

Sukces prowadzi przez:

- zdefiniowanie odpowiedniego chromosomu

- zdefiniowanie odpowiedniej funkcji przystosowania (czyli jeżeli w kolejnych N świeczkach był zysk, to osobnik dobrze się przystosował; jeśli była strata, do źle się przystosował i jest pierwszy na liście do wyeliminowania go z populacji)

- dopercyzowanie podejścia w selekcji (ale zakładam, że wystarczy podejście w którym do nowej populacji wpada K najlepszych rodziców i potomstwo). Prawdopodobieństwa mutacji i krzyżowania rodziców uznałbym za "do późniejszego doprecyzowania"

- dla uproszczenia, uznajmy że algorytm będzie nam mówił czy kupić EUR/USD (1), czy siedzieć chicho (0).

Zastanawia mnie głównie jak traktować geny w chromosomie. Od tego należało by wyjść, prawda? Czy chromosom powinien się składać z genów, reprezentujących binarną informację o tym, czy włączamy/wyłączamy daną funkcję?

Np. mamy chromosom z 10 genami:
- kupuj jeśli świeczka (current-1) jest [wzrostowa]
- kupuj jeśli świeczka (current-2) jest [wzrostowa]
- kupuj jeśli świeczka (current-3) jest [wzrostowa]
- kupuj jeśli świeczka USD/JPY (current-1) jest [wzrostowa]
- kupuj jeśli świeczka USD/JPY (current-2) jest [wzrostowa]
- kupuj jeśli świeczka USD/JPY (current-3) jest [wzrostowa]
- kupuj jeśli świeczka GBP/USD (current-1) jest [wzrostowa]
- kupuj jeśli świeczka GBP/USD (current-2) jest [wzrostowa]
- kupuj jeśli świeczka GBP/USD (current-3) jest [wzrostowa]
- kupuj jeśli za 30 minut nie ma danych
- ...

Ale wydaje się, że sensowny chromosom będzie wtedy, gdy będzie tu bardzo dużo (kilka tysięcy) genów albo gdy geny nie będą binarne, lecz liczbowe albo z jakimś parametrem, który powie, że chodzi nam o [wzrostową] lub [spadkową] świeczkę np na USD/JPY.

Ktoś się tym interesował i coś doradzi, w którą stronę należy iść?

green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Nieprzeczytany post autor: green7 »

Sigmalko pisze: O algorytmach genetycznych za dużo nie wiem, jak się patrzy na niektóre książki z tej dziedziny, to rzygać się chce od tych wzorów. Podejrzewam, że można to ugryźć bez tego całego teoretycznego tłuszczu.
Nie ma darmowych obiadków. A wzory dla AG nie są zbytnio straszne.
- zdefiniowanie odpowiedniej funkcji przystosowania (czyli jeżeli w kolejnych N świeczkach był zysk, to osobnik dobrze się przystosował; jeśli była strata, do źle się przystosował i jest pierwszy na liście do wyeliminowania go z populacji)
Zdajesz sobie sprawę by określić funkcję przystosowania trzeba przeprowadzić backtest algorytmu opisanego przez dany gen ?
- dopercyzowanie podejścia w selekcji (ale zakładam, że wystarczy podejście w którym do nowej populacji wpada K najlepszych rodziców i potomstwo). Prawdopodobieństwa mutacji i krzyżowania rodziców uznałbym za "do późniejszego doprecyzowania"
Tym się nie przejmuj, te funkcje to nie jest problem są dobrze opisane, i dosyć proste.
Sigmalko pisze:Ktoś się tym interesował i coś doradzi, w którą stronę należy iść?
No ktoś się interesował.
Po pierwsze:
- musisz mieć jakąś koncepcję co chcesz zrobić przy pomocy AG (poza ogólną "zarobić").
AG to metoda poszukiwania rozwiązania problemu w dużej przestrzeni rozwiązań tegoż. Więc należy najpierw zdefiniować ten problem i sposób jego rozwiązania ....
To tak ogólnie - coby nie traktować AG jako magicznej czarnej skrzynki do której wrzucimy co mamy pod ręką i ta znajdzie rozwiązanie ....
Sigmalko pisze:Np. mamy chromosom z 10 genami:
- kupuj jeśli świeczka (current-1) jest [wzrostowa]
- kupuj jeśli świeczka (current-2) jest [wzrostowa]
- kupuj jeśli świeczka (current-3) jest [wzrostowa]
A po co tak ? Nie lepiej przyjąć np. że:
- gen ma np. 8 bitów.
- bit 0: gdy zapalony oznacza świeczkę wzrostową. Zgaszony świeczkę spadkową (może być jeszcze świeczka bez zmian, tu pomijam ten przypadek. Jeśli aktualna jest bez zmian sprawdzamy jaka była wcześniejsza i tak określamy wartość)
-bit 1: 0 nie rób nic, 1 kupuj (ewentualnie dodajesz jeszcze 1 bit oznaczający sprzedaj)
-bity 2-7 wartość liczbowa określająca do której świeczki się odnosimy (czyli świeczka current - to co w tych bitach)

I tak na 1 bajcie masz obsługę kupuj/nic nie rób dla 64 świeczek wstecz ....
Sigmalko pisze:- kupuj jeśli świeczka USD/JPY (current-3) jest [wzrostowa]
- kupuj jeśli świeczka GBP/USD (current-1) jest [wzrostowa]
A tu znowu prościej: dodaj 1 bajt będący indexem symbolu.
Wydłużysz więc gen do 2 bajtów, gen "obsłużyć" więc może 255 symboli, 32 świeczki wzrostowe/spadkowe.Oczywiście jak masz mniej symboli to lepiej inaczej podzielić gen (dać więcej na świeczki).

Teraz w chromosomie wrzucasz takich genów kilka i masz wyszukiwanie wzorców. Typu: jeśli 5 świeczek wstecz EURUSD spadło, 2 świeczki wstecz GBPUSD wzrosło, USDJPY 20 świeczek wstecz wzrosło to kup EURUSD.

Tylko pytanie czy taki algorytm coś da ... obawiam się, że to byłoby za łatwe i proste. Dodatkowo: łatwo tu przeoptymalizować i dostosować się do historii, co też niechybnie taki AG by zrobił.
Green
Obrazek
Obrazek

Awatar użytkownika
Sigmalko
Stały bywalec
Stały bywalec
Posty: 40
Rejestracja: 20 sty 2010, 17:15

Nieprzeczytany post autor: Sigmalko »

Faktycznie. Funkcja przystosowania powinna analizować skuteczność danego osobnika w całej epoce, czyli na backtestach. Pewnie ani jeden osobnik nie będzie miał skuteczności 100%, więc wynikiem funkcji przystosowania będzie % zwycięstw względem wszystkich zagrań. Im wyższy % zwycięstw tym osobnik bardziej przystosowany. Podpowiedź z 8-bitowym genem jest także pouczająca.

Czy taki algorym coś da? Jeżeli w genach zakodujemy różne sekwencje ostatnich N-kursów z różnych instrumentów, to w pewnym sensie mam automat do wykrywania:
- formacji cenowych na instrumentach
- korelacji cenowych instrumentów

Na 16-bitowym genie pewnie nie poprzestaniemy, oprócz:
- ostatnich N świeczek,
- na każdym instrumencie,
pewnie trzeba będzie włączać do genu takie informacje, jak:
- obecność danych makro przed / po w czasie X h
- interwały czasowe, których dotyczą świeczki
- może wartości jakichś wskaźników / np. średnia kroczącą / ATR?
- godzina / dzień tygodnia

trzeba by się zastanowić, ale 16-bitów to pewnie będzie za mało.

Celem takiego algorytmu genetycznego byłoby zdefiniowanie twierdzień, które np. w 85% przypadków dają zysk w kolejnych N świeczkach, typu:
- jeżeli przed chwilą były dane i mamy ostre świeczki spadkowe na kilku skorelowanych ze sobą insrumentach, a wcześniej (przed danymi) były wzrosty, to należy sprzedawać :)

Końcowa populacja AG powinna dać krocie takich twierdzeń i docelowo zapalać mi lampki w EA.



Jednak, zęby taki algorytm AG dobrze zweryfikować w funkcji przystosowania, trzeba będzie posiadać bardzo obfitą bazę danych historycznych na małym interwale.

Są jakieś wytyczne, że jeżeli np. jest 16-bitow na gen, to chromosom nie powinien mieć więcej niż np. 8 genów?

Dodano po 4 minutach:
green7 pisze: łatwo tu przeoptymalizować i dostosować się do historii, co też niechybnie taki AG by zrobił.
Tzn. zamiast nauczyć się czegoś z historii, wykryć powtarzalne wzorce, to ją zwyczajnie na głupa zapamięta i nijak tego użyjemy w realu ? :) Ale wtedy to funkcja przystosowania wykazałaby, że dany wzorzec pozwolił w ciągu 10 lat na tylko 3 trejdy... Jeżeli FP karałaby za zbyt rzadkie zagrania, to unikniemy przeoptymalizowania?

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

Sigmalko pisze:to w pewnym sensie mam automat do wykrywania:
których skuteczność w zarabianiu wynosi ? ...
R.E.P.T.I.L.E. - Robotic Electronic Person Trained for Infiltration and Logical Exploration (off-line,only e-mail)

Dakhr
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 14 lis 2009, 11:05

Nieprzeczytany post autor: Dakhr »

Sigmalko pisze:
green7 pisze: łatwo tu przeoptymalizować i dostosować się do historii, co też niechybnie taki AG by zrobił.
Tzn. zamiast nauczyć się czegoś z historii, wykryć powtarzalne wzorce, to ją zwyczajnie na głupa zapamięta i nijak tego użyjemy w realu ? :) Ale wtedy to funkcja przystosowania wykazałaby, że dany wzorzec pozwolił w ciągu 10 lat na tylko 3 trejdy... Jeżeli FP karałaby za zbyt rzadkie zagrania, to unikniemy przeoptymalizowania?
Algorytmy genetyczne są doskonałe do znajdowania wzorców,tak doskonałe że na 1000% będą to wzorce optymalne dla danych testowych,karanie za rzadkie zagrania nic nie da , z łatwościa Ci taki algorytm znajdzie wzorzec, który bedzie grał czesto i zarabiał w teorii tysiące pipsów na danych testowych, a w realu juz nie .Żeby to ominąć trzeba stosować weryfikacje, to znaczy ze dane podzielic na okres testowy i okres weryfikujący, a najlepiej kilka okresów weryfikujących.

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

uzywanie alg. genetycznych w ktorych jest do 10 genow dwustanowych, nie ma zadnego sensu. Zwyklym optymalizerem przelecisz to (w koncu to tylko 1024 kombinacje) i stracisz mniej czasu niz na zrozumienie tego ;)

Po drugie, jezeli kombinujesz takie proste zasady(mozesz nawet bardziej skomplikowane), to masz mozliwosc uzywania algorytmow gentetycznych w samym testerze. (Jezeli faktycznie nie znasz sie na tym, to nie osiagniesz gorszych wynikow, a moze i lepsze na tym testerze).

Dopiero gdy chesz uzywac AG do jakis bardziej zaawansowanych zadan optymalizaycjnych niz samo kup/sprzedaj itp. to mozesz dopiero myslec o zglebieniu tego tematu.

green7
Maniak
Maniak
Posty: 2060
Rejestracja: 16 sty 2008, 18:44

Nieprzeczytany post autor: green7 »

Sigmalko pisze:Pewnie ani jeden osobnik nie będzie miał skuteczności 100%, więc wynikiem funkcji przystosowania będzie % zwycięstw względem wszystkich zagrań. Im wyższy % zwycięstw tym osobnik bardziej przystosowany.
Acha. I właśnie w ten sposób łatwo możesz znaleźć strategię o skuteczności 100% która zdominuje całą populację.
Problem w tym, że np. odpali ona jedną jedyną transakcję na cały okres testowy :)
Sigmalko pisze:Ale wtedy to funkcja przystosowania wykazałaby, że dany wzorzec pozwolił w ciągu 10 lat na tylko 3 trejdy... Jeżeli FP karałaby za zbyt rzadkie zagrania, to unikniemy przeoptymalizowania?
No widzisz ... i tu sam dochodzisz do wniosku, że funkcja przystosowania nie będzie taka prosta. Sam % skuteczności to za mało. Trzeba jeszcze przyjąć jakieś zasady co do ilości trejdów. I być może innych parametrów np. RR, DD, SharpRatio, długość trwania trejdu itd.
Bo co Ci po "świetnych" strategiach odpalających dużo transakcji, które przez 90% czasu były na - i tylko cudem pod koniec testu wyszły na swoje ....
Sigmalko pisze:Na 16-bitowym genie pewnie nie poprzestaniemy, oprócz:
- ostatnich N świeczek,
- na każdym instrumencie,
pewnie trzeba będzie włączać do genu takie informacje, jak:
- obecność danych makro przed / po w czasie X h
- interwały czasowe, których dotyczą świeczki
- może wartości jakichś wskaźników / np. średnia kroczącą / ATR?
- godzina / dzień tygodnia
Na ff bodaj są posty gościa który robi coś podobnego. O ile pamiętam ciut inaczej to ujął. Do AG wprowadził zdarzenia.
Zdarzenie to np.
- ogłoszenie danych
- pojawienie się na wykresie nowego LL, HH
- otwarcie sesji giełdowej
- przecięcie Pivota
Itd. itp.
Dodatkowo niektóre zdarzenia mogłyby mieć dodatkowe parametry. Powiedzmy masz zdarzenie "przecięcie 2 średnich" z parametrami tych średnich (typ każdej, okres itd.)
Ogłoszenie danych mogłoby mieć parametr w zakresie np. od -60 do +60 opisujący ile czasu jest przed po ogłoszeniu itd.

Sigmalko pisze:Są jakieś wytyczne, że jeżeli np. jest 16-bitow na gen, to chromosom nie powinien mieć więcej niż np. 8 genów?
Nie, raczej nie ma takich ograniczeń. Oczywiście prócz wydajnościowych komputera.
Dakhr pisze: z łatwościa Ci taki algorytm znajdzie wzorzec, który bedzie grał czesto i zarabiał w teorii tysiące pipsów na danych testowych, a w realu juz nie .Żeby to ominąć trzeba stosować weryfikacje, to znaczy ze dane podzielic na okres testowy i okres weryfikujący, a najlepiej kilka okresów weryfikujących.
Właśnie. Z tym, że AG to nie NN. I moim zdaniem wprowadzenie jednego okresu weryfikacji nic tu nie da. Bo jakby to miało działać ? Odpalasz AG, znajdujesz najlepszych osobników i zapuszczasz ich na okres testowy. Jeśli nie działają to co ? Robisz to samo ponownie.
Ale przecież w ten sposób robisz prawie dokładnie to samo co gdybyś puścił AG na cały okres. Znowu mamy tu przeoptymalizowanie.

Niektórzy rozwiązują to tak: mamy okres testowy i weryfikujący, sprawdzamy parametry strategi w obu tych okresach. Tzn. jeśli w testowym miała np. skuteczność 60% to podobnej skuteczności oczekujemy w okresie weryfikacji (oczywiście parametry oceny mogą być tu różne, znowu np: DD, ilość transakcji itd). Następnie jeśli strategia przejdzie ten test to odpala się ją np. na demie. Czyli de facto jest to 2 okres weryfikacji. Jeśli parametry nadal się utrzymają przechodzimy na real. To w sumie trzeci okres testowy. Bywa bolesny :)
LowcaG pisze:uzywanie alg. genetycznych w ktorych jest do 10 genow dwustanowych, nie ma zadnego sensu. Zwyklym optymalizerem przelecisz to (w koncu to tylko 1024 kombinacje) i stracisz mniej czasu niz na zrozumienie tego
Właśnie. Jak pisałem: najpierw by trzeba dokładniej zdefiniować problem, który chce się rozwiązać.
Moim zdaniem AG mają spory potencjał. Ale obawiam się, że jego wykorzystanie wymaga naprawdę sporego nakładu pracy.
Green
Obrazek
Obrazek

Awatar użytkownika
Sigmalko
Stały bywalec
Stały bywalec
Posty: 40
Rejestracja: 20 sty 2010, 17:15

Nieprzeczytany post autor: Sigmalko »

Spory nakład pracy. Ale uważam, że ostateczne korzyści z tej AG nie osięgniemy dopiero na samym końcu prac, tylko w trakcie. Może zbuduję sobie najpierw eksperymentalnie prostą AG, która na wstępie określi mi czy opłaca się zagrać zgodnie z trendem, gdy w ciągu ostatnich n świeczek była taka a nie inna sekwencja % stopy zwrotu i zobaczę, czy coś z tego wyjdzie....

LowcaG
Pasjonat
Pasjonat
Posty: 1068
Rejestracja: 05 paź 2007, 15:39

Nieprzeczytany post autor: LowcaG »

Sigmalko pisze:Może zbuduję sobie najpierw eksperymentalnie prostą AG, która na wstępie określi mi czy opłaca się zagrać zgodnie z trendem, gdy w ciągu ostatnich n świeczek była taka a nie inna sekwencja % stopy zwrotu i zobaczę, czy coś z tego wyjdzie....
No wlasnie o tym pisalem, po co? Skoro tworzysz proste EA gdzie jako parametry podajesz te "geny" odpalasz tester, optymalizacje, algorytmy genetyczne i masz wynik.

Dakhr
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 14 lis 2009, 11:05

Nieprzeczytany post autor: Dakhr »

green7 pisze:
Dakhr pisze: z łatwościa Ci taki algorytm znajdzie wzorzec, który bedzie grał czesto i zarabiał w teorii tysiące pipsów na danych testowych, a w realu juz nie .Żeby to ominąć trzeba stosować weryfikacje, to znaczy ze dane podzielic na okres testowy i okres weryfikujący, a najlepiej kilka okresów weryfikujących.
Niektórzy rozwiązują to tak: mamy okres testowy i weryfikujący, sprawdzamy parametry strategi w obu tych okresach. Tzn. jeśli w testowym miała np. skuteczność 60% to podobnej skuteczności oczekujemy w okresie weryfikacji (oczywiście parametry oceny mogą być tu różne, znowu np: DD, ilość transakcji itd).
Lepiej bym tego nie ujął ,o taka weryfikacje mi właśnie chodziło :)

ODPOWIEDZ