Uniwersytet Warszawski

Wydział Matematyki, Informatyki i Mechaniki

 

Paweł Kot

Nr albumu 140841

 

Zastosowanie technologii XML do realizacji serwisu giełdowego

Praca magisterska

napisana pod kierunkiem

dr Janiny Mincer-Daszkiewicz

w Instytucie Informatyki

Warszawa 1999


1. Wstęp

Dynamiczny rozwój Internetu w ostatnich latach spowodował gwałtowny wzrost zainteresowania technikami prezentacji informacji. Tak pojedynczy użytkownicy, jak i całe korporacje, chcą zaprezentować swoje produkty, osiągnięcia czy dziedziny zainteresowań. Wobec zróżnicowanych oczekiwań i wymagań stawianych przed stronami tworzonymi na potrzeby WWW, zaistniała konieczność rozbudowania dostępnych narzędzi. Jednym ze sposobów zaspokojenia rosnących potrzeb użytkowników jest stopniowa ewolucja języka HTML. Kolejne jego wersje wzbogaca się zarówno o coraz bardziej złożone zestawy znaczników (ang. tags), jak również rozbudowuje o obsługę skryptów (JavaScript, VBScript), kontrolek ActiveX, czy apletów Javy. HTML (a właściwie DHTML) w swojej obecnej postaci umożliwia tworzenie całkiem złożonych stron internetowych, nie jest jednak rozwiązaniem uniwersalnym. Poważnym ograniczeniem aplikacji bazujących na tym języku jest brak możliwości reinterpretacji wyświetlanych danych. Każda zmiana funkcjonalności lub wyglądu (poza prostymi modyfikacjami, np. koloru tekstu) wymaga ponownego zakodowania - może tego dokonać wyłącznie właściciel. Lekarstwem na takie i inne niedogodności nie może być dalsze rozwijanie języka, który z założenia jest opisem wyglądu strony, trzeba wymyślić coś lepszego. Rozwiązaniem może się okazać XML [1] - nowy sposób przedstawiania, przesyłania i prezentacji danych.

XML, czyli eXtended Markup Language, to wywodzący się z SGML język znaczników, grupujący dane wraz z ich opisem. XML zostawia pełną swobodę optymalnego wyboru opisu danych, które chcemy zaprezentować. Dzięki temu dokładnie tę samą informację można opatrzyć innym zestawem znaczników, w zależności od potrzeb lub tego co uważamy za istotne. Nie oznacza to wcale, że jesteśmy zdani na improwizowanie - możemy równie dobrze skorzystać z jednego z oficjalnych, opublikowanych schematów opisu danych danego typu np.: dane finansowe (OFX - Open Financial eXchange), opis kanałów w technologii Active Channel (CDF - Channel Definition Format ), instalowanie oprogramowania poprzez Internet (OSD - Open Software Description). Do zdefiniowania konkretnego zestawu znaczników i nałożonych na niego zależności służą dwie niezależne metody: DTD (Data Type Definition) i XML Schema [2]. XML Schema jest bardziej uniwersalna, gdyż rozszerza DTD o możliwość precyzyjnego definiowania typu danych.

XML to jednak tylko dane wraz z pewnym opisem, zależnym od przyjętej konwencji. Potrzebna jest jeszcze interpretacja tej informacji. Takiej interpretacji dostarczyć może XSL [3] - język skryptów przetwarzających XML. Najogólniej rzecz biorąc XSL to nieskomplikowany zestaw metod i funkcji operujących na znacznikach XML i przekształcających je w inny zestaw znaczników, wzbogaconych o ewentualne dane tekstowe (np. program w JavaScript). Używając skryptu XSL można z danych XML otrzymać między innymi stronę w standardzie DHTML. To jednak nie wszystkie możliwości XSL - łatwo zauważyć, że można go wykorzystać do generowania zapytań na danych XML (wynikowym zbiorem jest zbiór wejściowy po przeprowadzeniu selekcji zadanej skryptem) lub konwersji danych do innego zestawu znaczników.

Przedmiotem niniejszej pracy jest serwis giełdowy, który używa kilkunastu arkuszy (skryptów) XSL do prezentacji i przetwarzania notowań Warszawskiej Giełdy Papierów Wartościowych (w skrócie WGPW). Wszystkie dane o kursach akcji są przechowywane w zbiorach XML, których zawartość opisują zaprojektowane na potrzeby serwisu zestawy znaczników. Do uruchomienia serwisu niezbędna jest przeglądarka sieciowa rozpoznająca XML i XSL tzn. taka, która wyświetla pliki XML oraz dostarcza metod do manipulowania arkuszami XSL z poziomu JavaScript. W chwili obecnej warunek ten spełnia Internet Explorer v. 5.0 (w skrócie IE 5.0), ale zgodnie z zapowiedziami producentów oprogramowania, obsługa tego standardu zostanie zaimplementowana także w innych produktach. Ograniczoną obsługę XML i XSL posiada także IE 4.0 - po zainstalowaniu kontrolki ActiveX, dostarczanej przez Microsoft, umożliwia przeglądanie dokumentów XML z wykorzystaniem arkuszy XSL. Dotyczy to jednak pierwszej wersji XSL, daleko odbiegającej od obowiązującej obecnie specyfikacji.

