0
głosów
- +

6 największych błędów przez które Twój system inwestycyjny w AFL będzie oszukiwał przy testach, a potem będzie tracił na giełdzie - błąd #4

Autor:

Aktualizacja: 04.05.2011


Kategoria: Finanse i Ekonomia / Inwestowanie


Artykuł
  • 0 głosów dodatnich
  • 0 głosów ujemnych
  • 2628 razy czytane
  • 1 przedrukowany
  • 0 Polemik/Poparć <span class="normal">Odpowiadanie na artykuł</span>
  • Licencja: CC <span class="normal">Zezwala się na kopiowanie, dystrybucję, wyświetlanie i użytkowanie dzieła i wszelkich jego pochodnych pod warunkiem umieszczenia informacji o tw&oacute;rcy.</span>
Dostęp bezpłatny <span class="normal">Dostęp do treści jest bezpłatny.<br/> Inne pola eksploatacji mogą być zastrzeżone sprawdź <b>licencję</b>, żeby dowiedzieć się więcej</span>
 

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ć.


Błąd czwarty nie jest błędem charakterystycznym tylko dla programowania systemów inwestycyjnych, czy dla Amibrokera i języka AFL. Jest to błąd dokuczający programistom w wielu językach programowania, choćby w C/C++, PHP i kilku innych.

Chodzi o drobny błąd zapisu. Jeden znak za mało, ale rezultaty są bardzo nieprzewidywalne. Zwłaszcza, że akurat Amibroker nie ma porządnego debuggera z wykonywaniem kodu linijka po linijce i podglądaniem zawartości zmiennych.

Ten błąd zapisu, to użycie znaku = zamiast == w instrukcjach warunkowych.

W AFL zapis

            sesja = Close - Open;

oznacza, że do zmiennej sesja zostanie przypisany wynik obliczenia. W tym wypadku różnica między zamknięciem i otwarciem słupka.

Natomiast porównanie wymaga dwóch znaków równa się "==". Czyli dla przykładu, jeżeli chcesz wyłapać wszystkie sesje które zamknęły się na tym samym poziomie co otworzyły (tak zwana świece doji), możesz zapisać to wg potrzeb:

            if( Close[i] == Open [i] ) ...

lub

            Iif( Close == Open, ...

lub wreszcie możesz przypisać to do zmiennej

            doji = ( Close == Open );

Co się jednak stanie, gdy np. w ostatnim zapisie pomylisz się i zapomnisz o drugim "="?

            doji = ( Close = Open );

Otóż Amibroker potraktuje to jako przypisanie. Do zmiennej Close przypisze wartość z Open, a następnie tą sama wartość przypisze do zmiennej doji. Czyli wykona:

            Close = Open;
            doji = Close;

Nie będzie w tym żadnego sprawdzania i porównywania. Wyjdzie zwykłe podstawienie zmiennych.

A co z instrukcjami warunkowymi If i Iif? Błędnie zapisane:

            if( Close[i] = Open [i] ) ...

lub

            Iif( Close = Open, ...

również spowodują podstawienie wartości z prawej do zmiennej z lewej strony.  I wartość tego podstawienia będzie brana pod uwagę przy decydowaniu o spełnieniu warunku.

W AFL fałsz (False) jest równy 0. Prawda (True) natomiast jest domyślnie liczbą 1. Jednak każda wartość różna od 0 jest uznawana za wynik prawdziwy. Czyli w takich dwóch zapisach jak powyżej, warunek będzie prawdziwy dla wszystkich Open różnych od 0, a fałszywy dla wszystkich Open równych 0. Natomiast Close będzie miało skasowaną oryginalną zawartość i przyjmie wartości z tablicy po prawej stronie zapisu.

Jak bronić się przed tym błędem? Najlepiej pamiętać o "==" w trakcie pisania. Jednak dodatkowo po napisaniu kodu możesz wyszukać w nim wszystkie "if" i sprawdzić czy któryś nie zawiera samego "=" w wyniku pomyłki. Cofnij się kursorem tekstowym na sam początek programu i wciśnij Ctrl-F. Wyskoczy okienko w którym wpiszesz "if". Następnie obserwując wciskaj [Enter] aż do końca kodu. Komputer po kolei pokaże Ci wszystkie miejsca, gdzie znajduje się instrukcja "if". Dodatkowo pokaże także wszystkie instrukcje "Iif". Ty musisz tylko patrzeć uważnie czy zapisy są prawidłowe i ewentualnie dokonać poprawek.


Podobał Ci się artykuł?
0
głosów
- +

Brak polemik/poparć




KOMENTARZE


Używając tej strony zgadzasz się na wykorzystywanie plików Cookie.
Dowiedz się więcej.

Używamy plików cookies, aby ułatwić Ci korzystanie z naszego serwisu oraz do celów statystycznych. Jeśli nie blokujesz tych plików, to zgadzasz się na ich użycie oraz zapisanie w pamięci urządzenia. Pamiętaj, że możesz samodzielnie zarządzać cookies, zmieniając ustawienia przeglądarki. Z dniem 25.05.2018 wprowadziliśmy też w życie rozporządzenia dotyczące ochrony danych osobowych. Więcej informacji w naszej Polityce Prywatności i Regulaminie.

Zamknij