"Self-learning" EA - optymalizacja systemu

O jezykach programowania w platformach i nie tylko.
Forteca
Bywalec
Bywalec
Posty: 7
Rejestracja: 17 sie 2011, 20:05

"Self-learning" EA - optymalizacja systemu

Nieprzeczytany post autor: Forteca »

Typowa sytuacja - system chodził dobrze przez jakiś czas, po czym roztrwonił to, co zarobił, a nawet jeszcze więcej. Zauważamy przy tym, że gdybyśmy zmienili parametry pracy EA w odpowiednim momencie, system nie tylko nic by nie stracił, ale nawet sporo zarobił. Tylko skąd miałem wiedzieć, że rynek tak się poprzestawiał, że konieczne są jakieś zmiany strategii...

I tak sobie wykombinowałem, że może warto poeksperymentować. Wybrałem sobie kilka moim zdaniem "dobrze rokujących" wskaźników i na ich podstawie skleiłem prosty EA. Coś tam zaczęło nawet z tego wychodzić, ale pracochłonność straszna. Przyjmijmy: mamy EA, który optymalizujemy dla T=6 miesięcy od stycznia do czerwca. Wyniki optymalizacji testujemy od lipca powiedzmy do grudnia i chcemy wiedzieć ile zarobił/stracił w przedziałach 4-tygodniowych. Dalej optymalizujemy system od połowy stycznia do połowy lipca i testujemy wyniki od połowy lipca do połowy stycznia itd. Dosłownie można się zajechać.

Wyciągnąłem gdzieś stare Delphi i napisałem programik, który na wejściu dostaje taki plik:
Strategy=lukaszbiegtf
Strategy_cofig_file=lukaszbiegtf.set
Symbol=EURUSD
TimeFrame=H1
TestModel=2
Start_date=2007-02-26
End_date=2012-05-19
Step=7
Optimization_period=140
Test_Short=14
Test_Long=140
Test_Step=14
Choice1=Best
ReportFile=report.csv
Takie coś optymalizuje nasz system w okresach 140-dniowych z krokiem co 7 dni od lutego 2007 do maja 2012. Następnie wybiera najlepszy wynik (Choice1=Best) i dla jego parametrów bada wynik systemu dla 14, 28, 42..., 140 dni. MetaTrader odpala się automatycznie przez 2 dni i 3 noce. Normalnie coś takiego zajęłoby pewnie z rok.

W rezultacie dostajemy plik csv, który sobie wrzucamy do Excela i możemy z tego robić wykresy, nakładać dodatkowe filtry.

Struktura rekordu w csv jest taka:

data początku optymalizacji; data końca optymalizacji; liczba dni testu; wynik; liczba dni testu; wynik; ....;
parametry zoptymalizowane; wynik systemy dla okresu optymalizacji; wskaźnik zysku dla okresu optymalizacji; przewidywany zysk; największa strata; % największa strata.

Przykładowy csv w załączniku.

Pytanie: co o tym sądzicie, jakie macie jeszcze pomysły na linijkę "Choice1=Best"?

Można tu np. dodawać warunki "Choice2=MinProfit=200;MaxProfit=400;MinExpectedProfit=30" itp. To oznaczałoby, że jako wynik optymalizacji wybrany zostanie wynik dający minimalny zysk=200 i nie przekraczający 400 oraz z minimalnym "expected profit"=30.

Póki co program ma tylko opcję "Choice1=Best", ale zamierzam to rozbudować. Tu czekam na ew. propozycje.

Jeżeli ktoś byłby zainteresowany, program mogę udostępnić (kwestia kilku dni). W zamian oczekiwałbym tylko podzielenia się swoimi systemami, które dopracowane zostałyby przy pomocy mojego programu. Optymalne byłoby, gdyby udało nam się stworzyć kilkanaście systemów działających równolegle ze sobą, zupełnie niezależnie. Taka kompilacja w długim terminie profitowych nawet w umiarkowanym stopniu systemów, ale przy tym takich, które nie dają dużych drawdownów dałaby to, o co tu wszystkim chodzi.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Re: "Self-learning" EA - optymalizacja systemu

Nieprzeczytany post autor: JAREK67 »