Pomysł realizacji serwisu giełdowego z wykorzystaniem technologii XML wywodzi się z obserwacji, że wszystkie znane mi serwery udostępniające informacje o Warszawskiej Giełdzie Papierów Wartościowych działają w oparciu o raz napisane i skompilowane programy. Co więcej, oprogramowanie przetwarzające dane działa wyłącznie po stronie serwera. Rozwiązanie takie jest mało elastyczne, gdyż użytkownik może uzyskać tylko informacje przewidziane przez autora serwisu, a wszelkie rozszerzenia funkcjonalności wymagają ingerencji w oprogramowanie serwera. Kolejną poważną wadą popularnych serwerów finansowych, jest wielokrotne przesyłanie tych samych danych. Osoba korzystająca z serwisu uruchamia go najczęściej w celu obejrzenia ostatnich notowań i przetworzenia ich na różnorodne wykresy lub statystyki. Do tego celu wystarczają zazwyczaj dane z ostatniej sesji albo dane dla jednego, konkretnego papieru wartościowego. Tymczasem wywołanie każdej nowej funkcji wiąże się z ponownym przesłaniem tych samych danych. Dzieje się tak, ponieważ HTML opisuje wygląd strony, a nie jej zawartość - nie ma więc możliwości zorientowania się, że nowo wysyłane dane zostały już przedstawione w innej postaci.

Mój program przezwycięża te niedogodności - jego podstawowe atuty to:


2. Prognozowanie kursów akcji

Większość serwisów giełdowych, poza funkcjami informacyjnymi, udostępnia bardziej lub mniej zaawansowane mechanizmy prognozowania kursów akcji. Istnieją dwa podstawowe sposoby zarządzania portfelem papierów wartościowych: analiza fundamentalna i techniczna.

Analiza fundamentalna to ocena spółek pod kątem stopnia i tempa ich rozwoju oraz ich zdolności generowania zysku. Ludzie stosujący tą analizę wychodzą z założenia, że cena akcji przedsiębiorstw szybko rozwijających się będzie rosła szybciej niż trwających w stanie stagnacji. Analiza ta jest obliczona na dłuższy horyzont czasowy co wynika z faktu, że na podstawie sprawozdań gracze stosujący tą analizę usiłują wytypować spółki o największych możliwościach rozwoju. Dane do analizy fundamentalnej to zazwyczaj różne komunikaty w formie tekstowej. Wykorzystanie technologii XML niewiele wnosi do lepszej prezentacji tego rodzaju informacji, w zupełności wystarcza tu HTML.

Innym podejściem do gry na giełdzie jest stosowanie analizy technicznej. Polega ona na przewidywaniu zachowania rynku poprzez badanie cen i obrotów poszczególnych papierów. Analiza techniczna opiera się na następujących przesłankach: rynek dyskontuje wszystko, ceny podlegają trendom, historia się powtarza. Podstawowym narzędziem jest śledzenie i analizowanie kursów i obrotów np. przy wykorzystaniu najróżniejszych wykresów.

W dalszej części rozdziału znajduje się opis i interpretacja wykresów udostępnianych przez serwis, będący tematem niniejszej pracy. Opisy powstały w oparciu o pozycje: Podstawy analizy technicznej [4], Zawód inwestor giełdowy [5] i Wskaźniki Giełdowe [6]. Umieszczone tutaj informacje są z konieczności skrótowe i jedynie przybliżają podstawy analizy technicznej. Z uwagi na poglądowy charakter opracowania należy pamiętać, że płynących z niego wniosków nie można rozpatrywać w oderwaniu od innych ważnych sygnałów i przesłanek uwzględnianych przy analizie technicznej, np. średnie ruchome dają najlepsze rezultaty, gdy na rynku panuje wyraźnie określony trend cenowy.

Prosta średnia ruchoma to średnia arytmetyczna kursów danej spółki w określonym przedziale czasowym. Średnia krocząca jest wygładzoną postacią panującego na rynku trendu i stanowi swego rodzaju obszar oporu lub wsparcia. Sygnał kupna powstaje wtedy, gdy kurs przebija średnią od dołu, a sprzedaży, gdy przebija ją od góry. Im krótszy przedział czasu jest używany do wyliczania średniej, tym więcej sygnałów kupna (sprzedaży).

Wartości kursów do średniej ważonej są brane z odpowiednio dobranymi wagami, ostatnie dane mają większe znaczenie niż starsze. Interpretacja jest podobna do prostej średniej ruchomej. Ze względu na większą czułość tej średniej sygnałem ostrzegającym przed odwróceniem trendu jest częściej zmiana kierunku średniej niż przecięcie linii wykresu ceny.

Wyliczana na podstawie średniej wykładniczej kursów z wybranego przedziału czasowego. Jest to specyficzny przypadek średniej ważonej. Interpretacja podobna do średniej arytmetycznej. Tak jak dla średniej ważonej, większe znaczenie dla wartości mają kursy z ostatnich dni. Dzięki temu unika się, charakterystycznego dla prostej średniej ruchomej wahnięcia, gdy wypadają stare dane znacząco odbiegające od innych.

