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