Własny EA - optymalizacja

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
sgorn
Pasjonat
Pasjonat
Posty: 1208
Rejestracja: 25 paź 2008, 17:29

Własny EA - optymalizacja

Nieprzeczytany post autor: sgorn »

Witam,
od jakiegoś czasu bawię się w "programistę" i tworze sobie nieskomplikowane EA. Korzystam ze świetnej stronki (moim zdaniem)- FxDreema. Kreatorek ma wiele ciekawych funkcji i jest fajnym narzędziem dla laika jeśli chodzi o programowanie. Stworzyłem sobie 2 automaty i teraz do rzeczy. Puściłem sobie w testerze MT4 od początku 2013 i przy podanych ustawieniach wynik nie powala ale DD jest poniżej 5 %. Wyniki zachęciły mnie do dalszego testowania tego EA. Przeleciałem cały rok 2011 i 2012 (automat pracuje na 5M). Wynik był też był na plus ale DD już większe. Nie przeraziło mnie to. Pomyślałem że zooptymalizuję sobie moje parametry. I zrobiłem optymalizację w MT4 takich czynników jak TP, SL pod względem DD i max profitu. Zrobiłem to dla okresu 2013. I teraz wyszło mega ładnie tzn DD kolo 40 % ale zysk ok 120 %. Rok 2012 przy tych ustawieniach dał też zarobić, mniej. I teraz najlepsze. Rok 2011 wyczyścił konto... Do setna. Jaki jest sens optymalizacji? mam świadomość że zoptymalizowane parametry są na danym okresie i nie ma gwarancji ze w przyszlosci sprawdza sie. Jak to na rynku Forex. :) Jakie jest wasze zdanie? może coś zle robie? Zaznaczam jestem laikiem jesli chodzi o programowanie.

P.S.
tak sobie myślę ze z tego mechanizmu optymalizacji korzystają ludzie sprzedający komercyjne swoje EA, tzn optymalizuja na np 2 latach wyniki. Potem umieszczają statement z 2 lat- wiadomo wynik jest mega ładny i sprzedaja. Inne osoby kupuja te EA z mysla ze bedzie kosil pipsy a tu niespodzianka....lipa. nie sadzicie ze to tak funcckjonuje?

Zapraszam do dyskusji, moze sie czegos naucze. Główne pytanie z tego wątku to :PO CO ROBIĆ OPTYMALIZACJĘ SKORO NIE MA GWARANCJI ZE TE USTAWIENIA BEDA OK W PRZYSZŁOSCI? a jesli ma to sens, TO JAK ROBIC OPTYMALIZACJE BY TO MIAŁO SENS? :)
Wicks reject areas and bodies explore them-MightyOne
Nie ważne czy miałeś rację czy nie,ważne jak dużo zarobiłeś posiadając rację i jak mało straciłeś, myląc się.

Awatar użytkownika
Tymek
Pasjonat
Pasjonat
Posty: 648
Rejestracja: 20 mar 2006, 13:39

Re: Własny EA - optymalizacja

Nieprzeczytany post autor: Tymek »

Ja osobiście optymalizuję EA na danych od 2003 roku. Rozkładam optymalizacje na kilka komputerów.
W ten sposób przyspieszam czas potrzebny do znalezienia optymalnych parametrów.
Jeżeli twoje EA robi tylko akcje na rozpoczęciu świeczki i masz stały SL i TP (zmieniasz tylko przy rozpoczęciu
świeczki) to możesz przyspieszyć optymalizację poprzez nie włączanie opcji Every Tick.
Im dłuższy okres testowy tym mniej niespodzianek w przyszłości.
Do tego musisz mieć wiarygodne dane bez dziur jaki oferuje MT4 ;)
Wtedy możesz coś powiedziećo EA.
Każdy chce mieć pieniądze, ale pieniądze nie zawsze chcą każdego ;)

Awatar użytkownika
sgorn
Pasjonat
Pasjonat
Posty: 1208
Rejestracja: 25 paź 2008, 17:29

Re: Własny EA - optymalizacja

Nieprzeczytany post autor: sgorn »

TYMEK, dzieki za odpowiedz. Czyli Ty robisz walk forward analizę od 2003 z jakims tam krokiem?

czy sensowny jest zatem np taki proces :

badam moj EA od 2003 roku, caly 2003 rok optymalizacja, potem najlepsze ustawienia dla testu na np I kwartale 2004. Nastepnie optymalizacja przesunieta o ten kwartal i znow test w II kwartale 2004....itd itd. az do 2013 . Mozna tak to ugryzc?