Informuje o dynamice zmian kursu. Liczony jako procentowa zmiana ceny bieżącej do ceny z n sesji temu. Rosnąca linia wskaźnika zmian oznacza zwiększanie się impetu rynku, zaś opadanie tej linii - jego słabnięcie. Linia równowagi znajduje się na poziomie 100. Gdy wykres wskaźnika biegnie poniżej linii równowagi i opada, świadczy to o tym, że obecny kurs jest niższy i dystans pomiędzy nim a ceną wcześniejszą powiększa się. W odwrotnym przypadku, gdy ROC znajduje się poniżej linii równowagi i rośnie, jest to sygnał, że obecna cena jest wciąż niższa, ale tempo spadku słabnie. Zaleca się wyznaczenie linii wsparcia i oporu, jak na wykresie kursu i momentów przełamania linii trendu. Wskaźnik zmian ma podobną wadę, co proste średnie ruchome: reaguje dwa razy w odpowiedzi na każdy element danych. Skacze jeśli pojawia się nowa cena, wyraźnie większa (mniejsza) od pozostałych i skacze ponownie, kiedy ta cena opuszcza okienko czasowe.

RSI to oscylator, skonstruowany tak, by jego wartość oscylowała w przedziale od 0 do 100. Tradycyjne linie wykupienia i wyprzedania wyznaczone są na poziomach 30 i 70. Każdorazowe przebywanie RSI ponad poziomem 70 lub poniżej 30 wskazuje na wykupienie lub wyprzedanie rynku. Znaczenie tych poziomów zależy od ram czasowych stosowanych do wyliczenia wskaźnika (im dłuższy okres tym większe znaczenie). Liczba dni użyta do wyliczenia wskaźnika może być dowolna. Należy pamiętać, że im krótszy okres wzięty do budowy wskaźnika, tym większe będą jego wahania. Kiedy RSI osiąga wierzchołek, a następnie zaczyna zniżkować, wówczas identyfikuje szczyt cenowy. Kiedy RSI spada i następnie zaczyna zwyżkować - identyfikuje dno cenowe. Te zwroty mają miejsce na różnych poziomach na różnych rynkach a nawet na tym samym rynku, w zależności od tego, czy jesteśmy w okresie hossy, czy też bessy. Poziom wykupienia i wyprzedania zmienia się z rynku na rynek i z roku na rok. Zalecane jest wyznaczenie linii trendu i obserwacja kolejnych minimów i maksimów lokalnych, zwłaszcza gdy nie pokrywają się one z ekstremami na wykresie kursu.

Wskaźnik MACD składa się z dwóch linii: linii MACD i linii sygnału. Linia MACD zbudowana jest jako różnica dwóch ruchomych średnich wykładniczych. Reaguje ona na zmiany cen stosunkowo szybko. Linia sygnału to inna, zazwyczaj krótkookresowa, średnia wykładnicza zastosowana do linii MACD. Linia sygnału wolniej reaguje na zmiany w cenach. Przecięcie linii MACD i linii sygnału identyfikuje zmianę głównego trendu. W porównaniu z pojedynczą średnią ruchomą, MACD generuje mniej sygnałów kupna i sprzedaży, jak również mniej mylnych sygnałów. Kiedy szybka linia MACD przecina od dołu wolną linię sygnału, pojawia się sygnał kupna a w sytuacji odwrotnej sygnał sprzedaży.


3. Opis programu

 

3.1 Specyfikacja funkcjonalna

Zrealizowany przez mnie serwis giełdowy działa jako klient przeglądarki. Obecnie wyłącznie IE 5.0 posiada wbudowane wsparcie dla XSL, tzn. jest w stanie przetwarzać dane XML przy pomocy skryptu XSL zgodnie z oficjalną specyfikacją [4] (w zasadzie z jej niepustym podzbiorem).

Zadaniem serwisu giełdowego jest prezentacja danych finansowych, a dokładniej informacji o notowaniach papierów wartościowych na WGPW. Serwis pełni dwie podstawowe funkcje: informuje o aktualnych notowaniach i prezentuje wykresy. Dostępne są więc dwie grupy perspektyw: perspektywy używane do prezentacji wyników poszczególnych sesji giełdowych i perspektywy służące do przetwarzania notowań jednej akcji na przestrzeni wielu sesji.

Aplikacja ma dostęp do notowań giełdowych zakodowanych zgodnie ze standardem XML. Dane w postaci XML uzyskiwane są z po uruchomieniu programu konwertującego. Do programu konwertującego należy dostarczyć pliku tekstowy z notowaniami akcji, zgodny z formatem notowań podawanych w Telegazecie. Jednokrotne uruchomienie tego programu powoduje uzupełnienie danych XML o wyniki jednej sesji, dostarczonej w pliku tekstowym.

 

3.2 Specyfikacja techniczna

