Własne EA, czyli poszukiwanie Złotego Grala
Generic opłaca się wyłączyć w ostatniej fazie optymalizacji, kiedy już szukam na najmniejszych możliwych krokach. Kiedy zaczynam i nie wiem czego szukać, przeważnie parametrów jest więcej niż 2 a za tym krok raczej skokowy. Po znalezieniu jakiejś sensownej górki, która nie jest jednak powodem przypadkowego szczególnego układu ceny i parametrów, w ramach tej górki zawężam krok i wtedy wyłączenie Generic raczej ma sens.
Dodano po 5 minutach:
no nie jest, to akurat na demo bosia, gdzie mikroloty możesz pograć w realu, ale dema już nie zapuścisz na 0.01, czyli albo dajesz kase i płacisz daninę, to sobie testuj "na realnych" danych, albo sssssssssss........ .
Dodano po 5 minutach:
no nie jest, to akurat na demo bosia, gdzie mikroloty możesz pograć w realu, ale dema już nie zapuścisz na 0.01, czyli albo dajesz kase i płacisz daninę, to sobie testuj "na realnych" danych, albo sssssssssss........ .
Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.
259 pisze:Po pierwsze Metaquotes radzi, aby odświerzać Ask/Bid bo EA chodzi w swoim wątku swoimi drogami co w skrajnych przypadkach może powodować, że te dwie zmienne nie są zsynchronizowane z rynkiem. Tak odczytałem ich dokumentację.
Po drugie, to w zasadzie wynika z pierwszego: wysłanie zlecenia trochę trwa. Jeżeli w tym czasie kwotacje nie są aktualizowane bo EA stoi i czeka na wynik to należy to odświeżyć zanim algorytm zacznie sprawdzać następne warunki oparte o te wartości. W testerze nie ma to znaczenia i dlatego dodałem warunek !testing.
Ale w realu to jest już różnie: jeden broker załatwi to w pół sekundy, inny w kilkanaście-kilkadziesiąt sekund, a rynek w tym czasie pracuje.
Tak: RefreshRates ma sens w momencie gdy jesteśmy wewnątrz funkcji start i robimy coś co mogło długo trwać a potem jeszcze kontynuujemy operacje (w tym samy wywołaniu start) i chcemy znać aktualne ceny.
Dobry przykład to wysłanie zlecenia, zakończone requotem. Jeśli po stwierdzeniu tego faktu chcemy od razu powtórzyć zlecenie (od razu a nie w kolejnym wywołaniu start) to musimy wywołać RefreshRates. Zgadza się.
Ale RefreshRates nie ma sensu w tym miejscu EA w którym go umieściłeś.
Dlaczego ?
A no bo jest na początku funkcji start - gdzie kod powyżej RefreshRates to 2 czy 3 proste warunki i parę obliczeń (nie zawsze wykonywanych).
Więc jeśli sterowanie dojdzie do miejsca w którym jest to wywołanie: znaczy to tyle, że terminal dostał tick'a i wywołał funkcję start z aktualnymi cenami. W zasadzie nieprawdopodobne jest by cena zmieniła się od początku wykonania funkcji start do miejsca gdzie umieściłeś RefreshRates - bo po prostu tam nie ma nic takiego coby mogło trwać długo.
Właściwie w tym EA nie widzę konieczności stosowania RefreshRates. Ewentualnie przy orderach jeśli chcemy by było kilka prób wysłania. Ale to załatwia już wspomniany libOrderReliable - jest tam zmienna mówiąca ile prób wysłania ma być (domyślnie o ile pamiętam 10) i pomiędzy nimi ceny są odświeżane.
Niektórzy sądzą, że RefreshRates powoduje pobranie cen z serwera: nic takiego się nie dzieje. RefreshRates jedynie przepisuje informacje z wątku terminala obsługującego otrzymywanie kwotowań do wątku w którym działa EA.
Dzięki za wyjaśnienia
A więc Find="if(!testing) RefreshRates();" &Replace="" (bez cudzysłowów).
Na razie jest zabawa w testerze więc gołe OrderSend() jest ok.
Choć jest jedna rzecz która mnie niepokoi:
wątek EA jest najwyraźniej wykonywany później niż interfejs z wykresem i wskaźnikami.
Ostatnio przeniosłem pewien wskaźnik rysujący pewne obiekty do EA i porównywałem oba w czasie rzeczywistym na tym samym wykresie - EA był spóźniony przynajmniej o tik.
Jeżeli wsadzimy na wykres dużo różnych rzeczy to opóźnienie wykonywania EA zwiększy się jeszcze bardziej.
Czy to opóźnienie nie spowoduje, że Ask/Bid będą nieco nieświeże?
Jeżeli są uaktualniane na początku start() to może nie jest to problem.
A więc Find="if(!testing) RefreshRates();" &Replace="" (bez cudzysłowów).
Na razie jest zabawa w testerze więc gołe OrderSend() jest ok.
Choć jest jedna rzecz która mnie niepokoi:
wątek EA jest najwyraźniej wykonywany później niż interfejs z wykresem i wskaźnikami.
Ostatnio przeniosłem pewien wskaźnik rysujący pewne obiekty do EA i porównywałem oba w czasie rzeczywistym na tym samym wykresie - EA był spóźniony przynajmniej o tik.
Jeżeli wsadzimy na wykres dużo różnych rzeczy to opóźnienie wykonywania EA zwiększy się jeszcze bardziej.
Czy to opóźnienie nie spowoduje, że Ask/Bid będą nieco nieświeże?
Jeżeli są uaktualniane na początku start() to może nie jest to problem.
Jakże często ludzie mają już gotową opinię zanim zdążą pojąć istotę rzeczy.
A gdy już ta istota w pełni do nich dotrze, jakże często muszą zmagać się z konsekwencjami swojej opinii ;-)
A gdy już ta istota w pełni do nich dotrze, jakże często muszą zmagać się z konsekwencjami swojej opinii ;-)
Próba ognia - jak byłeś grzeczny i nie wkurzałeś admina to może Ci się uda...mike_05 pisze:Chciałem pochwalić, a tu na czerwono się zrobiło?personov pisze:Wersja v.5.0
Dodałem warunki przekroczenia wartości wskaźnika CCI.

