Marcin Kaczmarski - Aplikacja Trade MM System, jako innowacyjne

Transkrypt

Marcin Kaczmarski - Aplikacja Trade MM System, jako innowacyjne
Aplikacja Trade MM System, jako innowacyjne podejście do
handlu na rynku walutowym
Marcin Kaczmarski
Wydział Inżynierii Mechanicznej i Informatyki
Kierunek informatyka, Rok IV
Politechnika Częstochowska
Streszczenie
Praca przedstawia opis systemu informatycznego TradeMM pozwalającego na
tworzenie systemów transakcyjnych na wielu rynkach. System TradeMM jest innowacyjnym
podejściem do tworzenia oprogramowania giełdowego. Napisany całkowicie w C++ pozwala
na tworzenie, testowanie, optymalizację systemów transakcyjnych. Posiada również wiele
udogodnień przy handlu manualnym. W niniejszym opracowaniu zostaną opisane po kolei
wszystkie części wymienionego systemu jak i również zalety, jakie daje on traderowi.
Szczególna uwaga będzie zwrócona na wykorzystanie TMM do implementacji mechanicznych
systemów transakcyjnych. W podsumowaniu zostanie zaprezentowane porównanie TMM z
istniejącymi już aplikacjami wspomagającymi tradera, aby pokazać czytelnikowi, co tak
naprawdę daje nam posiadanie TMM.
1. Wstęp
Komputerowe systemy transakcyjne pojawiły się na początku lat
dziewięćdziesiątych dwudziestego wieku. Rozwój technik informatycznych sprawił, że
stały się one bardzo popularne wśród społeczności giełdowej. Komputer dawał nowe
możliwości, jeśli chodzi o budowanie skomplikowanych rozwiązań z zakresu analizy
technicznej. Powstawały na przykład tak zaawansowane teorie jak teorie rynkowe oparte
o sieci neuronowe. Rozszerzające się możliwości obliczeniowe sprawiły, że nawet
bardzo skomplikowane modele można zaimplementować. Teorie logiki rozmytej,
systemów wielokryterialnych i inne rozwiązania mogą zostać stworzone i testowane na
domowych komputerach.
Wzrost popularności komputerowych systemów transakcyjnych spowodował to,
że uczestnicy rynku zauważyli możliwości komputera nie tylko przy obliczaniu
skomplikowanych formułek analizy technicznej, ale również przy podejmowaniu
decyzji kupna i sprzedaży. Niestety znane systemy, albo w ogóle nie umożliwiają opcji
automatycznej gry, albo taka opcja jest mocno ograniczona. Ważną możliwością
aplikacji jest również tworzenie wskaźników analizy technicznej zdefiniowanych przez
użytkownika. W dostępnym na rynku oprogramowaniu bardzo często możliwe jest
tworzenie własnych wskaźników jednak czasami ich budowanie jest utrudnione ze
względu na specyfikę oprogramowania. Niestety zastosowane rozwiązania często są
nieoptymalne i przy implementacji skomplikowanego wskaźnika po prostu sobie nie
radzą. W niektórych aplikacjach zastosowano skonstruowany przez programistów danej
firmy język programowania, pozwalający na implementowanie własnych systemów.
Takie rozwiązanie choć niewątpliwe ma swoje zalety (nie znający żadnego języka
programowania może się łatwo nauczyć prostych konstrukcji języka wbudowanego w
aplikacje giełdowe) jednak dla informatyka znającego języki programowania takie
wewnętrzne implementacje mogą okazać się niewystarczające. Nie pozwalają na
programowanie zaawansowany rozwiązań, bardzo często nie wiadomo w ogóle jak
1
działają i w jakich sytuacjach podejmują decyzję. Jeśli pojawi się jakiś problem z
systemem, wada, którą nie zauważyli programiści firmy projektującej dane rozwiązanie
użytkownik jest skazany na czekanie na nową wersję platformy, gdyż nie może sam nic
zmienić i poprawić. W systemie TMM, gdzie wszystko jest zaimplementowane w
języku C++ programista może za pomocą odpowiednich narzędzi prześledzić działanie
stworzonego systemu, sposób, w jaki on podejmuje decyzje. W przypadku wystąpienia
błędu można go łatwo zlokalizować i poprawić. Myślę, że powierzenie swojego kapitału
aplikacji, która działa nie do końca pod kontrolą tradera jest, co najmniej ryzykowne
i dlatego wielu traderów choć widzi niewątpliwe zalety mechanicznych systemów nie
decyduje się na ich wdrożenie. Dlatego na zakończenie tego opracowania postaram się
porównać funkcjonalność znanych mi systemów z systemem TMM.
2. Opis funkcji programu
Podstawowymi funkcjami programu, które chciałbym wyodrębnić są: nawiązywanie
połączenia z serwerem; pobieranie aktualnych cen; zawieranie transakcji kupna,
sprzedaży; modyfikowanie transakcji wartościami StopLoss i TakeProfit; dodawanie,
usuwanie i modyfikowanie wskaźników analizy technicznej; wizualizacja danych,
mechaniczne systemy optymalizowane.
• Nawiązywanie połączenia z serwerem
Dzięki funkcjom z rodziny API udostępnianym przez firmę MetaQuotes Software
Corporation program zapewnia komunikację z serwerem. Funkcje te są zamknięte w
bibliotece dll i mogą być dołączone do programu. Niestety jak na razie MetaQuotes
Software Corporation nie zdecydowała się zrobić implementacji API pod linuxa, z tego
powodu funkcje te są dedykowane systemom Microsoftu. Wprowadza to pewne
utrudnienia jeśli chodzi o implementację przy użyciu biblioteki QT.
Parametrami łączenia z serwerem są, z punktu widzenia użytkownika: nazwa serwera,
port, numer konta użytkownika i hasło.
• pobieranie aktualnych cen par walut
Pobieranie cen jest realizowane również przy użyciu funkcji API, ceny poszczególnych
par są sprawdzane co pewien krótki okres czasu (0.5 sekundy) i w przypadku, gdy cena
na serwerze ulegnie zmianie, zmieniana jest ona również w programie. Na rysunku 1
widzimy ceny poszczególnych par walut.
2
Rys. 1 Ceny par walut pobierane na bieżąco
Niektóre pary takie jak USD/PLN, czy EUR/PLN nie są ujęte na powyższym rysunku,
jest to związane ze specyfiką serwera, z którym program jest aktualnie połączony.
W zależności od konkretnego brokera jest inna lista par kwotowanych, czyli takich na
których trader może przeprowadzać transakcje.
• zawieranie transakcji kupna, sprzedaży
Zawieranie transakcji jest z punktu widzenia użytkownika jednym z najważniejszych, o
ile nie najważniejszym z elementów systemu TMM, dlatego jego obsługa przez
program musi być realizowana w sposób perfekcyjny. Rysunek 2 przedstawia formatkę
odpowiadającą za zawieranie transakcji.
Rys. 2 Transakcje
Użytkownik po kliknięciu na tabelkę z cenami wywołuje formatkę do obsługi transakcji,
umożliwia ona zawieranie zarówno transakcji Buy jak i transakcji Sell. Ceny, jakie
widzimy na rysunku drugim są odpowiednio cenami bid i ask, aby użytkownik miał całe
spektrum, przy zawieraniu operacji. Możliwa jest również zmiana wielkości pozycji za
pomocą wyboru wielkości lota. Domyślnie jest on ustawiony na wartość 0.1 Przy
zawieraniu operacji możliwe jest zdefiniowanie parametrów transakcji takich jak
TakeProfit i StopLoss. Innowacją w stosunku do wielu platform jest możliwość
wprowadzenia tychże parametrów transakcji bezpośrednio z modułu graficznie
prezentującego ceny. Klikając na czerwone strzałki użytkownik zostaje przeniesiony na
okno wykresu i kliknięciem wprowadza odpowiednie wartości. Kliknięcie guzika z
etykietą Buy, lub Close umożliwia zawarcie transakcji. Zawarta operacja jest dodawana
do widoku przedstawiającego otwarte operacje.
• modyfikowanie transakcji wartościami StopLoss (SL) i TakeProfit (TP)
Modyfikacja wcześniej zawartej transakcji jest również elementem bardzo ważnym.
Użytkownik wybierając daną transakcję i klikając na niej prawym klawiszem myszy
wybiera odpowiednią opcję z menu. Po wybraniu opcji wyświetla się okno
umożliwiające wprowadzenie nowych wartości SL i TP. Oczywiście tak jak przy
zawieraniu operacji, również podczas jej modyfikacji wartości te mogą być
wprowadzone bezpośrednio z wykresu. Innowacją jest również możliwość
modyfikowania SL i TP bezpośrednio z wykresu. Po uaktywnieniu odpowiedniej opcji
użytkownik może chwycić linię oznaczającą SL, lub TP i przeciągnąć ją w odpowiednie
miejsce. Zmiana wszystkich parametrów nastąpi automatycznie.
3
• dodawanie, usuwanie i modyfikowanie wskaźników analizy technicznej
Funkcja ta jest skierowana przede wszystkim dla użytkowników, którzy stosują ręczną
grę na rynku. Wizualizacja wskaźników, które są liczone za pomocą odpowiednich
modeli matematycznych sprawia że zawieranie operacji jest ułatwione. W chwili
obecnej są zaimplementowane następujące wskaźniki: Wstęga Bollingera, Impet,
Średnia krocząca oraz wskaźnik dwukryterialny. Zaimplementowanie innych
wskaźników nie będzie trudne matematycznie z punktu widzenia programisty. Moduł
wizualizacji jest już opracowany.
• wizualizacja danych.
Dane pobierane z serwera są w postaci liczbowej, a ludzie są przyzwyczajeni do
wykresów. Dlatego system TTM musi udostępniać opcję wizualizacji pobranych
danych. Pasek widoczny na rysunku 3 umożliwia obsługę wykresu.
Rys 3. Obsługa wykresu
Jak widać pasek ten umożliwia użytkownikowi zwiększanie, zmniejszanie wykresu, jest
to bardzo ważna cecha, która umożliwia spojrzenie na dane z większej perspektywy.
Możliwa jest także zmiana sposobu wizualizacji danych na bary lub świece japońskie, w
zależności od tego jakie preferencje ma użytkownik. Techniki gry na świecach
japońskich są bardzo rozbudowane, dlatego TradeMM umożliwia wizualizację w taki
sposób w jaki sobie użytkownik zażyczy. Opcje dotyczące zmiany horyzontu czasowego
umożliwiają dywersyfikacje kursów w określonym czasie, czasy są zdeterminowane
przez serwer.
• mechaniczne systemy handlowe optymalizowane
Ta niezwykle ważna funkcja systemu pozwala na zastosowanie zbudowanego przez
siebie systemu handlowego oraz odpowiedni dobór parametrów dla takiego systemu.
Optymalizacja docelowo będzie przeprowadzana różnymi metodami.
3. Budowa programu
Z punktu widzenia programisty system TMM jest zbudowany obiektowo. W systemie
można wyróżnić następujące klasy: Widok, Konto, Laczenie, Obiekt, Socket,
Modyfikacja, Wskaznik, Wykres, Operacja, Mod_zlecenie, Wykres, Operacja,
CMetaTraderAPI.
Nie będę szczegółowo opisywał każdej klasy po kolei, jednak pokrótce postaram się
przybliżyć czytelnikowi każdą z klas.
• Widok
Klasa odpowiedzialna za odpowiednie wyskalowanie i wyświetlenie kursów walut bądź
akcji oraz naniesienie wybranych wskaźników przez użytkownika. Udostępnia również
mechanizmy pozwalające na wyświetlanie dokładnych informacji o cenach otwarcia,
zamknięcia, w wybranym przez użytkownika przedziale czasowym. Stanowi ona
4
interfejs obrazujący wszelkie działania np. umiejscawianie zawartych transakcji na
odpowiednich wykresach (ich ograniczeń: StopLoss, Take Profit) i inne.
• Konto
Klasa dostarczająca interfejs do obsługi zakładania konta na rynku Forex
• Trader
Główna klasa aplikacji odpowiedzialna za komunikację użytkownika z serwerami
umożliwiającymi zawieranie transakcji. Umożliwia śledzenie kursu wielu walut
(historia, bieżące ceny bid i ask), zmianę ich okresowości, rejestrowanie historii zleceń i
zleceń bieżących, wybór wskaźników, wybór konta na które użytkownik chce się
zalogować.
• Laczenie
Interfejs odpowiedzialny za obsługę funkcji, pozwalających połączyć się z danym
serwerem na wybranym koncie. Aby wykonać te operacje korzysta z funkcji API.
• Obiekt
Klasa zawierająca statyczne obiekty umożliwiające korzystanie z funkcji
zdefiniowanych w pliku mtapi.dll, we wszystkich plikach programu bez potrzeby
ponownego łączenia się z serwerem
• Socket
Klasa bliźniacza do klasy Obiekt, stworzona została z powodu pewnych ograniczeń
jakie nakłada na nas twórca API, który obecną implementację dedykuje typowo pod
okna windowsowe. W związku z tym został zastosowany pewien fortel, który umożliwił
implementację programu z użyciem biblioteki QT.
• Modyfikacja
Odpowiada za usuwanie
narysowanych na wykresie.
oraz
zmianę
wybranych
parametrów
wskaźników
• Mod_zlecenie
Klasa umożliwiająca modyfikację parametru „stop loss” lub „take profit” na otwartych
już pozycjach.
• Wskaźnik
Interfejs, który implementuje klasa, umożliwia dodawanie nowego wskaźnika.
Użytkownik może wybrać jakiego będzie on koloru, okresu z jakiego będzie wyliczał
swoje wartości, oraz odpowiednią cenę wg której będzie liczył te wartości (tylko
wybrane wskaźniki).
• Wykres
Klasa odpowiadająca za rysowanie historii wybranego kursu na ekranie. Głównym
elementem używanym w tejże klasie jest obsługa zdarzenia contentsMoving(int,int)
obiektu QScrollView.
5
• Operacja
Klasa umożliwiająca zawieranie transakcji na wybranych parach walut oraz ich
zamykanie. Umożliwia ona również modyfikację wcześniej zawartych transakcji.
• CMetaTraderAPI
Klasa, dzięki której są importowane funkcje z biblioteki dll.
4. Podsumowanie
Na rynku jest dostępnych wiele platform, które pozwalają na handel przez sieć.
W czołówce mieszczą się takie rozwiązania jak Wealth Lab czy Metastock, które są
programami płatnymi, jak i również oprogramowanie darmowe udostępniane przez
poszczególnych brokerów (MetaTrader, Visual Trade i inne). Firmy brokerskie oferują
również wiele apletów napisanych w języku Java. Rozwiązania płatne są bardziej
użyteczne i mają mniej błędów w porównaniu z tymi które są oferowane w ramach
konta u brokera. Podczas przeprowadzonych badań została przetestowana platforma
Wealth Lab. Trzeba przyznać że jako narzędzie do budowania i testowania systemów
czy to WL czy też Metastock są programami bardzo dobrymi, jednakże z wdrożeniem
systemu w życie jest, już nieco inaczej. Dlatego powstaje system TMM, jego zaletą jest
to, że bez przeszkód można testować system na koncie demo, można patrzeć jak się on
zachowuje w każdej sytuacji. W przypadku problemów z połączeniem można w prosty
sposób stwierdzić czy wina leży po stronie aplikacji, czy też serwera. Inną sprawą jest
dobór parametrów wejściowych dla systemów. Przeprowadzenie optymalizacji wybraną
metodą nie będzie stanowić problemu. Staramy się o to, aby kod aplikacji był w miarę
czytelny, po to aby inni programiści, chcący uczestniczyć w projekcie mogli z łatwością
implementować zaprojektowane przez siebie rozwiązania. Jako konkluzję należy
stwierdzić, że TradeMM jest bardzo pomocnym narzędziem jeśli chodzi o badanie,
wdrażanie rozwiązań, czy też realne uczestnictwo w rynku.
6