Do prezentacji wyników sesji potrzebny jest plik zawierający notowania wszystkich papierów wartościowych z ostatniej sesji. Wykres wykorzystywany do analizy technicznej opiera się zazwyczaj na notowaniach jednej, konkretnej spółki w zadanym przedziale czasowym. W związku z powyższą specyfiką zdecydowałem się na powielenie przechowywanej informacji. W oddzielnych plikach przechowywane są dane o sesjach, a w oddzielnych dane o poszczególnych akcjach. Powielenie danych nie jest szczególnie dotkliwe, zważywszy na fakt, że w ciągu roku odbywa się około 250 sesji giełdowych, a dyski twarde o pojemności 10GB już od jakiegoś czasu są powszechnie dostępne. Zakładając, że chcemy przechowywać dane giełdowe z okresu ostatnich 4 lat (starsze dane można trzymać na innym nośniku lub w formie spakowanej i udostępniać na żądanie) musimy utrzymać wielkość pliku z notowaniami jednej sesji poniżej 5 MB (zostanie jeszcze miejsce na oprogramowanie), co z kolei odpowiada liczbie około 100 000 spółek - obecnie jest ich mniej niż 300. Widać więc, że poprawienie wydajności kosztem przestrzeni dyskowej jest całkowicie uzasadnione. W praktyce plik XML z wynikami sesji zajmuje niecałe 50KB. Dokładny opis każdego z plików w formacie XML Schema znajduje się w dodatku A.

Serwis wyświetla dane w trzech ramkach (ang. frames). Największa z nich prezentuje aktualną perspektywę, którą wybiera się na podstawie opcji zaznaczonych w dwóch pozostałych ramkach. Umożliwiają one wybór sposobu przetwarzania (ze względu na poszczególne akcje, sesje lub perspektywy użytkownika) oraz pozwalają na określenie, którą perspektywę należy zastosować. Uruchomienie serwisu następuje po załadowaniu do przeglądarki głównego pliku serwis.htm. Plik zawiera informacje o ramkach wchodzących w skład programu: ramki wyboru sposobu przetwarzania (wybierz.htm); ramki wyboru danych i perspektywy (akcje.xml, sesje.xml i swoje.htm) oraz ramki wyników (wynik.htm).

IE 5.0 oferuje dwa sposoby prezentacji danych XML: przeglądanie bezpośrednie lub z poziomu HTML.

W przypadku przeglądania bezpośredniego plik zawierający dane jest interpretowany, a następnie wyświetlany przez przeglądarkę, na podstawie dodatkowych instrukcji. Takie dodatkowe instrukcje, umieszczone w pliku z danymi XML, mogą między innymi opisywać jaki arkusz XSL ma być użyty przez przeglądarkę do wyświetlania danych czy przy pomocy jakiego zestawu znaków zapisane są dane. Brak wyspecyfikowanego arkusza powoduje wykorzystanie standardowej wizualizacji. Takie podejście zastosowałem w przypadku ramki przypisującej perspektywę do sesji (sesje.xml) i akcji (akcje.xml). Dzięki temu wszystkie dostępne arkusze, sesje i akcje, oraz związane z nimi opisy dodatkowe, są zapisane jako dane XML. Jakakolwiek zmiana zawierających je plików XML, znajdzie swoje odzwierciedlenie w wyglądzie odpowiedniej ramki. Oznacza to, że po dostarczeniu nowej sesji do programu konwertującego zmodyfikuje on automatycznie zawartość pliku sesje.xml (akcje.xml), czyli wpłynie na to, co wyświetla przeglądarka. Dodanie nowej sesji, akcji czy arkusza nie wymaga więc ingerencji w kod HTML, a tylko uzupełnienia pliku z danymi. Dużym atutem tego podejścia jest także możliwość wygenerowania dowolnego wykonywalnego skryptu przeglądarki (JavaScript, VBScript), widzialnego z poziomu przeglądarki i utworzonego przez arkusz XSL. Odwołania do funkcji czy procedur zostaną wygenerowane przez kod XSL, a wykonane dopiero przez przeglądarkę. Niestety to rozwiązanie ma jedną zasadniczą wadę: perspektywa związana jest na stałe z danymi, czyli konkretny dokument XML może być interpretowany tylko przy pomocy przypisanego do niego arkusza XSL.

Innym możliwym podejściem jest utworzenie w dokumencie HTML obiektu, który po wywołaniu odpowiednich metod (w części skryptowej dokumentu) zostanie zastąpiony dynamicznie wygenerowanym kodem HTML. Umożliwia to łączenie danych z arkuszami w dowolnych kombinacjach. Tworzenie dodatkowego kodu HTML odbywa się z poziomu głównego dokumentu. W przeciwieństwie do rozwiązania, polegającego na bezpośrednim przeglądaniu danych XML, ogranicza to znacznie możliwości stosowania skryptów. Z punktu widzenia generowanej dynamicznie części dokumentu widocznie są jedynie procedury istniejące w części głównej. W oczywisty sposób odpada możliwość generowania skryptów wykonywanych w momencie pierwszej interpretacji danych HTML (związanych z wydarzeniem onload). W praktyce z dodanej części kodu HTML nie można się odwołać do żadnej funkcji czy procedury, która nie istniała w głównej części dokumentu. Powoduje to konieczność wcześniejszego zadeklarowania wszystkich skryptów, które chcemy używać w dynamicznie generowanym kodzie. Powyższe rozwiązanie zostało wykorzystane przy tworzeniu ramki wyników (wyniki.htm). Wyświetla ona rezultat zastosowania wybranego arkusza XSL do wybranych danych XML. Wybór odbywa się na poziomie jednej z trzech ramek: akcje.xml, sesje.xml lub swoje.htm. Dodatkowo kod wyniki.htm zawiera funkcję sortującą i funkcje umożliwiające manipulowanie wyświetlanymi danymi, np. zmianę kolejności danych XML bez potrzeby ponownego ich wczytywania.

