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 te 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ń: 1796

Przedrukowań: 0

Głosy dodatnie: 0

Głosy ujemne: 0

WIEDZA

0 Ocena

Licencja: Creative Commons

Błąd trzeci wiąże się również z ceną, ale ma również cechy sięgania do danych przeszłych. Tak samo trudny jest do wykrycia gdy zostanie już mocno obudowany innym kodem. Aby się przed nim uchronić trzeba wyrobić sobie prawidłowy nawyk analizy już na etapie tworzenia założeń systemu.

Błąd ten sięga do danych przeszłych, ale robi to subtelniej. Nie używa on bowiem funkcji Ref(), a jedynie steruje ceną i sygnałem w sposób nie do powtórzenia na rzeczywistym rynku.

Przykładem jego jest wygenerowanie sygnału w trakcie trwania lub na koniec słupka i zawarcie transakcji po cenie otwarcia tego samego słupka.

Zobacz bardzo prosty, ale skrajny kod takiej sytuacji:

            Buy = (Close>Open);
            Sell = Buy;
            BuyPrice = Open;
            SellPrice = Close;

Wszystko wygląda w porządku. Amibroker nie wniesie żadnych poprawek do transakcji, bo ceny przyjęte do transakcji rzeczywiście występowały na rynku. Nie ma instrukcji Ref(), więc wydaje się, że nie ma nawet co sprawdzać, czy przypadkiem nie sięgasz do danych przyszłych. Jednak zastanów się nad chronologią.

Kupujesz w cenie otwarcia wg. jakiegoś sygnału - możliwe.

Sprzedajesz w cenie zamknięcia zaraz w tym samym dniu - możliwe.

Sygnał kupna masz gdy słupek jest rosnący, czyli gdy zamknie się wyżej niż się otworzył - jak najbardziej możliwe.

Ale ale. Sygnał przecież jest generowany po zamknięciu słupka. Wtedy dopiero znasz prawdziwą cenę Close. Załóżmy, że inwestujesz na interwale dziennym. Jak zamierzasz wieczorem na koniec sesji zawrzeć realną transakcję w cenie z samego rana?

Musisz zachować uważność nie tylko w trakcie użycia funkcji Ref(). Tak samo w trakcie wyznaczania ceny transakcji nie wystarczy sprawdzić, czy jest ona realnie osiągalna na rynku. Musisz jeszcze pomyśleć nad chronologią.

Po prostu zawsze sprawdź w jakim momencie występuje sygnał, a w jakim momencie występuje przyjmowana cena. Amibroker ma bardzo ograniczone możliwości przypilnowania Ciebie w takiej sytuacji. Jeżeli cena jest dostępna równocześnie z sygnałem - ok. W wielu przypadkach tak będzie dobrze. Jeżeli cena jest brana z otwarcia kolejnego słupka lub transakcja jest jeszcze bardziej opóźniona - masz sytuację idealną i najbardziej zgodną z tym jak inwestowanie wygląda w rzeczywistości.

Licencja: Creative Commons