czwartek, 2 lutego 2012

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 #3

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 #3

Autorem artykułu jest Rafał Wysocki



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

---

Zbuduj swój własny, skuteczny system inwestycyjny.
Więcej dowiesz się na
http://zobacz.CzarodziejAFL.pl/

Akcje, Kontrakty FW20, DAX, S&P500, Forex.


Artykuł pochodzi z serwisu www.Artelis.pl

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 #2

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 #2

Autorem artykułu jest Rafał Wysocki



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 drugi wiąże się z ceną. Również może być trudny do wykrycia. Na dodatek nie wiadomo na ile fałszuje wynik testu. Może to robić tylko trochę, ale może też powodować wyniki niesamowicie różne od możliwych w rzeczywistości.

W Amibrokerze w momencie kiedy zawierasz transakcję masz możliwość zadecydowania po jakiej cenie jest ona wykonywana. Dotyczy to oczywiście wszystkich czterech możliwych transakcji - czy to kupna, czy sprzedaży, czy odpowiednich transakcji dla pozycji krótkiej.

Najlepszą praktyką jest zawsze zawieranie transakcji po cenie zamknięcia słupka, lub jeszcze lepiej po cenie otwarcia następnego słupka. Jednak są sytuacje, kiedy nie będzie to wystarczające. Np. jeżeli wykreślasz linię stop. Możesz sprawdzać jej przekroczenie dopiero po cenach zamknięcia i sprawa jest prosta. Stosujesz wtedy właśnie jedną z dwóch przedstawionych przed chwilą cen.

Ale możesz też traktować stop jako zlecenie oczekujące na rynku. Wtedy nawet gdy inwestujesz wg danych dziennych, stop musisz obserwować w danych intraday. Tak musi być, ponieważ stop ten zadziała również w trakcie sesji, a nie tylko na jej koniec. Jeżeli sesja otworzy się nad linią stop i w ciągu dnia ją przetnie, masz prawo założyć, że zlecenie zrealizowało się dokładnie w cenie przez nią wyznaczanej.

Jednak właśnie tu tkwi jedna z pułapek. Co bowiem, gdy rynek otworzy się luką i od razu będzie sporo poniżej linii stop? Jeżeli przyjmiesz jako cenę transakcji wartość wynikającą z tej linii, to stwarzasz sytuację niemożliwą do osiągnięcia na prawdziwym rynku. W tej konkretnej sytuacji najlepszym rozwiązaniem jest przyjęcie ceny otwarcia słupka. Po prostu zakładasz, że widząc otwarcie słupka poniżej linii stop od razu zamykasz transakcję.

Jest to przykład wzięty z prawdziwych systemów inwestycyjnych. A nie jest on jedyną możliwością zafałszowania ceny.

Tak naprawdę w kodzie AFL możesz podstawić dowolną cenę transakcji. Bez względu na to, czy była ona realnie do osiągnięcia. Bez względu nawet na to, czy taka cena występowała na rynku.

Amibroker stara się taki błąd wyeliminować i ogranicza cenę do takiej jaka w danym słupku była możliwa. Także jeżeli Ty przyjmiesz cenę spoza słupka, on do transakcji weźmie maksimum lub minimum. Jednak dalej jest to sytuacja nieprawdopodobna i wynik testu będzie nieprawdziwy.

Zobacz skrajny przykład kodu fałszującego cenę

Buy = (DayOfWeek()==1);
Sell = Ref(Buy,-1);
BuyPrice = Low;
SellPrice = Ref(Low,-1)*10;

Kod ten kupuje zawsze w cenie minimum w poniedziałek, a usiłuje sprzedać we wtorek w cenie 10 razy wyższej. Samo to, że Amibroker przyjmie przy sprzedaży cenę maksimum nie powoduje prawidłowego działania takiego systemu. Choćby dlatego, że cena minimum i maksimum słupka znana jest dopiero po fakcie, po zakończeniu tego słupka. Więc jest to cena nierealna dla prawdziwych transakcji.

Dlatego właśnie zawsze musisz przemyśleć realność stosowanych cen. Zawsze musisz też sprawdzić, czy były one znane w momencie zawierania transakcji.

---

Zbuduj swój własny, skuteczny system inwestycyjny.
Więcej dowiesz się na
http://zobacz.CzarodziejAFL.pl/