Jak widać żadne podejście do wizualizacji danych XML przy pomocy IE 5.0, nie zapewnia pełnej swobody manipulacji i funkcjonalności opisanej w specyfikacji XML [1] i XSL [3]. Rozwiązanie, które by to zagwarantowało polega na generowaniu dokumentu HTML w całości po stronie serwera i przesyłaniu gotowego pliku do klienta. Stoi to jednak w sprzeczności z ideą przerzucenia większości obliczeń na stronę klienta i nie pozwala na pełne wykorzystanie możliwości XML.

Prezentacja wykresów wymaga wykorzystania grafiki. Możliwe rozwiązania to tworzenie grafiki przy pomocy narzędzi dostępnych z poziomu HTML lub skorzystanie z apletu Javy. Pierwsze podejście jest do zrealizowania przy wykorzystaniu JavaScript i obiektu powłoka (ang. layer) - wszystkie instrukcje odpowiedzialne za tworzenie grafiki można umieścić w dokumencie HTML. Niepodważalną zaletą tego rozwiązania jest możliwość zakodowania każdej perspektywy tylko i wyłącznie w języku XSL - instrukcje JavaScript odpowiedzialne za tworzenie grafiki stanowiłyby część arkusza XSL. Wadą jest przeciążenie kodu perspektywy dodatkowym balastem, nie związanym bezpośrednio z jej funkcjonalnością. Wiąże się to także z ograniczeniem liczby potencjalnych twórców perspektyw. Inną niedogodnością jest mniejsza elastyczność i możliwości - przeglądarki nie zawsze tak samo interpretują polecenia, szczególnie jeśli chodzi o grafikę.

W zrealizowanym serwisie za graficzną prezentację wykresów jest odpowiedzialny aplet. Arkusz XSL generuje parametry, a następnie przekazuje je do apletu. Obliczenia potrzebne do otrzymania współrzędnych, inne dla każdego z wykresów, są wykonywane na poziomie arkusza XSL. Wszystkie perspektywy definiują wysokość obszaru, w którym prezentuje on wyniki, na 400 punktów ekranowych (ang. pixel). Może to być każda inna rozsądna wartość, odpowiednia dla używanej rozdzielczości - program dostosuje rozmieszczenie wykresu do podanego parametru. Szerokość obszaru wyliczana się na poziomie perspektywy, proporcjonalnie do liczby sesji przekazywanych do apletu. Wynosi ona 5*liczba_sesji, nie mniej jednak niż 400. Dynamiczne wyliczenie szerokości powoduje, że dla każdej liczby danych wykres pozostaje jednakowo czytelny, a także zwalnia z konieczności oprogramowania suwaka przesuwającego dane w kodzie apletu. Gdy wykres jest szerszy niż ramka, w której jest prezentowany, przeglądarka sieciowa automatycznie dodaje suwak. Po wyświetleniu danych wstępnie dostarczonych do apletu, użytkownik ma możliwość zmiany przedziału tak na osi pionowej (wartości kursów i wskaźników giełdowych), jak na osi poziomej (zakres sesji). Służą do tego odpowiednie pola widoczne u dołu wykresu.

Parametry dostarczane do apletu to, poza wysokością i szerokością: liczba sesji, wartości pierwszego wykresu i wartości drugiego wykresu.

 

3.3 Specyfikacja użytkowa

Uruchomienie serwisu następuje po załadowaniu dokumentu serwis.htm do przeglądarki IE 5.0. Przy pierwszym uruchomieniu wybierane są do wyświetlania dane i perspektywy związane z akcjami. W odpowiednim okienku (patrz Rysunek 3) pojawiają się nazwy wszystkich dostępnych zbiorów z danymi (czyli kursy spółek lub wyniki sesji) oraz dostępne perspektywy. Aktualnie wybrana perspektywa i zbiór danych jest wyróżniona podkreśleniem. Najechanie wskaźnikiem myszy na nazwę perspektywy lub zbioru danych, powoduje wyświetlenie pomocniczego komunikatu, bardziej szczegółowo opisującego podświetloną opcję. Komunikat pokazuje się w linii statusu przeglądarki. Dodatkowo opcja, nad którą znajduje się wskaźnik myszy jest podświetlana na czerwono. Po kliknięciu myszą na nowej nazwie perspektywy lub zbiorze z danymi zmienia się zawartość ramki z wynikami.

W celu lepszego uwidocznienia różnic między poszczególnymi perspektywami, na rysunkach w dalszej części rozdziału pokazano nieduży, przykładowy zestaw fikcyjnych danych.