powiedzmy ze znajde juz te ustawnia najbardziej optymalne, ruszam na reala. Mija np kwartał. Zatrzymuje prace EA, robie optymalizacje uwzgledniajac ten kwartał i najlepsze ustawienia nakladam na kolejny kwartal na realu. Mozna tak? ma to sens?
Wicks reject areas and bodies explore them-MightyOne
Nie ważne czy miałeś rację czy nie,ważne jak dużo zarobiłeś posiadając rację i jak mało straciłeś, myląc się.

Awatar użytkownika
Tymek
Pasjonat
Pasjonat
Posty: 648
Rejestracja: 20 mar 2006, 13:39

Re: Własny EA - optymalizacja

Nieprzeczytany post autor: Tymek »

OK, Opiszę moją metodę.

Moje EA przyjmuje parametry z mojego serwera (dla zainteresowanych pakietami UDP),
który wysyła parametry do testowania.
Wybieram 3 okresy 3 mieś z całych 10 lat i jest to pierwsze sito dla parametrów.
Gdy przejdzie poprawnie następnie jadę rok po roku. Gdy jakiś rok jest zawalony to nie testuję dalej.
Jak przejdzie to sito to jadę całe 10 lat.
W ten sposób jestem w stanie przetestować dożo parametrów w krótkim czasie.
Na każdy okres mam od 3 do 10 MT4 z EA czekającymi na parametry do testowania.
Jak otrzyma to testuje, wyniki odsyłane s do serwera rozsyłającego parametry by ten mógł określić wartość testu.
To tak w skrócie.
Każdy chce mieć pieniądze, ale pieniądze nie zawsze chcą każdego ;)

Awatar użytkownika
micjat
Stały bywalec
Stały bywalec
Posty: 62
Rejestracja: 29 sty 2012, 20:58

Re: Własny EA - optymalizacja

Nieprzeczytany post autor: micjat »

Tymek - możesz dokłądniej opisac jak ty zbudowałeś tę "maszynę" do testowania? Bo wydaje mi się to czymś bardzo przemyślanym i dobrym.
Don't tell me the sky is the limit when there are footprints on the moon!

Awatar użytkownika
Tymek
Pasjonat
Pasjonat
Posty: 648
Rejestracja: 20 mar 2006, 13:39

Re: Własny EA - optymalizacja

Nieprzeczytany post autor: Tymek »

Cały system do testowania składa się z kilku Blade Serverow na których zainstalowany jest Windows 2012 z Hyper-V.
Na każdym serwerze jest 6 VPS'ow z Windows 2012 (2x4Core master server). Na każdym VPSie są 4 platformy MT4.
Do tego jest jeden system który nazywam nadzorcą, na którym jest program rozsyłający parametry do oczekujących
platform MT4 z EA. Jak pisałem wcześniej mam kilkanaście okresów które EA musi przejść poprawnie. Gdy wynik
nie pasuje do założeń to jest odrzucany. Parametry wędrują z kolejki do kolejki (kolejka oczekujących parametrów
do przetestowania na danym okresie) do każdej kolejki przypisanych jest od 2 - 10 platform MT4 wykonujących zadania.


Od razu odpowiem dlaczego wszystko jest na VPS: Bo nie mam problemów z wyłączeniem awaryjnym chassis gdy
braknie prądu. Systemy bazowe są zamykane a wszystkie VPSy robią snapshot na dysk i przy ponownym starcie
startują od momentu w którym zostały zatrzymane. Jako, że testy trwają długo w czasie a czasami trzeba
zrobić sobie wolne więc trzeba wszystko powyłączać tak więc tylko w ten sposób można bezpiecznie wszystko
pozamykać bez utraty obliczeń. Do tego instalacja updatów do systemów i restart nie stanowi żadnego problemu.

Dlaczego takie ilości VPS na serwerze: Bo na każdy sytem VPS przeznaczam 2 procesory. Jako, że nie zawsze
wszystkie EA działają jednocześnie więc z testów wyszło, że jest to optymalne.
Wiadomo, że najbardziej obciążona jest 1 kolejka, potem 2 i 3. Wiec EA jest dla tych okresów jest rozłożone
po 2 na każdy fizyczny serwer.


