Tick data - 99% jakość modelowania w MetaTrader 4.

Tu można dyskutować o wszystkich sprawach związanych z rynkiem Forex.
Awatar użytkownika
leszczu
Pasjonat
Pasjonat
Posty: 672
Rejestracja: 25 paź 2010, 23:19

Nieprzeczytany post autor: leszczu »

Dzięki 259, ale niestety nie działa.
W momencie kiedy uruchamiam skrypt na wykresie nic się nie dzieje.
Nie wiem co jest.

259
Maniak
Maniak
Posty: 3968
Rejestracja: 15 cze 2011, 23:20

Nieprzeczytany post autor: 259 »

I nie powinno - skrypt działa w tle i nic nie pokaże się na wykresie.
Jak zakończy pracę powinno pojawić się okienko Alert z informacją, że skończył.

Uruchom go i zobacz do terminala (Ctrl T), zakładka Experts (w polskiej wersji Strategie), tam powinny pojawić się informacje dotyczące pracy tego skryptu. Może coś jest nie tak i tam będzie podpowiedź.

Duży masz ten plik? Może mógłbym go popróbować...
Ostatnio zmieniony 18 lip 2011, 09:10 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 ;-)

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

Nieprzeczytany post autor: leszczu »

tak jak myślałem

09:03:12 Cannot open file 'C:\Program Files\BOSSAFX\experts\scripts\Dukascopy2FXT.ex4' on the EURUSD,M1

wielkość pliku 120 mb - tylko od początku roku robię póki co

aha i jeszcze przed chwilą zmieniłem ustawienie regionalne na Angielski (USA) - tak Birt napisał na stronie - ale nic nie pomogło

259
Maniak
Maniak
Posty: 3968
Rejestracja: 15 cze 2011, 23:20

Nieprzeczytany post autor: 259 »

Po pierwsze powinieneś użyć skryptu JForex2FXT.
Po drugie trochę dziwnie to wygląda - w jaki sposób uruchamiałeś skrypt?

Chyba te skrypty są w niewłaściwym miejscu. Powinny być w podkatalogu ...\experts\scripts\
Np. G:\Program Files\MetaTrader 4 at FOREX.com\experts\scripts\JForex2FXT.mq4

Ew. może trzeba będzie je ponownie skompilować - czasami kompilaty nie zgadzają się z innymi podwersjami MT4.
Ostatnio zmieniony 18 lip 2011, 09:22 przez 259, łącznie zmieniany 2 razy.
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 ;-)

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

Nieprzeczytany post autor: leszczu »

Ja piernicze - pomyliłem skrypty :roll: :mrgreen:
Tera idzie - wreszcie jest komunikat, że starting process. :D

Dodano po 25 minutach:

Po zakończeniu działania skryptu wrzucić plik fxt do jakiego katalogu i jak przeprowadzić test?
Normalnie włączyć tester jak będę miał włączoną platformę zapuścić EA?

Zrobiłem tak i dostałem 25%

259
Maniak
Maniak
Posty: 3968
Rejestracja: 15 cze 2011, 23:20

Nieprzeczytany post autor: 259 »

To jaką jakość uzyskasz zależy od tego na czym pracował tester.
Jeżeli pracował normalnie, generując ticki na podstawie plików hst, to jakość może być niska bo pracuje na symulowanych tickach.

Jeżeli zaś użyłeś wygenerowanego pliku fxt to wszystko zależy, czy przed naciśnięciem klawisza Start uruchomiłeś skrypt "birt's patch". Ten skrypt wyłącza symulację ticków i zmusza tester do czytania pliku który mu ręcznie wstawiłeś. Jeżeli nie, to tester wygenerował swoje kasując jednocześnie twój plik.

Jest jeszcze jeden przypadek gdy jakość modelowania jest niska - tester próbuje ocenić jakość symulacji z róźnych ramek czasowych, a ty testujesz na M1 własny plik z prawdziwymi danymi. On myśli, że kiepsko wyszła mu ta symulacia i nie wie, że czyta prawdziwe dane. Można to zwyczajnie zignorować o ile jesteś pewien, że twoje dane są poprawne.

Dodano po 2 godzinach 16 minutach:
--------------------------------------------------------------------
Chyba jednak napiszę tę brakującą część - o co chodzi z tymi wszystkimi tickami, plikami, skryptami itd.
Przykro mi bardzo, ale wyszło długie. Mam tylko nadzieję, że nie za bardzo zawiłe…