Forteca pisze:Typowa sytuacja - system chodził dobrze przez jakiś czas, po czym roztrwonił to, co zarobił, a nawet jeszcze więcej. Zauważamy przy tym, że gdybyśmy zmienili parametry pracy EA w odpowiednim momencie, system nie tylko nic by nie stracił, ale nawet sporo zarobił. Tylko skąd miałem wiedzieć, że rynek tak się poprzestawiał, że konieczne są jakieś zmiany strategii...

I tak sobie wykombinowałem, że może warto poeksperymentować. Wybrałem sobie kilka moim zdaniem "dobrze rokujących" wskaźników i na ich podstawie skleiłem prosty EA. Coś tam zaczęło nawet z tego wychodzić, ale pracochłonność straszna. Przyjmijmy: mamy EA, który optymalizujemy dla T=6 miesięcy od stycznia do czerwca. Wyniki optymalizacji testujemy od lipca powiedzmy do grudnia i chcemy wiedzieć ile zarobił/stracił w przedziałach 4-tygodniowych. Dalej optymalizujemy system od połowy stycznia do połowy lipca i testujemy wyniki od połowy lipca do połowy stycznia itd. Dosłownie można się zajechać.

Wyciągnąłem gdzieś stare Delphi i napisałem programik, który na wejściu dostaje taki plik:
Strategy=lukaszbiegtf
Strategy_cofig_file=lukaszbiegtf.set
Symbol=EURUSD
TimeFrame=H1
TestModel=2
Start_date=2007-02-26
End_date=2012-05-19
Step=7
Optimization_period=140
Test_Short=14
Test_Long=140
Test_Step=14
Choice1=Best
ReportFile=report.csv
Takie coś optymalizuje nasz system w okresach 140-dniowych z krokiem co 7 dni od lutego 2007 do maja 2012. Następnie wybiera najlepszy wynik (Choice1=Best) i dla jego parametrów bada wynik systemu dla 14, 28, 42..., 140 dni. MetaTrader odpala się automatycznie przez 2 dni i 3 noce. Normalnie coś takiego zajęłoby pewnie z rok.

W rezultacie dostajemy plik csv, który sobie wrzucamy do Excela i możemy z tego robić wykresy, nakładać dodatkowe filtry.

Struktura rekordu w csv jest taka:

data początku optymalizacji; data końca optymalizacji; liczba dni testu; wynik; liczba dni testu; wynik; ....;
parametry zoptymalizowane; wynik systemy dla okresu optymalizacji; wskaźnik zysku dla okresu optymalizacji; przewidywany zysk; największa strata; % największa strata.

Przykładowy csv w załączniku.

Pytanie: co o tym sądzicie, jakie macie jeszcze pomysły na linijkę "Choice1=Best"?

Można tu np. dodawać warunki "Choice2=MinProfit=200;MaxProfit=400;MinExpectedProfit=30" itp. To oznaczałoby, że jako wynik optymalizacji wybrany zostanie wynik dający minimalny zysk=200 i nie przekraczający 400 oraz z minimalnym "expected profit"=30.

Póki co program ma tylko opcję "Choice1=Best", ale zamierzam to rozbudować. Tu czekam na ew. propozycje.

Jeżeli ktoś byłby zainteresowany, program mogę udostępnić (kwestia kilku dni). W zamian oczekiwałbym tylko podzielenia się swoimi systemami, które dopracowane zostałyby przy pomocy mojego programu. Optymalne byłoby, gdyby udało nam się stworzyć kilkanaście systemów działających równolegle ze sobą, zupełnie niezależnie. Taka kompilacja w długim terminie profitowych nawet w umiarkowanym stopniu systemów, ale przy tym takich, które nie dają dużych drawdownów dałaby to, o co tu wszystkim chodzi.
Kiedyś próbowałem sił w zastosowaniu tego rozwiązania - http://articles.mql4.com/506
ale nie pamiętam już co dokładnie nie hulało. Może warto do tego powrócić? :roll:

Awatar użytkownika
leszczu
Pasjonat
Pasjonat
Posty: 672
Rejestracja: 25 paź 2010, 23:19

Re: "Self-learning" EA - optymalizacja systemu

Nieprzeczytany post autor: leszczu »