Przy przetwarzaniu ze względu na akcje dostępne są perspektywy:

Rysunek 1. Wykres notowań wybranego papieru wartościowego, w połączeniu ze średnią kroczącą z 9-ciu sesji. Obroty w formie słupków można wyświetlić opcjonalnie.

 

Przy przetwarzaniu ze względu na sesje są dostępne perspektywy:

Rysunek 2. Najbardziej zaawansowana prezentacja kursów, po posortowaniu rosnąco względem zmiany. Indeksy rynków (WIG i WIRR) nie są uwzględniane przy sortowaniu.

 

 

Zaprojektowane arkusze to jedynie część z nieograniczonej liczby potencjalnie użytecznych perspektyw. Każdy użytkownik może mieć swoje własne upodobania co do prezentacji wyników sesji lub ulubione wykresy. Większość z prezentowanych wykresów może być łatwo dostosowana do indywidualnych upodobań. Może to polegać na zmianie przedziału czasowego uwzględnionego na wykresie lub użyciu nieco innej funkcji do wyliczania danych. Wyświetlenie własnej perspektywy następuje po wybraniu opcji WŁASNE. Należy zwrócić uwagę, że wyświetlenie perspektywy przechowywanej lokalnie jest możliwe, o ile w ustawieniach bezpieczeństwa, serwer serwisu giełdowego ma dostęp do danych lokalnych. W przeciwnym razie opcja ta dotyczy jedynie danych i arkuszy przygotowanych na serwerze. Warto także pamiętać, że arkusz XSL musi pochodzić z tego samego źródła co dane, do których jest stosowany.

 


4. Dalszy rozwój serwisu

Architektura serwisu giełdowego, ze względu na wykorzystanie technologii XML, umożliwia łatwą rozbudowę o kolejne perspektywy - wymaga to dodania kolejnego arkusza XSL zapewniającego nową funkcjonalność. Obecnie nie wszystkie założenia dotyczące składni XML i XSL są w pełni realizowane przez przeglądarki sieciowe, należy więc oczekiwać, że w przyszłości napisanie perspektywy będzie jeszcze prostsze i efektywniejsze, a zadania możliwe do zaimplementowania z wykorzystaniem przeglądarki o wiele bardziej złożone.

Poniżej opisano kilka możliwości rozbudowy.

Magazynowanie wszystkich danych w jednym pliku.

Dynamiczny rozwój formatu XML to także rozwój związanych z nim narzędzi -- trwają prace nad językiem zapytań, pokrewnym językowi SQL, działającym na danych XML [2]. Zapytania można realizować wykorzystując XSL lub XML-QL (ang. XML Query Language). IE 5 udostępnia mechanizmy tworzenia zapytań z wykorzystaniem XSL, które po optymalizacji powinny znacznie ułatwić operowanie dużymi zbiorami danych.

Obsługa notowań ciągłych

Od chwili wprowadzenia na WGPW notowań ciągłych, cieszą się one stale rosnącym zainteresowaniem, a obroty spółek notowanych w tym systemie systematycznie rosną. Nie należy wykluczać, że w przyszłości wszystkie akcje będą obsługiwane w sposób ciągły, a system kursu jednolitego zostanie porzucony (tak jest na największych giełdach światowych). Obsługa płynnie zmieniającej się ceny wymaga zaprojektowania nowego, rozbudowanego formatu danych XML i zapewnienia stałej aktualizacji danych. Nasuwają się dwie metody przechowywania danych: trzymanie tylko aktualnych wyników sesji i oddzielnie notowań każdej spółki z uwzględnieniem zmian na przestrzeni czasu lub przechowywanie stanu początkowego np. kursów otwarcia w danym dniu i informacji o każdej zmianie kursu jaka miała miejsce w ciągu sesji (oczywiście możliwe jest też rozwiązanie pośrednie). W żadnym przypadku nie da się uniknąć wykonywania części obliczeń po stronie serwera. Pierwsze rozwiązanie wiąże się z przesyłaniem większej ilości danych (w przypadku odświeżania wyników całej sesji trzeba przesłać komplet danych), ale wymaga mniejszego zaangażowania serwera - serwer wyszukiwałby i dosyłał tylko ostatnie zmiany notowań w przypadku śledzenia kursów konkretnej akcji. Drugie rozwiązanie bardziej obciąża serwer - musi on wyliczać aktualne wyniki na podstawie stanu początkowego i przechowywanych zmian kursów, ale pozwala na odświeżanie wyników przy przesyłaniu mniejszej ilości danych. Możliwe jest także rozwiązanie najprostsze: przechowywanie notowań ciągłych w dokładnie ten sam sposób co notowań kursu jednolitego i przesyłanie całości wyników przy każdym żądaniu nowych danych. Nie osiągnie się żadnego usprawnienia związanego z faktem, że kolejne zestawy danych niewiele się od siebie różnią, ale pozostaną korzyści z lokalnego przetwarzania już przesłanych danych.

Rozbudowa funkcji graficznych

