Sunday 10 December 2017

Budowanie zautomatyzowanych systemów transakcyjnych java


Jako czysto informatyk jesteś w doskonałej pozycji, aby zacząć w handlu algorytmicznym. Jest to coś, czego byłem świadkiem z pierwszej ręki w Quantiacs1. gdzie naukowcy i inżynierowie mogą przejść bezpośrednio do automatycznego handlu bez żadnego wcześniejszego doświadczenia. Innymi słowy, programowanie kotletów jest głównym składnikiem potrzebnym do rozpoczęcia. Aby uzyskać ogólne zrozumienie, jakie wyzwania czekają na ciebie po utworzeniu algorytmu systemu transakcyjnego, sprawdź ten post Quora. Zbudowanie systemu handlu od podstaw wymagać będzie wiedzy, platformy handlowej, danych rynkowych i dostępu do rynku. Chociaż nie jest to wymagane, wybór jednej platformy transakcyjnej, która zapewnia większość tych zasobów, pomoże Ci szybko osiągnąć szybki postęp. W związku z tym rozwijane umiejętności będą można przenieść na dowolny język programowania i niemal każdą platformę. Wierzcie lub nie, budowanie automatycznych strategii handlowych nie jest uzależnione od bycia ekspertem rynkowym. Niemniej poznanie podstawowych mechanizmów rynkowych pomoże ci odkryć zyskowne strategie transakcyjne. Opcje, kontrakty futures i inne pochodne John C. Hull - Świetna pierwsza książka do wprowadzania finansów ilościowych i podejścia do niej od strony matematyki. Quantitative Trading - Ernie Chan - Ernie Chan zapewnia najlepszą książkę wprowadzającą do handlu ilościowego i przeprowadza użytkownika przez proces tworzenia algorytmów transakcyjnych w MATLAB i Excelu. Algorytmiczny handel kontraktami futures poprzez uczenie maszynowe - 5-stronicowy podział stosowania prostego modelu uczenia maszynowego na powszechnie stosowane wskaźniki analizy technicznej. Oto zbiorcza lista do czytania w formacie PDF z pełnym podziałem książek, filmów, kursów i forów handlowych. Najlepszym sposobem na naukę jest robienie, a także w przypadku zautomatyzowanego handlu, który sprowadza się do tworzenia wykresów i kodowania. Dobrym punktem wyjścia są istniejące przykłady systemów handlu i istniejących eksponatów technik analizy technicznej. Co więcej, wykwalifikowany informatyk ma dodatkowe możliwości zastosowania uczenia maszynowego do handlu algorytmicznego. Oto niektóre z tych zasobów: TradingView - fantastyczna wizualnie platforma do tworzenia wykresów, TradingView to doskonały plac zabaw dla wygodnego korzystania z analizy technicznej. Dodatkową zaletą jest możliwość pisania skryptów handlowych i przeglądania pomysłów na handel z innymi ludźmi. Automated Trading Forum - świetna społeczność internetowa do publikowania pytań dla początkujących i znajdowania odpowiedzi na typowe problemy z danymi ilościowymi, gdy dopiero zaczynasz. Fora Quantum to świetne miejsce do zanurzenia się w strategiach, narzędziach i technikach. Seminarium YouTube na temat handlu pomysłami z działającymi próbkami kodu na Github. Uczenie maszynowe: Więcej prezentacji na temat automatycznego handlu można znaleźć w Quantishs Quant Club. Większość osób ze środowiska naukowego (czy to informatyki, czy inżynierii) ma kontakt z Python lub MATLAB, które są popularnymi językami dla finansów ilościowych. Quantiacs stworzyło zestaw narzędzi open source, który zapewnia bezpłatną analizę historyczną i 15-letnie historyczne dane rynkowe. Najlepsze jest to, że wszystko jest zbudowane na Pythonie i MATLAB, co daje ci wybór, z czym możesz się rozwijać. Oto przykładowa strategia handlowa w MATLAB. Jest to cały kod potrzebny do uruchomienia automatycznego systemu transakcyjnego, prezentujący zarówno moc MATLAB, jak i zestawu narzędzi Quantiacs. Quantios pozwala ci handlować 44 kontraktami terminowymi i wszystkimi zapasami SampP 500. Dodatkowo wspierane są różne dodatkowe biblioteki, takie jak TensorFlow. (Zrzeczenie się: pracuję w Quantiacs) Kiedy już będziesz gotowy, aby zarobić pieniądze jako kwant, możesz dołączyć do najnowszego automatycznego konkursu handlowego Quantiacs, w sumie 2 250 000 dostępnych inwestycji: Czy możesz konkurować z najlepszymi quantami 28,4 tys. Wyświetleń Middot Zobacz Upvotes middot Not for Reproduction Ta odpowiedź została całkowicie zmieniona Oto 6 głównych baz wiedzy do budowy algorytmicznych systemów transakcyjnych. Powinieneś zapoznać się z nimi wszystkimi, aby zbudować skuteczne systemy transakcyjne. Niektóre z używanych terminów mogą być nieco techniczne, ale powinieneś być w stanie je zrozumieć poprzez Google. Uwaga: (Większość) te nie mają zastosowania, jeśli chcesz dokonywać transakcji o wysokiej częstotliwości. 1. Teorie rynkowe Musisz zrozumieć, jak działa rynek. Mówiąc dokładniej, należy rozumieć nieefektywność rynku, relacje między różnymi produktami aktywów i zachowania cenowe. Pomysły na handel wynikają z nieskuteczności rynku. Będziesz musiał wiedzieć, jak ocenić niedoskonałości rynku, które dają przewagę handlową w porównaniu do tych, które nie robi. Projektowanie skutecznych robotów wymaga zrozumienia, jak działają automatyczne systemy transakcyjne. Zasadniczo algorytmiczna strategia handlowa składa się z 3 podstawowych komponentów: 1) wpisów, 2) wyjść i 3) wielkości pozycji. Będziesz musiał zaprojektować te 3 komponenty w odniesieniu do niewydajności rynku, którą przechwytujesz (i nie, to nie jest prosty proces). Nie musisz znać zaawansowanej matematyki (chociaż pomoże ci to, jeśli chcesz tworzyć bardziej złożone strategie). Dobre umiejętności krytycznego myślenia i rzetelne zrozumienie statystyk zaowocują daleko. Projektowanie obejmuje testowanie (testowanie pod kątem przewagi i odporności) i optymalizację (maksymalizacja wydajności przy minimalnym dopasowywaniu krzywych). Musisz także wiedzieć, jak zarządzać portfelem algorytmicznych strategii handlowych. Strategie mogą być komplementarne lub sprzeczne, co może prowadzić do nieplanowanych wzrostów ekspozycji na ryzyko lub niepożądanego zabezpieczenia. Ważne jest również alokowanie kapitału. Czy podzielisz kapitał równo w regularnych odstępach czasu lub nagradzasz zwycięzców większym kapitałem Jeśli wiesz, jakie produkty chcesz wymieniać, znajdź odpowiednie platformy transakcyjne dla tych produktów. Następnie poznaj API języka programowania tego testera platformy. Jeśli zaczynasz, poleciłbym Quantopian (tylko akcje), Quantconnect (akcje i FX) lub Metatrader 4 (FX i CFD na indeksy akcyjne, akcje i towary). Językami programowania są odpowiednio Python, C i MQL4. 4. Zarządzanie danymi Śmieci w śmieciach. Niedokładne dane prowadzą do niedokładnych wyników testu. Potrzebujemy rozsądnie czystych danych do dokładnego testowania. Dane czyszczące to kompromis między kosztem i dokładnością. Jeśli chcesz uzyskać dokładniejsze dane, musisz poświęcić więcej czasu (czasu) na jego wyczyszczenie. Niektóre problemy powodujące brudne dane to brakujące dane, powielone dane, błędne dane (złe tiki). Inne kwestie prowadzące do wprowadzających w błąd danych obejmują dywidendy, podziały akcji i transakcje futures itp. 5. Zarządzanie ryzykiem Istnieją 2 główne rodzaje ryzyka: ryzyko rynkowe i ryzyko operacyjne. Ryzyko rynkowe wiąże się z ryzykiem związanym ze strategią handlową. Czy uwzględnia najgorsze scenariusze Co się dzieje, gdy wydarzy się wydarzenie związane z czarnymi łabędziami, takie jak podczas Wojny Światowej? Czy zabezpieczyłeś się przed niechcianym ryzykiem Czy Twoja pozycja jest zbyt duża? Poza zarządzaniem ryzykiem rynkowym musisz spojrzeć na ryzyko operacyjne. Katastrofa systemu, utrata połączenia z Internetem, zły algorytm realizacji (prowadzący do źle wykonanych cen, lub brakujące transakcje z powodu niemożności poradzenia sobie z pośpiesznym poślizgiem) i kradzież hakerów to bardzo realne problemy. 6. Realizacja na żywo Analiza historyczna i handel na żywo są bardzo różne. Musisz wybrać odpowiednich brokerów (MM vs STP vs ECN). Forex Market News z Forex Trading Forum amp Forex Brokers Recenzje jest twoim najlepszym przyjacielem, przeczytaj tam recenzje brokerów. Potrzebujesz odpowiedniej infrastruktury (bezpieczna obsługa VPN i przestojów itp.) Oraz procedur oceny (monitoruj wydajność swoich robotów i analizuj je w odniesieniu do nieskuteczności rynku w testach), aby zarządzać robotem przez całe jego życie. Musisz wiedzieć, kiedy interweniować (modyfikuj aktualny czas pracy robotów) i kiedy nie. Ewaluacja i optymalizacja strategii transakcyjnych Pardo (Doskonała wiedza na temat metod budowania i testowania strategii handlowych) Handluj swoją drogą do wolności finansowej Van K Tharp (poza tytułem przynęty z niedorzecznym kliknięciem, ta książka stanowi doskonały przegląd mechanicznych systemów transakcyjnych) Quantitative Trading Ernest Chan (Świetne wprowadzenie do handlu algo na poziomie detalicznym.) Handel i giełdy: Mikrostruktura rynku dla praktyków Larry Harris (Mikrostruktura rynku jest nauką o tym, jak funkcjonują giełdy i co się dzieje, gdy handel się odbywa.) Ważne jest, aby znać tę informację mimo że dopiero zaczynasz) Algorithmic Trading amp DMA Barry Johnson (rzuca światło na algorytmy wykonywania banków, nie jest to bezpośrednio stosowane w handlu algo, ale dobrze jest wiedzieć) The Quants Scott Patterson (historie wojenne niektórych najlepszych kwantów. jako czytany na dobranoc) Quantopian (Kod, badanie i omawianie pomysłów ze społecznością Wykorzystuje Python) Podstawy Algo Trading Algo Trading101 (Disclaimer: Jestem właścicielem tego sytemu. Dowiedz się teorii projektowania robotów, teorii rynku i kodowania. Korzysta z MQL4) - Dołącz do wyzwania (poznaj koncepcje handlowe i teorie analizy historycznej) Ostatnio stworzyli własną platformę analizy historycznej i platformę transakcyjną, więc ta część jest dla mnie wciąż nowa, ale ich wiedza na temat koncepcji handlowych jest dobra.) Recommended BlogsForums (te obejmują finanse , handlu i forów wymiany handlowej): Zalecane języki programowania: Jeśli wiesz, jakie produkty chcesz handlować, znajdź odpowiednie platformy transakcyjne dla tych produktów. Następnie poznaj API języka programowania tego testera platformy. Jeśli zaczynasz, poleciłbym Quantopian (tylko akcje), Quantconnect (akcje i FX) lub Metatrader 4 (FX i CFD na indeksy akcyjne, akcje i towary). Językami programowania są odpowiednio Python, C i MQL4. 16.8 tys. Wyświetleń middot Wyświetl Upvotes middot Nie dla reprodukcji Mam doświadczenie jako programista i konfigurowanie zespołów agilescrum, zanim zacząłem patrzeć na handel algorytmiczny. Świat handlu algorytmicznego fascynuje mnie, ale może być nieco przytłaczający. Zacząłem zyskiwać pewną perspektywę, zanurzając się w platformę Quantopian, oglądając serię wykładów ilościowych i uruchamiając w swoim środowisku moje dostosowane do potrzeb systemy handlu algo oparte na społeczności. Podobnie jak ten poniżej: zdałam sobie sprawę, że wchodzę jeszcze głębiej, muszę spotkać ludzi, którzy uwielbiają tworzyć strategie handlowe, ale nie mogą programować - aby dopasować się do siebie jako zwinny menedżer zespołu i programista systemów transakcyjnych. Napisałem więc książkę o tym, jak stworzyć zespół, który wdroży twoje algorytmy transakcyjne. Budowanie systemów transakcyjnych Zwinna droga: jak budować wygrywające algorytmiczne systemy transakcyjne jako zespół. We wspólnocie Quantopian widziałem ludzi znających się na finansach, którzy szukają ludzi, aby wdrożyli swoje strategie handlowe, ale gdzie boją się poprosić programistów o wdrożenie swoich pomysłów. Ponieważ potencjalnie mogą bez nich uruchamiać swoje pomysły handlowe. Zajmuję się tym problemem w mojej książce. Aby uniknąć korzystania z pomysłów programistów: stwórz specyfikację dla swojego pomysłu handlowego, który wykorzystuje strukturę kodowania dostosowaną do rodzaju strategii, którą chcesz opracować. To może wydawać się trudne, ale kiedy znasz wszystkie kroki dziecka i jak się do siebie dopasowują, jest to całkiem proste i przyjemne w zarządzaniu. Jeśli podobała Ci się ta odpowiedź, zagłosuj i idź dalej. 2,7 tys. Wyświetleń middot Wyświetl Upvotes middot Nie do reprodukcji Chociaż jest to bardzo szeroki temat z odniesieniami do algorytmów budowania, ustawiania infrastruktury, alokacji zasobów i zarządzania ryzykiem, ale skupię się tylko na pierwszej części, jak należy pracować nad budowaniem własnego algorytmu i robienie właściwych rzeczy. 1. Strategia budowlana. Niektóre z najważniejszych punktów, na które należy zwrócić uwagę, to: Catch Big Trends - Dobra strategia musi we wszystkich przypadkach zarabiać, gdy rynek jest na topie. Rynki idą z dobrym trendem, który trwa tylko 15-20, ale jest to czas, kiedy wszystkie koty i psy (handlowcy z wszystkich ram czasowych, intraday, dzienne, tygodniowe, długoterminowe) robią zakupy i wszystkie mają jeden wspólny motyw. Wielu handlowców buduje również strategie zwrotów średnich, w których próbują ocenić warunki, gdy cena odstąpiła od średniej, i podjąć walkę z trendem, ale powinny one zostać zbudowane, gdy z powodzeniem zbudujesz i sprzedasz kilka dobrych trendów następujących systemów . Szanse na układanie w stos - ludzie często starają się zbudować system, który ma doskonały stosunek winli, ale to nie jest właściwe podejście. Na przykład algo z zwycięzcą w wieku 70 lat ze średnim zyskiem 100 na transakcję i średnią stratą w wysokości 200 na transakcję spowoduje tylko 100 na 10 transakcji (sieć 10-cio gramowa). Ale algo z zwycięzcą 30 z przeciętnym zyskiem 500 na handel i stratą 100 na handel przyniesie zysk netto równy 800 dla 10 transakcji (80trade). Nie jest więc konieczne, aby stosunek winloss był dobry, a raczej by szanse na układanie w stosy były lepsze. Mówi się, że małe straty są niewielkie, ale niech zwycięzcy zaczną działać. Inwestowanie w to, co wygodne, rzadko przynosi zyski. - Wypłata Roberta Arnotta - Wyprowadzanie jest nieuniknione, jeśli stosujesz jakąkolwiek strategię. Więc podczas projektowania algo don039t spróbuj zmniejszyć wypłatę lub wykonaj jakiś specyficzny warunek, aby zająć się tą wypłatą. Ten szczególny warunek może w przyszłości stanowić przeszkodę w wychwytywaniu dużego trendu, a twoje algo może działać słabo. Zarządzanie ryzykiem - Podczas tworzenia strategii należy zawsze mieć bramkę wyjściową, niezależnie od tego, jaki rynek chce zrobić. Rynek jest miejscem nierówności i musisz zaprojektować algo, aby jak najszybciej wyjść z handlu, jeśli nie pasuje on do twojego apetytu na ryzyko. Zwykle argumentuje się, że musisz zaryzykować 1-2 kapitału w każdej transakcji i jest optymalna pod wieloma względami, nawet jeśli otrzymasz 10 fałszywych transakcji, twój kapitał spadnie tylko o 20. Ale to nie W przypadku rzeczywistego scenariusza rynkowego. Niektóre transakcje tracą wartość od 0 do 1, a niektóre do 3-4, więc lepiej jest zdefiniować średni straty kapitału na handel i maksymalny kapitał, który można stracić w handlu, ponieważ rynki są całkowicie losowe i nie można ich oceniać . Od czasu do czasu rynek robi coś tak głupiego, że zapiera dech w piersiach. - Jim Cramer 2. Testowanie i optymalizacja strategii poślizgu. Kiedy testujemy strategię dotyczącą danych historycznych, zakładamy, że zlecenie zostanie zrealizowane po ustalonej z góry cenie uzyskanej przez algo. Ale tak się nie stanie, ponieważ mamy do czynienia teraz z animatorami rynku i HFT algo039. Twoje zamówienie na świecie today039s nigdy nie zostanie zrealizowane po żądanej cenie i nie będzie poślizgu. To musi być zawarte w testach. Wpływ na rynek: Objętość handlowana przez algo jest kolejnym ważnym czynnikiem, który należy wziąć pod uwagę podczas wykonywania weryfikacji historycznej i zbierania historycznych wyników. Wraz ze wzrostem wolumenu zamówienia złożone przez algo będą miały znaczący wpływ na rynek, a średnia cena wypełnionego zamówienia będzie znacznie różna. Twoje algo może przynieść zupełnie inne wyniki w rzeczywistych warunkach rynkowych, jeśli nie będziesz się uczył dynamiki głośności, którą ma twoje algo. Optymalizacja: Większość handlowców sugeruje, aby nie robić dopasowania krzywej i optymalizacji, i są one prawidłowe, ponieważ rynki są funkcją zmiennych losowych i żadna z dwóch sytuacji nigdy nie będzie taka sama. Zatem optymalizacja parametrów dla konkretnych sytuacji jest złym pomysłem. Sugerowałbym, aby przejść do optymalizacji strefowej. Jest to technika, którą śledzę, kupuję strefy identyfikujące, które mają podobne cechy pod względem zmienności i objętości. Optymalizuj te obszary oddzielnie, zamiast optymalizować przez cały okres. Powyższe to niektóre z najbardziej podstawowych i najważniejszych kroków, które podążam, gdy konwertuję podstawową myśl na algorytm i sprawdzam jego trafność. Wszyscy mają siłę mózgową, by śledzić giełdę. Jeśli przejdziesz przez matematykę piątą, możesz to zrobić. quoteter Lynch 17.2k wyświetleń middot Wyświetl Upvotes middot Not for Reproduction Krótka odpowiedź: ucz się matematyki stosowanej w handlu, strukturze rynków i ewentualnie najlepszym programistą systemów sieciowych. Istnieją trzy potencjalnie równoległe ścieżki, od których można nauczyć się handlowania algorytmicznego od zera, w zależności od ostatecznego celu, dlaczego chcesz się tego nauczyć. Tutaj znajdują się w rosnącej kolejności trudności, co również koreluje z tym, jak bardzo staje się to twoją częścią twojego życia. Wcześniejsze otworzą możliwości dla następnych. Możesz przestać na każdym kroku, gdy tylko nauczysz się wystarczająco dużo lub dostaniesz pracę. Jeśli chcesz być kwantowym, w większości używać oprogramowania matematycznego, a nie być programistą systemu algo, to krótką odpowiedzią jest uzyskanie doktoratu z matematyki, fizyki lub trochę zagadnień inżynierskich związanych z matematyką. Postaraj się o staże w najlepszych funduszach hedgingowych, sklepach z propem lub bankach inwestycyjnych. Jeśli możesz zostać zatrudniony przez odnoszącą sukcesy firmę, to zostaniesz tam nauczony, po prostu to się stanie. Ale w każdym razie nadal powinieneś ukończyć rozdział 039Self Study039 poniżej, aby upewnić się, że naprawdę chcesz przejść przez próbę uzyskania doktoratu. Jeśli nie jesteś geniuszem, jeśli nie masz doktoratu, nie będziesz w stanie konkurować z tymi, które robią, chyba że specjalizujesz się w programowaniu systemów transakcyjnych. Jeśli chcesz być bardziej programistą, spróbuj ubiegać się o pracę po każdym kroku, ale nie częściej niż raz w roku na firmę. Self Study Pierwszym krokiem jest zrozumienie, czym naprawdę jest handel algorytmiczny i jakie systemy są wymagane, aby go wspierać. I039d zaleca czytanie poprzez quotAlgorithmic Trading amp DMAquot (Johnson, 2017), coś, co osobiście zrobiłem i mogę polecić. To pozwoli ci zrozumieć na podstawowym poziomie. Następnie należy zaprogramować własną książkę zamówień, prosty symulator danych rynkowych i jedną implementację algorytmu w oparciu o Javę lub CC. Aby uzyskać dodatkowe punkty, które pomogłyby Ci w znalezieniu pracy, powinieneś napisać od podstaw własną warstwę komunikacji sieciowej. W tym momencie możesz być w stanie ukończyć samodzielne udzielanie odpowiedzi na to pytanie. Ale dla kompletności i ciekawości, nie krępuj się, aby kontynuować: Następną książką do rozwiązania jest quotTrading amp Exchange: Market Microstructure for Practitionersquot (Harris, 2003). Będzie to dotyczyć dokładniejszych informacji na temat funkcjonowania rynków. Jest to kolejna książka, którą przeczytałem, ale nie do końca zbadana, ponieważ byłem programistą systemów, a nie kwantem ani menedżerem po stronie biznesowej. Wreszcie, jeśli chcesz zacząć uczyć się matematyki o tym, jak działają rynki, pracuj nad tekstem i problemami w ofertach, kontraktach Futures i innych instrumentach pochodnych (Hull, 2003). Przeszedłem przez około połowę tego podręcznika albo w przygotowaniu, albo w ramach szkolenia wewnętrznego u jednego z moich byłych pracodawców. Sądzę, że początkowo dowiedziałem się o tej książce, ponieważ była ona albo sugerowaną, albo wymaganą lekturą dla jednego z dobrze przyjętych programów MS Financial Mathematics. Aby potencjalnie uzyskać większe szanse na zatrudnienie poprzez program dla nowych absolwentów, ukończyć program MS Financial Mathematics, jeśli chcesz zostać programistą platformy transakcyjnej lub zespołu quantów. Jeśli chcesz być tym, który projektuje algos, musisz wziąć wyjaśnioną wcześniej ścieżkę doktorską. Jeśli nadal nie ukończyłeś college'u, a następnie, postaraj się dostać staż w tym samym rodzaju miejsc. Zatrudnienie Bez względu na to, ile się uczysz w książkach i szkole, nic nie będzie porównywać się z drobnymi szczegółami, których uczysz się podczas pracy w firmie. Jeśli nie znasz wszystkich skrajnych przypadków i nie wiesz, kiedy twój model przestanie działać, stracisz pieniądze. Mam nadzieję, że odpowiedź na twoje pytanie i że po drodze nauki odkryjesz, czy naprawdę chcesz przejść od nauki do rzeczywistej codziennej pracy. 18.5 tys. Wyświetleń middot Wyświetl Upvotes middot Nie dla reprodukcji Interaktywne brokery Interactive Brokers ma naprawdę świetną platformę inwestycyjną i przyzwoitą cenę. Jest to zdecydowanie potężne narzędzie, więc prawdopodobnie można uzyskać tańsze alternatywy od brokerów zniżkowych, takich jak Etrade i Scottrade, ale jeśli poważnie myślisz o handlu algorytmicznym, IB jest tam, gdzie jest. InvestFly Success polega na ćwiczeniu i testowaniu hipotez i algorytmów. Wstecz przetestuj, przetestuj rynki i porównaj je z innymi. Wolę Investfly - wirtualną giełdę, Stock Market Game. ale jest tam mnóstwo dobrych programów. Idea Generation Don039t zaczyna się od zera - lubię czerpać pomysły z Motif Investing (Online Brokerage, Investment Ideas, Stock Trading) i Seeking Alpha, ale zawsze patrzę na duży obraz i myślę o tym, jak te rzeczy odnoszą się do twojej własnej hipotezy i formuły. Pozdrawiam i powodzenia 4.5k Odsłony Middot Zobacz Upvotes Middot Not for Reproduction Jeśli inwestycja jest procesem, wówczas logicznym wnioskiem jest automatyzacja. Algorytmy to nic innego jak ekstremalna formalizacja filozofii leżącej u podstaw. Jest to wizualna ekspresja przewagi handlowej. Obroty przewyższające win Avg Win - Loss Avg Loss Zmieniły moje życie i sposób, w jaki podchodzę do rynków. Wizualizuj swoją dystrybucję, zawsze. Pomoże ci to wyjaśnić swoje koncepcje, rzucić światło na swoje logiczne wady, ale najpierw zacznijmy od filozofii i przekonania 1. Dlaczego ważne jest, aby wyjaśnić swoje przekonania Wymieniamy się naszymi przekonaniami. Co ważniejsze, wymieniamy nasze podświadome przekonania. "Jeśli nie wiesz, kim jesteś, rynki są drogim miejscem do zdobycia, Adam Smith Wiele osób nie poświęca czasu, by zdobyć swoje przekonania i działać w oparciu o zapożyczone wierzenia. Pytania bez odpowiedzi i błędna logika to powód, dla którego niektórzy systemowi handlowcy dostosowują system do każdej wypłaty. Byłem taki od wielu lat. Wywoływanie przekonania: Dzieło Byrona Katie. Po ukończeniu 2 wierzeń dziennie przez 100 dni, mógłbym wyjaśnić mój styl babce 5 dlaczego. Zadaj sobie pytanie, dlaczego i głębiej nurkuj. Mindsets: ekspansywny i subtraktywny lub smoothie Vs band-aid Istnieją dwa rodzaje myślenia i potrzebujemy obu w różnych momentach: Ekspansywny do eksplorowania koncepcji, pomysłów, trików itp. Subtraktywny: upraszczanie i wyjaśnianie pojęć Systematyczni handlowcy, którzy nie są subtraktywni, podejście smoothie. Wrzucają do swojej strategii różnego rodzaju rzeczy, a następnie łączą je z optymalizatorem. Zły ruch: złożoność jest formą lenistwa Nadużycie subtraktywni systematyczni handlowcy mają mentalność zespołu muzycznego. Ciężko kodują wszystko, a potem łatają szczęście, cytując esetyjskich traderów, rozumieją, że jest to taniec między okresami eksploracji i czasami twardego rdzenia upraszczania. Proste nie jest łatwe Zajęło mi 3.873 godzin, a akceptuję, że może zająć całe życie2. Wyjście: zacznij od końca pod uwagę. Kontr-intuicyjna prawda. Jedynym momentem, kiedy wiesz, czy transakcja była opłacalna, jest po wyjściu, tak, więc najpierw skup się na logice wyjścia. Moim zdaniem głównym powodem, dla którego ludzie nie potrafią zautomatyzować swojej strategii, jest to, że zbytnio koncentrują się na wejściu, a nie na wyjściu. Jakość twoich wyjść kształtuje twoją dystrybucję PampL, patrz wykres powyżej Poświęć olbrzymi czas na stop loss, ponieważ wpływa na 4 elementy twojego systemu handlu: wygrana, strata, średnia strata, częstotliwość handlowania Jakość twojego systemu będzie określona przez jakość stop loss, 3. Pieniądze są dokonywane w module zarządzania pieniędzmi. Równa waga jest formą lenistwa. Wielkość twoich zakładów określi kształt twoich zwrotów. Dowiedz się, kiedy Twoja strategia nie działa i zmniejsz rozmiar. I odwrotnie, zwiększ rozmiar, gdy działa. Napiszę więcej o wielkości pozycji na mojej stronie internetowej, ale jest wiele zasobów w Internecie. 3. Ostatnia i bardzo ważna, Wpis Po obejrzeniu całego sezonu zrozpaczonych gospodyń domowych lub cytowania badquot, miał trochę czekolady, chodził z psem, karmił ryba, zwana twoją mamą, wtedy czas pomyśleć o wejściu. Zapoznaj się z powyższą formułą, zbieranie zapasów nie jest podstawowym składnikiem. Można argumentować, że właściwe zbieranie zapasów może zwiększyć wygraną. Może, ale jest bezwartościowy, jeśli nie ma właściwej polityki wyjścia, ani zarządzania pieniędzmi. W warunkach probabilistycznych, po ustalonym wyjściu, wejście staje się prawdopodobieństwem skali ruchomej 4. Na czym należy się skupić podczas testowania Nie ma magicznej średniej ruchomej, wartość wskaźnika. Podczas testowania systemu skoncentruj się na trzech rzeczach: fałszywe alarmy: obniżają wydajność. Znajdź proste (eleganckie) sposoby na ich ograniczenie, pracuj nad okresami logicznymi, kiedy strategia nie działa: żadna strategia nie działa cały czas. Przygotuj się na to i przygotuj wcześniej plany awaryjne. Poprawianie systemu podczas wypłaty jest jak uczenie się pływania w burzy Kupowanie siły i zarządzanie pieniędzmi: to kolejny kontrowersyjny fakt. Twój system może generować pomysły, ale nie masz siły nabywczej do wykonania. Proszę spojrzeć na powyższą tabelę Najpierw buduję wszystkie moje strategie z krótkiej strony. Najlepszym sprawdzianem odporności na strategię jest krótka strona: cienkie, brutalnie niestabilne platformy o krótszym cyklu. Zacząłem od programisty WealthLab. Ma spektakularną bibliotekę rozmiarów pozycji. Jest to jedyna platforma pozwalająca na szerokie backtetsing i optymalizację portfela. Testuję wszystkie moje koncepcje na WLD. Wysoce zalecane. Ma jedną wadę, nie łączy pozycji sizera z rzeczywistym handlem na żywo. Amyperoker też jest dobry. Ma interfejs API, który łączy się z brokerami interaktywnymi i przyzwoitym programem posidition. Programujemy na Metatrader na rynku Forex. Niestety, Metatrader przeszedł złożoną króliczą dziurę. istnieje tam żywa społeczność. MatLab, broń wybierana przez inżynierów. Bez komentarza. Tradycja: Perry Kaufman napisał kilka dobrych książek o TS. Istnieje żywa społeczność. Jest to łatwiejsze niż w przypadku większości innych platform. Porada końcowa Jeśli chcesz nauczyć się pływać, musisz wskoczyć do wody. Wielu nowicjuszy chce wysłać pomysły na miliard dolarów do jakiegoś taniego programisty. To nie działa w ten sposób. Musisz nauczyć się języka, logiki. Brace na długą podróż 14,7 tys. Wyświetleń middot Wyświetl Upvotes middot Nie na reprodukcję Zobacz TradeLink (C) lub ActiveQuant (Java). Kod TradeLink039s jest bardziej elegancki. I039m piszę to na telefonie komórkowym, więc przepraszam za zwięzłość. Zasadniczo, spójrz na to, co wchodzi w grę, a co wychodzi jako pierwszy sposób rozwiązania problemu. W. dane rynkowe, wydarzenia exhangemarket (egzekucje na transakcje wprowadzone przez system, pakiety, odrzucenia, powiadomienia o wstrzymaniu handlu itp.). Na zewnątrz. Zamówienia, modyfikacje ordes. quotBuy 100 15.5, IOCquot, na przykład. IOC natychmiast lub anuluj. Pomiędzy. decyzje strategiczne oparte na informacjach zebranych z danych w czasie rzeczywistym, w połączeniu z danymi historycznymi i wszelkimi innymi danymi wejściowymi (polecenie trader039s z jego GUI, aby handlować bardziej agresywnie, itp.). Rzeczy jak. złożyć zamówienie, zmienić istniejące zamówienie, itp. Teraz możesz zacząć zajmować się architekturą techniczną takiego systemu. Kluczowe znaczenie miałaby umiejętność łatwego i eleganckiego wyrażenia strategii, pomimo złożoności procesu przetwarzania zdarzeń (istnieje kilka interesujących warunków wyścigu, które mogą wprowadzić w błąd twój system w odniesieniu do stanu rynku Twoich zamówień, na przykład). Kiedyś robiłem to dla życia i prawdopodobnie mogę iść bez końca Ale pisanie na telefonie komórkowym jest środkiem odstraszającym. Mam nadzieję, że to się przydało. Skontaktuj się ze mną, jeśli potrzebujesz dalszych wskazówek. 21.2 tys. Wyświetleń middot Wyświetl Upvotes middot Not for Reproduction Zaktualizowano 100w ago middot Patricka J Rooneya. 5 lat handlu profesjonalnie Specjalizuję się w zaawansowanych o Aby zacząć od podstaw, zdobądź Amibroker (AmiBroker - Pobierz). Amibroker ma łatwy do opanowania język i potężny mechanizm analizy historycznej, w którym możesz prototypować swoje pomysły. Zdobądź także książkę Quantum Trading Systems Howarda Bandy'ego. Ta książka jest naprawdę dobrym wprowadzeniem do koncepcji rozwoju ilościowego. Będziesz potrzebował przynajmniej podstawowej wiedzy na temat statystyk. Istnieje wiele dobrych kursów MOOC dostępnych za darmo. Takich jak ten jeden Statistics One - Princeton University Coursera It039s również warto śledzić The Whole Street. który jest połączeniem wszystkich blogów, z których wielu publikuje kod Amibroker ze swoimi pomysłami. Stamtąd warto się nauczyć Pythona (dowiedzieć się python - wyszukiwarka Google), a także zrobić doskonały kurs nauki maszynowej na Uniwersytecie Stanforda, który jest dostępny bezpłatnie na Courserze. Jeśli chcesz przetestować własne algorytmy, dobrym miejscem do tego są Quantconnect lub Quantopian. Wreszcie, ten facet ma kilka dobrych rad, jak zamienić go w swój numer seryjny kariery Powodzenia w podróży Częściowo zaczerpnięte z odpowiedzi Alana Clement039s Jak programista w finansach może zostać programistą kwantowym 16.2 tys. Wyświetleń Middot Wyświetl Upvotes middot Not for ReproductionNajlepszy język programowania Algorithmic Trading Systems Jednym z najczęstszych pytań, które otrzymuję w mailboxie QS jest: Jaki jest najlepszy język programowania dla handlu algorytmicznego. Krótka odpowiedź brzmi, że nie ma najlepszego języka. Należy wziąć pod uwagę parametry strategii, wydajność, modułowość, rozwój, odporność i koszty. W tym artykule zostaną przedstawione niezbędne komponenty algorytmicznej architektury systemu transakcyjnego oraz sposób, w jaki decyzje dotyczące implementacji wpływają na wybór języka. Po pierwsze, rozważane będą główne elementy algorytmicznego systemu handlu, takie jak narzędzia badawcze, optymalizator portfela, menedżer ryzyka i silnik wykonawczy. Następnie przeanalizowane zostaną różne strategie handlowe i ich wpływ na projekt systemu. W szczególności omówiona zostanie częstotliwość transakcji i prawdopodobny wolumen transakcji. Po wybraniu strategii handlowej konieczne jest zaprojektowanie całego systemu. Obejmuje to wybór sprzętu, systemu operacyjnego i odporność systemu na rzadkie, potencjalnie katastrofalne zdarzenia. Podczas gdy architektura jest rozważana, należy zwrócić należytą uwagę na wydajność - zarówno na narzędzia badawcze, jak i środowisko wykonania na żywo. Czym zajmuje się system transakcyjny Zanim zdecydujesz się na najlepszy język do napisania automatycznego systemu transakcyjnego, konieczne jest zdefiniowanie wymagań. Czy system będzie oparty wyłącznie na wykonaniu Czy system będzie wymagał modułu zarządzania ryzykiem lub portfela? Czy system wymaga wysokowydajnego backtestera Dla większości strategii system transakcyjny można podzielić na dwie kategorie: Badania i generowanie sygnałów. Badania dotyczą oceny skuteczności strategii w stosunku do danych historycznych. Proces oceny strategii handlowej w odniesieniu do wcześniejszych danych rynkowych określany jest mianem analizy historycznej. Rozmiar danych i złożoność algorytmiczna będą miały duży wpływ na intensywność obliczeniową backtestera. Szybkość procesora i współbieżność są często ograniczającymi czynnikami optymalizującymi szybkość wykonywania badań. Generowanie sygnału dotyczy generowania zestawu sygnałów transakcyjnych z algorytmu i wysyłania takich zleceń na rynek, zwykle za pośrednictwem domu maklerskiego. W przypadku niektórych strategii wymagany jest wysoki poziom wydajności. Problemy z IO, takie jak przepustowość sieci i opóźnienia, są często czynnikiem ograniczającym optymalizację systemów wykonawczych. Tak więc wybór języków dla każdego komponentu całego systemu może być całkiem inny. Typ, częstotliwość i objętość strategii Rodzaj zastosowanej strategii algorytmicznej będzie miał istotny wpływ na konstrukcję systemu. Konieczne będzie rozważenie handlu na giełdach, łączności z zewnętrznymi dostawcami danych, częstotliwości i wielkości strategii, kompromisu między łatwą rozbudową i optymalizacją wydajności, a także dowolnego niestandardowego sprzętu, w tym niestandardowego miejsca kolokacji serwery, GPU lub FPGA, które mogą być konieczne. Wybory technologii dla amerykańskiej akcji o niskiej częstotliwości będą znacznie różniły się od strategi handlu arbitrażowego o wysokiej częstotliwości na rynku kontraktów terminowych. Przed wyborem języka wielu dostawców danych musi być ocenionych, które dotyczą danej strategii. Konieczne będzie rozważenie możliwości połączenia się z dostawcą, struktury wszelkich interfejsów API, terminowości danych, wymagań dotyczących pamięci masowej i odporności w sytuacji, gdy sprzedawca przechodzi do trybu offline. Rozsądne jest również posiadanie szybkiego dostępu do wielu dostawców Różne instrumenty mają swoje własne dziwactwa magazynowe, których przykłady obejmują wiele symboli giełdowych dla akcji i dat wygaśnięcia kontraktów futures (nie wspominając o żadnych specyficznych danych OTC). Należy to uwzględnić w projekcie platformy. Częstotliwość strategii jest prawdopodobnie jednym z największych czynników określających sposób definiowania stosu technologii. Strategie wykorzystujące dane częściej niż drobiazgowo lub po drugie takty wymagają znacznego uwzględnienia pod względem wydajności. Strategia przekraczająca po drugie pręty (to jest dane kleszczowe) prowadzi do projektu opartego na wydajności jako podstawowego wymogu. W przypadku strategii o wysokiej częstotliwości konieczne będzie przechowywanie i ocena znacznej ilości danych rynkowych. Oprogramowanie takie jak HDF5 lub kdb są powszechnie używane do tych ról. Aby przetwarzać duże ilości danych potrzebnych do zastosowań HFT, należy zastosować szeroko zoptymalizowany backtester i system wykonawczy. CC (prawdopodobnie z jakimś asemblerem) jest prawdopodobnie najsilniejszym kandydatem do nauki języka. Strategie o ultra wysokich częstotliwościach prawie na pewno wymagają niestandardowego sprzętu, takiego jak układy FPGA, kolokacja wymiany i tuning interfejsu kernalnetwork. Systemy badawcze Systemy badawcze zazwyczaj obejmują połączenie interaktywnego programowania i zautomatyzowanych skryptów. Ten pierwszy często ma miejsce w środowisku IDE, takim jak Visual Studio, MatLab lub R Studio. Ta ostatnia obejmuje rozległe obliczenia numeryczne w odniesieniu do wielu parametrów i punktów danych. Prowadzi to do wyboru języka zapewniającego proste środowisko do testowania kodu, ale zapewnia również wystarczającą wydajność do oceny strategii w wielu wymiarach parametrów. Typowe IDE w tej przestrzeni to Microsoft Visual CC, który zawiera rozbudowane narzędzia do debugowania, możliwości uzupełniania kodu (za pośrednictwem Intellisense) i proste przeglądy całego stosu projektu (za pośrednictwem bazy danych ORM, LINQ) MatLab. który jest przeznaczony do rozległej numerycznej algebry liniowej i operacji wektorowych, ale w interaktywny sposób konsolowy R Studio. która otacza konsolę języka statystycznego R w pełnoprawnym IDE Eclipse IDE dla Linux Java i C oraz częściowo zastrzeżonych IDE, takich jak Enthought Canopy for Python, które obejmują biblioteki analizy danych, takie jak NumPy. SciPy. scikit-learn i pandy w jednym interaktywnym (konsolowym) środowisku. W przypadku numerycznego testu historycznego wszystkie powyższe języki są odpowiednie, chociaż nie jest konieczne użycie GUIIDE, ponieważ kod zostanie wykonany w tle. Podstawową kwestią na tym etapie jest szybkość wykonania. Skompilowany język (taki jak C) jest często przydatny, jeśli wymiary parametrów analizy historycznej są duże. Należy pamiętać o tym, że należy być ostrożnym wobec takich systemów, jeśli tak jest w przypadku języków interpretowanych, takich jak Python, często wykorzystuje biblioteki o wysokiej wydajności, takie jak NumPypandas do etapu analizy historycznej, w celu utrzymania rozsądnego poziomu konkurencyjności z odpowiednikami skompilowanymi. Ostatecznie język wybrany do analizy historycznej zostanie określony przez specyficzne potrzeby algorytmiczne, a także zakres bibliotek dostępnych w danym języku (więcej na ten temat poniżej). Jednak język używany w przypadku backtestera i środowisk badawczych może być całkowicie niezależny od języka używanego w budowie portfela, zarządzaniu ryzykiem i komponentach wykonawczych, co będzie widoczne. Portfolio Budowa i zarządzanie ryzykiem Komponenty portfela budowy i zarządzania ryzykiem są często pomijane przez handlowców algorytmicznych. To prawie zawsze błąd. Narzędzia te zapewniają mechanizm, dzięki któremu kapitał zostanie zachowany. Nie tylko starają się zmniejszyć liczbę ryzykownych zakładów, ale także zminimalizują liczbę rezygnacji z samych transakcji, zmniejszając koszty transakcji. Wyrafinowane wersje tych komponentów mogą mieć znaczący wpływ na jakość i spójność rentowności. Stworzenie stabilnej strategii jest proste, ponieważ mechanizm budowy portfela i menedżer ryzyka można łatwo modyfikować, aby obsługiwać wiele systemów. Dlatego należy je uważać za niezbędne komponenty na początku projektowania algorytmicznego systemu handlu. Zadaniem systemu budowania portfela jest zebranie zestawu pożądanych transakcji i wyprodukowanie zestawu rzeczywistych 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 strategie w portfolio. Konstrukcja portfela często sprowadza się do problemu algebry liniowej (na przykład do faktoryzacji macierzy), a zatem wydajność w dużym stopniu zależy od skuteczności dostępnej implementacji numerycznej algebry liniowej. Popularne biblioteki obejmują uBLAS. LAPACK i NAG dla C. MatLab posiada również szeroko zoptymalizowane operacje macierzy. Python wykorzystuje NumPySciPy do takich obliczeń. Często zrekompensowany portfel będzie wymagał skompilowanej (i dobrze zoptymalizowanej) biblioteki macierzowej, aby wykonać ten krok, tak aby nie zawęzić systemu handlu. Zarządzanie ryzykiem to kolejna niezwykle ważna część algorytmicznego systemu transakcyjnego. Ryzyko może przybierać różne formy: zwiększoną zmienność (chociaż może to być postrzegane jako pożądane w przypadku niektórych strategii), zwiększona korelacja między klasami aktywów, domyślne ustawienia kontrahenta, przerwy w działaniu serwerów, zdarzenia związane z czarnymi łabędziami i niewykryte błędy w kodzie handlowym, aby nadać nazwę kilka. Komponenty zarządzania ryzykiem próbują przewidywać skutki nadmiernej zmienności i korelacji pomiędzy klasami aktywów i ich skutkami na kapitale obrotowym. Często zmniejsza się to do zestawu obliczeń statystycznych, takich jak testy stresu Monte Carlo. Jest to bardzo podobne do potrzeb obliczeniowych silnika wyceny instrumentów pochodnych i jako takie będzie zależne od procesora. Symulacje te można w dużym stopniu zrównoważyć (patrz poniżej) iw pewnym stopniu można rzucić sprzęt na problem. Systemy wykonawcze Zadaniem systemu wykonawczego jest otrzymywanie przefiltrowanych sygnałów handlowych z komponentów budowy portfela i zarządzania ryzykiem oraz przesyłanie ich do domu maklerskiego lub innych środków dostępu do rynku. W przypadku większości strategii handlu algorytmicznego obejmuje to połączenie API lub FIX z brokerem, takim jak Interactive Brokers. Podstawowymi względami przy podejmowaniu decyzji o języku są: jakość interfejsu API, dostępność oprogramowania do zawijania języka dla interfejsu API, częstotliwość wykonywania i przewidywany poślizg. Jakość API odnosi się do tego, jak dobrze jest udokumentowana, jaki rodzaj wydajności zapewnia, czy wymaga samodzielnego oprogramowania, do którego można uzyskać dostęp, czy też brama może zostać ustanowiona w sposób bezgłowy (tzn. Bez GUI). W przypadku Interactive Brokers, narzędzie Trader WorkStation musi działać w środowisku GUI, aby uzyskać dostęp do ich API. Kiedyś musiałem zainstalować wydanie Desktop Ubuntu na serwerze chmurowym Amazon, aby uzyskać zdalny dostęp do Interactive Brokers, wyłącznie z tego powodu Większość interfejsów API zapewnia interfejs C ior Java. Zazwyczaj do społeczności należy tworzenie wrapperów specyficznych dla języka dla C, Python, R, Excel i MatLab. Zauważ, że przy każdej dodatkowej wtyczce (zwłaszcza w przypadku wrapperów API) istnieje możliwość wkradania się błędów do systemu. Zawsze testuj wtyczki tego typu i upewnij się, że są aktywnie utrzymywane. Wartym uwagi wskaźnikiem jest sprawdzenie, ile nowych aktualizacji bazy kodowej wykonano w ostatnich miesiącach. Częstotliwość wykonywania ma ogromne znaczenie w algorytmie wykonywania. Zauważ, że setki zamówień mogą być wysyłane co minutę i jako taka wydajność ma kluczowe znaczenie. Poślizg zostanie poniesiony w złym wykonaniu, co będzie miało dramatyczny wpływ na rentowność. Języki napisane statycznie (patrz poniżej), takie jak CJava, są na ogół optymalne do wykonania, ale istnieje kompromis w zakresie czasu opracowania, testowania i łatwości konserwacji. Języki napisane dynamicznie, takie jak Python i Perl, są obecnie wystarczająco szybkie. Zawsze upewnij się, że komponenty są zaprojektowane modułowo (patrz poniżej), aby można było je wymieniać podczas skalowania systemu. Proces planowania i rozwoju architektury Składniki systemu transakcyjnego, jego wymagania dotyczące częstotliwości i objętości zostały omówione powyżej, ale infrastruktura systemu nie została jeszcze objęta. Ci, którzy działają jako handlowcy detaliczni lub pracują w małym funduszu, prawdopodobnie będą nosili wiele czapek. Konieczne będzie objęcie modelu alfa, zarządzanie ryzykiem i parametry realizacji, a także ostateczne wdrożenie systemu. Przed zagłębieniem się w określone języki omówiony zostanie projekt optymalnej architektury systemu. Rozdzielanie wątpliwości Jedną z najważniejszych decyzji, które należy podjąć na początku, jest podział kwestii dotyczących systemu transakcyjnego. W rozwoju oprogramowania zasadniczo oznacza to, jak podzielić różne aspekty systemu handlu na osobne moduły modułowe. Ujawniając interfejsy w każdym z komponentów, łatwo jest zamienić części systemu na inne wersje, które wspomagają wydajność, niezawodność lub konserwację, bez modyfikowania zewnętrznego kodu zależności. Jest to najlepsza praktyka dla takich systemów. W przypadku strategii na niższych częstotliwościach takie praktyki są zalecane. W przypadku transakcji o bardzo wysokiej częstotliwości zestaw zasad może zostać zignorowany kosztem ulepszenia systemu w celu uzyskania jeszcze większej wydajności. Może być pożądany bardziej ścisły system. Tworzenie mapy komponentów algorytmicznego systemu handlu jest warte sam w sobie. Jednak optymalnym podejściem jest upewnienie się, że istnieją oddzielne komponenty dla danych historycznych i danych rynkowych w czasie rzeczywistym, przechowywania danych, interfejsu API dostępu do danych, backtestera, parametrów strategii, konstrukcji portfela, zarządzania ryzykiem i systemów automatycznej realizacji. Na przykład, jeśli używany magazyn danych jest obecnie nierentowny, nawet przy znacznych poziomach optymalizacji, można go zamienić na minimalny przepis na interfejs API przetwarzania danych lub dostępu do danych. Jeśli chodzi o backtester i kolejne komponenty, nie ma różnicy. Kolejną zaletą oddzielnych komponentów jest to, że pozwala na stosowanie różnych języków programowania w całym systemie. Nie ma potrzeby, aby ograniczać się do jednego języka, jeśli metoda komunikacji komponentów jest niezależna od języka. Będzie tak w przypadku, gdy komunikują się przez TCPIP, ZeroMQ lub inny niezależny od języka protokół. Jako konkretny przykład rozważmy przypadek systemu analizy historycznej napisanego w języku C dla sprawdzania poprawności liczb, podczas gdy menedżer portfela i systemy wykonawcze są napisane w Pythonie przy użyciu SciPy i IBPy. Rozważania dotyczące wydajności Wydajność jest ważnym czynnikiem w przypadku większości strategii transakcyjnych. Dla strategii o wyższej częstotliwości jest to najważniejszy czynnik. Wydajność obejmuje szeroki zakres zagadnień, takich jak algorytmiczna prędkość wykonywania, opóźnienie sieci, przepustowość, dane we współrzędnych, równoległość równoległości i skalowanie. Każdy z tych obszarów jest indywidualnie pokryty dużymi podręcznikami, więc ten artykuł tylko zarysuje powierzchnię każdego tematu. Architektura i wybór języka będą teraz omawiane pod względem ich wpływu na wydajność. Przeważająca mądrość, o której mówi Donald Knuth. jednym z ojców informatyki jest to, że przedwczesna optymalizacja jest źródłem wszelkiego zła. Dzieje się tak prawie zawsze - z wyjątkiem budowania algorytmu handlu wysokimi częstotliwościami Dla tych, którzy interesują się strategiami o niższej częstotliwości, wspólnym podejściem jest zbudowanie systemu w najprostszy możliwy sposób i jedynie optymalizacja w miarę pojawiania się wąskich gardeł. Narzędzia profilujące służą do określania powstawania wąskich gardeł. Profile mogą być tworzone dla wszystkich wymienionych powyżej czynników, w środowisku MS Windows lub Linux. Dostępnych jest wiele narzędzi systemu operacyjnego i językowych, a także narzędzia innych firm. Wybór języka będzie teraz omawiany w kontekście wydajności. C, Java, Python, R i MatLab zawierają wysokowydajne biblioteki (w ramach ich standardowych lub zewnętrznych) dla podstawowej struktury danych i pracy algorytmicznej. C jest dostarczany ze Standardową Biblioteką Szablonów, a Python zawiera NumPySciPy. Wspólne zadania matematyczne można znaleźć w tych bibliotekach i rzadko jest korzystne napisanie nowej implementacji. Jedynym wyjątkiem jest sytuacja, gdy wymagana jest wysoce spersonalizowana architektura sprzętowa, a algorytm szeroko wykorzystuje zastrzeżone rozszerzenia (takie jak niestandardowe pamięci podręczne). Jednak często ponowne wynajdywanie koła marnuje czas, który można lepiej wykorzystać na rozwój i optymalizację innych elementów infrastruktury handlowej. Czas opracowywania jest niezwykle cenny, szczególnie w kontekście twórców oprogramowania. Opóźnienie jest często problemem systemu wykonawczego, ponieważ narzędzia badawcze są zwykle umieszczone na tej samej maszynie. W przypadku pierwszego z nich opóźnienie może wystąpić w wielu punktach wzdłuż ścieżki wykonania. Konieczne jest zapoznanie się z bazami danych (opóźnienie sieci dyskietek), generowanie sygnałów (system operacyjny, opóźnienie przesyłania komunikatów kernala), wysyłanie sygnałów handlowych (opóźnienie karty NIC) i przetwarzanie zamówień (opóźnienia w systemie wymiany). W przypadku operacji o wyższej częstotliwości konieczne jest dokładne zaznajomienie się z optymalizacją jądra i optymalizacją transmisji sieciowej. Jest to obszar głęboki i znacznie wykracza poza zakres artykułu, ale jeśli pożądany jest algorytm UHFT, należy zdawać sobie sprawę z wymaganej głębokości wiedzy. Buforowanie jest bardzo przydatne w zestawie narzędzi ilościowego programisty handlowego. Buforowanie odnosi się do koncepcji przechowywania często używanych danych w sposób, który pozwala na lepszy dostęp, kosztem potencjalnego stagnacji danych. Typowy przypadek użycia występuje w przypadku tworzenia stron internetowych podczas pobierania danych z relacyjnej bazy danych z dyskami i umieszczania ich w pamięci. Wszelkie kolejne wnioski o dane nie muszą trafiać do bazy danych, więc wzrost wydajności może być znaczny. W sytuacjach transakcyjnych buforowanie może być niezwykle korzystne. Na przykład aktualny stan portfela strategii może być przechowywany w pamięci podręcznej, dopóki nie zostanie ponownie zrównoważony, tak, że lista nie musi być regenerowana po każdej pętli algorytmu handlowego. Taka regeneracja może być operacją wysokiej CPU lub dysku IO. Jednak buforowanie nie jest pozbawione własnych problemów. Regeneracja danych z pamięci podręcznej na raz, ze względu na zmienny charakter pamięci podręcznej, może powodować znaczne zapotrzebowanie na infrastrukturę. Kolejną kwestią jest palowanie psów. gdzie wiele generacji nowej kopii pamięci podręcznej jest wykonywanych przy bardzo dużym obciążeniu, co prowadzi do awarii kaskadowej. Dynamiczna alokacja pamięci jest kosztowną operacją podczas wykonywania oprogramowania. W związku z tym dla aplikacji o wyższej wydajności konieczne jest, aby dobrze wiedzieć, w jaki sposób pamięć jest alokowana i rozdysponowana podczas przepływu programu. Nowsze standardy językowe, takie jak Java, C i Python, przeprowadzają automatyczne usuwanie śmieci. która odnosi się do dealokacji dynamicznie przydzielanej pamięci, gdy obiekty wykraczają poza zakres. Usuwanie śmieci jest niezwykle przydatne podczas programowania, ponieważ redukuje błędy i ułatwia czytelność. Jednak często jest ona nieoptymalna dla niektórych strategii transakcyjnych o wysokiej częstotliwości. Niestandardowe wyrzucanie śmieci jest często pożądane w tych przypadkach. W Javie, na przykład, poprzez dostrojenie konfiguracji garbage-zbieracza i sterty, możliwe jest uzyskanie wysokiej wydajności dla strategii HFT. C nie dostarcza natywnego garbage collectora i dlatego konieczne jest obsłużenie całej alokacji alokacji pamięci w ramach implementacji obiektów. Chociaż potencjalnie podatny na błędy (potencjalnie prowadzący do zwisających wskaźników), niezwykle przydatna jest precyzyjna kontrola wyglądu obiektów na stercie w przypadku niektórych aplikacji. Wybierając język, należy sprawdzić, jak działa garbage collector i czy można go zmodyfikować w celu optymalizacji pod kątem konkretnego przypadku użycia. Wiele operacji w algorytmicznych systemach handlowych jest podatnych na równoległość. Odnosi się to do koncepcji wykonywania wielu operacji programowych w tym samym czasie, tj. Równolegle. Tak zwane niepokojąco równoległe algorytmy obejmują kroki, które można obliczyć w pełni niezależnie od innych kroków. Pewne operacje statystyczne, takie jak symulacje Monte Carlo, są dobrym przykładem zawstydzająco równoległych algorytmów, ponieważ każde losowe losowanie i następna operacja ścieżkowa może być obliczana bez znajomości innych ścieżek. Inne algorytmy są tylko częściowo możliwe do wyrównania. Symulacje dynamiki płynów są tego rodzaju przykładem, gdzie domena obliczeń może zostać podzielona, ​​ale ostatecznie te domeny muszą się ze sobą komunikować, a zatem operacje są częściowo sekwencyjne. Równoległe algorytmy podlegają prawu Amdahls. który zapewnia teoretyczną górną granicę wzrostu wydajności algorytmu równoległego, gdy podlega N oddzielnym procesom (na przykład w rdzeniu lub wątku procesora). Równoległość stała się coraz ważniejsza jako środek optymalizacji, ponieważ szybkości zegara procesora uległy stagnacji, ponieważ nowsze procesory zawierają wiele rdzeni, z którymi można wykonywać równoległe obliczenia. Rozwój sprzętu graficznego dla użytkowników indywidualnych (głównie w przypadku gier wideo) doprowadził do opracowania jednostek graficznych (GPU), które zawierają setki rdzeni dla wysoce współbieżnych operacji. Takie GPU są teraz bardzo przystępne. Wysokopoziomowe frameworki, takie jak Nvidias CUDA, doprowadziły do ​​powszechnego zastosowania w środowisku akademickim i finansowym. Taki sprzęt GPU jest zasadniczo odpowiedni tylko dla aspektu badawczego finansowania ilościowego, podczas gdy inny bardziej wyspecjalizowany sprzęt (w tym Field-Programmable Gate Arrays - FPGA) jest używany dla (U) HFT. W dzisiejszych czasach najnowocześniejsze języki wspierają stopień współzależności. Zatem optymalizacja backtestera jest prosta, 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 stale rosnących obciążeń w postaci większych żądań, większego wykorzystania procesora i większej alokacji pamięci. W handlu algorytmicznym strategia jest w stanie skalować, jeśli może zaakceptować większe ilości kapitału i nadal generować spójne zyski. Stos technologii handlowej skaluje się, jeśli może znieść większe obroty i zwiększone opóźnienie, bez wąskich gardeł. Chociaż systemy muszą być zaprojektowane do skalowania, często trudno jest przewidzieć z wyprzedzeniem, gdzie wystąpi wąskie gardło. Rygorystyczne rejestrowanie, testowanie, profilowanie i monitorowanie znacznie ułatwią skalowanie systemu. Same języki są często opisywane jako nie skalowalne. Jest to zwykle wynikiem dezinformacji, a nie twardego faktu. Jest to całkowity stos technologii, który należy sprawdzić pod kątem 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 nigdy nie jest lepszy od drugiego pod każdym względem. Jednym ze sposobów zarządzania skalą jest rozdzielanie obaw, jak stwierdzono powyżej. W celu dalszego wprowadzenia możliwości obsługi skoków w systemie (tj. Nagłej zmienności, która wyzwala szereg transakcji), przydatne jest utworzenie architektury kolejkowania wiadomości. Oznacza to po prostu umieszczenie systemu kolejki komunikatów między komponentami, aby zamówienia były układane w stos, jeśli dany komponent nie jest w stanie przetworzyć wielu żądań. Zamiast zgubienia próśb są one przechowywane w stosie, dopóki wiadomość nie zostanie przetworzona. Jest to szczególnie przydatne przy wysyłaniu transakcji do aparatu wykonawczego. Jeśli silnik cierpi z powodu dużego opóźnienia, wówczas tworzy kopie zapasowe transakcji. Kolejka między generatorem sygnałów handlowych a API wykonawczym złagodzi tę kwestię kosztem potencjalnego poślizgu transakcji. Szanowanym brokerem kolejki komunikatów o otwartym kodzie źródłowym jest RabbitMQ. Sprzęt i systemy operacyjne Sprzęt, na którym działa twoja strategia, może mieć znaczący wpływ na rentowność twojego algorytmu. Nie jest to kwestia ograniczona również do handlowców o wysokiej częstotliwości. Zły wybór sprzętu i systemu operacyjnego może doprowadzić do awarii komputera lub ponownego uruchomienia komputera w najbardziej nieodpowiednim momencie. Dlatego konieczne jest rozważenie, gdzie znajduje się aplikacja. Wybór odbywa się zazwyczaj między komputerem osobistym, serwerem zdalnym, dostawcą usług w chmurze lub serwerem wymiany. Komputery stacjonarne są łatwe do zainstalowania i administrowania, szczególnie w nowszych przyjaznych dla użytkownika systemach operacyjnych, takich jak Windows 78, Mac OSX i Ubuntu. Systemy komputerowe mają jednak pewne istotne wady. Przede wszystkim jest to, że wersje systemów operacyjnych przeznaczonych na komputery stacjonarne prawdopodobnie wymagają ponownego uruchomienia (a często w najgorszym momencie). Wykorzystują również więcej zasobów obliczeniowych dzięki wymaganiom graficznego interfejsu użytkownika (GUI). Korzystanie ze sprzętu w środowisku domowym (lub lokalnym) może prowadzić do problemów z połączeniem internetowym i zasilaniem. Główną zaletą systemu stacjonarnego jest to, że znaczną moc obliczeniową można kupić za ułamek kosztów zdalnego serwera dedykowanego (lub systemu opartego na chmurze) o porównywalnej prędkości. Serwer dedykowany lub oparty na chmurze, często droższy niż opcja desktopowa, umożliwia stworzenie bardziej znaczącej infrastruktury redundantnej, takiej jak automatyczne tworzenie kopii zapasowych danych, możliwość prostszego zapewnienia nieprzerwanego czasu pracy i zdalnego monitorowania. Są trudniejsze do administrowania, ponieważ wymagają możliwości zdalnego logowania do systemu operacyjnego. W systemie Windows jest to zazwyczaj za pośrednictwem graficznego protokołu pulpitu zdalnego (RDP). W systemach opartych na Uniksie używana jest linia poleceń Secure SHell (SSH). Infrastruktura serwerowa oparta na systemie Unix jest prawie zawsze oparta na liniach komend, co powoduje, że narzędzia programowania oparte na GUI (takie jak MatLab lub Excel) stają się bezużyteczne. Serwer kolokacyjny, ponieważ wyrażenie to używane jest na rynkach kapitałowych, jest po prostu serwerem dedykowanym, który znajduje się w obrębie giełdy w celu ograniczenia opóźnień algorytmu handlowego. Jest to absolutnie konieczne w przypadku niektórych strategii handlu o wysokiej częstotliwości, które polegają na małym opóźnieniu w celu wygenerowania alfa. Ostatnim aspektem wyboru sprzętu i wyboru języka programowania jest niezależność od platformy. Czy istnieje potrzeba uruchamiania kodu w wielu różnych systemach operacyjnych? Czy kod został zaprojektowany do pracy w określonym typie architektury procesora, takim jak Intel x86x64, czy będzie można go wykonać na procesorach RISC, takich jak te produkowane przez ARM Kwestie te będą w dużym stopniu zależeć od częstotliwości i rodzaju wdrażanej strategii. Odporność i testowanie Jednym z najlepszych sposobów na utratę dużej ilości pieniędzy na handel algorytmiczny jest stworzenie systemu bez odporności. Odnosi się to do trwałości systemu, gdy podlega rzadkim zdarzeniom, takim jak bankructwo maklerskie, nagła nadmierna zmienność, regionalny czas przestoju dostawcy serwera chmury lub przypadkowe usunięcie całej handlowej bazy danych. Lata zysków można wyeliminować w ciągu kilku sekund przy źle zaprojektowanej architekturze. Konieczne jest rozważenie takich problemów, jak debugowanie, testowanie, rejestrowanie, tworzenie kopii zapasowych, wysoka dostępność i monitorowanie jako podstawowych komponentów systemu. Jest prawdopodobne, że w jakiejkolwiek rozsądnie skomplikowanej niestandardowej aplikacji handlu ilościowego co najmniej 50 czasu opracowywania zostanie wydane na debugowanie, testowanie i konserwację. Prawie wszystkie języki programowania są dostarczane razem z powiązanym debuggerem lub posiadają dobrze szanowane rozwiązania alternatywne. Zasadniczo debugger pozwala na wykonanie programu z wstawieniem arbitralnych punktów przerwania w ścieżce kodu, co tymczasowo zatrzymuje wykonywanie w celu zbadania stanu systemu. Główną zaletą debugowania jest to, że możliwe jest zbadanie zachowania kodu przed znanym punktem krytycznym. Debugowanie jest istotnym elementem zestawu narzędzi do analizy błędów programowania. Jednak są one szerzej stosowane w językach kompilowanych, takich jak C lub Java, ponieważ języki interpretowane, takie jak Python, są często łatwiejsze do debugowania ze względu na mniejszą liczbę instrukcji LOC i mniej szczegółowych. Pomimo tej tendencji Python nie jest dostarczany z pdb. który jest wyrafinowanym narzędziem do debugowania. Microsoft Visual C IDE posiada rozbudowane narzędzia do debugowania GUI, podczas gdy dla programisty Linuksa C istnieje debugger gdb. Testowanie w rozwoju oprogramowania odnosi się do procesu stosowania znanych parametrów i wyników do określonych funkcji, metod i obiektów w ramach kodu, w celu symulacji zachowania i oceny wielu ścieżek kodu, pomagając w zapewnieniu, że system zachowuje się tak, jak powinien. Nowszy model nosi nazwę Test Driven Development (TDD), gdzie kod testowy jest opracowywany na podstawie określonego interfejsu bez implementacji. Przed zakończeniem rzeczywistej bazy kodów wszystkie testy zakończą się niepowodzeniem. Gdy kod zostanie zapisany w celu wypełnienia pustych pól, testy ostatecznie zakończą się, kiedy rozwój powinien zakończyć się. TDD wymaga obszernego projektu specyfikacji z góry, a także zdrowego poziomu dyscypliny w celu pomyślnego przeprowadzenia. W C, Boost zapewnia ramy testowania jednostkowego. W Javie biblioteka JUnit istnieje, aby spełnić ten sam cel. Python ma również moduł unittest jako część standardowej biblioteki. Wiele innych języków posiada schematy testów jednostkowych i często istnieje wiele opcji. W środowisku produkcyjnym wyrafinowane logowanie jest absolutnie niezbędne. Rejestrowanie odnosi się do procesu wysyłania komunikatów o różnych stopniach ważności, w odniesieniu do zachowania przy wykonywaniu systemu do płaskiego pliku lub bazy danych. Dzienniki są pierwszą linią ataku podczas polowania na nieoczekiwane zachowanie środowiska wykonawczego programu. Niestety, niedociągnięcia w systemie rejestrowania są odkrywane dopiero po tym, jak w przypadku omówionych poniżej kopii zapasowych system rejestracji powinien być należycie rozważony PRZED zaprojektowaniem systemu. Zarówno system Microsoft Windows, jak i Linux posiadają rozbudowane możliwości rejestrowania systemu, a języki programowania zwykle są dostarczane ze standardowymi bibliotekami rejestrowania, które obejmują większość przypadków użycia. Często rozsądne jest scentralizowanie informacji rejestracyjnych w celu ich analizy w późniejszym terminie, ponieważ często może to prowadzić do pomysłów dotyczących poprawy wydajności lub zmniejszenia błędu, co prawie na pewno będzie miało pozytywny wpływ na zwroty z inwestycji. Podczas logowania systemu dostarczy informacje o tym, co zaszło w przeszłości, monitorowanie aplikacji zapewni wgląd w to, co dzieje się właśnie teraz. Wszystkie aspekty systemu powinny być brane pod uwagę do monitorowania. System level metrics such as disk usage, available memory, network bandwidth and CPU usage provide basic load information. Trading metrics such as abnormal pricesvolume, sudden rapid drawdowns and account exposure for different sectorsmarkets 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 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 outweigh the ongoing maintenance cost of such systems. I wont 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 doesnt 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 performance hit. Libraries for dynamic languages, such as NumPySciPy 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. Oba podejścia mają swoje wady i zalety. 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 licensingmaintenance 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 pluginslibraries (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, MySQLPostgreSQL, 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 dependencyversioning 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, HTTP, operating system interaction, GUIs, regular expressions (regex), iteration and basic algorithms. C is famed for its Standard Template Library (STL) which contains a wealth of high performance data structures and algorithms for free. Python is known for being able to communicate with nearly any other type of systemprotocol (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 C11 spec, including native support for lambda expressions and concurrency. Python has the high performance NumPySciPyPandas data analysis library combination, which has gained widespread acceptance for algorithmic trading research. Further, high-performance plugins exist for access to the main relational databases, such as MySQL (MySQLC), JDBC (JavaMatLab), MySQLdb (MySQLPython) and psychopg2 (PostgreSQLPython). 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 . Conclusion 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 TradingIt Doesnt Seem Possible. Ale jest z naszymi algorytmicznymi strategiami handlowymi. Nie wydaje się to możliwe. Jeden algorytmiczny system transakcyjny z tak dużą identyfikacją trendów, analizą cyklu, przepływami po stronie kupna, wieloma strategiami handlowymi, dynamicznym wejściem, ceną docelową i stopową oraz ultraszybką technologią sygnału. Ale to jest. W rzeczywistości AlgoTrades platforma systemu handlu algorytmicznego jest jedyna w swoim rodzaju. Koniec z szukaniem gorących zapasów, sektorów, towarów, indeksów lub opinii na temat rynku czytelnictwa. Algotrades wykonuje wszystkie wyszukiwania, terminy i transakcje za Ciebie, korzystając z naszego algorytmicznego systemu transakcyjnego. Sprawdzone strategie AlgoTrades można śledzić ręcznie poprzez otrzymywanie powiadomień e-mailem i SMS-em lub może to być 100-godzinny handel, a Ty możesz wyłączyć automatyczny handel on-off w dowolnym momencie, dzięki czemu zawsze będziesz mieć kontrolę nad swoim przeznaczeniem. Zautomatyzowane systemy transakcyjne dla doświadczonych inwestorów Copyright 2017 - ALGOTRADY - Zautomatyzowany algorytmiczny system handlu Reguła CFTC 4.41 - HIPOTETYCZNE LUB SYMULOWANE WYNIKI OSIĄGNIĘTE POSIADAJĄ PEWNE OGRANICZENIA. WYOBRAŹ SIĘ DO RZECZYWISTEGO REJESTRACJI WYDAJNOŚCI, SYMULACJA WYNIKÓW NIE REPREZENTUJE RZECZYWISTEGO TRADINGU. RÓWNIEŻ OD OKRESU, W JAKI SPOSÓB TRADY NIE ZOSTAŁY ZOSTAŁY WYKONANE, REZULTATY MOGĄ MIEĆ PONIŻSZE KOMPENSOWANIE W ZAKRESIE WPŁYWU, JEŚLI JAKIEKOLWIEK, NA NIEKTÓRE CZYNNIKI RYNKOWE, TAKIE JAK BRAK PŁYNNOŚCI. SYMULACJA PROGRAMÓW HANDLOWYCH W OGÓLNYM ZAKRESIE PODLEGA WPŁYWIE NA FAKT, KTÓRY ZAPROJEKTOWANO Z KORZYŚCIĄ HINDSIGHT. NIE ZAPEWNIA ŻADNEGO OŚWIADCZENIA, ŻE WSZELKIE RACHUNKI BĘDĄ PRAWDOPODOBNIE OSIĄGNĄĆ ZYSK LUB STRAT PODOBNE PODCZAS TYCH OSÓB. Nie składa się żadnych oświadczeń ani nie sugeruje, że korzystanie z algorytmicznego systemu handlu przyniesie dochód lub zagwarantuje zysk. Istnieje znaczne ryzyko strat związanych z obrotem kontraktami terminowymi i obrotem funduszami giełdowymi. Obrót kontraktami futures i handel giełdowymi funduszami wiąże się ze znacznym ryzykiem strat i nie jest odpowiedni dla wszystkich. Wyniki te są oparte na symulowanych lub hipotetycznych wynikach wydajności, które mają pewne nieodłączne ograniczenia. W przeciwieństwie do wyników pokazanych w rzeczywistych wynikach, wyniki te nie odzwierciedlają faktycznego obrotu. Ponadto, ponieważ transakcje te nie zostały faktycznie zrealizowane, wyniki te mogą być niepełne lub zbytnio skompensowane pod kątem wpływu, jeśli w ogóle, niektórych czynników rynkowych, takich jak brak płynności. Symulowane lub hipotetyczne programy handlowe w ogóle są również uzależnione od tego, czy zostały zaprojektowane z perspektywy czasu. Nie składa się oświadczeń, że jakiekolwiek konto będzie lub może osiągnąć zyski lub straty podobne do tych, które są wykazywane. Informacje na tej stronie zostały przygotowane bez względu na konkretne cele inwestycyjne inwestorów, ich sytuację finansową i potrzeby, a także dalsze doradzanie subskrybentom, aby nie podejmowali żadnych działań, nie uzyskując konkretnej porady od swoich doradców finansowych, aby nie polegać na informacjach ze strony internetowej jako podstawowej zasadzie do podejmowania decyzji inwestycyjnych i do rozważenia własnego profilu ryzyka, tolerancji ryzyka i własnych strat stop. - powered by Enfold WordPress Theme

No comments:

Post a Comment