Tuesday 21 November 2017

Mysql system handlowy


Deutsche Boerse stwierdził w niedzielę, że z całą pewnością zakupi niemiecki system obrotu giełdowego 360T na kwotę 725 milionów euro 796 milionów EUR.360T jest jednym z niewielu wielu banków, systemów wielu użytkowników, które rzeczywiście się zmieniły forex trading w poprzednich latach Deutsche Boerse pokonał amerykańskie aktywa, a także kierowca wypłaty pieniężnej CME Group CME O w aukcji publicznej, zgodnie z zasobami zapoznanymi z ofertą. JANUARY 30 21 30.Buck Falls as Manufacturing Facility. Bloomberg s scale papierowy pieniądz w porównaniu z 10 rówieśnikami wyślizgiwał się po idealnym dwudniowym wzroście w ciągu 3 tygodni w porównaniu z rekordami ujawniającymi spadek produkcji najwięcej w marcu w marcu, a także w przemyśle komercyjnym spadł na zaufanie klientów, nagle spadł w kwietniu do najsłabszy poziom w ciągu 7 miesięcy. Rekordy ekonomiczne rzeczywiście śledziły szacunki ekspertów od początku miesiąca, zgodnie z procedurami Bloomberg dotyczącymi szoków finansowych. JANU ARY 30 21 30.Duping Band-Aids w FX blog. Currently to moment, aby uwolnić systemy zawodu artykułu, które są dopasowane do rynku, który pozostanie do wprowadzenia szybko, a dodatkowo rozwój prawa do obniżonej marży firmy. w dzisiejszych czasach powstało, gdy firma głosowa była wiodącą metodą handlu z cyfrowym wymianą głosu w odniesieniu do większości zakupów, a obsługa zawodu musi dodatkowo postępować. Pozwól na komentarz. Budując E-mini system handlowy przy użyciu PHP i zaawansowanych zapytań MySQL. W tym artykule zamieszczono przykładowe przykłady, w jaki sposób PHP i niektóre zaawansowane zapytania MySQL mogą być wykorzystane do budowy internetowego systemu handlowego W celu uproszczenia, będziemy mieć jeden z najpopularniejszych indeksów indeksu SP 500. Jest to również E-mini SP 500 futures jest jednym z najczęściej sprzedawanych kontraktów na akcje futures. Od września 2009 r. nie istniał obecnie działający system handlowy w Internecie, wspierany przez PHP i MySQL, mimo że platforma pop lojalność wśród społeczności open source. System obrotu służy do wchodzenia i wychodzenia z obrotu na rynku akcji lub rynku kontraktów terminowych. Chociaż przy wychodzeniu z handlu, aby zyskać zyski i kontrolować straty, zarządzanie pieniędzmi jest bardziej użytecznym narzędziem niż system handlowy. w pełni funkcjonalny system handlu, potrzebne są następujące procesy. Surowe dane powinny pochodzić z renomowanego źródła dla danych indeksu SP 500 W tym artykule będziemy używać danych Yahoo Finance Typ pliku eksportu jest głównie i Excel, więc najpierw trzeba do eksportowania surowych danych do bazy danych MySQL Zobacz szczegóły poniżej. Sercem procesu jest system handlowy Jest to metoda analizy surowych danych i dokonywania ocen Każdy handlowiec ma swój własny system handlowy, ale w tym przykładzie, będziemy używać następujących reguł. Reguła 1 Zdefiniuj Delta jako różnicę między 50-dniową średnią ruchową a 200 średnią ruchoma Jeśli delta jest dodatnia, oznacza to tendencję wzrostową, w przeciwnym razie s jest niedźwiedzią Możesz przeczytać więcej o średnich kroczących. Ru le 2 Definicja Siła trendu jako Delta MA 200 To kwantyfikuje siłę trendu Użyj danych historycznych definiujących granice obliczania granic wyroków jest poza zakresem tego ćwiczenia Jest to bardziej potwierdzenie trendu Użyj PHP, aby wyświetlić dane w Tabele HTML przy użyciu kwerend MySQL z wyprzedzeniem obliczania średniej i uzyskiwanie danych indeksowych do obliczania średniej ruchomej. Step 1 Pobierz surowe dane indeksu SP 500 i formatuj tabelę programu Excel w taki sam sposób jak poniższy obraz, usuń niepotrzebne kolumny, takie jak wolumeny handlowe i dodaj nowy wpis w kolumnach. Jedna tabela MySQL powinna wyglądać jak powyżej Powyższe zdjęcie jest wciąż w formacie. Step 2 Konwertuj i przesyłaj na serwer MySQL Możesz przeczytać artykuł, który wyjaśnia, jak konwertować arkusz programu Excel. Krok 3 Nadszedł czas na napisanie skryptu PHP Najpierw łączymy się z bazą danych używając poniższego skryptu. połączyć się z bazą danych mysql. podaj swoją nazwę użytkownika mysql. hasło hasło mysql. nazwa hosta nazwa hosta mysql. bazy danych bazy danych mysql. dbhandle mysqlconnect nazwa_hosta, nazwa użytkownika, password. or die Nie można połączyć się z MySQL. wybierz bazę danych do pracy z. or die Nie można wybrać bazy danych. Step 4 Aby wiedzieć, ile wierszy znajduje się w bazie danych, która jest wartością używaną w naszym obliczeniu, będziemy zapytać MySQL. zliczyć liczbę wierszy w bazie danych, w tym ostatni wpis. result1 mysqlquery SELECT FROM sp500. zapisać rekord tabeli przykładów do wiersza. or die Nieprawidłowe zapytanie mysqlerror. Wydrukuj zawartość wpisu. Numberofentries zawiera maksymalną liczbę wierszy w tabeli MySQL w powyższym zrzucie 15020 Dane w tabeli MySQL zostaną ułożone z najnowszych wpisów do poprzednich pozycji. zrzut ekranu powyżej. Mysqlnumrows będzie używany do liczenia liczby wierszy w tabeli SP500.Step 5 Oblicz ostatni wpis, który ma zostać wyświetlony w tabeli HTML Ponieważ będziemy pokazywać tylko ostatnie 50 wierszy, zostaną użyte następujące. liczba ostatnia liczby -50 1. Oznacza to, że na przykład 15020 pozycji w tabeli chcemy pokazać im od pozycji 15020 do 15020-50 1 lub pozycji 14971 Ta wartość, a także maksymalny wpis powyżej, będzie zmienia się w miarę jak dni handlowe przechodzą. Krok 6 Czy kwerenda MySQL służy do wyodrębnienia ostatnich 50 dni wpisów. result2 mysqlquery SELECT FROM sp500 WHERE entry lastentry i wpisy numerów katalogowych ORDER BY wpis DESC. Trudna część polega na sortowaniu zapytań wynikowych według kolejności malejącej. Zapewni to, że wyniki wyjściowe są sortowane z najnowszych do najstarszych wpisów. Step 7 Określ limity dla 200-dniowa średnia ruchoma i 50-dniowa średnia ruchoma. Zdefiniuj granice dla 200-dniowej średniej ruchomej. liczba limitów granicznych 200 1. Określ limity dla 50-dniowej średniej ruchomej. lowerlimit50 numberofentries 50 1.Step 8 Zdefiniuj kwerendę MySQL w celu obliczenia 200-dniowej średniej ruchomej. result3 mysqlquery WYBIERZ WSTECZ bliska z SP500 WHERE entry lowerlimit I górna granica dostępu. zapisać rekord tabeli przykładów do wiersza. or die Nieprawidłowe zapytanie mysqlerror. Wydrukuj zawartość wpisu. Krok 9 Zdefiniuj zapytanie MySQL w celu obliczenia średniej ruchomej 50-dniowej. Wynik4 mysqlquery WYBIERZ WSTĘP Z SP500 GDZIE Wpis dolnylimit50 I górna granica wejścia. zapisać rekord tabeli przykładów do wiersza. or die Nieprawidłowe zapytanie mysqlerror. Wydrukuj zawartość wpisu. Regul 10 Przypisz do zmiennych i liczb okrągłych dla łatwiejszego wyświetlania HTML. Step 11 Oblicz DELTA i wyniki okrągłe. Step 12 Oblicz wynik STRENGTH i round results. Step 13 Utwórz skrypt PHP w celu uzyskania zaleceń. rekomendacja powyżej SATURATED BULL TREND BARDZO WYSOKIEJ RYZYKI BUYING. ELSEIF z 5 1 z 5 5. ZALECENIE POTWIERDZAJĄCĄ BULL TREND WYSOKĄ RYZYKĘ KUPOWANIA. elseif z 2 z 5. ZALECENIE POTWIERDZAJĄCY BULL TREND NISKIE RYZYKO KUPU. ELSEIF z 0 z 1 99. rekomendacja UNCONFIRMED BULL TREND. elseif z 0 z -4 99. zalecenie UNCONFIRMED BEAR TREND. elseif z -5 z -8. rekomendacja POTWIERDZONY BEAR TREND LOW RISK SHORT. rekomendacja SATURATED BEAR TREND BARDZO WYSOKIE RYZYKO KRÓTKIE. Niektóre wartości progowe zostały pobrane z historycznych zapisów SP Te obliczenia wykraczają poza zakres tego samouczka. Krok 14 Łączenie wszystkich zapytań powyżej i obliczeń Następnie wydrukuj tablicę HTML za pomocą pętli WHILE. mysqlnumrows wynik2 0. echa tabela szerokość 100 cellpadding 10 cellspacing 10 granica 1.echo stół szerokość 100 granica 1.echo tr td b wpis b td td b data b td td b otwarty b td td b wysoki b td td b niski b td td b Zamknij b td td b MA200 b td td b MA50 b td td b Delta b td td b Siła b td td b Zalecenie b td tr. while wiersz2 wynik mysqlfetchrow2. result3 mysqlquery WYBIERZ WSTECZ bliska z SP500 WHERE entry lowerlimit I górna granica dostępu. zapisać rekord tabeli przykładów do wiersza. or die Nieprawidłowe zapytanie mysqlerror. Wydrukuj zawartość wpisu. Wynik4 mysqlquery WYBIERZ WSTĘP Z SP500 GDZIE Wpis dolnylimit50 I górna granica wejścia. zapisać rekord tabeli przykładów do wiersza. or die Nieprawidłowe zapytanie mysqlerror. Wydrukuj zawartość wpisu. rekomendacja powyżej SATURATED BULL TREND BARDZO WYSOKIEJ RYZYKI BUYING. ELSEIF z 5 1 z 5 5. ZALECENIE POTWIERDZAJĄCĄ BULL TREND WYSOKĄ RYZYKĘ KUPOWANIA. elseif z 2 z 5. ZALECENIE POTWIERDZAJĄCY BULL TREND NISKIE RYZYKO KUPU. ELSEIF z 0 z 1 99. rekomendacja UNCONFIRMED BULL TREND. elseif z 0 z -4 99. zalecenie UNCONFIRMED BEAR TREND. elseif z -5 z -8. rekomendacja POTWIERDZONY BEAR TREND LOW RISK SHORT. rekomendacja SATURATED BEAR TREND BARDZO WYSOKIE RYZYKO SHORT. Post navigation. Best Język programowania dla systemów handlu algorytmami. Jednym z najczęściej zadawanych pytań, jakie otrzymuję w torebce QS jest jaki jest najlepszy język programowania dla handlu algorytmicznego Krótka odpowiedź brzmi, że nie ma Najlepszy język Parametry strategiczne, wydajność, modułowość, rozwój, odporność i koszty Wszystkie te kwestie zostaną uwzględnione w niniejszym artykule. system handlu, takie jak narzędzia badawcze, optymalizator portfela, menedżer ryzyka i silnik wykonawczy Następnie zostaną zbadane różne strategie handlowe i ich wpływ na projekt systemu W szczególności częstotliwość obrotu i prawdopodobna wielkość obrotu będą zarówno być rozważana. Po wybraniu strategii handlowej jest to nece Sieć operacyjna i system odpornościowy na rzadkie, potencjalnie katastrofalne wydarzenia Podczas gdy architektura jest rozważana, należy wziąć pod uwagę osiągi - zarówno do narzędzi badawczych, jak i żywych środowiska wykonawczego. Co to jest system handlowy? Przed podjęciem decyzji o najlepszym języku, w jaki należy pisać zautomatyzowany system handlu, konieczne jest określenie wymagań. Czy system będzie realizowany wyłącznie na podstawie systemu, czy system wymaga zarządzania ryzykiem moduł konstrukcji portfela Czy system wymaga wysokowydajnego backtesteru W przypadku większości strategii system handlu można podzielić na dwie kategorie Badania i generowanie sygnałów. Badanie dotyczy oceny skuteczności strategii nad danymi historycznymi Proces oceny strategii handlowej nad poprzednim dane rynkowe są znane jako testy wstępne. Wielkość danych i złożoność algorytmiczna będzie miała a duży wpływ na obliczeniową intensywność szybkości procesora i współbieżności obliczeniowej są często czynnikami ograniczającymi optymalizację szybkości wykonywania badań. Wytwarzanie generacji polega na generowaniu zestawu sygnałów handlowych z algorytmu i wysyłaniu takich zamówień na rynek, zwykle za pośrednictwem pośrednictwa W niektórych strategiach wymagany jest wysoki poziom wydajności, takie jak przepustowość sieci i opóźnienie są często czynnikiem ograniczającym optymalizację systemów wykonawczych. Wybór języków dla każdego składnika całego systemu może być zupełnie inny. Typy, częstotliwość i objętość Strategia. Rodzaj stosowanej strategii algorytmicznej będzie miał istotny wpływ na projekt systemu. Konieczne będzie rozważenie rynków będących przedmiotem obrotu, łączności z zewnętrznymi dostawcami danych, częstotliwości i objętości strategii, kompromisu między łatwość tworzenia i optymalizacji wydajności, a także dowolny sprzęt niestandardowy, w tym współużytkowane serwery niestandardowe , GPU lub FPGA, które mogą być konieczne. Wybór technologii dla strategii o niskich częstotliwościach w USA będzie znacznie różnił się od strategii statystyki arbitrażu o wysokiej częstotliwości na rynku futures. Przed wyborem języka wielu dostawców danych musi być które należy wziąć pod uwagę w strategii. Pod uwagę należy wziąć pod uwagę łączność z dostawcą, strukturą dowolnych interfejsów API, terminowość danych, wymagania dotyczące przechowywania danych i odporność w stosunku do sprzedawcy wychodzącego offline. Jest również mądry posiadanie szybkiego dostęp do wielu dostawców Różne instrumenty mają własne wady przechowywania danych, których przykłady zawierają wiele symboli symboli dla akcji i terminów wygaśnięcia na kontrakty futures, które nie wspominają o konkretnych danych OTC. Należy to uwzględnić w projekcie platformy. Częstotliwość strategii jest prawdopodobna być jednym z największych czynników decydujących o sposobie definiowania stosu technologii Strategie wykorzystujące dane częściej niż drobne i drugorzędne paski wymagają znaczna uwagę w odniesieniu do wyników. Strategia przekraczająca drugorzędne paski, tzn. dane dotyczące kleszczu prowadzą do projektowania napędzanego przez wydajność jako podstawowego wymogu W przypadku strategii wysokiej częstotliwości konieczne będzie przechowywanie znacznej ilości danych rynkowych Oprogramowanie takie jak HDF5 lub kdb jest powszechnie wykorzystywanych do tych ról. Aby przetworzyć obszerne ilości danych potrzebnych do aplikacji HFT, należy zastosować rozbudowany system backtester i wdrożenia. CC może być z pewnym asemblerem najprawdopodobniej najsilniejszym kandydatem na język. Strategie o bardzo wysokiej częstotliwości będą na pewno wymagać sprzęt niestandardowy, np. układy FPGA, usługa współbieżności wymiany i tuning interfejsu sieci kernal. Systemy wyszukiwania. Systemy wyszukiwania obejmują zazwyczaj interaktywny rozwój i zautomatyzowane skrypty. Te pierwsze często odbywają się w środowisku IDE, takim jak Visual Studio, MatLab czy R Studio obejmuje rozległe obliczenia liczbowe w odniesieniu do wielu parametrów i danych poin ts Prowadzi to do wyboru języka zapewniającego proste środowisko do testowania kodu, ale także zapewnia wystarczającą wydajność w celu oceny strategii nad wieloma parametrami. Wszystkie IDE w tej przestrzeni to Microsoft Visual CC, zawierający rozbudowane narzędzia do debugowania, możliwości kończenia kodu przez Intellisense i proste omówienie całego stosu projektów za pośrednictwem bazy danych ORM, LINQ MatLab, która jest przeznaczona do rozbudowanej numerycznej algebrry liniowej i operacji wektorowych, ale w konsoli interaktywnej R Studio, która zawiera konsolę statystyczną R w pełni rozwiniętym IDE IDE Eclipse dla Linux Java i C i półfabrykańskie IDE, takie jak Enthought Canopy dla Pythona, które zawierają bibliotekę analizy danych, takie jak Numpy SciPy scikit-learn i pandy w jednej interaktywnej konsoli. For numeryczne testy wsteczne, wszystkie powyższe języki są odpowiednie, chociaż nie jest konieczne wykorzystanie GUI IDE, ponieważ kod zostanie wykonany w tle Najważniejszą uwagę na tym etapie jest szybkość wykonania Język skompilowany, taki jak C, jest często przydatny, jeśli wymiary parametrów testów wstecznych są duże Pamiętaj, że w takich sytuacjach należy uważać na takie systemy. Interpreted languages ​​such ponieważ Python często korzysta z bibliotek wysokiej wydajności, takich jak pandy NumPy dla etapu testowania wstecznego, aby utrzymać rozsądny stopień konkurencyjności ze skompilowanymi odpowiednikami Ostatecznie język wybrany do testowania wstecznego będzie określony przez konkretne potrzeby algorytmiczne, a także zakres bibliotek dostępnych w tym języku więcej niż to Poniej język języka backtestera i środowiska badawczego może być zupełnie niezależny od języka stosowanego w strukturach portfelowych, zarządzaniu ryzykiem i elementach wykonawczych, jak będzie to widoczne. Portfolio struktury i zarządzanie ryzykiem. Elementy konstrukcji portfela i zarządzania ryzykiem często są pomijane algorytmem handlu detalicznego handlowcy To prawie zawsze błąd Te narzędzia zapewniają mechanizm zachowywania kapitału Nie tylko starają się złagodzić liczbę ryzykownych zakładów, ale również zminimalizować problemy z transakcjami, redukując koszty transakcji. Skomplikowane wersje tych elementów mogą mieć znaczący wpływ na jakość i spójność opłacalności Łatwo jest stworzyć stabilną strategię, ponieważ mechanizm budowy portfela i menedżer ryzyka mogą być łatwo zmodyfikowane w celu obsługi wielu systemów W ten sposób należy je uznać za istotne elementy na początku projektu algorytmiczny system handlu. Zadaniem systemu budowy portfela jest podjęcie szeregu wymaganych transakcji i stworzenie zestawu rzeczywistych transakcji, które minimalizują churn, utrzymują ekspozycje na różne czynniki, takie jak sektory, klasy aktywów, zmienność itp. oraz optymalizacja alokacji kapitału do różnych strategii w portfolio. Portfolio struktury często zmniejsza się do algebry liniowej problem taki jak współczynnik matrycy, a tym samym skuteczność zależy w dużej mierze od skuteczności implementacji algebry numerycznej w liczbie dostępnych Biblioteki wspólne obejmują uBLAS LAPACK i NAG dla C MatLab posiada również bardzo zoptymalizowane operacje matematyczne Python wykorzystuje Numpery SciPy do takich obliczeń Często wyważone portfele wymagają skompilowanej i dobrze zoptymalizowanej biblioteki macierzy, aby wyeliminować ten krok, aby uniknąć wąskiego gardła w systemie handlu. Zarządzanie ryzykiem to kolejna niezwykle ważna część algorytmicznego systemu handlu Ryzykiem może być wiele form Zwiększona niestabilność, chociaż może być postrzegana jako pożądana dla pewnych strategii, zwiększonych korelacji między klasami aktywów, domyślnie stronami kontrahenta, przerwami w pracy serwerów, zdarzeniami czarnego łabędzia i niewykrytymi błędami w kodzie obrotu, aby wymienić tylko kilka elementów. Składniki zarządzania ryzykiem próbują przewidzieć skutki nadmiernej zmienności i korelacji między klasami aktywów i ich późniejszy wpływ na handel kapitał Często zmniejsza się to do zestawu statystycznych obliczeń, takich jak testy warunków skrajnych Monte Carlo Jest to bardzo podobne do potrzeb obliczeniowych instrumentu wyceny instrumentów pochodnych i jako taki będzie związany z procesorem CPU Te symulacje są wysoce równoległe, jak poniżej i do pewnego stopnia , można wyrzucić sprzęt przy problemie. Systemy wykonawcze. Zadaniem systemu wykonawczego jest odbieranie odfiltrowanych sygnałów handlowych z elementów budowy portfela i zarządzania ryzykiem oraz przesyłanie ich do maklerskich lub innych sposobów dostępu do rynku Dla większości detalicznych algorytmicznych strategii handlowych obejmuje połączenie API lub FIX z firmą pośredniczącą, taką jak Interactive Brokers Podstawowe kwestie przy podejmowaniu decyzji o języku obejmują jakość interfejsu API, dostępność języków dla interfejsu API, częstotliwość wykonania i oczekiwany poślizg. Jakość interfejsu API odnosi się do tego, jak dobrze udokumentowane jest, jakiego rodzaju wydajność zapewnia, niezależnie od tego, czy potrzebna jest samodzielna softwa aby uzyskać dostęp do bramy w trybie bez głowy, tzn. bez GUI W przypadku interaktywnych brokerów, narzędzie Trader WorkStation musi być uruchomione w środowisku GUI w celu uzyskania dostępu do ich interfejsu API, który kiedyś musiał zainstalować pulpit Wydanie Ubuntu na serwerze z chmurami Amazon, aby zdalnie uzyskać dostęp do interaktywnych brokerów, głównie z tego powodu. Większość interfejsów API dostarcza interfejsu C i Java. Zazwyczaj do społeczności należy tworzenie pakietów wrażeń języka C, Python, R, Excel i MatLab Zauważ, że z każdą dodatkową wtyczką wykorzystywaną specjalnie do owijania API można zaobserwować błędy w obsłudze systemu Zawsze testuj wtyki tego typu i upewnij się, że są one aktywnie utrzymywane. Wartym skrajnym jest sprawdzenie, ile nowych aktualizacji zostało utworzonych w bazie kodu ostatnie miesiące. Wszystko wykonania jest niezmiernie ważne w algorytmie wykonawczym Zauważ, że setki zamówień mogą być wysyłane co minutę i jako takie są krytyczne Utrata zostanie poniesiona poprzez źle działający system egzekwowania, a to będzie miało dramatyczny wpływ na rentowność. Statically-typed języków poniżej, takich jak C Java są ogólnie optymalne dla realizacji, ale jest kompromis w czasie rozwoju, testowania i łatwości obsługi Dynamicznie - pisane języki, takie jak Python i Perl są na ogół wystarczająco szybkie Zawsze upewnij się, że komponenty zostały zaprojektowane w sposób modularny poniżej, aby można je było zamienić na system. system, jego częstotliwość i objętość zostały omówione powyżej, ale infrastruktura systemu nie została jeszcze uwzględniona Działając jako przedsiębiorca detaliczny lub pracujący w małym funduszu prawdopodobnie nosisz wiele kapeluszy Musi być objęty model alfa, ryzyko zarządzanie i parametry wykonawcze, a także końcowe wdrożenie systemu Przed przystąpieniem do konkretnych języków projektowanie optymalnej architektury systemu będzie możliwe omówić. Rozdzielenie obaw. Jednym z najważniejszych decyzji, które należy na wstępie ustalić, należy oddzielić obawy systemu handlowego W zakresie rozwoju oprogramowania oznacza to, jak rozbić różne aspekty systemu handlowego na odrębne modułowe komponenty. Zjawienie interfejsów w każdym z elementów jest łatwe do wymiany części systemu na inne wersje, które zapewniają wydajność, niezawodność i konserwację, bez modyfikowania zewnętrznego kodu zależnego Jest to najlepsza praktyka dla takich systemów Dla strategii na niższym Częstotliwość tych praktyk jest zalecana W przypadku handlu bardzo wysoką częstotliwością reguła może być ignorowana kosztem zmodyfikowania systemu, aby uzyskać jeszcze większą wydajność. Może być pożądany bardziej ściśle sprzężony system. Tworzenie mapy komponentów systemu handlu algorytmicznego jest warte artykułu samo w sobie Jednak optymalnym podejściem jest upewnienie się, że istnieją oddzielne składniki dla rynku historycznego i realnego dane wejściowe, przechowywanie danych, API dostępu do danych, backtester, parametry strategii, budowa portfela, zarządzanie ryzykiem i zautomatyzowane systemy wykonawcze. Na przykład, jeśli używany magazyn danych jest obecnie słabszy, nawet przy znacznym poziomie optymalizacji, może zostać zamieniony przy minimalnym przepisywaniu danych do spożycia danych lub API dostępu do danych Jak dotąd, jak w przypadku backtestera i kolejnych komponentów, nie ma różnicy. Inna korzyść z oddzielonych elementów polega na tym, że pozwala na użycie różnych języków programowania w całym systemie nie ma potrzeby ograniczania się do jednego języka, jeśli metoda komunikacji składników jest niezależna od języka Tak będzie w przypadku, gdy komunikują się za pośrednictwem protokołu TCP IP, ZeroMQ lub innego protokołu niezależnego od języka. Jako konkretny przykład rozważmy przypadek systemu testów wstecznych zapisywanego w języku C w celu zwiększenia liczby operacji krystalizacji, podczas gdy menedżer portów i systemy wykonawcze są zapisywane w Pythonie przy użyciu S ciPy i IBPy. Performance Considerations. Performance jest istotnym elementem dla większości strategii handlowych W przypadku strategii o wyższej częstotliwości najważniejszym czynnikiem jest wydajność, która obejmuje szeroki zakres zagadnień, takich jak algorytmiczna szybkość wykonywania, opóźnienie sieci, przepustowość, dane IO, równoległość równoległości i skalowanie Każdy z tych obszarów jest indywidualnie uwzględniany w dużych podręcznikach, więc ten artykuł będzie tylko zarysować powierzchnię każdego tematu Architektura i wybór języka będą teraz omawiane pod kątem ich wpływu na wydajność. Dominująca mądrość, jak stwierdził Donald Knuth, jeden z ojcowie informatyki, jest taka, że ​​przedwczesna optymalizacja jest źródłem wszelkiego zła Jest to niemal zawsze przypadek - oprócz budowy algorytmu handlu wysoką częstotliwością Dla tych, którzy są zainteresowani strategiami niższych częstotliwości, wspólne podejście polega na budowaniu systemu w najprostszy możliwy sposób i optymalizuje się jedynie w miarę pojawiania się wąskich gardeł Wdrażanie wąskich gardeł Profile można wykonać ze względu na wszystkie czynniki wymienione powyżej, zarówno w środowisku MS Windows, jak i Linux W systemie operacyjnym dostępnych jest wiele dostępnych narzędzi operacyjnych i narzędzi językowych oraz narzędzi innych firm Wybór języka zostanie teraz omówiony w kontekst performance. C, Java, Python, R i MatLab zawierają biblioteki wysokiej wydajności, jako część ich standardowej lub zewnętrznej podstawowej struktury danych i pracy algorytmicznej C dostarczanej ze standardową biblioteką szablonów, podczas gdy Python zawiera NumPy SciPy Wspólne zadania matematyczne znajdują się w tych bibliotekach i rzadko jest korzystne, aby napisać nową implementację. Jedynym wyjątkiem jest, jeśli wymagana jest bardzo wysoka architektura sprzętowa, a algorytm wykorzystuje rozbudowane rozszerzenia, takie jak niestandardowe pamięci podręczne. Często jednak wynagradzanie odpadów koła czas, który mógłby być lepiej wydany na rozwój i optymalizację innych części infrastruktury handlowej Czas rozwoju jest bardzo precio szczególnie w kontekście pojedynczych programistów. Częstotliwość jest często kwestią systemu wykonawczego, ponieważ narzędzia badawcze znajdują się zwykle na tej samej maszynie. Wcześniej latencja może wystąpić w wielu punktach wzdłuż ścieżki wykonywania Bazy danych muszą być sprawdzane pod kątem opóźnienia sieci dyskowej , sygnały muszą być generowane system operacyjny, opóźnienie przesyłania wiadomości kernal, sygnały handlowe wysyłane przez opóźnienia NIC i zamówienia przetworzonych systemów wymiany wewnętrznego opóźnienia. W przypadku operacji o wyższej częstotliwości konieczne jest zapoznanie się z optymalizacją kernal oraz optymalizacją transmisji sieciowej obszar i znacznie poza zasięgiem artykułu, ale jeśli wymagany jest algorytm UHFT, należy mieć świadomość wymaganej wiedzy. Zbiór jest bardzo przydatny w zestawie narzędziowym ilościowego dewelopera Caching odnosi się do koncepcji przechowywania często odwiedzanych danych w sposób, który umożliwia dostęp do wyższej wydajności, kosztem potencjalnego nieznaczności danych A c przypadek użycia ommon występuje w rozwoju stron WWW podczas pobierania danych z relacyjnej bazy danych na dysku i umieszczania jej w pamięci Każde kolejne żądania danych nie muszą trafiać w bazę danych, a zatem zyski z wydajności mogą być znaczące. W sytuacjach handlowych buforowanie może być bardzo korzystne Na przykład, aktualny stan portfela strategicznego może być przechowywany w pamięci podręcznej, dopóki nie zostanie zrównoważony, tak że lista nie musi być regenerowana po każdej pętli algorytmu handlowania Taka regeneracja prawdopodobnie będzie wysokim procesorem lub dyskiem IO operacja. Jednak buforowanie nie jest bez własnych problemów Regeneracja danych cache wszystko naraz, ze względu na lotność charakter przechowywania pamięci podręcznej, może spowodować znaczny popyt na infrastrukturę Inną kwestią jest doganie, gdzie wiele pokoleń nowej kopii cache jest wykonywane przy bardzo wysokim obciążeniu, co prowadzi do awarii kaskady. Dynamiczna alokacja pamięci jest kosztowną pracą w realizacji oprogramowania W związku z tym konieczna jest większa perfor mance trading applications, które mają być świadome, jak przydziela się pamięć i dezalizuje podczas przepływu programu Nowsze standardy językowe, takie jak Java, C i Python wykonują automatyczną kolekcję śmieci, która odnosi się do dealokacji dynamicznie przydzielonej pamięci, gdy obiekty wykraczają poza zakres. Kolekcja Garbage jest niezwykle użyteczna podczas projektowania, ponieważ zmniejsza błędy i ułatwia czytelność. Często jest to jednak nieefektywne pod względem optymalizacji w przypadku niektórych strategii handlowych o wysokiej częstotliwości. W Javie na przykład polega na przykładowym strojeniu zbieracza śmieci i konfiguracji sterty, możliwe jest uzyskanie wysokiej wydajności w strategiach HFT. Nie dostarcza natywnego kolektora do zbierania śmieci, dlatego też konieczne jest zarządzanie wszystkimi alokacjami alokacji pamięci w ramach implementacji obiektu Podczas gdy potencjalnie błąd może powodować zwisające wskaźniki, jest to niezwykle przydatne mieć drobną kontrolę nad tym, w jaki sposób przedmioty pojawiają się na stercie dla pewnych zastosowań Jeśli wybierzesz język, zbadaj, jak działa garbage collector i czy można go zmodyfikować w celu zoptymalizowania dla konkretnego przypadku użycia. Wiele operacji w algorytmicznych systemach handlowych jest dopuszczalnych do równoległości. Odnosi się to do koncepcji przeprowadzania wielu operacji programowych na w tym samym czasie, tzn. równolegle tak zwane algorytmy embarassingly równolegle obejmują etapy, które można obliczyć w pełni niezależnie od innych kroków Niektóre operacje statystyczne, takie jak symulacje Monte Carlo, są dobrym przykładem algorytmów zadziwiających równoległych, ponieważ każde losowe losowanie i następująca operacja ścieżki można obliczyć bez znajomości innych ścieżek. Inne algorytmy są tylko częściowo równoległe. Symulacje dynamiki płynów są takim przykładem, w którym domena obliczeniowa może być dzielona, ​​ale ostatecznie te domeny muszą komunikować się ze sobą, a zatem operacje są częściowo sekwencyjnymi algorytmami równoległymi podlegają prawu Amdahla, które przewidują sa teoretyczna górna granica wzrostu wydajności algorytmu równoległego, jeśli podlega on osobnym procesom, np. na rdzeniu procesora lub wątku. Podległość stała się coraz ważniejsza jako sposób optymalizacji, ponieważ procesor zegara - prędkość stagnacji, ponieważ nowsze procesory zawierają wiele rdzeni z którymi przeprowadzane są równoległe obliczenia Wzrost sprzętu graficznego konsumenckiego głównie w grach wideo doprowadził do opracowania graficznych jednostek GPU przetwarzania, zawierających setki rdzeni dla bardzo równomiernych operacji. Takie GPU są teraz bardzo przystępne. Wysokie poziomy, takie jak Nvidia s CUDA doprowadziły do ​​powszechnego przyjęcia w środowiskach akademickich i finansów. Tego sprzętu GPU generalnie nadaje się tylko do aspektów badawczych w dziedzinie finansów ilościowych, a inne bardziej wyspecjalizowane sprzętowe, w tym pola programowalne bramek - FPGA są używane w U HFT Obecnie w większości nowoczesnych języków urzędowych wspiera stopień jednoczesnego wielowątkowości W ten sposób jest to proste zoptymalizować testy backtestu, ponieważ wszystkie obliczenia są na ogół niezależne od innych. Skalowanie w inżynierii oprogramowania i operacjach odnosi się do zdolności systemu do obsługi ciągle zwiększających się obciążeń w formie większych zapotrzebowań, wyższego wykorzystania procesora i większej alokacji pamięci W handlu algorytmicznym strategia jest w stanie skalować, jeśli może zaakceptować większe ilości kapitału i nadal sprzyjać zwrocie Technologia stosunków handlowych stosowana jest do wyważenia, jeśli może wytrzymać większe wielkości handlowe i zwiększoną latencję, bez wąskich gardeł. Podczas gdy systemy muszą być zaprojektowane tak, aby skalować, często trudno jest przewidywania, gdy wystąpi wąski gardziel Szorstki rejestrowanie, testowanie, profilowanie i monitorowanie znacznie przyczyni się do umożliwienia skalowania systemu Języki są często opisywane jako niekalowalne Jest to zwykle rezultat dezinformacji, a nie faktu twardego. powinien być określony dla skalowalności, a nie języka Jasno określone języki ha w jednym przypadku lepsze wyniki niż inne niż w innych przypadkach, ale jeden język nigdy nie jest lepszy od innego w każdym sensie. Jednym ze sposobów zarządzania skalą jest oddzielić obawy, jak wspomniano powyżej W celu dalszego wprowadzenia zdolności do obsługi skoków w systemie tj. volatility which triggers a raft of trades , it is useful to create a message queuing architecture This simply means placing a message queue system between components so that orders are stacked up if a certain component is unable to process many requests. Rather than requests being lost they are simply kept in a stack until the message is handled This is particularly useful for sending trades to an execution engine If the engine is suffering under heavy latency then it will back up trades A queue between the trade signal generator and the execution API will alleviate this issue at the expense of potential trade slippage A well-respected open source message queue broker is RabbitMQ. Hardware and Operating Systems. The ha rdware running your strategy can have a significant impact on the profitability of your algorithm This is not an issue restricted to high frequency traders either A poor choice in hardware and operating system can lead to a machine crash or reboot at the most inopportune moment Thus it is necessary to consider where your application will reside The choice is generally between a personal desktop machine, a remote server, a cloud provider or an exchange co-located server. Desktop machines are simple to install and administer, especially with newer user friendly operating systems such as Windows 7 8, Mac OSX and Ubuntu Desktop systems do possess some significant drawbacks, however The foremost is that the versions of operating systems designed for desktop machines are likely to require reboots patching and often at the worst of times They also use up more computational resources by the virtue of requiring a graphical user interface GUI. Utilising hardware in a home or local office environme nt can lead to internet connectivity and power uptime problems The main benefit of a desktop system is that significant computational horsepower can be purchased for the fraction of the cost of a remote dedicated server or cloud based system of comparable speed. A dedicated server or cloud-based machine, while often more expensive than a desktop option, allows for more significant redundancy infrastructure, such as automated data backups, the ability to more straightforwardly ensure uptime and remote monitoring They are harder to administer since they require the ability to use remote login capabilities of the operating system. In Windows this is generally via the GUI Remote Desktop Protocol RDP In Unix-based systems the command-line Secure SHell SSH is used Unix-based server infrastructure is almost always command-line based which immediately renders GUI-based programming tools such as MatLab or Excel to be unusable. A co-located server, as the phrase is used in the capital markets, is s imply a dedicated server that resides within an exchange in order to reduce latency of the trading algorithm This is absolutely necessary for certain high frequency trading strategies, which rely on low latency in order to generate alpha. The final aspect to hardware choice and the choice of programming language is platform-independence Is there a need for the code to run across multiple different operating systems Is the code designed to be run on a particular type of processor architecture, such as the Intel x86 x64 or will it be possible to execute on RISC processors such as those manufactured by ARM These issues will be highly dependent upon the frequency and type of strategy being implemented. Resilience and Testing. One of the best ways to lose a lot of money on algorithmic trading is to create a system with no resiliency This refers to the durability of the sytem when subject to rare events, such as brokerage bankruptcies, sudden excess volatility, region-wide downtime for a cloud server provider or the accidental deletion of an entire trading database Years of profits can be eliminated within seconds with a poorly-designed architecture It is absolutely essential to consider issues such as debuggng, testing, logging, backups, high-availability and monitoring as core components of your system. It is likely that in any reasonably complicated custom quantitative trading application at least 50 of development time will be spent on debugging, testing and maintenance. Nearly all programming languages either ship with an associated debugger or possess well-respected third-party alternatives In essence, a debugger allows execution of a program with insertion of arbitrary break points in the code path, which temporarily halt execution in order to investigate the state of the system The main benefit of debugging is that it is possible to investigate the behaviour of code prior to a known crash point. Debugging is an essential component in the toolbox for analysing programmin g errors However, they are more widely used in compiled languages such as C or Java, as interpreted languages such as Python are often easier to debug due to fewer LOC and less verbose statements Despite this tendency Python does ship with the pdb which is a sophisticated debugging tool The Microsoft Visual C IDE possesses extensive GUI debugging utilities, while for the command line Linux C programmer, the gdb debugger exists. Testing in software development refers to the process of applying known parameters and results to specific functions, methods and objects within a codebase, in order to simulate behaviour and evaluate multiple code-paths, helping to ensure that a system behaves as it should A more recent paradigm is known as Test Driven Development TDD , where test code is developed against a specified interface with no implementation Prior to the completion of the actual codebase all tests will fail As code is written to fill in the blanks , the tests will eventually all pass, a t which point development should cease. TDD requires extensive upfront specification design as well as a healthy degree of discipline in order to carry out successfully In C , Boost provides a unit testing framework In Java, the JUnit library exists to fulfill the same purpose Python also has the unittest module as part of the standard library Many other languages possess unit testing frameworks and often there are multiple options. In a production environment, sophisticated logging is absolutely essential Logging refers to the process of outputting messages, with various degrees of severity, regarding execution behaviour of a system to a flat file or database Logs are a first line of attack when hunting for unexpected program runtime behaviour Unfortunately the shortcomings of a logging system tend only to be discovered after the fact As with backups discussed below, a logging system should be given due consideration BEFORE a system is designed. Both Microsoft Windows and Linux come with extensive system logging capability and programming languages tend to ship with standard logging libraries that cover most use cases It is often wise to centralise logging information in order to analyse it at a later date, since it can often lead to ideas about improving performance or error reduction, which will almost certainly have a positive impact on your trading returns. While logging of a system will provide information about what has transpired in the past, monitoring of an application will provide insight into what is happening right now All aspects of the system should be considered for monitoring System level metrics such as disk usage, available memory, network bandwidth and CPU usage provide basic load information. Trading metrics such as abnormal prices volume, sudden rapid drawdowns and account exposure for different sectors markets should also be continuously monitored Further, a threshold system should be instigated that provides notification when certain metrics are b reached, elevating the notification method email, SMS, automated phone call depending upon the severity of the metric. System monitoring is often the domain of the system administrator or operations manager However, as a sole trading developer, these metrics must be established as part of the larger design Many solutions for monitoring exist proprietary, hosted and open source, which allow extensive customisation of metrics for a particular use case. Backups and high availability should be prime concerns of a trading system Consider the following two questions 1 If an entire production database of market data and trading history was deleted without backups how would the research and execution algorithm be affected 2 If the trading system suffers an outage for an extended period with open positions how would account equity and ongoing profitability be affected The answers to both of these questions are often sobering. It is imperative to put in place a system for backing up data and also f or testing the restoration of such data Many individuals do not test a restore strategy If recovery from a crash has not been tested in a safe environment, what guarantees exist that restoration will be available at the worst possible moment. Similarly, high availability needs to be baked in from the start Redundant infrastructure even at additional expense must always be considered, as the cost of downtime is likely to far outweigh the ongoing maintenance cost of such systems I won t delve too deeply into this topic as it is a large area, but make sure it is one of the first considerations given to your trading system. Choosing a Language. Considerable detail has now been provided on the various factors that arise when developing a custom high-performance algorithmic trading system The next stage is to discuss how programming languages are generally categorised. Type Systems. When choosing a language for a trading stack it is necessary to consider the type system The languages which are of interest for algorithmic trading are either statically - or dynamically-typed A statically-typed language performs checks of the types e g integers, floats, custom classes etc during the compilation process Such languages include C and Java A dynamically-typed language performs the majority of its type-checking at runtime Such languages include Python, Perl and JavaScript. For a highly numerical system such as an algorithmic trading engine, type-checking at compile time can be extremely beneficial, as it can eliminate many bugs that would otherwise lead to numerical errors However, type-checking doesn t catch everything, and this is where exception handling comes in due to the necessity of having to handle unexpected operations Dynamic languages i e those that are dynamically-typed can often lead to run-time errors that would otherwise be caught with a compilation-time type-check For this reason, the concept of TDD see above and unit testing arose which, when carried out correctly, ofte n provides more safety than compile-time checking alone. Another benefit of statically-typed languages is that the compiler is able to make many optimisations that are otherwise unavailable to the dynamically - typed language, simply because the type and thus memory requirements are known at compile-time In fact, part of the inefficiency of many dynamically-typed languages stems from the fact that certain objects must be type-inspected at run-time and this carries a performance hit Libraries for dynamic languages, such as NumPy SciPy alleviate this issue due to enforcing a type within arrays. Open Source or Proprietary. One of the biggest choices available to an algorithmic trading developer is whether to use proprietary commercial or open source technologies There are advantages and disadvantages to both approaches It is necessary to consider how well a language is supported, the activity of the community surrounding a language, ease of installation and maintenance, quality of the documen tation and any licensing maintenance costs. The Microsoft stack including Visual C , Visual C and MathWorks MatLab are two of the larger proprietary choices for developing custom algorithmic trading software Both tools have had significant battle testing in the financial space, with the former making up the predominant software stack for investment banking trading infrastructure and the latter being heavily used for quantitative trading research within investment funds. Microsoft and MathWorks both provide extensive high quality documentation for their products Further, the communities surrounding each tool are very large with active web forums for both The software allows cohesive integration with multiple languages such as C , C and VB, as well as easy linkage to other Microsoft products such as the SQL Server database via LINQ MatLab also has many plugins libraries some free, some commercial for nearly any quantitative research domain. There are also drawbacks With either piece of soft ware the costs are not insignificant for a lone trader although Microsoft does provide entry-level version of Visual Studio for free Microsoft tools play well with each other, but integrate less well with external code Visual Studio must also be executed on Microsoft Windows, which is arguably far less performant than an equivalent Linux server which is optimally tuned. MatLab also lacks a few key plugins such as a good wrapper around the Interactive Brokers API, one of the few brokers amenable to high-performance algorithmic trading The main issue with proprietary products is the lack of availability of the source code This means that if ultra performance is truly required, both of these tools will be far less attractive. Open source tools have been industry grade for sometime Much of the alternative asset space makes extensive use of open-source Linux, MySQL PostgreSQL, Python, R, C and Java in high-performance production roles However, they are far from restricted to this domain Pytho n and R, in particular, contain a wealth of extensive numerical libraries for performing nearly any type of data analysis imaginable, often at execution speeds comparable to compiled languages, with certain caveats. The main benefit of using interpreted languages is the speed of development time Python and R require far fewer lines of code LOC to achieve similar functionality, principally due to the extensive libraries Further, they often allow interactive console based development, rapidly reducing the iterative development process. Given that time as a developer is extremely valuable, and execution speed often less so unless in the HFT space , it is worth giving extensive consideration to an open source technology stack Python and R possess significant development communities and are extremely well supported, due to their popularity Documentation is excellent and bugs at least for core libraries remain scarce. Open source tools often suffer from a lack of a dedicated commercial support contract and run optimally on systems with less-forgiving user interfaces A typical Linux server such as Ubuntu will often be fully command-line oriented In addition, Python and R can be slow for certain execution tasks There are mechanisms for integrating with C in order to improve execution speeds, but it requires some experience in multi-language programming. While proprietary software is not immune from dependency versioning issues it is far less common to have to deal with incorrect library versions in such environments Open source operating systems such as Linux can be trickier to administer. I will venture my personal opinion here and state that I build all of my trading tools with open source technologies In particular I use Ubuntu, MySQL, Python, C and R The maturity, community size, ability to dig deep if problems occur and lower total cost ownership TCO far outweigh the simplicity of proprietary GUIs and easier installations Having said that, Microsoft Visual Studio especially for C is a fantastic Integrated Development Environment IDE which I would also highly recommend. Batteries Included. The header of this section refers to the out of the box capabilities of the language - what libraries does it contain and how good are they This is where mature languages have an advantage over newer variants C , Java and Python all now possess extensive libraries for network programming, operating system interaction, GUIs, regular expressions regex , iteration and basic algorithms. C is famed for its Standard Template Library STL which contains a wealth of high performance data structures and algorithms for free Python is known for being able to communicate with nearly any other type of system protocol especially the web , mostly through its own standard library R has a wealth of statistical and econometric tools built in, while MatLab is extremely optimised for any numerical linear algebra code which can be found in portfolio optimisation and derivatives pricing, for ins tance. Outside of the standard libraries, C makes use of the Boost library, which fills in the missing parts of the standard library In fact, many parts of Boost made it into the TR1 standard and subsequently are available in the C 11 spec, including native support for lambda expressions and concurrency. Python has the high performance NumPy SciPy Pandas data analysis library combination, which has gained widespread acceptance for algorithmic trading research Further, high-performance plugins exist for access to the main relational databases, such as MySQL MySQL C , JDBC Java MatLab , MySQLdb MySQL Python and psychopg2 PostgreSQL Python Python can even communicate with R via the RPy plugin. An often overlooked aspect of a trading system while in the initial research and design stage is the connectivity to a broker API Most APIs natively support C and Java, but some also support C and Python, either directly or with community-provided wrapper code to the C APIs In particular, Interactive B rokers can be connected to via the IBPy plugin If high-performance is required, brokerages will support the FIX protocol. As is now evident, the choice of programming language s for an algorithmic trading system is not straightforward and requires deep thought The main considerations are performance, ease of development, resiliency and testing, separation of concerns, familiarity, maintenance, source code availability, licensing costs and maturity of libraries. The benefit of a separated architecture is that it allows languages to be plugged in for different aspects of a trading stack, as and when requirements change A trading system is an evolving tool and it is likely that any language choices will evolve along with it. Just Getting Started with Quantitative Trading.

No comments:

Post a Comment