EA jest tak skonstruowane, że w funkcji Init wysyła message do nadzorcy z informacją, że oczekuje na
parametry i pracuje na okresie "X". Nadzorca sprawdza czy są jakieś parametry w kolejce do przetestowania i bierze
pierwszy z góry i wysyła do EA, jeżeli kolejka jest pusta to wysyła message WAIT. EA po otrzymaniu parametrów
startuje z danym okresem testowym i na koniec przesyła wyniki do nadzorcy. Jeżeli ma czekać to czeka 1min i
ponawia message "jestem gotowy". Po 10 kolejnych oczekiwaniach EA startuje z na danym okresie z parametrem,
który powoduje nic nierobienie. Zauważyłem, że MT4 nie lubi gdy za długo EA spędza w funkcji Init.
Nadzorca przenosi każdy wysłane parametry do kolejki InProgress. Gdy po 2h nie ma wyniku od EA to te
parametry wracają na koniec do kolejki z której zostały zabrane.

By nie mieć problemów z konfiguracja IP przy komunikacji na TCP/IP używam pakiety UDP. Mogę w dowolnym
momencie dodać dodatkowe MT4 do całego systemu i bez problemów będzie wszystko działać. Czyli system
jest skalowalny w czasie pracy w dowolnym wymiarze. Gdy widzę, że jakaś kolejka jest zapchana dokładam
MT4 z tym okresem do systemu i tyle.

W EA korzystam z małego DLL'a w C++ do wysyłania i odbierania pakietów UDP.
Cała reszta jest napisana w C# i oparta na serwerze SQL.

Mam nadzieję, że wyjaśnienie jest zrozumiałe, trochę chaotyczne ale mam nadzieję, że daje pogląd.
Każdy chce mieć pieniądze, ale pieniądze nie zawsze chcą każdego ;)

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

Re: Własny EA - optymalizacja

Nieprzeczytany post autor: green7 »

Tymek jak to mówią ostro pojechałeś :)

Takie pytania/wątpliwości mnie naszły:

- tester mt4 jest strasznie ślamazarny. Ty rozwiązujesz to rozpraszając testy i odpalając wiele testerów. Czy nie lepiej byłoby porzucić to badziewie i robić testy w innym, szybszym (może własnym) oprogramowaniu ?
Aktualnie konstruuję prosty "framework" dla pewnych obliczeń forexowych, na razie jestem na wczesnym etapie, ale w testach bez problemu przetwarzam około 400 mln słupków na sekundę (w jednym wątku). W mt4 trwałoby to nieporównywalnie dłużej ....

- zapewne oczywiście przy mt4 trzyma Cię bogactwo wskaźników itd. Ale dlaczego w takim razie nie wybrałeś mt5 - które samo z siebie zapewnia Ci testowanie na wielu komputerach ? Może próbowałeś tej drogi i możesz ją porównać do Twojego rozwiązania ? Jakie tu niedogodności są ? (prócz oczywiście braku pozycji przeciwstawnych i innej obsłudze zleceń).

Reasumując: tak ogólnie dlaczego zdecydowałeś się trzymać mt4 ?
Green
Obrazek
Obrazek

Awatar użytkownika
Tymek
Pasjonat
Pasjonat
Posty: 648
Rejestracja: 20 mar 2006, 13:39

Re: Własny EA - optymalizacja

Nieprzeczytany post autor: Tymek »

To było pierwsze rozwiązanie które stosuje jak na razie. Zajęło mi to weekend ;)
Niestety trudno jest robić wszystko na raz. Również od jakiegoś czasu używam własny tester,
który jest szybszy itp. ale jeszcze dużo do zrobienia a kasa leży i czeka by ją podnieść.
Do tego trzeba również zajmować się wszystkimi innymi programami ;)
Tak wiec pisanie własnego testera schodzi na dalszy plan.
Mam dużo większą wydajność obliczeniowa w ten sposób niż twój/mój najszybszy tester.
I mogę go już używać i testować i wdrażać. Po co spędzać czas nad czymś co ktoś
już skonstruował, może nie w sposób optymalny ale można to zawsze przyspieszyć.
Tak wiec mój tester w C# jest o niebo szybszy niż MT4 ale pozostaje jeszcze wiele do zrobienia,
i wiele błędów do usunięcia.

Co do tych 400mln słupków to jak dodasz obliczenia IMA, lub inne wskaźniki, to okaże się ze
spadasz z wydajnością. Przy kilku IMA już jest problem.

