Moduł testujący MetaStocka w sam raz dla początkujących

Dzięki wbudowanemu, prostemu językowi programowania MetaStock umożliwia testowanie prostych strategii inwestycyjnych. Pokazujemy, jak korzystać z tych możliwości.

Aktualizacja: 11.02.2017 01:45 Publikacja: 04.07.2013 06:00

Moduł testujący MetaStocka w sam raz dla początkujących

Foto: sxc.hu

Ostatnich kilka artykułów z cyklu „Profesjonalny inwestor" poświęconych było testowaniu prostych systemów transakcyjnych bazujących na najbardziej popularnych wskaźnikach analizy technicznej. Zaprezentowałem m.in. system wybicia z kanałów cenowych, zwany systemem żółwi, oraz koncepcję Wellesa Wildera opartą na przekroczeniu przez cenę progu zmienności liczonego wskaźnikiem ATR. Strategie te testowałem na rynku kontraktów terminowych na WIG20, a wszystkie testy zostały przeprowadzone w programie MetaStock. W poniższym artykule chciałbym się skupić właśnie na możliwościach tego programu, a konkretnie na jego module „system tester". Postaram się przybliżyć podstawy języka MetaStock i pokazać, w jaki sposób, krok po kroku, można przeprowadzić test systemu na danych historycznych.

Trochę matematyki i logiki

MetaStock to jeden z najpopularniejszych programów dedykowanych analizie technicznej. Oprócz standardowych możliwości „zabawy" wykresem, czyli nanoszenia na niego różnych wskaźników (ponad 200 wskaźników wbudowanych w programie), posiada on również możliwość budowania i testowania systemów transakcyjnych. Opcja ta jest dostępna dzięki wbudowanemu, prostemu językowi programowania, który umożliwia zapis naszych kryteriów inwestycyjnych w formie precyzyjnego kodu. Język ten bazuje na pięciu identyfikatorach ceny, zapisywanych w języku angielskim: open (cena otwarcia), high (cena maksymalna), low (cena minimalna), close (cena zamknięcia) oraz volume (wielkość obrotu). Używając w kodzie tych identyfikatorów, pokazujemy programowi, którą cenę (albo wolumen) ma on brać pod uwagę podczas testu. Przykładowo, jeśli warunek kupna zapiszemy jako: cross(close,mov()), MetaStock zrozumie to jako przecięcie od dołu przez cenę zamknięcia konkretnej średniej kroczącej.

Profesjonalny inwestor

Oprócz identyfikatorów, język zawiera również operatory matematyczne, które są spoiwem łączącym poszczególne elementy kodu. Są to podstawowe działania: dodawanie (+), odejmowanie (-), dzielenie (/) oraz mnożenie (*). Zapisujące więc w kodzie wyrażenie: (high+low)/2, program będzie nam zwracał średnią z cen najwyższej i najniższej. Nawiasy wykorzystywane w kodzie służą pokazywaniu kolejności przeprowadzania działań.

Drugim ważnym spoiwem elementów kodu są operatory logiczne „and" oraz „or". Pierwszego używamy wtedy, gdy chcemy, by pewne warunki były spełnione łącznie, a drugiego, gdy wystarczy spełnienie tylko jednego spośród zapisanych w kodzie. Przykładowo, jeśli napiszemy: close>2 and macd()>0, program zrozumie, że cena zamknięcia musi być większa od dwóch i jednocześnie wskaźnik MACD musi być wyższy od 0, by całe wyrażenie było prawdziwe. Gdyby oba elementy łączył operator „or", wystarczyłoby spełnienie tylko jednego z warunków.

Ostatnim ważnym elementem języka MetaStock są dostępne w nim funkcje. W przedstawionych powyżej przykładach przewijały się już polecenia: cross, mov czy macd. Są to konkretne polecenia, które program ma wykonać. Cross oznacza przecięcie dwóch elementów, mov to rysowanie średniej kroczącej, a macd kreśli wskaźnik MACD. Używając tych funkcji nie musimy wklepywać całego wzoru matematycznego danego wskaźnika czy głowić się nad tym, jak za pomocą operatorów większości czy mniejszości zapisać, że pewna wartość przekracza inną. Takich funkcji w MetaStocku jest ponad 200. Nie trzeba znać ich wszystkich na pamięć – program posiada intuicyjny moduł pomocy, który podpowiada, jak wygląda dana funkcja i w jaki sposób jej używać.