Za obsługę grafiki w serwisie giełdowym odpowiedzialny jest aplet w Javie, który wyświetla obroty i co najwyżej dwa wykresy jednocześnie. Można dowolnie rozbudowywać ten program, np. o obsługę dowolnie wielu wykresów na jednym rysunku (zazwyczaj wystarczają dwa, ale możliwość jednoczesnego wyświetlania większej ich liczby jest udostępniana przez większość zajmujących się tym serwisów).

Zarządzanie portfelem akcji

Sporo serwisów, szczególnie zagranicznych, umożliwia zarządzanie portfelem akcji. Każdy korzystający z takiej usługi może składać fikcyjne zlecenia, nie mające wpływu na rzeczywiste wyniki. Serwis przechowuje operacje oraz stan konta i na żądanie wyświetla odpowiednie informacje. Technologia XML świetnie nadaje się do zaprogramowania takiej usługi. Przechowując dane w formacie XML można udostępnić klientowi rozbudowane mechanizmy przetwarzania transakcji i stanu rachunku (pod postacią arkuszy XSL) przy minimalnym tylko obciążeniu serwera.

 


5. Podsumowanie

W trakcie pracy nad serwisem giełdowym zaprojektowano, w postaci dokumentów XML, format danych giełdowych i formaty plików przechowujących informacje o dostępnych akcjach , sesjach i perspektywach. Zaimplementowano również aplikację realizującą serwis jako klienta przeglądarki sieciowej.

Podczas realizacji projektu kod aplikacji przechodził nieustanną ewolucję. Zmiany wymuszane były przez ciągle rozwijaną i modyfikowaną semantykę języka XSL, jak również przez różną implementację mechanizmów obsługi XML i XSL w kolejnych wersjach IE. IE 4.0 umożliwiał korzystanie z arkuszy XSL po zainstalowaniu kontrolki ActiveX. Wraz z wprowadzeniem IE 5.0 Microsoft zintegrował obsługę technologii XML i XSL z przeglądarką. Wbrew wcześniejszym zapowiedzom nie jest to jednak pełne wsparcie. Brak kilku istotnych funkcji opisanych w oficjalnej specyfikacji [1, 3], a pewne rzekomo istniejące mechanizmy nie zawsze działają.

Zastosowanie technologii XML znacząco usprawniło prezentację danych giełdowych. Uzyskanie różnych wizualizacji jest stosunkowo proste dzięki wykorzystaniu perspektyw XSL. Porównując osiągnięte rezultaty z innymi serwisami widać, że oferują one dużo prostsze formy prezentacji tak od strony graficznej, jak pod względem dostępnych sposobów przetwarzania tych samych danych. Żaden ze znanych mi serwisów nie pozwala na dowolne sortowanie wyników względem wielkości obrotów, zmiany procentowej czy nazwy spółki, nie wspominając już o wykonaniu tego bez ponownego wczytania danych. Nie bez znaczenia jest także możliwość swobodnej manipulacji stroną graficzną serwisu bez dokonywania znaczących przeróbek w kodzie. Wydaje się jednak, że pomimo prostej składni języka XSL trudno oczekiwać, żeby zwykły użytkownik serwisu potrafił (chciał) napisać arkusz XSL na własne potrzeby. Nie zmienia to faktu, że modyfikacja istniejącej perspektywy w celu lepszego dostosowania jej do własnych upodobań jest bardzo łatwa i przypomina pracę z językiem HTML.

Reasumując - technologia XML dobrze nadaje się do implementacji wydajnego i elastycznego serwisu giełdowego.

 


Dodatek A Formalne definicje danych w formacie XML Schema

akcje-schema.xml

<?xml version="1.0" encoding="ISO-8859-2"?>

<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">

<!-- ============================= -->
<!-- Formalna definicja pliku z notowaniami -->
<!-- jednego papieru wartosciowego na -->
<!-- przestrzeni wielu sesji -->
<!-- ============================= -->


<ElementType name="DATA" dt:type="dateTime"/>
<ElementType name="CENA" dt:type="fixed.14.4"/>
<ElementType name="OBROT" dt:type="fixed.14.4"/>
<ElementType name="INNE"/>
<ElementType name="SPOLKA"/>
<ElementType name="ODSESJI" dt:type="fixed.14.4" />


<ElementType name="GIELDA" content="eltOnly">
<group minOccurs="1" maxOccurs="1">
<element type="SPOLKA" />
</group>
<group minOccurs="1" maxOccurs="1">
<element type="ODSESJI" />
</group>
<group minOccurs="1" maxOccurs="*">
<element type="SESJA" />
</group>
</ElementType>


<ElementType name="SESJA" content="eltOnly">
<element type="DATA" />
<element type="CENA" />
<element type="OBROT" />
<element type="INNE" minOccurs="0"/>
</ElementType>


</Schema>

 

sesje-schema.xml

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">


<!-- ============================= -->
<!-- Formalna definicja pliku z wynikami -->
<!-- jednej sesji -->
<!-- ============================= -->