Po pierwsze: MT4 nie przechowuje całej historii. Ani serwer brokera, ani lokalny klient. One przechowują słupki w różnych ramkach czasowych.
I co z tego? To, że nie jest to pełna historia notowań, a tylko zapis: od godz. X do godz. Y, cała akcja zwarła się pomiędzy Open, High, Low, Close i było Z kwotacji. Koniec.
A gdzie reszta?
Co się działo pomiędzy tymi czterema wartościami w tym fragmencie czasu?
To można znaleźć na niższej ramce. Patrzymy na słupek na H1, co tam się działo w szczegółach?
Schodzimy do M30 - ciut więcej akcji ale co dokładniej?
Schodzimy do M15… I tak dochodzimy do M1 i tutaj jest koniec, bo nie mamy niższej. A coś tam się działo i to mogła być bardzo intensywna gra - np. 300 kwotowań. Ale tego już nie ma. Było w czasie rzeczywistym bo broker wysyła przecież ticki, ale nie jest zapisane w historii i MT4 tego nam nie dostarczy.

Po drugie: aby naprawdę przetestować strategię potrzebne są ticki krok po kroku.
Ale jak napisałem wyżej MT4 ich nie ma. To jak on ma to zrobić?
Metaquotes wymyśliło algorytm symulacji tych ticków. Czyta pliki historii i na ich podstawie symuluje te ticki. Ale to nie są prawdziwe kwotacje tylko interpolacja - uzupełnianie brakujących danych na podstawie sąsiednich danych zgodnie ze wzorcem statystycznym.
To właśnie się dzieje, gdy naciskamy klawisz Start - pasek postępu jedzie raz od lewej do prawej i to jest generacja tych ticków. Potem znów jedzie od lewej i to jest dopiero właściwy test.

Na dodatek serwer brokera nie przechowuje zbyt długiej historii - 65535 słupków dla każdej ramki (a i tego często nie). Wychodzi to jakieś 45 dni dla najdokładniejszej M1.
O ile ustawiliśmy odpowiednio długość historii w programie i udało nam się to wymusić na serwerze brokera…

Jeżeli wybierzemy sobie do testowania np. H1 i dłuższy okres to będzie ciągnął różne ramki w zależności od tego co znajdzie w historii. Np. nie ma 25 dni w M1 więc będzie szukał na M5. Historia M5 może być niekompletna więc będzie się przełączał na M15 dla uzupełnienia… Jak dojedzie do początku M1, przełączy się na nią i dopiero od tego momentu będzie miał "lepsze" ticki. Wymuszenie pełnej aktualizacji historii z serwera brokera jest nie tylko trudne ale jeszcze nie gwarantuje jakości - jego dane mogą być porwane, mogą mieć jakieś szpilki np. 1000 pip będące tylko błędem technicznym, a nie prawdziwą kwotacją. Różne rzeczy się zdarzają i to wcale nie rzadko.

W skrócie jak to działa.
A teraz co z tymi danymi z Dukascopy i innych?

Udostępniają oni prawdziwą historię kwotacji.
Tick po ticku, bez żadnych ramek. Można to ściągnąć w ramkach ale nie ma to specjalnego sensu.
I nam teraz chodzi po prostu o to żeby przykazać to testerowi zamiast jakiś wirtualnych wyliczeń na podstawie niepełnych i niepewnych danych.

I tutaj dochodzimy do bardziej szczegółowych rzeczy.
Jest kilku brokerów, kilka metod ściągania, skrypty i inne rzeczy które są potrzebne przekonwertować to, co udostępnia broker na to, co kupi MT4.
Te szczegóły techniczne są bardzo istotne, inaczej wyjdą głupoty lub wielka strata czasu. Nie chcę jednak w to tutaj wnikać bo to jest już opisane.

Wyjaśnię jednak zasadę działania, bo tego zabrakło w tych opisach.

Broker udostępnia dane które są całkowicie niezjadliwe dla MT4. Musimy to przerobić na coś bardziej przyjaznego. Robi się to w dwóch etapach:

1) Ściągamy dane brokera i konwertujemy do tymczasowej postaci w pliku csv (Comma Separated Values),
2) Przetwarzamy te pliki csv na format docelowy.

