Sunday 19 November 2017

System handlowy c


BarsMonster Widziałam, że na rzeczy takie jak stosy sieciowe, które są całkowicie zależne od platformy, wymagałyby pewnej wiedzy, zanim uda się przestawić platformy Plus takie rzeczy, jak widelec, które są powszechne w świecie POSIX, ale nie są możliwe w środowisku Windows Myślę, że to a rozsądna odpowiedź Billy ONeal 29 sierpnia w 0 55.Linux UNIX są znacznie bardziej użyteczne dla równoczesnych użytkowników zdalnych, ułatwiając skrypt wokół systemów, użyj standardowych narzędzi, takich jak grep sed awk perl ruby ​​mniej na dziennikach ssh scp wszystko, co rzeczy właśnie tam. Są też kwestie techniczne, na przykład mierzenie czasu, jaki upłynął w systemie Windows, który można wybrać pomiędzy zestawem funkcji opartych na zasadzie zegara systemu Windows, a sprzętowym QueryPerformanceCounter Pierwszy jest krokiem co 10-16 milisekund. implikuje większą precyzję - np. wartości od środka GetSystemTimeAsFileTime do 100ns, ale zgłaszają te same krawędzie 100ns zegara, aż znowu znów - QueryPerformanceCounter - ma problemy z zatrzymaniem wyświetlania, w przypadku gdy inny rdzeniowy procesor może zgłosić zegary od uruchomienia, które różnią się o kilka sekund z uwagi na rozgrzanie się w różnych momentach podczas uruchamiania systemu MSDN dokumentuje to jako możliwe błędy systemu BIOS, kto chce rozwijać systemy handlu o małym opóźnieniu na platformie, która może być prawidłowo obsługiwana Istnieją rozwiązania, ale nie udało się znaleźć żadnego oprogramowania siedzącego w wygodny sposób w celu zwiększenia lub ACE. Wiele wariantów systemu Linux UNIX ma wiele łatwo konfigurowalnych parametrów, opóźnienia w pojedynczym zdarzeniu w stosunku do średniej latencji pod obciążeniem, wymiarów plasterków czasowych, planowania itp. W otwartych systemach operacyjnych źródłem jest pewność, że można odnieść się do kodu, gdy uważasz, że coś powinno być szybsze niż jest, i wiedza, że ​​potencjalnie ogromna społeczność ludzi była i robi to tak krytycznie - w systemie Windows to oczywiście będzie to, że ludzie, którzy ponownie mu się przyglądają. n strona reputacji FUD - nieco niematerialna, ale ważna część powodów wyboru systemu operacyjnego - myślę, że większość programistów w branży po prostu zaufało Linuxowi UNIX bardziej, aby zapewnić niezawodne planowanie i zachowanie. W dzisiejszych czasach system Windows jest dość niezawodny, a Linux ma dużo bardziej niestabilną bazę kodu niż Solaris lub FreeBSD. Odpowiedzi na sierpień 29 10 w systemie operacyjnym 0 42.Windows tylko umożliwiają jednemu osobie korzystanie z protokołu RDP naraz. na zawsze to było w rzeczywistości oryginalne użycie protokołu RDP i pozwala na tyle połączeń, ile masz Licencje Dostępu Klienta Windows Server OSs są domyślnie dostępne z domyślnym domyślnym domyślnym użytkownikiem więcej niż jednego zdalnego użytkownika Jeśli mógłbyś napisać komentarz o harmonogramie, 1 tutaj - ta część odpowiedzi wydaje się być FUD w tym momencie dla mnie reszta odpowiedzi jest dobra YMMV Billy ONeal 29 sierpnia w 0 50.Nie ma rozkładu UNIX Linux Jest to jeden z obszary, w których implementacje różnią się, a Linux w rzeczywistości miał więcej niż jeden harmonogram wybór Google Całkowicie Fair Scheduler Linux na tle, dzięki czemu można nawet powiedzieć, Linux planowanie jest wiarygodne MSalters 30 sierpnia 10 w 11 37.I sekundy opinii historycznych i dostępu do manipulacji kernel. Apart z tych powodów również sądzę, że podobnie jak to, jak wyłączyć garbage collection i podobny mechanizm w Javie przy użyciu tych technologii w pewnych niewielkich opóźnieniach mogą unikać systemu Windows z powodu API na wysokim poziomie, który współdziała z niski poziom os, a następnie jądro. Więc jądro jest oczywiście jądrem, które można współdziałać z używaniem niskiego poziomu os Wysokiego poziomu interfejsów API są dostarczane tylko po to, aby uatrakcyjnić zwykłe życie użytkowników W przypadku niskiej latencji okazuje się, być warstwą tłuszczową i ułamek sekundy straty wokół każdej operacji Więc lukratywna możliwość uzyskania kilku frakcji sekund na każde połączenie. Apart z tego innego rzeczy do rozważenia jest integracja Większość se rvers, centra danych, wymiana używają systemu UNIX, a nie systemu Windows, więc korzystanie z klientów tej samej rodziny sprawia, że ​​integracja i komunikacja są łatwiejsze. Następnie problemy z bezpieczeństwem wielu osób może nie zgodzić się z tym punktem, chociaż włamywanie się do systemu UNIX nie jest łatwe w porównaniu do włamań WINDOWS I Nie zgadzam się na licencjonowanie musi być problemem dla banków, ponieważ nakładają pieniądze na każdy pojedynczy sprzęt i oprogramowanie oraz ludzie, którzy je dostosowują, więc licencje kupna nie będą tak duże, gdy rozważano to, co zyskają na zakupy. 12 na 20 05. Twoja odpowiedź.2017 Stack Exchange, Inc. Jak rozwinąć system handlu. Ważne jest również, że krawędź jest solidna. System jest stabilny, jeśli utrzyma dodatnią oczekiwaną wartość. System powinien być testowany w górę, dół i ruch na boki Wiele tendencji do występowania systemów działa dobrze, gdy trendy w instrumentach, ale nie idź, kiedy instrument znajduje się w bok odsadzenia. Ważne jest, aby okres był brany pod uwagę podczas powrotu testy. Polecam testy na co najmniej 2000 barach Jeśli testujesz system na dziennych wykresach, zalecam użycie 10 lat. Na wykresach wewnątrz dnia polecam testowanie systemów tak daleko, jak sprzedawca danych zezwoli na to. zazwyczaj 6 miesięcy do roku. Korzystanie z programów testowych. Ważne jest, aby używać oprogramowania profesjonalnego z możliwością sprawdzania wstecznego podczas opracowywania systemu Aby wymienić tylko kilka. Jedna z najlepszych programów testowania wstecz, chociaż programowanie może być trudne, ponieważ w Pascal Nie ma obsługi klienta telefonicznego dla laboratorium bogactwa albo NCMfx oferuje usługi programistyczne w konkurencyjnych cenach, a przy ogromnych rabatach dla istniejących klientów forex. Zarządzanie ryzykiem Funkcje. Kreator tworzenia systemów. Profesjonalne oprogramowanie do testowania wstecznego i analizy Metastock oferuje liczne systemy handlowe i wskaźniki Metastock ma swój własny język, może być trochę łatwiejsze niż Wealth-Lab, ale znacznie bardziej ograniczone Obsługa klienta jest dobra I jest nume rous add ons i plug ins, które można kupić, aby dostosować do Twojego stylu handlowego NCMfx oferuje usługi programistyczne w konkurencyjnych cenach, a przy ogromnych rabatach dla swoich obecnych klientów forex. Alexander Nekritin to profesjonalny handlowiec z ponad 8 letnim doświadczeniem Jego specjalności to ryzyko zarządzanie i rozwój systemu Alexander jest dyrektorem generalnym, który jest forex wprowadzającym brokera i firmy edukacyjnej, która pomaga klientom potrzeb klienta w handlu forex Alexander ma stopień z koncentracją w bankowości inwestycyjnej i instrumentów pochodnych z Babson College w Massachusetts. Best język programowania dla Algorithmic Trading Systems. Jednak z najczęściej zadawanych pytań otrzymywanych w torebce QS jest Jaki jest najlepszy język programowania dla handlu algorytmicznego Krótka odpowiedź brzmi: że nie ma najlepszego języka Parametry strategiczne, wydajność, modułowość, rozwój, odporność i koszt muszą być brany pod uwagę Ten artykuł będzie zawierać niezbędne składniki algorytmu mic architektury systemu handlowego 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 portfela, menedżer ryzyka i silnik wykonawczy. zbadane i jak wpływają na projekt systemu W szczególności zostaną omówione częstotliwość obrotu i prawdopodobna wielkość obrotu. Po wybraniu strategii handlowej konieczne jest zaprojektowanie całego systemu. Obejmuje to wybór sprzętu, operacyjnego system i odporność systemu przed rzadkimi, potencjalnie katastrofnymi zdarzeniami Podczas gdy architektura jest rozważana, należy wziąć pod uwagę osiągi - zarówno do narzędzi badawczych, jak i środowiskiem wykonawczym na żywo. Co to jest system handlowy próbujący zrobić. Przed podjęciem decyzji przy najlepszym języku, w jaki należy wpisać zautomatyzowany system obrotu, konieczne jest zdefiniowanie wymaganego ements Czy system ma być realizowany wyłącznie na podstawie systemu będzie wymagać zarządzania ryzykiem lub modułu budowy portfela Czy system wymaga wysokowydajnego backtester W większości strategii system handlu można podzielić na dwie kategorie Badania i generowanie sygnałów. z oceną skuteczności strategii w stosunku do danych historycznych Proces oceny strategii handlowej nad wcześniejszymi danymi rynkowymi jest znany jako kontrola wstępna Wielkość danych i złożoność algorytmiczna będą miały duży wpływ na intensywność obliczeniową szybkości procesora w tle, a współzawodnictwo jest często ograniczeniem czynniki optymalizujące szybkość realizacji 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 szerokość pasma i przepustowość sieci latencja jest często czynnikiem ograniczającym optymalizację realizacji ystems Tak więc wybór języków dla każdego składnika całego systemu może być całkiem inny. Typy, częstotliwość i wielkość strategii. Rodzaj stosowanej strategii algorytmicznej będzie miał istotny wpływ na projekt systemu. Trzeba rozważyć rynki będące przedmiotem obrotu, łączność z zewnętrznymi dostawcami danych, częstotliwość i wielkość strategii, kompromis pomiędzy łatwością tworzenia i optymalizacją wydajności, a także dowolnym sprzętem niestandardowym, w tym współlokatorami niestandardowymi, 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 kontraktów terminowych. Przed wyborem języka wielu producentów danych musi zostać ocenione, które odnoszą się do strategię pod ręką. Konieczne będzie rozważenie możliwości połączenia z dostawcą, strukturą dowolnych interfejsów API, terminowości danych, wymagań dotyczących przechowywania danych i odporności w e twarz sprzedawcy wychodzącego offline Mądry jest też posiadanie szybkiego dostępu do wielu dostawców Różne instrumenty mają własne upodobania do przechowywania, których przykłady obejmują wiele symboli symboli na akcje i terminy ważności dla kontraktów terminowych, nie mówiąc już o konkretnych danych OTC. które mają być uwzględnione w projekcie platformy. Częstotliwość strategii może być 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ą znacznego uwzględnienia wyników. Strategia przekraczająca po drugie paski, tzn. dane kreskowe, prowadzą do projektowania napędzanego wydajnością jako podstawowego wymogu W przypadku strategii wysokiej częstotliwości znaczna ilość danych rynkowych będzie musiała być przechowywana i oceniana Oprogramowanie takie jak HDF5 lub kdb jest powszechnie używane w tych rolach. W celu przetworzenia obszerne ilości danych potrzebnych do aplikacji HFT, musi być rozbudowany system backtester i system wykonawczy użyte CC prawdopodobnie z pewnym asemblerem jest najprawdopodobniej najsilniejszym kandydatem na język Ultra-high frequency strategie prawie na pewno wymagają niestandardowego sprzętu, takich jak FPGA, wymiany co-location i tunelowania sieci kernal. Research Systems. Research systemów zazwyczaj obejmują mieszankę interaktywnego rozwoju i zautomatyzowane skrypty Te pierwsze często odbywają się w środowisku IDE, takim jak Visual Studio, MatLab czy R Studio. Obejmuje to rozbudowane obliczenia liczbowe nad licznymi parametrami i punktami danych. Prowadzi to do wyboru języka zapewniającego proste środowisko testowania kodu, ale zapewnia również wystarczające wydajność w celu oceny strategii nad wieloma parametrami. W tym miejscu są to: Microsoft Visual CC, zawierający rozbudowane narzędzia do debugowania, możliwości ukończenia kodu przez Intellisense i proste przeglądy całego stosu projektów za pośrednictwem bazy danych ORM, LINQ MatLab, która jest przeznaczona dla rozbudowanych linia liczbowa ar algebra i wektorowe, ale w konsoli interaktywnej Studio R Studio, które otacza konsolę statystyczną R w pełni rozwiniętym IDE IDE Eclipse IDE dla Linuxa Java i C oraz półfunkcyjne IDE, takie jak Enthought Canopy for Python, które obejmują analizę danych biblioteki, takie jak Numpery SciPy scikit-learn i pandy w jednej interaktywnej konsoli. Na liczbowe testy wsteczne wszystkie powyższe języki są odpowiednie, chociaż nie jest konieczne użycie IDE GUI, ponieważ kod zostanie wykonany w tle Pierwszy rozważania na tym etapie to 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. Interpretowane języki, takie jak Python często używają bibliotek o wysokiej wydajności, takich jak pandy NumPy dla etapu testowania wstecznego, w celu utrzymania rozsądnego poziomu konkurencyjności ze skompilowanymi odpowiednikami Ultim język wybrany do testowania 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 środowiska badawczego może być zupełnie niezależny od języka używanego w portfelu budowy, zarządzania ryzykiem i realizacji elementów, jak będzie to widoczne. Portfolio budowania i zarządzania ryzykiem. Zarządzanie portfelem i składniki zarządzania ryzykiem są często pomijane przez detalicznych handlarzy algorytmicznych To prawie zawsze jest błędem Te narzędzia stanowią mechanizm, za pomocą którego kapitał zostanie 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ść rentowności. Łatwo jest stworzyć stabilny strategie jako mechanizm budowy portfela i mana ryzyka ger może być łatwo zmodyfikowany w celu obsługi wielu systemów Więc należy je uznać za istotne elementy na początku projektu algorytmicznego systemu handlu. Zadaniem systemu budowy portfela jest podjęcie określonych transakcji i stworzenie zestawu rzeczywistych transakcji które minimalizują zamieszanie, 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. Konstrukcje portfela często zmniejszają się do problemu algebraicznego liniowego, takiego jak współczynnik matrycy, a zatem wydajność jest wysoce zależnie od skuteczności implementacji numerycznej algebry liniowej Dostępne biblioteki wspólne obejmują uBLAS LAPACK i NAG dla C MatLab posiada również bardzo zoptymalizowane operacje matematyczne Python wykorzystuje NumPy SciPy do takich obliczeń Często wyważone portfel wymaga złożonej i dobrze zoptymalizowanej biblioteki macierzy, wyjść, by nie wąskie gardło w handlu system. Risk jest kolejną bardzo ważną częścią systemu handlu algorytmicznego Ryzyko może przybierać wiele form Zwiększona zmienność, choć może być to postrzegane jako pożądane w przypadku niektórych strategii, zwiększone korelacje między klasami aktywów, domniemanie kontrahenta, przerwy w pracy serwerów, zdarzenia dotyczące czarnego łabędzia oraz 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 późniejszymi skutkami w odniesieniu do kapitału handlowego Często zmniejsza to zestaw statystycznych obliczeń, takich jak Monte Carlo testy warunków skrajnych Jest to bardzo podobne do potrzeb obliczeniowych instrumenty wyceny instrumentów pochodnych i jako takie będzie związane z procesorem. Te symulacje są wysoce równoległe i poniżej do dołu, a do pewnego stopnia można wyrzucić sprzęt do problemu. Zadaniem systemu egzekucyjnego jest odbieranie przefiltrowanych sygnałów handlowych z budowy portfela i zarządzania ryzykiem komponenty i wysyłanie ich do maklerskich lub innych sposobów dostępu do rynku W przypadku większości detalicznych algorytmicznych strategii handlowych obejmuje to połączenie API lub FIX z brokerem, takim jak Interactive Brokers Podstawowe kwestie przy podejmowaniu decyzji o języku obejmują jakość interfejsu API, dostępność języka dla opakowań języka API, częstotliwość wykonania i spodziewany poślizg. Jakość interfejsu API odnosi się do tego, jak dobrze udokumentowano, jaki jest jej poziom wydajności, niezależnie od tego, czy potrzebny jest dostęp do autonomicznego oprogramowania, czy też można ustanowić bramę w trybie bez głowy, tzn. bez GUI W przypadku interaktywnych brokerów, narzędzie Trader WorkStation musi działać w środowisku GUI w celu uzyskania dostępu do ich interfejsu API Kiedyś musiałem zainstalować wersję desktop Ubuntu na serwerze sieciowym Amazon, aby uzyskać dostęp do interaktywnych brokerów zdalnie, wyłącznie z tego powodu. Większość interfejsów API dostarcza interfejs C i Java. Zwykle do społeczności należy opracowywanie specyficznego dla języka Appers for C, Python, R, Excel i MatLab Zauważ, że z każdą dodatkową wtyczką wykorzystywaną specjalnie do owijania API można zaobserwować błędy w systemie. Zawsze testuj wtyki tego typu i upewnij się, że są one aktywnie utrzymywane. W ostatnich miesiącach wprowadzono wiele nowych aktualizacji do bazy danych. Częstotliwość wykonywania jest niezwykle ważna w algorytmie wykonawczym. Zauważ, że setki zamówień mogą być wysyłane co minutę i jako takie są krytyczne. Zwłoka zostanie poniesiona w wyniku złego wykonania system, a to będzie miało dramatyczny wpływ na rentowność. Języki typowane w języku szwedzkim opisane poniżej, na przykład C Java, są optymalne do wykonania, ale są kompromisowe w czasie projektowania, testowania i łatwości obsługi. Dynamicznie wpisywane 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 sca Proces planowania i rozwoju architektonicznego. Elementy systemu handlu, jego częstotliwości i objętości zostały omówione powyżej, ale infrastruktura systemu nie została jeszcze uwzględniona Działając jako przedsiębiorca detaliczny lub działający w małym funduszu prawdopodobnie nosisz wiele kapelusze Musi być objęte modelem alfa, parametrami zarządzania ryzykiem i wykonawstwem, a także ostateczną implementacją systemu Przed rozwinięciem poszczególnych języków omówione zostanie opracowanie optymalnej architektury systemu. Rozdzielenie obaw Jednym z najbardziej ważnymi decyzjami, które należy na wstępie ustalić, jak rozdzielić obawy systemu handlowego W rozwoju oprogramowania, zasadniczo oznacza to, jak rozbić różne aspekty systemu handlowego na oddzielne elementy modułowe. Wystawiając interfejsy na każdym z elementów można łatwo wymienić części systemu na inne wersje, które pomagają w osiągnięciu wydajności, niezawodności i konserwacji, bez konieczności modyfikowania każdy zewnętrzny kod 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 na bardzo wysokim poziomie reguła może być ignorowana kosztem zmodyfikowania systemu, aby uzyskać jeszcze większą wydajność A bardziej ściśle sprzężony system może być pożytecznym. Stworzenie mapy składowej algorytmicznego systemu handlu jest warte artykułu sam w sobie. Jednak 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, budowę 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 minimalną liczbę powtórnych zapisów w celu zaabsorbowania danych lub dostępu do danych Jeśli chodzi o backtestera i kolejne składniki, nie ma różnicy. Inna korzyść z oddzielonego compone nie jest to, że pozwala na użycie różnorodnych 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 To będzie miało miejsce, jeśli komunikują się przez TCP IP , ZeroMQ lub jakiś inny niezależny od języka protokół. Jako konkretny przykład rozważmy przypadek, w którym system testów wstecznych został 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 przy użyciu SciPy i IBPy. Performance Considerations. Wydajność jest istotnym czynnikiem wpływającym na większość 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, przepustowość, dane IO, równoległość współbieżności i skalowanie. Każdy z tych obszarów jest indywidualnie objętych dużymi podręcznikami, więc ten artykuł będzie tylko zarysować powierzchnię każdego tematu Architecture and langu Wybór wieku będzie teraz dyskutowany pod kątem ich wpływu na wydajność. Dominującą mądrością, jak stwierdził Donald Knuth, jeden z ojców informatyki, jest to, że przedwczesna optymalizacja jest źródłem wszelkiego zła. Jest to prawie zawsze przypadek - algorytm 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 tylko zoptymalizowaniu w miarę pojawiania się wąskich gardeł. Narzędzia do tworzenia profili są wykorzystywane do określania wąskich gardeł. dla wszystkich wymienionych powyżej czynników, zarówno w środowisku MS Windows, jak i Linux Istnieje wiele dostępnych narzędzi do obsługi systemu operacyjnego i języka, jak również narzędzi innych firm Wybór języka zostanie teraz omówiony w kontekście wydajności. 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 dostarczają statki S tandard Template Library, 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 wykorzystuje rozbudowane rozszerzenia własnościowe takie jak niestandardowe pamięci podręczne Jednak często reinwentaryzuje 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 zwłaszcza w kontekście pojedynczych developerów. narzędzia badawcze są zazwyczaj zlokalizowane na tej samej maszynie W przypadku poprzednich, opóźnienia mogą wystąpić w wielu punktach wzdłuż ścieżki wykonywania Bazy danych muszą być sprawdzone pod kątem opóźnień w sieci lokalnej, sygnały muszą być generowane system operacyjny, opóźnienie przesyłania wiadomości kernal, sygnały handlowe wysyłane przez użytkownika na opóźnienia NIC i zamówienia przetwarzane systemy wymiany wewnętrznej latencji. W przypadku operacji o wyższej częstotliwości konieczne jest zapoznanie się z optymalizacją kernal oraz optymalizacja transmisji sieciowej Jest to głęboki obszar i znacznie poza zasięgiem artykułu, ale jeśli wymagany jest algorytm UHFT, należy mieć świadomość wymaganej wiedzy. bardzo przydatna w zestawie narzędzi do tworzenia ilościowego dewelopera Caching odnosi się do koncepcji przechowywania często używanych danych w sposób, który umożliwia wyższy dostęp do wydajności, kosztem potencjalnego niedostateczności danych. z relacyjnej bazy danych obsługiwanej przez dyski 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 sytuacjach handlowych pamięci podręczne może być bardzo korzystne. Na przykład obecny stan strategii portfel 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 trad algorytm Taka regeneracja może być wysoką wydajnością procesora lub dysku IO. Jednak buforowanie nie jest bez własnych problemów Regeneracja danych pamięci podręcznej wszystkie naraz, ze względu na lotność charakter przechowywania pamięci podręcznej, może spowodować znaczny popyt na infrastrukturę Inna kwestia jest stosowaniem psów, w przypadku gdy wiele generacji nowej kopii zapasowej jest wykonywane pod bardzo wysokim obciążeniem, co prowadzi do awarii kaskady. Dynamiczna alokacja pamięci jest kosztownym procesem wykonywania oprogramowania W związku z tym aplikacje handlowe o wyższej sprawności muszą być dobrze poinformowani 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 opracowywania, ponieważ zmniejsza błędy i pomocniczość w odczytywaniu danych. Często jest to jednak nieefektywne dla niektórych strategii handlowych Custo m zbieranie śmieci jest często pożądane w tych przypadkach W Javie, na przykład, poprzez strojenie zbieracza śmieci i konfiguracji sterty, możliwe jest uzyskanie wysokiej wydajności w strategiach HFT. Nie dostarcza natywnego kolektora śmieci, dlatego trzeba go obsługiwać wszystkie alokowanie alokacji pamięci w ramach implementacji obiektu Podczas gdy potencjalnie błąd może powodować zwisające wskaźniki, bardzo przydatne jest precyzyjne sterowanie sposobem, w jaki obiekty pojawiają się na stosie w niektórych aplikacjach Wybierając język należy się zbadać, w jaki sposób garbage collector działa i czy można go zmodyfikować, aby zoptymalizować pod kątem konkretnego przypadku użycia. Wiele operacji w algorytmicznych systemach handlowych jest przystosowanych do równoległości. Odnosi się to do koncepcji przeprowadzania wielu operacji programowych w tym samym czasie, tzn. równolegle tzw. embarassingly algorytmy równoległe obejmują kroki, które można obliczyć w pełni niezależnie od innych kroków Niektóre opery statystyczne takie jak symulacje Monte Carlo, są dobrym przykładem algorytmów z przymrużeniem równoległych, ponieważ każde losowe rysowanie i późniejsze operacje ścieżkowe można obliczyć bez wiedzy o innych ścieżkach. Inne algorytmy są tylko częściowo równoległe. Symulacje dynamiki płynów są przykładem, gdzie domena obliczeń można podzielić, ale ostatecznie te dziedziny muszą komunikować się ze sobą, a zatem operacje są częściowo sekwencyjne algorytmy równoległe podlegają prawu Amdahla, które zapewnia teoretyczną górną granicę do wzrostu wydajności algorytmu równoległego, gdy podlega on N oddzielnym procesom np. na rdzeniu procesora lub wątku. Proces porównywalności staje się coraz ważniejszy jako środek optymalizacyjny, ponieważ procesor zegara przyspieszył stagnację, ponieważ nowsze procesory zawierają wiele rdzeni, z którymi można przeprowadzać równoległe obliczenia Wzrost sprzętu graficznego konsumenckiego głównie dla gier wideo doprowadził do rozwoju przetwarzania graficznego Un jego 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 finansowych. Tego sprzętu GPU generalnie nadaje się tylko do badania aspektów ilościowe finansowanie, podczas gdy inne bardziej wyspecjalizowane sprzętowe, w tym pola programowalne tablice bramek - FPGA są używane dla 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ą na ogół niezależne od innych Skalowanie w inżynierii oprogramowania i operacjach odnosi się do zdolności systemu do ciągłego zwiększania obciążeń w formie większych zamówień, 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 wciąż produkują spójne stopy zwrotu Stosuje się stosy stosu technologii handlowych, jeśli może to zmierzyć e większe obroty handlowe i zwiększona latencja, 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 Wielkie rejestracje, testowanie, profilowanie i monitorowanie pomogą w znacznym stopniu umożliwić systemowi skalowanie samych języków są często opisywane jako niewykrywalne Jest to zwykle rezultat dezinformacji, a nie faktu twardego. Jest to całkowity stos technologii, który powinien być określony dla skalowalności, a nie języka. Oczywiście niektóre języki mają większą wydajność niż inne w konkretnych przypadkach użycia, ale jeden język jest nigdy nie lepiej niż inne w każdym sensie. Jednym ze sposobów zarządzania skalą jest oddzielenie obaw, 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, warto stworzyć architektura kolejkowania komunikatów To po prostu oznacza umieszczenie kolejki komunikatów między elementami tak, aby zamówienia były układane w górę, jeśli ac ertain składnik nie jest w stanie przetworzyć wielu żądań. Nieżeli żądania utracone są po prostu trzymane w stosie dopóki nie jest obsługiwany komunikat Jest to szczególnie użyteczne do wysyłania transakcji do silnika wykonawczego Jeśli silnik cierpi w ciężkich opóźnieniach to będzie z powrotem transakcje Kolejka między generatorem sygnału handlowego a interfejsem API wykonawczym zmniejszy ten problem kosztem potencjalnego kursu handlu Dobrym szanowanym brokerem kolejki komunikatów jest RabbitMQ. Hardware i systemy operacyjne. Sprzęt działający w Twojej strategii może mieć znaczący wpływ na opłacalność swojego algorytmu Nie jest to kwestia ograniczona do handlowców o wysokiej częstotliwości Słaby wybór w sprzęcie i systemie operacyjnym może doprowadzić do awarii komputera lub ponownego uruchomienia komputera w najbardziej niewłaściwej chwili W związku z tym należy rozważyć, gdzie znajduje się aplikacja wybór jest zasadniczo między osobistym komputerem stacjonarnym, zdalnym serwerem, dostawcą chmury lub współużytkowanym serwerem wymiany Maszyny ktop są proste w instalacji i administracji, zwłaszcza w nowszych systemach operacyjnych, takich jak Windows 7 8, Mac OSX i Ubuntu Desktop, mają jednak pewne wady. Najważniejsze jest to, że wersje systemów operacyjnych przeznaczonych dla komputerów stacjonarnych są prawdopodobnie wymagać ponownego załadowania i często w najgorszym czasie Używają także więcej zasobów obliczeniowych dzięki nakazaniu graficznego interfejsu użytkownika GUI. Używanie sprzętu w domowym lub lokalnym środowisku biurowym może powodować problemy z połączeniem internetowym i czasem przestoju zasilania Główną zaletą 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 straightforward ly 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 simply 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 proc essor 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 programming 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, at 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, monito ring 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 breached, 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 availab ility 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 outweigh the ongoing maintenance cost of such syst ems 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, 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-inspected at run-time and this carries a performa nce 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. Micr osoft 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 dev elopment, 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 , iterati on 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 for algorithmic trading research Further, high-p erformance 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 o f 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