<ElementType name="DATA" dt:type="dateTime"/>
<ElementType name="DZIEN"/>
<ElementType name="OPIS"/>
<ElementType name="INNE"/>
<ElementType name="SPOLKA"/>
<ElementType name="CENA" dt:type="fixed.14.4"/>
<ElementType name="ZMIANA" dt:type="fixed.14.4"/>
<ElementType name="PROCENT" dt:type="fixed.14.4" />
<ElementType name="OBROT" dt:type="fixed.14.4"/>

<ElementType name="GIELDA" content="eltOnly">
<group minOccurs="1" maxOccurs="1">
<element type="SESJA" />
</group>
</ElementType>

<ElementType name="SESJA" content="eltOnly">
<element type="DATA" />
<element type="DZIEN" />
<group minOccurs="1" maxOccurs="*">
<element type="RYNEK" />
</group>
</ElementType>

<ElementType name="RYNEK" content="eltOnly">
<group minOccurs="1" maxOccurs="1">
<element type="OPIS" />
</group>
<group minOccurs="1" maxOccurs="*">
<element type="AKCJA" />
</group>
<group minOccurs="1" maxOccurs="1">
<element type="INDEX" />
</group>
</ElementType>

<ElementType name="AKCJA" content="eltOnly">
<element type="CENA" />
<element type="ZMIANA" />
<element type="PROCENT" />
<element type="OBROT" />
<element type="SPOLKA" />
<element type="INNE" minOccurs="0"/>
</ElementType>

<ElementType name="INDEX" content="eltOnly">
<element type="CENA" />
<element type="ZMIANA" />
<element type="PROCENT" />
<element type="OBROT" />
<element type="SPOLKA" />
</ElementType>

</Schema>

 

toakcje-schema.xml

<?xml version="1.0" ?>

<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">

<!-- =============================== -->
<!-- Formalna definicja pliku odpowiedzialnego -->
<!-- z za zawartość ramki przypisującej -->
<!-- perspektywy do akcji -->
<!-- =============================== -->

<ElementType name="NAPIS"/>
<ElementType name="PLIK"/>
<ElementType name="OPIS" />

<ElementType name="RAMKA" content="eltOnly">
<group minOccurs="1" maxOccurs="*">
<element type="SPOLKA" />
</group>

<group minOccurs="1" maxOccurs="*">
<element type="PERSPEKTYWA" />
</group>
</ElementType>

<ElementType name="SPOLKA" content="eltOnly">
<element type="NAPIS" />
<element type="PLIK" />
<element type="OPIS" minOccurs="0" />
</ElementType>

<ElementType name="PERSPEKTYWA" content="eltOnly">
<element type="NAPIS" />
<element type="PLIK" />
<element type="OPIS" minOccurs="0" />
</ElementType>

</Schema>

 

tosesje-schema.xml

<?xml version="1.0" ?>

<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">

<!-- =============================== -->
<!-- Formalna definicja pliku odpowiedzialnego -->
<!-- z za zawartość ramki przypisującej -->
<!-- perspektywy do sesji -->
<!-- =============================== -->

<ElementType name="NAPIS"/>
<ElementType name="PLIK"/>
<ElementType name="OPIS" />

<ElementType name="RAMKA" content="eltOnly">
<group minOccurs="1" maxOccurs="*">
<element type="SESJA" />
</group>
<group minOccurs="1" maxOccurs="*">
<element type="PERSPEKTYWA" />
</group>
</ElementType>

<ElementType name="SESJA" content="eltOnly">
<element type="NAPIS" />
<element type="PLIK" />
<element type="OPIS" minOccurs="0" />
</ElementType>

<ElementType name="PERSPEKTYWA" content="eltOnly">
<element type="NAPIS" />
<element type="PLIK" />
<element type="OPIS" minOccurs="0" />
</ElementType>

</Schema>

 


Dodatek B Przykładowa definicja danych w formacie DTD

tosesje-schema.dtd


<!ELEMENT RAMKA (SESJA)*, (PERSPEKTYWA)*>
<!ELEMENT SESJA (NAPIS, PLIK)>
<!ELEMENT PERSPEKTYWA (NAPIS, PLIK)>
<!ELEMENT NAPIS (#PCDATA)>
<!ELEMENT PLIK (#PCDATA)>

 

 


Literatura

[1] Extensible Markup Language (XML) 1.0.
http://www.w3.org/TR/REC-xml

[2] Extensible Markup Language (XML) Activity.
http://www.w3.org/XML/Activity.html

[3] Extensible Stylesheet Language (XSL) Specification (praca w toku).
http://www.w3.org/WD/WD-xsl

[4] Martin J. Pring. Podstawy analizy technicznej. WIG-Press, Warszawa 1998.

[5] Alexander Elder. Zawód inwestor giełdowy. Dom Wydawniczy ABC, Warszawa 1998.

[6] Wskaźniki Giełdowe.
http://yogi.ippt.gov.pl/gielda/wskaz.html

[7] Giełda Papierów Wartościowych w Warszawie.
http://www.gpw.com.pl

[8] Rynek kapitałowy w Polsce.
http://yogi.ippt.gov.pl/gielda/gielda.html

[9] Real Time SwissQuote.
http://www.swissquote.ch

[10] StockMaster.
http://www.stockmaster.com

 

p_kot@yahoo.com