O ile dobrze rozumiem to mowa tutaj o optymalizacji metodą Walk-Forward.
Jest do tego gotowe narzędzie (komercyjne), która całkiem dobrze się sprawdza.
Możesz przetestować za darmo, ponieważ jest dostępną 14-dniowa wersja testowa.

http://www.easyexpertforex.com/walk-for ... rader.html

Awatar użytkownika
kris007
Pasjonat
Pasjonat
Posty: 551
Rejestracja: 23 sty 2008, 22:50

Re: "Self-learning" EA - optymalizacja systemu

Nieprzeczytany post autor: kris007 »

JAREK67 pisze:Kiedyś próbowałem sił w zastosowaniu tego rozwiązania - http://articles.mql4.com/506ale nie pamiętam już co dokładnie nie hulało. Może warto do tego powrócić?
Nie wrato Jarek, pozwolę sobie Ci przypomnieć bo też to przerabiałem :)
http://forex-nawigator.biz/forum/automa ... ml#p486003

Pozdrawiam

Forteca
Bywalec
Bywalec
Posty: 7
Rejestracja: 17 sie 2011, 20:05

Re: "Self-learning" EA - optymalizacja systemu

Nieprzeczytany post autor: Forteca »

leszczu pisze:O ile dobrze rozumiem to mowa tutaj o optymalizacji metodą Walk-Forward.
Jest do tego gotowe narzędzie (komercyjne), która całkiem dobrze się sprawdza.
Możesz przetestować za darmo, ponieważ jest dostępną 14-dniowa wersja testowa.

http://www.easyexpertforex.com/walk-for ... rader.html
Na to wygląda. Tylko z tego screena ze strony, którą podajesz wnioskuję, że to coś jest mniej rozbudowane niż to moje - wystarczy zajrzeć do załącznika w pierwszym poście w wątku, żeby zobaczyć, co daje na wyjściu to moje narzędzie.

Tak w ogóle to w pliku są wyniki (w euro) dla testu raczej prostego systemu dla EURUSD przy pozycji 0.1 lota. Test daje po 4 latach wynik 3646 euro zysku przy założeniu otwierania co tydzień pozycji o wielkości 0.1 lota i utrzymywaniu tejże pozycji przez 14 dni (czyli gramy w sumie 0.2 lota). Ten sam system przy stałych parametrach w perspektywie 4 lat w najlepszym razie wychodzi na zero. I to nie jest jedyny taki przypadek, który mam.

Awatar użytkownika
rayzeel
Gaduła
Gaduła
Posty: 357
Rejestracja: 05 lis 2008, 14:47

Re: "Self-learning" EA - optymalizacja systemu

Nieprzeczytany post autor: rayzeel »

To jest raczej self-adaptive z racji tego, że przy takiej metodzie staramy się dopasować do aktualnego rynku. Zastanawiałem się nad kilkoma różnymi wariantami takiej metody, bo można jeszcze przykładowo zrobić optymalizację w czasie t, a następnie zagrać jeden trejd i ponownie zrobić optymalizację... Mam w planie zrobienie takich testów w swojej platformie testowej. Wydaje mi się, że dla skutecznej gry nie ma innej drogi niż ciągłe dopasowywanie do rynku. Oczywiście może wyjść, że jedynie gonimy własny ogon, ale może przy jakichś wariantach coś zaskoczy... Chodzi o to, że robiąc długi test uśredniamy wynik w czasie i teraz dla aktualnego stanu rynku może się okazać, że nie bardzo mu pasują parametry np. z 2008 roku gdzie wynik jest najwyższy i tym samym waga przy wyborze takiego a nie innego wyniku. Największy problem to dostępność odpowiedniego narzędzia i zrozumienie tego co się robi... Wariantów jak się zastanowić jest bardzo dużo i należałoby sprawdzić wszystkie. Ostatnio na blogu mechanicalforex.com pojawiła się implementacja WF w taki sposób jak opisałem - po każdej transakcji następuje optymalizacja i wybór parametrów. Można poczytać o wnioskach do jakich doszedł autor po takich testach. Forteca ... możesz spróbować połączyć krzywe kapitału dla kilku różnych walorów lub nawet kilku różnych parametrów (np.: optimization_period, fitness_function). DD powinien spaść :)

ODPOWIEDZ