Dla pocieczenia: tutejsi władcy są naprawdę miłosierni - chylę kapelusza i Dosiego Roku

I chyba tak zwyczajnie ludzkiej życzliwości.. nie ma tutaj takiego emoticon żeby to wyrazić obrazkowo...
Ostatnio zmieniony 01 sty 2012, 17:33 przez 259, łącznie zmieniany 1 raz.
Jakże często ludzie mają już gotową opinię zanim zdążą pojąć istotę rzeczy.
A gdy już ta istota w pełni do nich dotrze, jakże często muszą zmagać się z konsekwencjami swojej opinii ;-)
A gdy już ta istota w pełni do nich dotrze, jakże często muszą zmagać się z konsekwencjami swojej opinii ;-)
- daromanchester
- Przyjaciel Forum
- Posty: 2301
- Rejestracja: 02 maja 2009, 12:48
W zasadzie opóźnienia nie powinno być żadnego (zakładając, że EA nie wykonuje jakiś dużych obliczeń).259 pisze: Choć jest jedna rzecz która mnie niepokoi:
wątek EA jest najwyraźniej wykonywany później niż interfejs z wykresem i wskaźnikami.
Ostatnio przeniosłem pewien wskaźnik rysujący pewne obiekty do EA i porównywałem oba w czasie rzeczywistym na tym samym wykresie - EA był spóźniony przynajmniej o tik.
Jeżeli wsadzimy na wykres dużo różnych rzeczy to opóźnienie wykonywania EA zwiększy się jeszcze bardziej.
Czy to opóźnienie nie spowoduje, że Ask/Bid będą nieco nieświeże?
Jeżeli są uaktualniane na początku start() to może nie jest to problem.
Tyle teoria: w praktyce jak to w mt4: dzieją się rzeczy różne.
U jakiego brokera to miałeś i jaki był typ zleceń (instant czy market) ?
Coś podobnego już dyskutowaliśmy tu:
http://www.forex-nawigator.biz/dyskusje ... ht=#379171
To że dostawałem ticket, a zlecenia nie było w puli za to ponad minutę później requote? Instant Order i Market Maker oczywiściegreen7 pisze: U jakiego brokera to miałeś i jaki był typ zleceń (instant czy market) ?
Coś podobnego już dyskutowaliśmy tu:
http://www.forex-nawigator.biz/dyskusje ... ht=#379171

A z tą różnicą pomiędzy wykresem i Market Window (w wątku z tego linku) to naprawdę niezły sztos.
Wystarczy aby dać sobie spokój z takim brokerem.
Jakże często ludzie mają już gotową opinię zanim zdążą pojąć istotę rzeczy.
A gdy już ta istota w pełni do nich dotrze, jakże często muszą zmagać się z konsekwencjami swojej opinii ;-)
A gdy już ta istota w pełni do nich dotrze, jakże często muszą zmagać się z konsekwencjami swojej opinii ;-)