czwartek, 2 lutego 2012

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

Brak komentarzy:

Prześlij komentarz