Język AFL w Amibrokerze jest potężnym narzędziem konstruowania systemów inwestycyjnych. Można też przeprowadzić bardzo rozbudowane testy zanim zainwestuje się prawdziwe pieniądze. Jednak kilka błędów może spowodować, że wszystkie testy będą przekłamane, a Twoja inwestycja będzie zagrożona. Zobacz jak się przed tym uchronić

Data dodania: 2011-05-04

Wyświetleń: 1647

Przedrukowań: 0

Głosy dodatnie: 0

Głosy ujemne: 0

WIEDZA

0 Ocena
Pobierz artykul

Licencja: Creative Commons

Pierwszym błędem jest sięganie po dane przyszłe. Jest to błąd czasami bardzo trudny do znalezienia w kodzie, zwłaszcza gdy jest już zaszyty w bardziej złożonych grupach instrukcji. Więc lepiej od razu przyswoić sobie właściwe nawyki i go nie popełniać.

W Amibrokerze jest taka instrukcja AFL która służy do przesuwania danych. Jest to funkcja Ref ( Tablica, Przesunięcie ). Pozwala ona pobrać do obliczeń dane sprzed dowolnej liczby słupków. Jeżeli spojrzysz na dane w Amibrokerze, to np. zamknięcie najstarszego słupka jest określone jako Close[0], a najnowszego Close[x], gdzie x jest numerem ostatniego słupka.

Teraz wyobraź sobie. Gdy wywołujesz Ref ( Close, -2), sięgasz dwa słupki do tyłu. Czyli np. podczas obliczeń dla słupka 10 dane pobierane są ze słupka 10-2, czyli ze słupka 8. Ponieważ słupek 8 jest starszy, był wcześniej niż 10, tak jest ok. Bo przecież cała analiza techniczna polega na sięganiu w przeszłość i obliczaniu na podstawie tej przeszłości bieżącej sytuacji.

Jednak gdy użyjesz Ref( Close, 2), sięgasz do danych o dwa słupki nowszych. W teście jest to wykonalne. Na przykład licząc dzisiaj gdy to czytasz coś dla szczytu 29 października 2007, znasz notowania dwa słupki później, czyli 31 października. Ale potem w prawdziwym życiu taki system nie otrzyma danych z przyszłości. Dzisiaj nie wiesz co będzie za dwie sesje. Nie znasz przecież przyszłości i Amibroker też jej nie zna.

Prosty system dający niesamowite rezultaty w testach:

            Buy = ( 1.02*Close < Ref(Close,1) );
            Sell = ( Close > Ref( Close,1) );
            Buy = ExRem( Buy,Sell );
            Sell = ExRem( Sell,Buy );

Zrobi z 10 000 zł w 10 lat inwestując tylko na danych dziennych 47 552 245zł. Czterdzieści siedem milionów! To jest ponad 475 tysięcy %!

Ale ten system sięga po dane przyszłe. Na prawdziwym rynku nie ma w ogóle szans na zyski i jakiekolwiek podejmowanie decyzji.

Dlatego pilnuj, żeby zawsze parametr który w funkcji Ref() oznacza przesunięcie miał wartość ujemną. Tylko wtedy Twój system działa w realnym świecie.

Licencja: Creative Commons