Dlaczego trzymam MT4 ? Bo mi prędkość nie przeszkadza. Mam swoje przyzwyczajenia.
I tak przechodzę ze wszystkim na C# więc tak naprawdę MT4 będzie tylko bridgem, który
można zastąpić potem czymkolwiek. A skoro idę w tym kierunku to mi nie zależy teraz
na jakiejś nowej platformie. Nowe oznacza stracony czas na poznanie platformy od podszewki,
który można spożytkować gdzie indziej.
Każdy chce mieć pieniądze, ale pieniądze nie zawsze chcą każdego ;)

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

Re: Własny EA - optymalizacja

Nieprzeczytany post autor: green7 »

Tymek pisze:To było pierwsze rozwiązanie które stosuje jak na razie. Zajęło mi to weekend ;)
Niestety trudno jest robić wszystko na raz. Również od jakiegoś czasu używam własny tester,
który jest szybszy itp. ale jeszcze dużo do zrobienia a kasa leży i czeka by ją podnieść.
Do tego trzeba również zajmować się wszystkimi innymi programami ;)
Tak wiec pisanie własnego testera schodzi na dalszy plan.
Mam dużo większą wydajność obliczeniowa w ten sposób niż twój/mój najszybszy tester.
No z tym bym się nie zgodził. Sądzę, że dobre rozwiązanie będzie szybsze niż kilka/kilkanaście mt4 razem wziętych. Nie mówiąc już o tym że je również możesz rozproszyć.

Tymek pisze:I mogę go już używać i testować i wdrażać. Po co spędzać czas nad czymś co ktoś
już skonstruował, może nie w sposób optymalny ale można to zawsze przyspieszyć.
No tak, to racja z tym ciężko dyskutować. Choć mi akurat pewnie większą frajdę sprawi napisanie softu niż zarabianie kasy przy pomocy mt4 :)

Tymek pisze:Tak wiec mój tester w C# jest o niebo szybszy niż MT4 ale pozostaje jeszcze wiele do zrobienia,
i wiele błędów do usunięcia.
Co do tych 400mln słupków to jak dodasz obliczenia IMA, lub inne wskaźniki, to okaże się ze
spadasz z wydajnością. Przy kilku IMA już jest problem.
Tak, oczywiście na razie mam proste operacje. Ale chętnie dokładniej bym porównał wydajność. Może zrobimy jakieś małe "competition" ? Jakiś test do policzenia: u Ciebie na rozproszonym mt4 u mnie na własnym testerze ?
Tymek pisze:I tak przechodzę ze wszystkim na C# więc tak naprawdę MT4 będzie tylko bridgem, który
można zastąpić potem czymkolwiek. A skoro idę w tym kierunku to mi nie zależy teraz
na jakiejś nowej platformie.
Heh - idę dokładnie w tym samym kierunku :) Porzucam kod napisany do tej pory (a jest tego sporo) i przenoszę wszystko do C# ....
Green
Obrazek
Obrazek

Awatar użytkownika
Tymek
Pasjonat
Pasjonat
Posty: 648
Rejestracja: 20 mar 2006, 13:39

Re: Własny EA - optymalizacja

Nieprzeczytany post autor: Tymek »

Ten system napisałem 2 lata temu i sprawdza się dobrze bo mogę łatwo go skalować.
Co do "competition" myślę, że cokolwiek byś nie napisał to 1 PC nawet najsilniejszy nie pokona
rozproszonego przetwarzania na 10 bladach czyli 80 corach. Przy kilku bilionach kombinacji
parametrów nawet kilku wątkowe przetwarzanie na 1 PC nie da rady systemowi rozproszonemu.
Bylo potrzebne szybkie rozwiązanie wiec takie stworzyłem nic więcej. A to ze jest MT4 to mnie to
nie przeszkadza ;)
I tak dochodzi już do tego ze MT4 tylko przesyła aktualna cenę i wykonuje proste operacje BUY/SELL/CHANGE TP
nic więcej, reszta jest w DLLkach. EA w MQL sprowadza się do kilku linii kodu, które wywołują funkcje
z DLL. Jak widzisz przejść na inną platformę nie stanowi problemu. Platforma potrzebna mi jest tylko
przy testach do zarządzania koszykiem co nie jest trudne do zrobienia samemu ale ważniejsza dla mnie
była sama strategia niż skupianie się na rzeczach dookoła.
Każdy chce mieć pieniądze, ale pieniądze nie zawsze chcą każdego ;)

ODPOWIEDZ