JAREK67 pisze:Punkty kontrolne, TP i SL to słaba koncepcja.
Alx ? Przywiało cię tu po latach z Comparica?
Witam, witam
JAREK67
Może nie tyle przywiało ile jakoś tak się złożyło, że wpadło mi coś do głowy co wydaje się idealnie pasuje do tego wątku.
Zwłaszcza, że to tutaj można znaleźć najbardziej doświadczonych w boju poszukiwaczy tego nieszczęsnego Grala
Dokładnością na razie się nie przejmuję bo na w tej chwili bardziej chodzi o samą koncepcję.
-- Dodano: pt 30-03-2018, 12:19 --
UWAGA - tutaj się zaczyna!
(to miał być osobny post ale mi go automatycznie połączyło z poprzednim)
W załączeniu prosty kod EA do eksperymentów z przyszłą wartością MA(3) Typical.
Działa to tak:
z różnych powodów o których jeszcze będzie mowa na razie operujemy na słupkach dziennych.
Każdego dnia sprawdzane są warunki otwarcia zlecenia i praktycznie każdego dnia pojawia się Buy lub Sell na otwarciu.
Do wygenerowania sygnału potrzebna jest przyszła wartość MA(3) i tutaj trzeba zrobić małe obejście ponieważ tester nie pozwala odczytać przyszłej wartości wskaźnika ([t-1])
Muszę więc go najpierw wygenerować i zapisać do pliku.
Potem mogę to odczytać i wygenerować sygnał kupna lub sprzedaży.
Za pierwszym (albo każdym) przejazdem testera EA generuje plik w którym zapisuje MA(3) Typical z sygnaturą czasową poprzedniego słupka. Ten pierwszy test można zrobić na danych zgrubnych (druga opcja w wyborze dokładności danych w testerze).
W pierwszym teście EA nie wygeneruje żadnego sygnału, nie będzie żadnych zleceń i to jest zupełnie normalne.
Po tym pierwszym teście można już normalnie z tym działać w lepszej jakości danych tikowych.
Dalej EA będzie robić tak jak pokazane jest w funkcji start():
Kod: Zaznacz cały
int signal = getFutureMaSignal();
if (signal != 0) setTrades(signal);
- na otwarciu każdego słupka dziennego funkcja getFutureMaSignal() odnajduje odpowiednią wartość przyszłej MA i porównuje z poprzednią z tej samej tabelki (nie wnikając na razie w szczegóły jest to istotne aby to tak zostawić a nie porównywać po prostu z iMA() dla bieżącego słupka). Jeżeli jest większa to generuje Buy, jeżeli mniejsza to generuje Sell.
W każdym innym przypadku sygnał = 0 czyli nic nie robimy.
Tak po prostu i lepiej to tak na zostawić bo z różnych powodów nie m co liczyć na lepszą jakość sygnału.
- sygnał przekazywany do setTrades(int signal = 0) który zwyczajnie otwiera Buy lub Sell w zależności od sygnału.
Na razie zlecenia otwierane są ze sztywnym lotem, tp i sl.
Mimo, że EA działa na słupkach dziennych, test można uruchomić na dowolnej niższej ramce czasowej.
Całość jest prościutka, wręcz prymitywna ale dzięki temu łatwa do przerobienia na cokolwiek komu wpadnie do głowy.
Jedno pole do eksperymentów to filtrowanie sygnałów generowanych przez getFutureMaSignal() - jest tutaj wiele możliwości.
Drugie pole to otwieranie zleceń i zarządzanie otwartymi pozycjami.
Pomijając już regulację lot (tzw. money management) znów jest wiele możliwości dopasowywania sl, tp, dynamicznej ich zmiany, grupowania pozycji itp.
Filtrowanie sygnałów najlepiej jest zrobić poza getFutureMaSignal() - znów z różnych powodów lepiej zostawić tę funkcję taką jak teraz jest i filtrować sygnały np. w ten sposób:
Kod: Zaznacz cały
int start()
{
int signal = getFutureMaSignal();
signal = filtr(signal); // funkcja filtrująca oryginalny sygnał, zob. niżej
if (signal != 0) setTrades(signal);
...
}
int filtr(signal = 0) // funkcja filtrująca oryginalny sygnał
{
if (signal == 0) return (0);
if (signal == Buy)
{
signal = ... // jakieś warunki potwierdzenia/zaprzeczenia sygnału...
}
if (signal == Sell)
{
signal = ... // jakieś warunki potwierdzenia/zaprzeczenia sygnału...
}
return (signal)
}
-- Dodano: pt 30-03-2018, 19:15 --
Znów automatycznie połączone posty...
A tutaj na zajudzkę przykład przewidywania takiej średniej dla EURUSD - wystarczy skopiować zawartość tego pliku do pliku który wygenerował crazzy_simple z przesuniętą MA (np. EURUSD_ma3typical_shifted.csv) i puścić jeszcze ra tester EURUSD w okresie 2017.11.1 - 2018.03.24
(najlepiej przestawiając wcześniej opcję writeMaOnExit na False bo inaczej zamaże na końcu testu)
Uważne oko zaobserwuje, że wartości jakie pojawiają się w tym pliku znacznie odbiegają od tego co wygenerował EA - zgadza się, to są wartości w zakresie od -1 do 1 do którego trzeba było przetworzyć dane wejściowe aby łatwiej je łyknęła ta być-może-Kryształowa-Kula
Można to przeskalować do oryginału ale nie ma takiej potrzeby.
Przynajmniej tak długo jak nikt nie dłubie w zasadniczej części getFutureMaSignal() ;-)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
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 ;-)