Tester MT4 zapisuje sobie wygenerowane ticki w pliku …\tester\history\[symbol][ramka]_0.fxt.
Np. …\tester\history\USDJPY1_0.fxt - USDJPY na M1.
Ta ramka jest nieco myląca - w pliku fxt nie ma ramek tylko ticki, ale my w testerze mamy do wyboru na jakiej ramce chcemy testować i to oznaczenie w pliku odpowiada temu wyborowi. Oznacza to, że tester będzie poszukiwał takiego właśnie pliku, a jak go nie znajdze to wyrzuci błąd.
Tak więc trzeba się tej ramki trzymać tylko i wyłącznie dla porządku.
Testowanie na konkretnej ramce jest też nieco mylące - to, że EA używa słupków na jakieś ramce nie oznacza, że tylko na niej można testować. To jest w zasadzie dla testów zgrubnych. Dla najdokładniejszego testu powinniśmy wybierać M1 zakładając normalny tryb pracy testera, a nie nasze sztuczki (bo inaczej nie będzie sięgał tak głęboko do szczegółów). Przy podkładaniu pliku z prawdziwymi danymi, ramka czasowa nie powinna mieć już żadnego znaczenia (o ile kod EA nie ma jakiegoś istotnego błędu).

Do wygenerowania tego pliku służą odpowiednie skrypty które zostały ponazywane odpowiednio do źródła z którego generowane były pliki csv. Należy się tego trzymać.
Te skrypty mogą też wygenerować pliki historii słupków MT4 - hst. Po co? Ano żeby móc mieć to też na wykresach, a nie tylko w testerze. Jak kto potrzebuje.
Wszystko to razem: pliki wejściowe csv i wyjściowe fxt i hst znajdują się w folderze …\experts\files\
Po wygenerowaniu historii odpowiednie pliki należy przenieść do odpowiednich katalogów.

I już prawie jesteśmy w domu ale… jest jeszcze jedna pułapka - tester automatycznie generuje swoje fxt i jak naciśniemy klawisz Start, wymaże nam nasz plik i wstawi swój.
I tutaj właśnie potrzebny jest ten skrypt Birt's Patch - obezwładnia on tester i udostępnia parę dodatkowych opcji.

UWAGA TO WAŻNE: ten skrypt modyfikuje aktualnie uruchomiony program w pamięci komputera!
I nic więcej, zmiany nie są nigdzie zapisywane.
Oznacza to, że jego działanie zakończy się wraz zamknięciem programu. Następnie uruchomienie bez tej łatki i naciśnięcie klawisza Start spowoduje wymazanie i…
Trzeba o tym każdorazowo pamiętać albo strata czasu na generowanie nowego pliku ;-)

Można to trochę poprawić - ja zamieniłem skrypt w EA i przypiąłem do wykresu. W ten sposób startuje on automatycznie i pamięta ustawienia.
Jak zamienić na EA? To proste - skopiuj plik birt's patch.mq4 do …\experts\birt's patch EA.mq4 (przykładowo). Otwórz w edytorze, zmień start() na init() i skompiluj :)
Ostatnio zmieniony 19 lip 2011, 10:07 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 ;-)

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

Nieprzeczytany post autor: green7 »

259 - ogólnie dobrze prawisz.
Choć mam drobne "ale" :
259 pisze:Na dodatek serwer brokera nie przechowuje zbyt długiej historii - 65535 słupków dla każdej ramki (a i tego często nie). Wychodzi to jakieś 45 dni dla najdokładniejszej M1
Skąd pomysł na taki limit ? Wg. mnie nie jest to prawda (choćby dlatego, że serwer pisany w c++ używa do wszelkich operacji zwykle 4bajtowego typu int).
Brak historii wynika raczej z tego, że limity ustawione są u brokerów (jest też zapewne domyślny limit) ale serwer jak mniemam (nie bez podstaw) mógłby obsłużyć tu dowolnie długą historię. Gdyby tylko broker chciał .....

259 pisze:Można to trochę poprawić - ja zamieniłem skrypt w EA i przypiąłem do wykresu. W ten sposób staruje on automatycznie i pamięta ustawienia.
Jak zamienić na EA? To proste - skopiuj plik birt's patch.mq4 do …\experts\birt's patch EA.mq4 (przykładowo). Otwórz w edytorze, zmień start() na init() i skompiluj
Trzeba by to uzupełnić.... Musisz jeszcze skonfigurować terminal tak, żeby EA startowało automatycznie po jego odpaleniu. Czyli wrzucić EA na wykres, włączyć w opcjach startowanie EA, włączyć button załączający EA i ewentualnie dla pewności zapisać profil.
Wtedy po starcie terminal odpali EA, ono zpatchuje terminal i będzie można przeprowadzać testy z jakością 99%....

Niestety nie da się patcha wywoływać z EA przeznaczonego do testów (bo terminal najpierw zacznie tworzyć plik z historią ticków a dopiero później odpali start EA).