Akcje, Kontrakty FW20, DAX, S&P500, Forex.


Artykuł pochodzi z serwisu www.Artelis.pl

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 #1

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 #1

Autorem artykułu jest Rafał Wysocki



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ć

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.

---

Zbuduj swój własny, skuteczny system inwestycyjny.
Więcej dowiesz się na
http://zobacz.CzarodziejAFL.pl/

Akcje, Kontrakty FW20, DAX, S&P500, Forex.


Artykuł pochodzi z serwisu www.Artelis.pl

Jak zaprogramować stop który się nie cofa za pomocą Amibrokera i języka AFL

Jak zaprogramować stop który się nie cofa za pomocą Amibrokera i języka AFL

Autorem artykułu jest Rafał Wysocki



W Amibrokerze bardzo łatwo wylicza się podstawę do skutecznego zlecenia stop. Czy to odległość procentową, czy odległość liczoną ze zmienności. Jednak linia taka narysowana na wykresie będzie iść za wykresem w obydwu kierunkach. Poznaj prosty sposób aby przesuwała się tylko w jednym kierunku.

Podstawową zasadą większości zleceń stop jest podążanie za wykresem po rozpoczęciu inwestycji. Jednak podążanie to powinno odbywać się tylko w kierunku ochrony kapitału. Są przecież sytuacje, kiedy poziom stop wynikający z aktualnych obliczeń jest niższy niż wyliczony poprzednio. Są też takie momenty, kiedy rynek się cofa w kierunku Twojego ostatniego poziomu ochrony. W takich sytuacjach zlecenie stop powinno pozostawać na wartości do której już raz dotarło. Ono nie ma prawa się cofać.

Łatwo powiedzieć, ale początkującemu systemowcowi trudno to uzyskać. Istnieje jednak proste rozwiązanie - wystarczy zastosować zwykłą pętlę.

Jak zwykle w programowaniu taki sam efekt można uzyskać na kilka sposobów. To jest zaledwie jedno rozwiązanie. Drugim jest chociażby użycie instrukcji tablicowych. Kod będzie jeszcze krótszy, ale trudniejszy do zrozumienia. Dlatego poznaj najpierw sposób łatwiejszy.

W tym przykładzie zobaczysz jedynie rozwiązanie problemu cofania. Zakładam, że masz już policzoną odległość stop dla każdego słupka. Obliczenia umieść w tablicy stop1. Np. dla stopu na 5% inwestycji:

stop1 = High * 0.95;

Czas na właściwą linię stop. Umieść ją w zmiennej liniaStop. Dla pierwszego słupka oczywiście musisz przyjąć, że liniaStop jest na tym samym poziomie co stop1:

liniaStop[0] = stop1[0];

Ale co dalej?

Teraz należy przejrzeć wszystkie kolejne słupki od 1 do końca stosując następujące regułę:

Jeżeli stop1 przesuwa się dalej niż dotychczasowa liniaStop, to przesuń liniaStop na wartość taką jak stop1.
Jeżeli nie, oznacza to, że stop1 się cofnął lub nie zmienił. Użyj wtedy dotychczasowej wartości liniaStop.

Po zapisaniu jako AFL wygląda to tak:

for ( i =1; i {
if ( stop1[i] > liniaStop[i-1] ) liniaStop[i] = stop1[i];
else liniaStop[i] = liniaStop[i-1];

//*
}

Jednak brakuje jeszcze jednego ważnego elementu. Tak narysowany stop będzie szedł w górę wykresu również wtedy, gdy zostanie zrealizowany. Będzie się wspinał na wyższe i wciąż wyższe poziomy. Trzeba dodać jeszcze warunek zrealizowania stopu:

Gdy cena zamknięcia zejdzie poniżej liniaStop, pozwól na cofnięcie.

Uznajesz wtedy, że nastąpiło przecięcie i nastąpiła realizacja zlecenia ochronnego. Tym samym zakaz cofania stopu przestaje obowiązywać i przywracasz mu wartość obliczoną w stop1.

W kodzie w miejscu gwiazdki wystarczy dodać:

if ( Close[i] < liniaStop[i] ) liniaStop[i] = stop1[i];


To wszystko. Najprostszy stop masz już zaprogramowany i linia się nie cofa do momentu jego realizacji.

Oczywiście można teraz dodać instrukcje rysujące linie, dodać zaznaczanie sygnałów itd. Można też zastosować bardziej skomplikowane reguły wyliczania linii stop1, nie tylko jako odległość procentową. Jednak ten kod już jest podstawą do rozbudowy w kierunku dowolnie skomplikowanych systemów inwestycyjnych.

---

Zbuduj swój własny, skuteczny system inwestycyjny.
Więcej dowiesz się na http://zobacz.CzarodziejAFL.pl/

Akcje, Kontrakty FW20, DAX, S&P500, Forex.


Artykuł pochodzi z serwisu www.Artelis.pl

9 sekretów twórców najskuteczniejszych automatycznych systemów inwestycyjnych - sekret #9

9 sekretów twórców najskuteczniejszych automatycznych systemów inwestycyjnych - sekret #9

Autorem artykułu jest Rafał Wysocki



Czy wiesz, że na dobry automatyczny system inwestycyjny składa się wiele ważnych elementów? Niektóre z nich wydają się sprzeczne z logiką. Jednak początkujący twórca bez ich znajomości łatwo zacznie tracić pieniądze. Przeczytaj jak Ty możesz ustrzec się przed tymi błędami, a co może dać Ci przewagę.

Każdy rynek inwestycyjny ma swoją specyfikę. Inaczej zachowują się akcje, inaczej kontrakty. Inaczej zachowują się walory polskie, inaczej amerykańskie czy choćby niemieckie. Jeszcze inaczej zachowują się poszczególne pary walutowe na rynku forex.

Jednak jest pewna cecha wspólna której musisz poszukiwać. Jako początkujący (lub nawet średnio zaawansowany) systemowiec musisz szukać walorów które zachowują się trendowo. Nie chodzi tu jednak o ocenę wizualną na wykresach.

Podstawowa zasada brzmi: Buduj systemy inwestujące z trendem.

Być może dziwisz się właśnie. Przecież słyszy się o skalpowaniu rynku. O błyskawicznych wejściach i wyjściach w walor. O inwestowaniu nawet na ciasnych konsolidacjach.

Jednak prawdopodobnie to nie są techniki dla Ciebie. Metody inwestowania na krótkich ruchach najlepsze są dla dużych inwestorów. Wykładają się one bowiem najczęściej na prowizjach. Tak zwany "grubas", czy to fundusz, czy prywatny inwestor z dużym kapitałem ma zupełnie inne prowizje niż Ty. Albo ma je niższe, albo nie ma ich wcale. Płaci wtedy jedynie stały abonament. Może pozwolić sobie na łapanie kilku groszy, punktów czy pipsów.

Natomiast metody inwestowania z trendem generują mniej sygnałów przy większym zysku. Znacznie łatwiej jest skonstruować prawidłowo działający system który zarabia. Nie wymagają one pełnej automatyki zleceń. Pozwalają na wolniejsze reakcje, pozwalają też na inwestowanie przy większych interwałach.

To wszystko decyduje o tym, że od systemów z trendem powinieneś właśnie zaczynać.

Tworząc system musisz badać go dla konkretnego rynku lub nawet waloru. Np. wiele systemów sprawnie działających na kontraktach FW20 przestaje sobie radzić na DAX, S&P500, czy na Forex. To normalne. Oczywiście są systemy, które prawidłowo działają na wielu rynkach. Jeżeli taki uzyskasz - wspaniale! Jednak nie jest to celem nadrzędnym.

A co ze skalpowaniem rynku?

Możesz sięgnąć po nie gdy zdobędziesz już doświadczenie. Gdy staniesz się już zaawansowanym inwestorem poradzisz sobie również z tymi metodami. Będzie to wymagało inwestycji w rynki bardzo płynne. Najczęściej będzie to również wymagało, aby Twój system był w pełni automatyczny. Dojdą wtedy problemy z autonomicznym działaniem programów. Ale będzie to dużo prostszym wyzwaniem, gdy już będziesz mieć tworzenie systemów w małym palcu i inwestycje będziesz robić bez zbędnych emocji.

---

Zbuduj swój własny, skuteczny system inwestycyjny.
Więcej dowiesz się na
http://zobacz.CzarodziejAFL.pl/

Akcje, Kontrakty FW20, DAX, S&P500, Forex.


Artykuł pochodzi z serwisu www.Artelis.pl