Moduł testujący

Znając już podstawową składnię języka, możemy zacząć programowanie naszej strategii inwestycyjnej. W tym celu musimy skorzystać z modułu „system tester". Trzon modułu tworzą cztery zakładki dedykowane podstawowym regułom transakcyjnym: buy order (otwórz pozycję długą), sell order (otwórz pozycję krótką), sell short order (otwórz pozycję krótką) oraz buy to cover order (zamknij pozycję krótką). W poszczególnych zakładkach musimy zapisać warunki, które muszą być spełnione, by została otwarta konkretna pozycja. Przykładowo, jeśli w pierwszej zakładce wpiszemy: cross(close, mov(close,20,simple)), moduł odczyta to jako otwarcie pozycji długiej, gdy cena zamknięcia przekroczy od dołu w górę prostą średnią kroczącą z 20 sesji. Wypełniając poszczególne zakładki, tworzymy pełen zestaw reguł wchodzenia i wychodzenia z rynku.

Oprócz tego moduł testujący posiada również funkcję ustawiania konkretnych zleceń stop loss. Do wyboru jest zazwyczaj pięć możliwości: breakeven, maximum loss, inactivity, profit target oraz trailing. Pierwszy daje możliwość ustawienia linii obrony na poziomie wejścia na rynek, przy czym staje się on aktywny, gdy cena zmieni się na naszą korzyść o ustawioną odgórnie wartość. Drugi to standardowy stop początkowy, czyli określenie wielkości straty, po której osiągnięciu pozycja zostanie zamknięta. Trzecia opcja daje możliwość zamknięcia pozycji, jeśli kurs nie zmienił się o przyjętą odgórnie wartość w przyjętym odgórnie czasie. Profit target zamyka pozycję po osiągnięciu docelowego poziomu zysku, a trailing to ruchoma linia obrony chroniąca wypracowany wcześniej dorobek przez automatyczne podnoszenie/obniżenie swojego poziomu wraz z korzystną zmianą kursu.

Wybór najlepszych parametrów

Ostatnim ważnym elementem modułu testującego jest opcja optymalizacji. Dzięki niej możemy sprawdzić wyniki naszego systemu dla różnych wartości poszczególnych parametrów funkcji i wybrać tę wielkość, dla której wyniki są najbardziej satysfakcjonujące.

Trzymając się przykładu o przecięciu ceny i średniej, jeśli w kodzie zdefiniowałem kryterium otwarcia pozycji jako: cross(close, mov(close,20,simple)), moduł sprawdzi tylko jedną możliwość – przecięcie ceny zamknięcia i średniej z 20 sesji. Aby umożliwić sprawdzenie systemu dla różnych długości średniej (np. 25, 30, 35 sesji), należy w miejsce 20 wpisać zmienną „opt1". Następnie w okienku „optimizations" należy zdefiniować zakres testowanych wielkości, czyli największą i najmniejszą wartość parametru oraz wielkość kroku między kolejnymi testowanymi parametrami. Przykładowo, możemy sprawdzić wyniki systemu dla wszystkich opcji średnich od 5 do 50 sesji, jeśli krok ustawimy jako 1.

Znając język MetaStock i poszczególne elementy modułu „system tester", można bez problemu testować proste systemy transakcyjne. Powyżej przedstawiłem tylko podstawowy zakres funkcji modułu – w rzeczywistości jest on nieco bardziej rozbudowany. Dla inwestorów stawiających pierwsze kroki w świecie automatycznych strategii gry, MetaStock powinien stanowić dobry sposób na przetarcie pierwszych szlaków. Później warto sięgnąć po bardziej zaawansowane programy analityczne, które są wyposażone w język programowania o bardziej bogatej składni umożliwiającej zaprogramowanie wszystkiego, co nasza wyobraźnia wytworzy. Wśród nich jest AmiBorker, którego twórcą jest Polak – Tomasz Janeczko.

