Tuesday 21 November 2017

Rozwój systemu handlu dużymi częstotliwościami


Projektowanie systemów handlu wysokimi częstotliwościami i zarządzanie procesami. Zarządzanie projektowaniem i zarządzaniem procesem wysokiej częstotliwości. Rejestracja Roy E Welsch. Department System Design and Management Program. Publisher Massachusetts Institute of Technology. Date wydane 2009. Firmy handlowe w dzisiejszych czasach są w dużej mierze zależne od wydobycia danych, modelowanie komputerów i rozwój oprogramowania Analitycy finansowi wykonują wiele podobnych zadań w sektorach oprogramowania i produkcji przemysłowej. Jednak sektor finansowy jeszcze nie w pełni zaakceptował standardowe ramy inżynierii systemów i podejścia do zarządzania procesami, które odniosły sukces w przemyśle oprogramowania i produkcji w dziedzinie finansów można zastosować tradycyjne metodologie projektowania produktów, kontroli jakości, innowacji systematycznych i ciągłego doskonalenia, które można zastosować do dziedziny finansów Niniejsza praca pokazuje, w jaki sposób wiedza zdobyta dzięki dyscyplinom inżynieryjnym może poprawić projektowanie i zarządzanie procesami handlu wysokiej częstotliwości ystems Systemy handlu wysokimi częstotliwościami są oparte na obliczeniach Systemy te są automatycznymi lub półautomatycznymi systemami oprogramowania, które są z natury złożone i wymagają dużej precyzji projektu Projekt systemu handlu wysokimi częstotliwościami łączy wiele dziedzin, w tym finansów ilościowych, projektowania systemów i inżynieria oprogramowania W przemyśle finansowym, gdzie teorie matematyczne i modele handlowe są stosunkowo dobrze zbadane, zdolność do wdrażania tych wzorów w prawdziwych praktykach handlowych jest jednym z kluczowych elementów konkurencyjności firmy inwestycyjnej. Możliwość przekształcania pomysłów inwestycyjnych w wydajny handel systemy skutecznie i wydajnie mogą dać przedsiębiorstwu inwestycyjnemu dużą przewagę nad konkurencją W tej pracy przedstawiono szczegółową analizę składającą się z projektowania systemów handlu wysokimi częstotliwościami, modelowania i zasad systemu oraz zarządzania procesami dla rozwoju systemu Szczególny nacisk kładziemy na testy wsteczne i optymalizację, które są rozważano th Najważniejsze elementy w budowaniu systemu handlu Niniejsze badania budują modele inżynierii systemów, które prowadzą do procesu rozwojowego. Wykorzystuje również eksperymentalne systemy handlowe w celu sprawdzenia i zatwierdzenia zasad omówionych w tej pracy. W końcu niniejsza praca stwierdza, że ​​zasady i ramy inżynierii systemów mogą być kluczem do sukcesu wdrażania handlu wysokonakładowego lub ilościowych systemów inwestycyjnych. Thesis SM --Massachusetts Institute of Technology, System Design and Management Program, 2009 Zeszyt z wersji PDF pracy Zawiera bibliograficzne odniesienia p 78-79.Keywords System Design and Management Program. Best Język programowania dla systemów handlu algorytmicznego. Jednym z najczęstszych pytań otrzymywanych w torebce przesyłkowej QS jest jaki jest najlepszy język programowania dla handlu algorytmicznego. Krótka odpowiedź brzmi: że nie ma najlepszego języka Parametry strategiczne, wydajność, modularność, rozwój, odporność i koszt musi być rozpatrzony Ten artykuł będzie o utleniać niezbędne składniki architektury systemu handlu algorytmicznego i jak decyzje dotyczące implementacji wpływają na wybór języka. Przede wszystkim zostaną rozważone główne składniki algorytmicznego systemu handlu, takie jak narzędzia badawcze, optymalizator portfeli, menedżer ryzyka i silnik wykonawczy , zostaną przeanalizowane różne strategie handlowe i jak wpływają one na projekt systemu W szczególności zostanie omówiona częstotliwość obrotu i prawdopodobna wielkość obrotu. Po wybraniu strategii handlowej konieczne jest zaprojektowanie całego systemu. Obejmuje to wybór sprzętu, system operacyjny i odporność systemu przed rzadkimi, potencjalnie katastrofalnymi zdarzeniami Podczas gdy architektura jest rozważana, należy wziąć pod uwagę osiągi - zarówno do narzędzi badawczych, jak i do środowiska na żywo. Co to jest system handlu Postaraj się zrobić. Przed podjęciem decyzji o najlepszym języku, w którym można napisać automatyczny tradi ng konieczne jest określenie wymagań Czy system ma być realizowany w czystości Czy system wymaga modułu zarządzania ryzykiem lub modułu budowy 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 w odniesieniu do danych historycznych Proces oceny strategii handlowej nad wcześniejszymi danymi rynkowymi jest znany jako badanie wstępne Wielkość danych i złożoność algorytmiczna będą miały duży wpływ na intensywność obliczeniową testanta Prędkość procesora i współbieżność 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ń do rynku, zazwyczaj za pośrednictwem pośrednictwa. W niektórych strategiach wysoki poziom wydajności wymagają często takich problemów związanych z IO, jak przepustowość sieci i opóźnienia czynnik ograniczający optymalizację systemów wykonawczych W związku z tym wybór języków dla każdego składnika całego systemu może być zupełnie inny. Typy, częstotliwość i wielkość strategii. Rodzaj stosowanej strategii algorytmicznej będzie miał istotny wpływ na projekt systemu będzie konieczne rozważenie rynków będących przedmiotem obrotu, łączność z zewnętrznymi dostawcami danych, częstotliwość i wielkość strategii, kompromis między łatwością rozwoju i optymalizacją wydajności, a także wszelkie niestandardowe urządzenia, w tym współużytkowane serwery niestandardowe , GPU lub FPGA, które mogą okazać się 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 kontraktów terminowych. Przed wyborem języka wielu dostawców danych musi być które należy wziąć pod uwagę przy opracowywanej strategii. Należy rozważyć połączenie z dostawcą, strukturą dowolnych interfejsów API, terminowość d ata, wymagania dotyczące przechowywania danych i elastyczność w obliczu sprzedawcy, który jest w trybie offline Jest również mądry posiadanie szybkiego dostępu do wielu dostawców Różne instrumenty mają własne wady przechowywania, których przykłady zawierają wiele symboli symboli na akcje i terminy ważności dla kontraktów futures, a nie do wspomnieć o konkretnych danychach OTC Należy to uwzględnić w projekcie platformy. Często strategia prawdopodobnie będzie jednym z największych czynników decydujących o sposobie określania stosu technologii. Strategie wykorzystujące dane częściej niż drobne lub drugie barki wymagają znacznej uwagi jeśli chodzi o wydajność. Strategia przekraczająca drugorzędne paski, tzn. dane z kresek, prowadzą do projektowania napędzanego przez wydajność jako głównego wymogu. W przypadku strategii wysokiej częstotliwości znaczna ilość danych rynkowych będzie musiała być przechowywana i poddawana ocenie Oprogramowanie takie jak HDF5 lub kdb jest powszechnie używane w tych role. W celu przetworzenia dużej ilości danych potrzebnych do aplikacji HFT, należy rozważyć wiele opcji mised backtester i system wykonawczy musi być używany CC prawdopodobnie z pewnym asemblerem prawdopodobnie najsilniejszym kandydatem na język Ultra-wysokiej częstotliwości strategii prawie na pewno wymaga niestandardowych urządzeń, takich jak FPGA, wymiany co-location i tunelowania sieci kernal. Research Systemss. Research Systems zazwyczaj obejmują mieszankę interaktywnego rozwoju i zautomatyzowanego tworzenia skryptów Pierwsze miejsce często odbywa się w środowisku IDE, takim jak Visual Studio, MatLab czy R Studio. Wiąże się to z dużymi obliczeniami liczbowymi w odniesieniu do wielu parametrów i punktów danych. To prowadzi do wyboru języka, który zapewnia proste środowisko dla ale również zapewnia wystarczającą wydajność w celu oceny strategii nad wieloma parametrami. W tym miejscu są to: Microsoft Visual CC, zawierający rozbudowane narzędzia do debugowania, funkcje uzupełniania kodu przez Intellisense i proste przegląd wszystkich stosów projektu za pośrednictwem bazy danych ORM, LINQ MatLab który jest przeznaczony do szeroko zakrojonej numerycznej algebry liniowej i wektorizacji, ale w konsoli interaktywnej R Studio, która otacza konsolę statystyczną R w pełni rozwiniętym IDE IDE dla Eclipse IDE dla Linuxa Java i C oraz półfabrykańskie IDE, takie jak Enthought Canopy for Python, w skład którego wchodzą bibliotekę analizy danych, na przykład NumPy SciPy scikit-learn i pandy w jednej interaktywnej konsoli. Na liczbowym teście backtestingu wszystkie powyższe języki są odpowiednie, chociaż nie jest konieczne użycie IDE GUI, ponieważ kod będzie wykonywane w tle Najważniejszą uwagę na tym etapie jest szybkość wykonania Język skompilowany, taki jak C jest często użyteczny, 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 takie jak Python często korzystają z bibliotek o wysokiej wydajności, takich jak pandy NumPy dla etapu testowania wstecznego, w celu utrzymania rozsądnego poziomu c ompetitiveness z skompilowanymi odpowiednikami Ostatecznie język wybrany do testu wstecznego będzie określony przez konkretne potrzeby algorytmiczne, a także zakres bibliotek dostępnych w języku bardziej niż ten poniżej. Jednakże język używany do środowiska testowego i środowisk badawczych może być całkowicie niezależny od tych stosowanych w budowie portfela, elementach zarządzania ryzykiem i realizacji, jak będzie to widoczne. Portfolio struktury i zarządzanie ryzykiem. Zarządzanie portfelem i zarządzanie ryzykiem są często pomijane przez detalicznych handlarzy algorytmicznych Jest to prawie zawsze błąd Te narzędzia stanowią mechanizm, za pomocą którego Kapitał będzie zachowany Nie tylko starają się złagodzić liczbę ryzykownych zakładów, ale także zminimalizować problemy z transakcjami, redukując koszty transakcji. Skomplikowane wersje tych elementów mogą mieć znaczący wpływ na jakość i spójność dochodowości. Jest to proste stwórz stabilną strategię jako mechanizm budowy portfela i menedżer ryzyka mogą być łatwo zmodyfikowane w celu obsługi wielu systemów W związku z tym należy je uznać za niezbędne składniki na początku projektu algorytmicznego systemu handlu. Zadaniem systemu budowy portfela jest podjęcie określonych transakcji i produkcja zestaw realnych transakcji, które minimalizują churn, utrzymują ekspozycje na różne czynniki, takie jak sektory, klasy aktywów, zmienność itp. i optymalizują alokację kapitału do różnych strategii w portfelu. Portfolio struktury często zmniejsza się do problemu algebry liniowej, np. współczynnik matrycy a tym samym wydajność jest w dużej mierze zależna od skuteczności wprowadzonej numerycznej implementacji algebry liniowej Dostępne są biblioteki wspólne: 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ą skompilowanego i dobrze zoptymalizowanego matrycy do wykonania tego krok po kroku, aby nie wąskie gardło w systemie handlu. Zarządzanie ryzykiem to kolejna niezwykle ważna część algorytmicznego systemu handlu Ryzykiem może być wiele form Zwiększenie zmienności, chociaż może być to postrzegane jako pożądane w przypadku niektórych strategii, zwiększone korelacje między klasami aktywów, licznik - domyślne strony, przerwy w pracy serwerów, zdarzenia czarnego łabędzia i niewykryte błędy w kodzie handlowym, aby wymienić tylko kilka elementów. Składniki zarządzania ryzykiem próbują przewidzieć skutki nadmiernej zmienności i korelacji pomiędzy klasami aktywów a ich następującymi skutkami dla kapitału handlowego. do zbioru obliczeń statystycznych, takich jak testy warunków skrajnych Monte Carlo Jest to bardzo podobne do potrzeb obliczeniowych instrumentu wyceny instrumentów pochodnych i jako takie będzie powiązane z procesorem CPU Te symulacje są wysoce równoległe, jak poniżej i do pewnego stopnia możliwe jest do rzucania sprzętu na problem. Execution Systems. Zadaniem systemu wykonawczego jest odbieranie filtrowanych sygnałów handlowych od t on portfel konstrukcji i zarządzania ryzykiem komponentów i wysłać je do maklerskich lub innych sposobów dostępu do rynku W większości algorytmicznych strategii handlowych handlu detalicznego obejmuje połączenie API lub FIX do maklerskich, takich jak Interactive Brokers Podstawowe kwestie przy podejmowaniu decyzji o języku obejmują jakość interfejsu API, dostępność języka dla opakowania dla interfejsu API, częstotliwość wykonania i przewidywany poślizg. Jakość interfejsu API odnosi się do tego, jak dobrze udokumentowana jest, jaki jest jej poziom wydajności, niezależnie od tego, czy ma być dostępny samodzielny program, czy czy brama może zostać utworzona w sposób bezkłowy tj. 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 Kiedyś musiałem zainstalować wersję Ubuntu Desktopa na Amazon Cloud Server do zdalnego dostępu do interaktywnych brokerów, wyłącznie z tego powodu. Większość interfejsów API dostarcza interfejs C i Java. wspólnota opracowała opakowania specyficzne dla języka C, Python, R, Excel i MatLab Zauważ, że z każdą dodatkową wtyczką wykorzystywaną specjalnie do pakowania w API można zaobserwować błędy w systemie. Zawsze testuj wtyki tego typu i upewnij się, że są one aktywnie utrzymywane Wartym skrajni jest sprawdzenie, ile nowych zmian w bazie kodu zostało wykonane w ostatnich miesiącach. Częstotliwość wykonywania jest niezwykle ważna w algorytmie wykonywania Zauważ, że setki zamówień mogą być wysyłane co minutę i jako takie są krytyczne. poniesione przez źle działające systemy egzekwowania, a to będzie miało dramatyczny wpływ na rentowność. Języki wpisane w sposób typowy podano poniżej, takie jak C Java są ogólnie optymalne do wykonania, ale występuje kompromis w czasie projektowania, testowania i łatwości obsługi Dynamicznie typy języków, takie jak Python i Perl są na ogół wystarczająco szybkie Zawsze upewnij się, że komponenty są projektowane modularnie patrz poniżej, mogą zostać zamienione na system. Proces planowania i rozwoju architektonicznego Elementy systemu handlowego, jego częstotliwość i wymagania dotyczące wolumenu zostały omówione powyżej, ale infrastruktura systemu nie została jeszcze uwzględniona Działając jako handlowiec detaliczny lub pracujący w małym funduszu będzie prawdopodobnie nosić wiele kapeluszy Musi być obejmować model alfa, zarządzanie ryzykiem i parametry wykonawcze, a także ostateczne wdrożenie systemu Przed przystąpieniem do konkretnych języków omówione zostanie projektowanie optymalnej architektury systemu Rozdzielenie wątpliwości. Jednym z najważniejszych decyzji, które należy na wstępie ustalić, należy oddzielić obawy systemu handlowego. W zakresie rozwoju oprogramowania zasadniczo chodzi o to, jak rozbić różne aspekty systemu handlowego na oddzielne elementy modułowe. Obejście interfejsów w każdym z elementów można łatwo wymienić części systemu na inne wersje wspomagające osiągi, niezawodność lub konserwacja, bez konieczności modyfikowania zewnętrznego kodu zależności Jest to najlepsza praktyka dla takich systemów Dla strategii na niższych częstotliwościach zaleca się takie praktyki W przypadku handlu ultra wysokiej częstotliwości reguła może być ignorowana kosztem zmodyfikowania systemu, aby uzyskać jeszcze większą wydajność Może być pożądany system bardziej szczelnie sprzężony. Złożenie mapy komponentów systemu handlu algorytmicznego jest warte samo w sobie. Jednakże optymalnym podejściem jest upewnienie się, że istnieją osobne składniki danych wejściowych danych rynkowych w czasie rzeczywistym i rzeczywistym, przechowywania 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żna go zamienić na minimalne zmiany w danych lub konsoli API dostępu do danych Jak dotąd chodziło o backtest i kolejne składniki, nie ma d Jeszcze inną zaletą oddzielonych elementów jest to, ż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 komunikują się za pośrednictwem protokołu TCP IP, ZeroMQ lub innego protokołu niezależnego od języka. Jako konkretny przykład, należy rozważyć przypadek, w którym system napisów testowych jest napisany w języku C w celu oszacowania liczby użytkowników, podczas gdy menedżer portów i systemy wykonawcze są napisane w Pythonie za pomocą SciPy 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ść wykonania, opóźnienie sieci, szerokość pasma, dane IO, równoległość współbieżności i skalowanie Każde z tych obszarów jest indywidualnie objętych dużymi podręcznikami, więc ten artykuł będzie tylko zadrapać e powierzchnię każdego tematu Wybór architektury i języka zostanie teraz omówiony pod kątem ich wpływu na wydajność. Dominująca mądrość, jak stwierdziła Donald Knuth, jeden z ojców informatyki, jest to, że przedwczesna optymalizacja jest źródłem wszelkiego zła To prawie zawsze tak jest - z wyjątkiem budowy algorytmu handlu wysoką częstotliwością Dla tych, którzy interesują się strategiami o niższych częstotliwościach, wspólne podejście polega na zbudowaniu systemu w najprostszy możliwy sposób i optymalizacji tylko w miarę pojawiania się wąskich gardeł. gdzie występują wąskie gardła Profile można tworzyć dla wszystkich wymienionych powyżej czynników, zarówno w środowisku MS Windows, jak i Linux W systemie operacyjnym dostępnych jest wiele dostępnych narzędzi do obsługi systemu operacyjnego 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 standardowych lub zewnętrznych dla podstawowych danych str struktura i praca algorytmiczna C dostarczane są ze standardową biblioteką szablonów, podczas gdy Python zawiera NumPy SciPy Wspólne zadania matematyczne można znaleźć w tych bibliotekach i rzadko korzystne jest napisanie nowej implementacji. Jedynym wyjątkiem jest, jeśli wymagana jest bardzo wysoka architektura sprzętowa, a algorytm intensywnie korzysta z własnych rozszerzeń, takich jak niestandardowe pamięci podręczne Jednak często reinvention czas odpadów z kół, które mogłyby być lepiej wydawane na rozwój i optymalizację innych części infrastruktury handlowej Czas rozwoju jest niezwykle cenny szczególnie w kontekście pojedynczych developerów. często problem systemu wykonawczego, ponieważ narzędzia badawcze są zazwyczaj umieszczone na tej samej maszynie W przypadku poprzednich, opóźnienie może wystąpić w wielu punktach wzdłuż ścieżki wykonywania Bazy danych muszą być sprawdzone w celu opóźnienia w sieci dysku, należy wygenerować sygnały z systemu operacyjnego, opóźnienia przesyłania wiadomości kernal , sygnały handlowe wysyłały opóźnienie NIC i zamówiły przetworzone systemy wymiany w czas opóźnienia ternalu. W przypadku operacji o wyższej częstotliwości konieczne jest dokładne zapoznanie się z optymalizacją kernal oraz optymalizacją transmisji sieciowej. Jest to obszar głęboki i znacznie poza zasięgiem artykułu, ale jeśli pożądany jest algorytm UHFT, należy pamiętać o wymagana dogłębna znajomość. Komunikacja jest bardzo przydatna w zestawie narzędziowym dla ilościowego dewelopera Caching odnosi się do koncepcji przechowywania często używanych danych w sposób umożliwiający osiągnięcie wyższej wydajności, kosztem potencjalnego niedostateczności danych. występuje przy tworzeniu stron WWW podczas pobierania danych z relacyjnej bazy danych i umieszczania jej w pamięci Każde kolejne żądania danych nie muszą trafiać w bazę danych, a zyski z wydajności mogą być znaczące. W przypadku sytuacji handlowych pamięci podręczne może być bardzo korzystne Na przykład , obecny stan portfela strategii może być przechowywany w pamięci podręcznej, dopóki nie zostanie zrównoważony, tak że lista nie robi d do regeneracji w każdej pętli algorytmu handlowania Taka regeneracja może być wysoką operacją procesora lub dysku IO. Jednak buforowanie nie jest bez własnych problemów Regeneracja danych pamięci podręcznej na raz, ze względu na lotność charakter przechowywania pamięci podręcznej , może stanowić znaczny popyt na infrastrukturę Inną kwestią jest doganie, gdzie wiele pokoleń nowej kopii cache jest przeprowadzanych pod bardzo dużą liczbą obciążeń, co prowadzi do awarii kaskady. Dynamiczne przydzielanie pamięci jest kosztownym procesem w realizacji oprogramowania W związku z tym konieczne jest aplikacje o wyższej wydajności są dobrze poinformowane, 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 jest niezwykle użyteczna podczas opracowywania, redukuje błędy i ułatwia czytelność. Często jest to jednak nieoptymalne dla c w szczególności strategie handlu wysokiej częstotliwości Niestandardowa kolekcja śmieci jest często wymagana dla tych przypadków W Javie, na przykład poprzez strojenie zbieracza śmieci i konfiguracji sterty, możliwe jest uzyskanie wysokiej wydajności w strategiach HFT. Nie dostarcza rodzimych zbieraczy śmieci, a więc konieczne jest zarządzanie wszystkimi alokacjami alokacji alokacji pamięci w ramach implementacji obiektu Podczas potencjalnego błędu podatnego na potencjalnie prowadzące do zwisających wskaźników niezwykle przydatne jest precyzyjne sterowanie sposobem, w jaki obiekty pojawiają się na stercie dla niektórych aplikacji Wybierając język, z pewnością zbadać 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 programistycznych w tym samym czasie, tzn. równoległe Tak zwane algorytmy równoznaczne do embarassingly obejmują kroki, które można obliczyć w pełni niezależne inne kroki Niektóre operacje statystyczne, takie jak symulacje Monte Carlo, są dobrym przykładem algorytmów z przymrużeniem równoległym, ponieważ każda losowa kolejność losowania i późniejsza operacja ścieżki można obliczyć bez wiedzy innych ścieżek. Inne algorytmy są tylko częściowo równoległe. Symulacje dynamiki płynów są takie przykład, gdzie domena obliczeniowa może być dzielona, ​​ale ostatecznie te domeny muszą komunikować się ze sobą, a więc operacje są częściowo sekwencyjne algorytmy równoległe podlegają przepisowi Amdahla, które zapewnia teoretyczną górną granicę dla wzrostu wydajności algorytmu równoległego gdy podlegają N oddzielnym 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 do wykonywania równoległych obliczeń Wzrost sprzętu graficznego konsumentów głównie w grach wideo do rozwoju graficznych jednostek przetwarzania GPU, które zawierają setki rdzeni dla bardzo równomiernych operacji Takie GPU są teraz bardzo przystępne Ramy wysokiego poziomu, takie jak CUDA firmy Nvidia doprowadziły do ​​powszechnego przyjęcia w środowiskach akademickich i finansów. nadaje się do badania aspektów ilościowych finansów, podczas gdy inne bardziej wyspecjalizowane sprzętowe, w tym Field-Programmable Gate Array - FPGA są wykorzystywane do U HFT Obecnie większość nowoczesnych języków obsługuje pewien stopień równoczesnego wielowątkowości W ten sposób można łatwo zoptymalizować test typu backtester, ponieważ wszystkie obliczenia są generalnie 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 żądań, wyższego wykorzystania procesora i większej alokacji pamięci W handlu algorytmicznym strategia jest w stanie skalować, jeśli to mogą przyjmować większe ilości kapitału i nadal uzyskiwać spójne zwroty t stosując stosy technologii skalowania, jeśli mogą 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 przewidzieć, gdzie wystąpi wąskie gardło Zapewniająca znaczne rejestrowanie, testowanie, profilowanie i monitorowanie umożliwiające skalowanie systemu Same języki często są opisywane jako niewykrywalne Jest to zwykle rezultat dezinformacji, a nie faktu twardego. Jest to całość stosu technologii, który należy ustalić dla skalowalności, a nie języka. Oczywiście niektóre języki mają większą wydajność niż inne w szczególności 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. nagłej niestabilności, która wyzwala tratę handlu , użyteczne jest utworzenie architektury kolejek informacji: oznacza to po prostu umieszczenie kolejki komunikatów między c aby poszczególne składniki nie były w stanie przetworzyć wielu żądań. Przed zapotrzebowaniem na utracone pliki są przechowywane w stosie dopóki nie zostanie przetworzony komunikat Jest to szczególnie użyteczne do wysyłania transakcji do silnika wykonawczego Jeśli silnik jest cierpienie w ciężkich opóźnieniach to będzie kopii zapasowych transakcji Kolejka między generatorem sygnału handlowego a API wykonawczy będzie złagodzić ten problem kosztem potencjalnego przesunięcia handlowego Dobrym szacunkiem open source kolejki komunikatów jest RabbitMQ. Hardware i systemów operacyjnych. sprzęt działający w Twojej strategii może mieć znaczący wpływ na rentowność algorytmu Nie jest to kwestia ograniczona do podmiotów gospodarczych o wysokiej częstotliwości Niewielki wybór sprzętu i systemu operacyjnego może prowadzić do awarii komputera lub ponownego uruchomienia komputera w najbardziej niewłaściwej chwili należy rozważyć, gdzie znajduje się aplikacja Wybór zazwyczaj znajduje się między komputerem osobistym, serwerem zdalnym, chmurą dostawcy lub współużytkowanego serwera Exchange. Desktop są proste w instalacji i administracji, zwłaszcza w nowszych przyjaznych dla użytkownika systemach operacyjnych, takich jak Windows 7 8, Mac OSX i Ubuntu Desktop posiadają pewne istotne wady, jednak najważniejsze jest to, że wersje systemów operacyjnych przeznaczonych dla komputerów stacjonarnych może wymagać łatwego ponownego uruchamiania i często w najgorszym czasie Wykorzystują także więcej zasobów obliczeniowych dzięki wymaganiu graficznego interfejsu użytkownika GUI. Używanie sprzętu w domowym lub lokalnym środowisku biurowym może prowadzić do łączność z Internetem i problemy z włączeniem zasilania Główną zaletą systemu stacjonarnego jest to, że znaczna moc obliczeniowa można nabyć za ułamek kosztów zdalnego dedykowanego serwera lub systemu opartego na chmurze o porównywalnej prędkości. Specjalny serwer lub maszyna z chmurami, podczas gdy często droższe od opcji na pulpicie, pozwala na bardziej znaczącą infrastrukturę redundancji, na przykład automatyczną datę tworzenie kopii zapasowych, możliwość łatwego zarządzania czasem pracy i zdalnym monitorowaniem Trudniejsze zarządzanie nimi, ponieważ wymagają one możliwości korzystania z funkcji zdalnego logowania systemu operacyjnego. W systemie Windows jest to zazwyczaj przy użyciu protokołu GUI Remote Desktop Protocol RDP W systemach z systemem Unix linia poleceń Bezpieczne SHell SSH jest używana Infrastruktura serwera Unix jest prawie zawsze oparta na wierszach wierszowych, która natychmiast powoduje, że narzędzia programowania oparte na interfejsie GUI, takie jak MatLab lub Excel, są niezdatne do użytku. Serwer współlokatora, ponieważ wyrażenie jest używane w na rynkach kapitałowych, jest po prostu serwerem dedykowanym, który znajduje się w ramach wymiany, w celu zmniejszenia opóźnienia algorytmu obrotu. Jest to absolutnie konieczne w przypadku niektórych strategii handlu wysokiej częstotliwości, które polegają na małej latencji w celu wygenerowania alfa. wybór i wybór języka programowania jest niezależna od platformy Czy istnieje potrzeba uruchomienia kodu w wielu różnych systemach operacyjnych Czy kod d przeznaczonych do pracy na określonym typie architektury procesora, na przykład na procesorze Intel x86 x64 lub będzie możliwe do realizacji na procesorach RISC, takich jak te produkowane przez ARM Te kwestie będą w dużym stopniu uzależnione od częstotliwości i typu wdrażanej strategii. Sprężystość i testowanie. Jednym z najlepszych sposobów na stracenie dużo pieniędzy na algorytmiczny handel jest stworzenie systemu bez odporności. Odnosi się do trwałości sytemu, gdy podlega rzadkim zdarzeniom, takim jak bankructwo maklerskie, nagła nadmierność, region cały czas przestojów dla dostawcy usług w chmurze lub przypadkowe usunięcie całej bazy danych handlowych Lata zysków można wyeliminować w ciągu kilku sekund dzięki słabo zaprojektowanej architekturze Jest absolutnie konieczne rozważenie takich kwestii, jak debuggowanie, testowanie, rejestrowanie, tworzenie kopii zapasowych, dostępności i monitorowania jako podstawowych elementów systemu. Najprawdopodobniej w dowolnie rozsądnej skomplikowanej, ilościowej aplikacji handlowej, co najmniej 50 projektów czas poświęcony jest na debugowanie, testowanie i konserwację. Niemniej wszystkie języki programowania wysyłane są z powiązanym debuggerem lub posiadają dobrze rozwinięte alternatywne rozwiązania firm trzecich W istocie debugger umożliwia wykonanie programu z wstawieniem dowolnych punktów przerwania w ścieżce kodu , które tymczasowo wstrzymują wykonanie w celu zbadania stanu systemu Główną zaletą debugowania jest możliwość zbadania zachowania kodu przed znanym punktem awarii. Dyskusja jest istotnym składnikiem zestawu narzędzi do analizy błędów programowania , są one szerzej stosowane w językach skompilowanych, takich jak C lub Java, ponieważ interpretowane języki, takie jak Python, często są łatwiejsze do debugowania ze względu na mniej LOC i mniej verbose statements Pomimo tej tendencji Python jest dostarczany z pdb, który jest wyrafinowanym narzędziem debugowania Microsoft Visual C IDE posiada rozbudowane narzędzia do debugowania interfejsów GUI, natomiast dla programisty systemu Linux w wierszu komend debuger gdb istnieje. Testowanie w rozwoju oprogramowania odnosi się do procesu stosowania znanych parametrów i wyników do konkretnych funkcji, metod i obiektów w bazie kodu, w celu symulacji zachowania i oceny wielu ścieżek kodu, pomagając w zapewnieniu, że system zachowuje się tak, jak powinien. paradygmat jest znany jako Test Driven Development TDD, gdzie kod testowy jest rozwijany względem określonego interfejsu bez implementacji Przed zakończeniem rzeczywistej bazy kodu wszystkie testy nie powiodą się Ponieważ kod jest zapisywany w celu wypełnienia pustych testów, w jakim punkcie rozwoju powinno się zaprzestać. TDD wymaga rozbudowanego projektu specyfikacji wstępnej, a także dostatecznej dyscypliny, aby można było ją skutecznie wdrożyć w języku C, Boost dostarcza ramkę testowania jednostkowego W języku Java bibliotekę JUnit istnieje w celu spełnienia tego samego celu Python także ma moduł unittest jako część biblioteki standardowej Wiele innych języków posiada ramki testowania jednostkowego i często jest wiele opti ons. W środowisku produkcyjnym wyrafinowane rejestrowanie jest absolutnie konieczne Logowanie odnosi się do procesu wysyłania wiadomości, z różnym stopniem nasilenia, dotyczących zachowania wyglądu systemu do pliku płaskiego lub bazy danych Logi to pierwsza linia ataku podczas polowania na nieoczekiwane programowe zachowanie się użytkownika Niestety, braki w systemie rejestrowania mają tendencję do odkrywania dopiero po tym, jak w przypadku omówionych poniżej kopii zapasowych, system logowania powinien zostać należycie uwzględniony przed projektem systemu. W obu systemach Microsoft Windows i Linux są dostępne obszerne możliwości rejestrowania systemu i języki programowania często dostarczają standardowych bibliotek do dzienników, które obejmują najczęstsze przypadki Często zdarza się, aby scentralizować informacje o dziennikach w celu jej późniejszej analizy, ponieważ może często prowadzić do pomysłów na poprawę wydajności lub redukcję błędów, co prawie na pewno mają pozytywny wpływ na powrót do obrotu. Podczas rejestrowania systemu będą dostarczane informacje o tym, co się wydarzyło w przeszłości, monitorowanie aplikacji zapewni wgląd w to, co dzieje się teraz teraz Wszystkie aspekty systemu powinny być brane pod uwagę do monitorowania danych na poziomie systemu, takich jak wykorzystanie dysku, dostępność pamięci, przepustowość sieci i wykorzystanie procesora zapewniają podstawowe obciążenie informacji. Należy również regularnie monitorować takie wskaźniki koniunktury, jak nieprawidłowe ceny, gwałtowne szybkie wypłaty i narażenie na konta dla różnych sektorów rynków. Ponadto należy uruchomić system progowy, który zapewnia powiadomienie o naruszeniu pewnych danych, podniesieniu adresu e-maila powiadomienia, wiadomości 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 for 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 outw eigh 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 tra ding 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, often 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-ins pected 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 documentation 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 software 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 Python 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 interact ion, 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 instance. 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 fo r 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 Brokers 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. Algorithmic Trading Custom Software Development. DataArt s services have been very helpful to firms and institutions which use automated trading strategies and quantitative data analysis We help clients in building and implementation of alpha, risk, transaction cost and portfolio models. For many modern strategies which use data mining for building data driven alpha models intraday and end-of-day data availability and quality is critical for strategy success High volumes of trades could lead to delays of historical data series delivered by exchanges This often leads to losing days of algo trading. DataArt is familiar with building custom frameworks a nd systems for big volume high frequency data logging. High frequency market data signals frequency down to five milliseconds. Process up to 15,000 inputs prices, Volumes and Quotes for 5000 of US stocks per registration node. Real-time data filtering. Publishing filtered signals to enterprise message bus. Quick access to historical data series is another critical point for quantitative data mining The speed of access to data often defines how much data one can mine and quality of output results the more in-sample data is mined the better the out-of-sample strategy behavior will be DataArt is experienced in building historical tick data storing in an optimized compact format. One-second data available for a three years period, thousands of signals, regular disk space. Quick access to historical data access time is 600 ms when accessing one year of data for one signal. Ability to apply cleaning anti-spike filters and transformation to raw historical data on the fly. Data quality validation jobs missing points, duplicates, out-of-range values. Integration jobs. DataArt also helps with building fast and effective back-testing systems which allow for executing and playing back in-sample and out-of-sample tests for strategies in seconds The quality of our back-testing systems and proprietary algorithms allow matching 99 of the intra-day trades with back-tests They support the following output parameters. Cumulative profit over time. Average rate of return and Std of return over time. Predictive power. Winning trades winning time percentage. Return ratio VS Risk. Sharpe ratio. DataArt is familiar with specifics of order execution in algorithmic trading such as. Cancelling and amending orders. Hidden Visible order. Aggressive Passive execution. Order size strategy. Execution strategy. Our experience and knowledge of algo trading and data mining opens additional opportunities for those who use mathematical models and quantitative analysis for big data, web and social web mining.

No comments:

Post a Comment