259 pisze:Po drugie: aby naprawdę przetestować strategię potrzebne są ticki krok po kroku. Ale jak napisałem wyżej MT4 ich nie ma
Eeee.... wcale niekoniecznie. Zależy to od EA.
Są EA które podejmują działania dopiero po zakończeniu formowania się świeczki (ot choćby trend followery).
W takim wypadku nie ma znaczenia co działo się w jej "wnętrzu", i nie ma też konieczności używania danych tickowych. Na dobrą sprawę można wtedy użyć prostszych metod modelowania (open prices, albo control points) co przyśpiesza znacznie testy.
Choć w większości EA dane tickowe są wskazane - to jednak nie jest to jak piszesz jedyna możliwość przetestowania strategii :)
Green
Obrazek
Obrazek

259
Maniak
Maniak
Posty: 3968
Rejestracja: 15 cze 2011, 23:20

Nieprzeczytany post autor: 259 »

Ok, limit 0xFFFF wyszedł mi z obserwacji. Nie wiem ile już mam zainstalowanych terminali rożnych brokerów ale ta wartość mi się powtarza jak mantra.
Możliwe, że brokerzy tak to ustawiają albo to są ustawienia domyślne. Jeżeli przesadziłem to przepraszam. Co nie zmienia faktu, że i tak nie da się wyciągnąć za dużo od brokera MT4 na M1/M5.

Tak to prawda, poszedłem trochę na skróty z tym EA.
Dla jednych takie rzeczy są oczywiste, dla innych nie. Trzeba odpowiednio skonfigurować MT - przykład w załączeniu.
I dla pewności dodać pustą funkcję start:

int start(){return(0);}

w tym przerobionym skrypcie.
Tak dla kompatybilności bo nigdy nie wiadomo co się zdarzy w przyszłych wersjach MT4. Zob. załącznik.
Ja mam po prostu otwarty jeden wykres z tym EA. Jak włączam MT4, uruchamia się jego init i to wystarcza - program jest zmodyfikowany.


Ok, to zależy od EA.
Choć też bywają różnice - świeczka zamyka się, EA nastawia się na wejście z pierwszym tickiem nowej, jest tick, leci zlecenie, ale że broker jest ECN to tej ceny już nie ma, następna jest gdzie indziej... Ale jeżeli kod nie jest na to wrażliwy to owszem. Sorry, pisałem to mając w głowie moje zabawki które działają na stopach i limitach. Bliższa koszula ciału ;-)
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 ;-)

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

Nieprzeczytany post autor: leszczu »

green7 pisze:Eeee.... wcale niekoniecznie. Zależy to od EA.
Są EA które podejmują działania dopiero po zakończeniu formowania się świeczki (ot choćby trend followery).
W takim wypadku nie ma znaczenia co działo się w jej "wnętrzu", i nie ma też konieczności używania danych tickowych. Na dobrą sprawę można wtedy użyć prostszych metod modelowania (open prices, albo control points) co przyśpiesza znacznie testy.
Choć w większości EA dane tickowe są wskazane - to jednak nie jest to jak piszesz jedyna możliwość przetestowania strategii Smile
Czyli co - w przypadku strategii, która podejmuje decyzje na podstawie zamkniętej świeczki testowanie na danych tickowych nie jest konieczne?

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

Nieprzeczytany post autor: green7 »

leszczu pisze:Czyli co - w przypadku strategii, która podejmuje decyzje na podstawie zamkniętej świeczki testowanie na danych tickowych nie jest konieczne?
Jeśli wszelkie decyzje podejmowane są po zakończeniu świeczki to zwykle nie.
Po co Ci wtedy ticki skoro do niczego ich nie używasz ?
Może tu wystąpić problem jeśli strategia działa na TF m1 i posiada TP/SL.
W takiej sytuacji jeśli zdarzy się, że świeczka swym zasięgiem obejmie zarówno TP jak i SL terminal nie będzie miał informacji o tym co zdarzyło się najpierw (TP czy SL). Będzie to wprowadzało małe zaburzenia do testu, aczkolwiek jeśli EA nie ma bardzo małych TP/SL to taka sytuacja wystąpi bardzo rzadko. Dodatkowo EA może raportować takie przypadki cobyśmy mieli o nich dokładne info.
Problem nie będzie dotyczyć TF wyższych od m1 - w takiej sytuacji terminal powinien wyciągnąć informacje o tym czy wcześniej był tp czy sl, korzystając z niższego TF - jak to opisał ładnie kolega wyżej.
Green
Obrazek
Obrazek

ODPOWIEDZ