[email protected]

Program doceniony przez inwestorów

MetaStock to profesjonalne oprogramowanie analityczne służące do przeprowadzania analizy technicznej wykresów giełdowych. Zostało stworzone przez Equis International, firmę należącą do Reutersa. Program MetaStock uzyskał 20 razy z rzędu (w latach 1993–2012) tytuł zwycięzcy Technical Analysis of Stocks and Commodities Readers' Choice Award, nagrody przyznawanej przez czytelników najbardziej prestiżowego magazynu dla inwestorów giełdowych – „Technical Analysis of Stocks and Commodities". Jego ostatnia wersja zawiera bardzo rozbudowaną paletę funkcji. Wśród nich są cztery standardowe moduły: system tester (testowanie systemów transakcyjnych na danych historycznych), indicator builder (tworzenie własnych wskaźników analizy technicznej), explorer (możliwość filtrowania bazy danych według konkretnych kryteriów cenowych), option scope (pozwala na prowadzenie analizy wpływu warunków rynkowych na ceny opcji) oraz expert advisor (tworzenie systemów eksperckich wspomagających decyzje). Ponadto program umożliwia analizę danych w czasie rzeczywistym. W podstawowej wersji oprogramowania mamy możliwość korzystania z ponad 250 gotowych wskaźników analizy technicznej oraz przykładowych systemów transakcyjnych. Oprogramowanie nie należy niestety do najtańszych. Jego cena w zależności od wersji waha się między 2500 zł i 7500 zł. Dla chcących wypróbować możliwości Metastocka producent udostępnia 30-dniowe, bezpłatne wersje testowe.PZ

Przykładowy kod dla poszczególnych transakcji systemu zmienności Wildera

BUY ORDER Cross(close, ref(LLV(close,7)+3*ATR(7),-1))

System będzie otwierał pozycję długą, jeśli cena zamknięcia dzisiejszej sesji (close) przekroczy sumę najniższej ceny z poprzednich siedmiu sesji (LLV(close,7)) i trzykrotności wskaźnika ATR dla siedmiu poprzednich sesji; funkcja ref odpowiada za przeprowadzenie obliczeń począwszy od zamknięcia poprzedniej sesji.

SELL ORDER Cross(ref(HHV(close,7)-3*ATR(7),-1),Close)

System zamknie pozycję długą, gdy cena zamknięcia dzisiejszej sesji spadnie poniżej różnicy najwyższej ceny z poprzednich siedmiu sesji (HHV(close,7)) i trzykrotności wskaźnika ATR dla siedmiu poprzednich sesji.

SELL SHORT ORDER Cross(ref(HHV(close,7)-3*ATR(7),-1),Close)

Komenda jest taka sama jak dla polecenia SELL ORDER, ponieważ system Wildera zakładał ciągłą obecność na rynku. Jeśli cena zamknięcia spadnie poniżej różnicy najwyższej ceny z poprzednich siedmiu sesji i trzykrotności wskaźnika ATR dla siedmiu poprzednich sesji, system zamknie pozycję długą i jednocześnie otworzy krótką.

BUY TO COVER ORDER Cross(close, ref(LLV(close,7)+3*ATR(7),-1))

Komenda jest taka sama, jak dla polecenia BUY ORDER, ponieważ system będzie zamykał pozycję krótką i jednocześnie otwierał pozycję długą. Warunkiem jest przekroczenie przez dzisiejszą cenę zamknięcia sumy najniższej ceny z poprzednich siedmiu sesji i trzykrotności wskaźnika ATR dla siedmiu poprzednich sesji    PZ

Materiał Promocyjny
Financial Controlling Summit
Inwestycje
Zbieranie danych w grupie kapitałowej
Inwestycje
Konrad Łapiński, Total FIZ: Nowe rekordy są już mało prawdopodobne
Inwestycje
Złoto z historycznym rekordem. Ile cena może jeszcze wzrosnąć?
Inwestycje
Grzegorz Pułkotycki, Starfunds: Czas na demokratyzację hossy