Strategie ilościowe - są dla Ciebie Ilościowe strategie inwestycyjne przekształciły się w bardzo skomplikowane narzędzia wraz z pojawieniem się nowoczesnych komputerów, ale strategie sięgają ponad 70 lat. Zazwyczaj są prowadzone przez wysoce wykształconych zespołów i wykorzystują własne modele w celu zwiększenia ich zdolności do pokonania rynku. Są nawet programy off-the-shelf, które są plug-and-play dla tych, którzy szukają prostoty. Modele Quant zawsze działają dobrze, gdy są testowane, ale ich rzeczywiste aplikacje i szybkość powodzenia są dyskusyjne. Choć wydają się dobrze działać na rynkach byków. kiedy rynki się pogrążają, strategie kwantowe są narażone na takie same ryzyko, jak inne strategie. Historia Jednym z ojców założycieli teorii ilościowej stosowanej do finansów była Robert Merton. Można tylko sobie wyobrazić, jak trudne i czasochłonne było to, że proces był używany przed komputerami. Inne teorie w dziedzinie finansów ewaluowały również niektóre z pierwszych badań ilościowych, w tym podstawy dywersyfikacji portfeli opartej na nowoczesnej teorii portfeli. Wykorzystanie zarówno ilościowego finansowania, jak i rachunku przyczyniło się do wielu innych popularnych narzędzi, w tym jednej z najbardziej znanych formuły wyceny opcji Black-Scholes, która nie tylko pomaga inwestorom w ustalaniu cen i opracowuje strategie, ale pomaga zachować rynki w kontroli płynności. Stosowane bezpośrednio do zarządzania portfelem. cel jest jak każda inna strategia inwestycyjna. dodawanie wartości, alfa lub nadwyżki. Quants, jak wywołują deweloperzy, komponują złożone modele matematyczne w celu wykrycia możliwości inwestycyjnych. Istnieje tak wiele modeli, jak tam quants, którzy je rozwijają, a wszystkie twierdzą, że są najlepsze. Jedną z najatrakcyjniejszych inwestycji w strategie inwestycyjne jest to, że model, a ostatecznie komputer, czyni rzeczywistą decyzję buysell, a nie człowieka. Ma to tendencję do usuwania wszelkiej emocjonalnej reakcji, jaką może doświadczyć osoba podczas zakupu lub sprzedaży inwestycji. Strategie Quant są teraz akceptowane w społeczności inwestycyjnej i prowadzone przez fundusze inwestycyjne, fundusze hedgingowe i inwestorów instytucjonalnych. Zazwyczaj używają nazwy generatorów alfa. lub alfa. Za zasłoną Podobnie jak w Czarodzieju z Oz, ktoś za zasłoną prowadzi proces. Podobnie jak w przypadku każdego modelu, jest tak dobry, jak człowiek, który rozwija program. Choć nie ma konkretnego wymogu, aby stać się kwantem, większość firm prowadzących modele kwantowe łączy umiejętności analityków inwestycyjnych, statystów i programistów, którzy kodują proces na komputery. Ze względu na skomplikowany charakter modeli matematycznych i statystycznych jest powszechny, aby uzyskać poświadczenia, takie jak stopnie naukowe i doktoraty z dziedziny finansów, ekonomii, matematyki i inżynierii. Historycznie, członkowie zespołu pracowali w biurach. ale jako modele kwantowe stało się bardziej powszechne, biuro back office przenosi się do front office. Korzyści z Quant Strategies Chociaż ogólna liczba sukcesów jest dyskusyjna, to niektóre strategie pracy kwantowej są takie, że opierają się na dyscyplinie. Jeśli model jest słuszny, dyscyplina utrzymuje strategię pracy z komputerami szybkobieżnymi w celu wykorzystania nieefektywności na rynkach na podstawie danych ilościowych. Same modele mogą opierać się na zaledwie kilku stosunkach, takich jak PE. długów do kapitału własnego i wzrostu zysków lub wykorzystywać tysiące wejść pracujących jednocześnie w tym samym czasie. Skuteczne strategie mogą podążać za trendami we wczesnych etapach, ponieważ komputery stale uruchamiają scenariusze, aby określić nieefektywność przed innymi. Modele są w stanie analizować bardzo dużą grupę inwestycji równocześnie, gdzie tradycyjny analityk może oglądać tylko kilka na raz. Proces przesiewowy może ocenić wszechświat według poziomów klasy, np. 1-5 lub A-F w zależności od modelu. Sprawia to, że rzeczywisty proces handlowy jest bardzo prosty, inwestując w wysoko oceniane inwestycje i sprzedając nisko oceniane. Modele Quanta otwierają również różne strategie, takie jak długie, krótkie i długie ognie. Skuteczne fundusze kwantowe dbają o kontrolę ryzyka ze względu na charakter swoich modeli. Większość strategii zaczyna się od wszechświata lub benchmarku i wykorzystuje wagi sektorowe i branżowe w swoich modelach. Pozwala to funduszom kontrolować dywersyfikację w pewnym stopniu bez uszczerbku dla samego modelu. Fundusze kwotowe zwykle działają w oparciu o niższe koszty, ponieważ nie potrzebują tak wielu tradycyjnych analityków i zarządzających portfelami, aby je uruchamiać. Wady Strategii Quant Istnieją powody, dla których tak wielu inwestorów nie w pełni uwzględnia koncepcję wynajmu czarnej skrzynki prowadzenia swoich inwestycji. Dla wszystkich pomyślnych funduszy kwantowych tam, jak wielu wydaje się nieudane. Niestety, dla reputacji quants, gdy się nie udają, nie mają wielkiego czasu. Długoterminowe zarządzanie kapitałem było jednym z najbardziej znanych funduszy hedgingowych, gdyż prowadzone były przez niektórych najbardziej cenionych liderów akademickich oraz dwóch ekonomistów z Myronu S. Scholesa i Roberta C. Mertona. W latach dziewięćdziesiątych ich zespół generował ponadprzeciętne zyski i przyciągnął kapitał od wszystkich typów inwestorów. Byli znani z nie tylko wykorzystania nieefektywności, ale także łatwego dostępu do kapitału, aby stworzyć olbrzymie zakłady dźwigniowe na kierunkach rynkowych. Zdyscyplinowany charakter ich strategii faktycznie stworzył słabość, która doprowadziła do ich upadku. Długoterminowe zarządzanie kapitałem zostało zlikwidowane i rozwiązane na początku 2000 roku. Jej modele nie uwzględniały możliwości, że rząd rosyjski mógłby spłacić część swojego długu. To jedno zdarzenie wywołało zdarzenia i reakcję łańcuchową powiększoną przez spustoszenie spowodowane dźwignią. LTCM był tak bardzo zaangażowany w inne operacje inwestycyjne, że jego upadek wpłynął na rynki światowe, powodując dramatyczne wydarzenia. W dłuższej perspektywie Federal Reserve wkroczył do pomocy, a inne banki i fundusze inwestycyjne wspierały LTCM w celu uniknięcia dalszych szkód. Jest to jeden z powodów, dla których kwota może się nie powieść, ponieważ są one oparte na wydarzeniach historycznych, które mogą nie obejmować przyszłych wydarzeń. Chociaż silny zespół kwantowy będzie stale dodawać nowe aspekty modeli do przewidywania przyszłych wydarzeń, niemożliwych do przewidzenia przyszłości za każdym razem. Fundusze kwantowe mogą również zostać przytłoczone, gdy gospodarka i rynki doświadczają większego niż przeciętna zmienności. Sygnały kupna i sprzedaży mogą się tak szybko, że wysokie obroty mogą generować wysokie prowizje i zdarzenia podatkowe. Fundusze Quant mogą również stanowić zagrożenie, gdy są wprowadzane do obrotu jako niedźwiedzie lub są oparte na krótkich strategiach. Prognozowanie spadków. stosowanie instrumentów pochodnych i łączenie dźwigni finansowej może być niebezpieczne. Jeden zły zwrot może prowadzić do implozji, które często składają się na wiadomości. Dolna linia Ilościowe strategie inwestycyjne ewoluowały z czarnych pól back office do głównych narzędzi inwestycyjnych. Są one przeznaczone do wykorzystania najlepszych umysłów w biznesie i najszybszych komputerach, aby zarówno wykorzystać nieefektywność jak i wykorzystać dźwignię do zakładów na rynku. Mogą być bardzo skuteczne, jeśli modele zawierają wszystkie właściwe dane wejściowe i są wystarczająco elastyczne, aby przewidzieć nieprawidłowe zdarzenia rynkowe. Z drugiej strony, a fundusze kwantowe są rygorystycznie sprawdzane do czasu ich pracy, ich słabość polega na tym, że polegają na danych historycznych na ich sukces. Chociaż inwestycje typu kwantowego mają swoje miejsce na rynku, ważne jest, aby mieć świadomość jego niedociągnięć i ryzyka. Aby być spójnym ze strategiami dywersyfikacji. dobrym pomysłem jest traktowanie strategii kwantowych jako stylu inwestowania i łączenie jej z tradycyjnymi strategiami, aby osiągnąć odpowiednią dywersyfikację. Rodzaj podatku od zysków kapitałowych poniesionych przez osoby prywatne i korporacje. Zyski kapitałowe to zyski inwestora. Zamówienie zakupu zabezpieczenia z lub poniżej określonej ceny. Zlecenie z limitem kupna umożliwia określenie podmiotów gospodarczych i inwestorów. Reguła Internal Revenue Service (IRS), która umożliwia wycofanie bez kary z konta IRA. Reguła wymaga tego. Pierwsza sprzedaż akcji przez prywatną firmę do publicznej wiadomości. IPO są często wydawane przez mniejsze, młodsze firmy szukające. Wskaźnik zadłużenia jest wskaźnikiem zadłużenia stosowanym do pomiaru dźwigni finansowej firmy lub wskaźnika zadłużenia stosowanego do pomiaru jednostki. Typ struktury wynagrodzeń, z której korzystają zwykle zarządzający funduszami hedgingowymi, w której część rekompensaty jest oparta na wynikach. Dziennik handlu Forex 5 - Handel wieloma parami walut Wczoraj opublikowałem kilka ważnych zmian w oprogramowaniu QSForex. Zmiany te znacznie zwiększyły przydatność systemu do punktu, w którym jest prawie gotowy na wielodniowe testowanie danych historycznych przez cały szereg par walutowych. Następujące zmiany zostały opublikowane w serwisie Github: Dalsze modyfikacje obiektów Position i Portfolio w celu umożliwienia wymiany par walutowych oraz walut, które nie są denominowane w walucie konta. W związku z tym konto z dezominacją w GBP może teraz wynosić na przykład EURUSD. Kompletny przegląd tego, jak Pozycja i portfel obliczają otwarcia, zamknięcia, uzupełnienia i usunięcia jednostek. Obiekt Position wykonuje teraz podnoszenie ciężarów pozostawiając względnie chudy przedmiot Portfolio. Dodanie pierwszej nietrywialnej strategii, a mianowicie dobrze znanej strategii Crossover średniej ruchomej z parą prostych średnich ruchomych (SMA). Modyfikacja na backtest. py, aby stała się jednowątkowa i deterministyczna. Pomimo mojego optymizmu, że podejście wielowątkowe nie byłoby zbyt szkodliwe dla dokładności symulacji, trudno było uzyskać satysfakcjonujące wyniki testów wstecznych za pomocą podejścia wielowątkowego. Wprowadzono bardzo prosty skrypt wyjściowy Matplotlib do przeglądania krzywej kapitałowej portfela. Generowanie krzywej dochodowości jest na wczesnym etapie i wymaga dużo pracy. Jak wspomniałem w poprzednim wpisie. dla tych, którzy są obcy QSForex i po raz pierwszy przychodzą do tego pamiętnika forex, zdecydowanie polecam przeczytanie następujących wpisów do dziennika, aby przyspieszyć pracę z oprogramowaniem: jak również na stronie Github dla QSForex : Obsługa wielu walut Jedną z funkcji, którą ciągle dyskutuję w tych pamiętnikach jest możliwość obsługi wielu par walutowych. Na tym etapie zmodyfikowałem teraz oprogramowanie, aby umożliwić różne nazwy kont, ponieważ wcześniej GBP był walutą ustaloną na stałe. Możliwe jest również handel w innych parach walutowych, z wyjątkiem tych, które składają się z bazy lub cytatu w jenach japońskich (JPY). Ten ostatni jest spowodowany tym, jak wielkości kleszczy są zwielokrotnione w walutach JPY. W tym celu zmodyfikowano sposób obliczania zysku w przypadku usunięcia jednostek lub zamknięcia pozycji. Oto aktualny fragment służący do obliczania pułapek, w pliku position. py: jeśli zamkniemy pozycję w celu osiągnięcia zysku lub straty, musimy użyć poniższego fragmentu do zamknięcia. także w pliku position. py: po pierwsze dostajemy ofertę i pytamy o ceny zarówno par walutowych, jak i pary walutowej. Na przykład na koncie denominowanym w GBP, gdzie handlujemy EURUSD, musimy uzyskać ceny na USDGBP, ponieważ EUR to waluta podstawowa, a USD to kwota. Na tym etapie sprawdzamy, czy sama pozycja jest długą lub krótką pozycją, a następnie obliczyć odpowiednią cenę zdejmowania i wycenę ceny ofertowej, które są podane odpowiednio przez removeprice i qhclose. Następnie aktualizujemy bieżące i średnie ceny w danej pozycji i na koniec obliczamy PampL, mnożąc pipsy, cenę usunięcia quotehome, a następnie liczbę jednostek zamykających. Całkowicie wyeliminowaliśmy potrzebę omawiania ekspozycji, która była zmienną redundantną. Ta formuła następnie prawidłowo zapewnia PampL w stosunku do każdej transakcji w parze walutowej (spoza niej). Rewizja obsługi pozycji i portfela Poza możliwością handlu kilkoma parami walutowymi udowodniłem również, jak pozycja i portfel dzielą się obowiązkiem otwierania i zamykania pozycji, a także dodawania i odejmowania jednostek. W szczególności Ive przeniósł wiele kodu obsługi pozycji, który był w portfolio. py w position. py. Jest to bardziej naturalne, ponieważ stanowisko powinno dbać o siebie i nie delegować go do portfela W szczególności addunits. usunięto i udoskonalono metody usuwania i zamykania: w ostatnich dwóch można zobaczyć, w jaki sposób wprowadza się nową formułę obliczania zysku. Odpowiednio zmniejszono znacznie funkcjonalność klasy Portfolio. W szczególności metody addnewposition. addpositionunits. usunięcie pakietów i zamknięcie zostały zmodyfikowane w celu uwzględnienia faktu, że praca obliczeniowa odbywa się w obiekcie Position: w istocie wszyscy (oprócz addyncji) po prostu sprawdzają, czy istnieje pozycja tej pary walutowej, a następnie wywołuje odpowiednią metodę Position , biorąc pod uwagę zysk w razie potrzeby. Przeniesienie średniej strategii krzyżowej Przedyskutowaliśmy z Moving Average Crossover na QuantStart. w kontekście handlu akcjami. Jest to bardzo użyteczna strategia wskaźnikowa, ponieważ łatwe do powtórzenia obliczeń ręcznie (przynajmniej w niższych częstotliwościach) w celu sprawdzenia, czy backtester zachowuje się tak, jak powinien. Podstawową ideą strategii jest: dwa oddzielne, proste, średnie ruchome filtry są tworzone, z różnymi okresami lookboksa, określonej serii czasowej. Sygnały do zakupu zasobu występują, gdy krótsza średnia krocząca z wyprzedzeniem przekracza dłuższą średnią zrewidowania. Jeśli dłuższa średnia przekroczy później krótszą średnią, składnik aktywów zostaje odsprzedany. Strategia działa dobrze, gdy szeregi czasowe wchodzą w okres silnego trendu, a następnie powoli odwracają trend. Implementacja jest prosta. Po pierwsze, zapewniamy metodę kalcrollingsma, która pozwala nam efektywniej wykorzystać wcześniejsze obliczenia SMA w czasie w celu wygenerowania nowego, bez konieczności ponownego obliczenia SMA na każdym kroku. Po drugie generujemy sygnały w dwóch przypadkach. W pierwszym przypadku wygenerujemy sygnał, jeśli krótki SMA przekracza długi SMA i nie długi parę walutową. W drugim przypadku wygenerujemy sygnał, jeśli długa SMA przekracza krótki SMA i jesteśmy już dłużej. Ustawiłem domyślne okno na 500 kresek na krótki SMA i 2000 kresek na długi SMA. Oczywiście w ustawieniach produkcyjnych te parametry zostały zoptymalizowane, ale dobrze sprawdzają się w naszych testach. Single-Threaded Backtester Inną ważną zmianą było zmodyfikowanie składnika testów wstecznych jako jednowątkowych, a nie wielowątkowych. Wprowadziłem tę zmianę, ponieważ bardzo trudno było zsynchronizować wątki do wykonania w sposób, który wystąpiłby w środowisku na żywo. To zasadniczo oznaczało, że ceny wejścia i wyjścia były bardzo nierealne, często pojawiające się (wirtualne) godziny po faktycznym kleszczu został odebrany. W związku z tym włączyłem streaming obiektów TickEvent do pętli backtesting, jak widać w poniższym fragmencie backtest. py: Zauważ liner ticker. streamnexttick (). Jest to wywoływane przed sondowaniem kolejki zdarzeń i jako takie zawsze gwarantuje, że nowe zdarzenie dotyku pojawi się przed ponownym odpytaniem kolejki. Oznacza to w szczególności, że sygnał jest uruchamiany w miarę pojawiania się nowych danych rynkowych, nawet jeśli istnieje pewne opóźnienie w procesie zamawiania ze względu na poślizg. Ive również ustawić maxiters wartość, która kontroluje, jak długo pętli backtesting nadal. W praktyce będzie to musiało być dość duże, gdy mamy do czynienia z wieloma walutami przez wiele dni, ale ustawiłem go na wartość domyślną, która pozwala na dane z jednej pary walutowej. Metoda streamnexttick klasy obsługi cen jest podobna do streamtoqueue, z tą różnicą, że wywołuje metodę iterator next () ręcznie, zamiast przeprowadzać kreskowanie w pętli for: Zauważ, że zatrzymuje się po otrzymaniu wyjątku StopIteration. Pozwala to na wznowienie kodu, a nie awarię z wyjątkiem. Matplotlib Output Ive stworzył również bardzo prosty skrypt wyjściowy Matplotlib, aby wyświetlić krzywą akcji. output. py aktualnie znajduje się w katalogu testów kontrolnych QSForex i jest podany poniżej: Zauważ, że istnieje nowa zmienna settings. py o nazwie OUTPUTRESULTSDIR. które należy ustawić w ustawieniach. Mam to wskazując na katalog tymczasowy gdzie indziej w moim systemie plików, ponieważ nie chcę przypadkowo dodać wyników testów backtest do bazy kodu Krzywa kapitału działa poprzez dodanie wartości sald do listy słowników, przy czym jeden słownik odpowiada znak czasu. Po zakończeniu testu wstecznego lista słowników jest przekształcana w Pandas DataFrame, a metoda tocsv służy do wyprowadzania equity. csv. Ten skrypt wyjściowy po prostu czyta w pliku i wylicza kolumnę sald następnej ramki danych. Możesz zobaczyć fragment kodu dla metod wyceny przyrostu i wyjściowego klasy Portfolio poniżej: Za każdym razem nazywa się executesignal, poprzednia metoda jest nazywana i dołącza wartość timestampbalance do elementu kapitału własnego. Pod koniec wyników testów wyników testów zwrotnych nazywa się po prostu konwertuje listę słowników do ramki danych, a następnie wysyła do określonego katalogu OUTPUTRESULTSDIR. Niestety, nie jest to szczególnie odpowiedni sposób tworzenia krzywej kapitału, ponieważ występuje tylko wtedy, gdy generowany jest sygnał. Oznacza to, że nie uwzględnia niezrealizowanych PampL. Podczas gdy w ten sposób dochodzi do rzeczywistego handlu (nie dokonałeś żadnych pieniędzy, dopóki nie zamkniesz pozycji), oznacza to, że krzywa equity pozostanie całkowicie płaska pomiędzy aktualizacjami salda. Co gorsza, Matplotlib będzie domyślnie interpolował liniowo między tymi punktami, zapewniając w ten sposób fałszywe wrażenie niezrealizowanego PampL. Rozwiązaniem tego problemu jest utworzenie niezrealizowanego modułu śledzącego PampL dla klasy Pozycja, który poprawnie aktualizuje się przy każdym tiku. Jest to trochę bardziej kosztowne obliczeniowo, ale pozwala na bardziej użyteczną krzywą kapitałową. Ta funkcja jest planowana na późniejszą datę Następne kroki Następnym ważnym zadaniem QSForex jest umożliwienie przeprowadzania wielu testów. Obecnie obiekt HistoricCSVPriceHandler ładuje tylko dane o liczbie dni DukasCopy dla pojedynczych par walutowych. Aby umożliwić wielokrotne testowanie, konieczne będzie ładowanie i przesyłanie każdego dnia w sposób sekwencyjny, aby uniknąć napełniania pamięci RAM z całą historią danych dotyczących kleszcza. Wymaga to modyfikacji sposobu działania metody streamnexttick. Gdy to się zakończy, umożliwi długoterminową strategię weryfikacji historycznej w wielu parach. Innym zadaniem jest poprawa wyników krzywej kapitałowej. Aby obliczyć dowolne typowe wskaźniki wyników (takie jak Sharpe Ratio), będziemy musieli obliczyć procentowe zwroty w danym okresie czasu. Wymaga to jednak odroczenia danych kleszczowych do prętów w celu obliczenia zwrotu za dany okres. Takie binningowanie musi nastąpić na częstotliwości próbkowania podobnej do częstotliwości handlu lub Sharpe Ratio nie będzie odzwierciedlać prawdziwego ryzyka strategii. Ta binning nie jest trywialnym ćwiczeniem, ponieważ istnieje wiele założeń, które idą do generowania ceny za każdy bin. Po ukończeniu tych dwóch zadań i uzyskaniu wystarczających danych będziemy mogli testować szeroką gamę strategii forex opartych na danych z kleszczy i generować krzywe dotyczące akcji bez większości kosztów transakcji. Ponadto niezwykle proste będzie przetestowanie tych strategii na praktycznym koncie handlu papierami dostarczonym przez OANDA. Powinno to pozwolić na podejmowanie znacznie lepszych decyzji o tym, czy strategia ma być uruchamiana w porównaniu z bardziej badawczym systemem analizy historycznej. Właśnie zaczynałem od ilościowego handlu Dziennik handlu Forex 3 - Otwarte zaopatrzenie w system handlu Forex W dzisiejszym wpisie do dziennika Forex Chcę omówić długoterminowy plan systemu handlu forex. Ponadto chciałbym nakreślić, w jaki sposób użyłem języka Pythons Decimal typu danych, aby obliczenia były bardziej dokładne. Do tej pory eksperymentowaliśmy z interfejsem API OANDA Rest w celu sprawdzenia, w jaki sposób jest porównywany z interfejsem API dostarczanym przez Interactive Brokers. Zauważyliśmy także, jak dodać podstawowy element replikacji portfela jako pierwszy krok w kierunku odpowiedniego, opartego na zdarzeniach, systemu weryfikacji historycznej. Miałem także kilka pomocnych komentarzy na temat obu poprzednich artykułów (1 i 2), co sugeruje, że wielu z was chce zmienić i rozszerzyć kod samodzielnie. Otwarte zaopatrzenie w system handlu Forex Z powodów wymienionych powyżej postanowiłem otworzyć system handlu forex. Co to oznacza? Oznacza to, że cały obecny i przyszły kod będzie dostępny bezpłatnie, na zasadach licencji MIT o otwartym kodzie źródłowym, w witrynie kontroli wersji Github pod następującym adresem URL: githubmhallsmooreqsforex. Dla tych z was, którzy wcześniej używali Gita i Githuba, będziecie mogli sklonować repo i zacząć modyfikować je dla własnych celów. Automatyczny system handlu Forex QuantStart jest teraz open-source na podstawie liberalnej licencji MIT. Najnowszy kod można znaleźć na Github pod repozytorium qsforex na githubmhallsmooreqsforex. Dla tych z Was, którzy są nowi w kontroli wersji źródłowej, prawdopodobnie będziecie chcieli przeczytać, jak działa Git (i ogólnie kontrola wersji) z fantastycznym darmowym ebookiem Pro Git. Warto poświęcić trochę czasu na naukę o kontroli źródła, ponieważ zaoszczędzi to ogromnej ilości przyszłych bólów głowy, jeśli poświęcisz wiele czasu na programowanie i aktualizowanie projektów Szybki start systemu Ubuntu polega na instalacji git: Będziesz wtedy musiał zrobić katalog dla projektu Qsforex, w którym można mieszkać i sklonować projekt ze strony Github w następujący sposób: W tym momencie będziesz musiał stworzyć środowisko wirtualne, w którym uruchomisz kod: Będziesz wtedy musiał zainstalować wymagania (to zajmie trochę czasu): Na koniec będziesz musiał utworzyć dowiązanie symboliczne w swoim wirtualnym środowisku Pythona, aby umożliwić wpisanie importu qsforex w swoim kodzie (i uruchomić go): Jak wspomniałem w poprzednich wpisach, będziesz musiał utworzyć niezbędne zmienne środowiskowe dla twoich danych uwierzytelniających OANDA. Proszę zobaczyć wpis w dzienniku 2, aby uzyskać instrukcje, jak to zrobić. Prosimy o zapoznanie się z plikiem README powiązanym z repozytorium, ponieważ zawiera instrukcje instalacji, zrzeczenie się odpowiedzialności oraz gwarancję na temat korzystania z kodu. Ponieważ oprogramowanie jest w trybie alfa, instrukcje te staną się bardziej proste w miarę upływu czasu. W szczególności postaram się zawinąć projekt w pakiet Pythona, aby można go było łatwo zainstalować za pomocą pip. Jeśli masz jakieś pytania dotyczące procedury instalacji, proszę nie wahaj się wysłać do mnie wiadomość e-mail na mikequantstart. Plan długoterminowy Filozofią systemu handlu forex, podobnie jak w przypadku reszty witryny QuantStart, jest próba naśladowania prawdziwego handlu w jak największym stopniu w naszej analizie historycznej. Oznacza to uwzględnienie szczegółów, które często są wykluczone z bardziej ukierunkowanych na badania sytuacji historycznych. Opóźnienia, przerwy w pracy serwerów, automatyzacja, monitorowanie, realistyczne koszty transakcyjne zostaną uwzględnione w modelach, aby dać nam dobre wyobrażenie o skuteczności strategii. Ponieważ będziemy mieć dostęp do danych znaczników czasu (znaczników czasu), będziemy mogli włączyć spread do kosztów transakcyjnych. Możemy również modelować poślizg. Modelowanie wpływu na rynek jest mniej radykalne, chociaż nie stanowi to problemu w przypadku mniejszych kwot transakcyjnych. Oprócz kosztów transakcyjnych chcemy modelować niezawodne zarządzanie portfelem za pomocą nakładek ryzyka i wielkości pozycji. To, co jest obecnie uwzględnione w systemie handlu Forex do tej pory Architektura sterowana zdarzeniami - System handlu forex został zaprojektowany jako system oparty na zdarzeniach od podstaw, ponieważ w ten sposób system handlu śróddziennego zostanie wdrożony w środowisku na żywo . Przesyłanie strumieniowe cen - Posiadamy podstawowy obiekt do przesyłania strumieniowego cen. Obecnie obsługuje subskrypcję tylko jednej pary, ale możemy z łatwością zmodyfikować tę subskrypcję, aby zasubskrybować kilka par walutowych. Generowanie sygnału - Możemy włączyć strategie transakcyjne (oparte bezpośrednio na przeszłych i bieżących cenach tick) za pomocą obiektu strategii, który tworzy obiekty SignalEvent. Realizacja zlecenia - Posiadamy naiwny system realizacji zamówień, który ślepo przesyła zamówienia z Portfela do OANDA. Ślepo mam na myśli to, że nie ma przeprowadzania zarządzania ryzykiem ani określania pozycji, ani żadnej algorytmicznej realizacji, która mogłaby prowadzić do obniżenia kosztów transakcji. Waluta podstawowa GBP - Aby zachować prostotę, napisałem tylko system dla waluty podstawowej GBP. To chyba najważniejszy aspekt do modyfikacji, biorąc pod uwagę, jak wielu z was będzie mieć konta ćwiczeniowe denominowane w USD, EUR, CAD, JPY, AUD i NZD GBPUSD Trading - wybrałem kabel jako parę walutową do przetestowania początkowych pozycji i obiektów portfela z. Obsługa wielu par walutowych to ważny kolejny krok. Obejmuje to modyfikację obliczeń pozycji i portfela. Dziesiętna obsługa - każdy system handlu produkcyjnego musi poprawnie obsługiwać obliczenia walutowe. W szczególności wartości walut nie powinny być przechowywane jako typy danych zmiennoprzecinkowych, ponieważ błędy zaokrąglania będą się kumulować. Zobacz ten fantastyczny artykuł na temat reprezentacji zmiennoprzecinkowej, aby uzyskać więcej szczegółów. LongShort Trading - Między zapisami w dzienniku 2 i 3 dodałem możliwość skracania pary walutowej (w przeciwieństwie do możliwości długiego czasu). Co najważniejsze, jest to również testowane w jednostce. Obsługa lokalnego portfela - Moim zdaniem przeprowadzenie analizy historycznej, która zawyża wyniki strategii z powodu nierealistycznych założeń, jest w najlepszym razie denerwujące, aw skrajnych przypadkach wyjątkowo nieopłacalne Wprowadzenie lokalnego obiektu portfela, który powiela obliczenia OANDA, oznacza, że możemy sprawdzić nasze wewnętrzne obliczenia podczas wykonywania praktyki handel. co daje nam większą pewność, gdy później użyjemy tego samego obiektu portfela do weryfikacji historycznych danych historycznych. Testy jednostkowe dla PositionPortfolio - Chociaż nie wspomniałem o tym bezpośrednio w dziennikach 1 i 2, faktycznie pisałem kilka testów jednostkowych dla obiektów Portfolio i Pozycja. Ponieważ są one tak ważne w obliczeniach strategii, trzeba być bardzo pewnym, że działają zgodnie z oczekiwaniami. Dodatkową korzyścią z takich testów jest to, że pozwalają one na modyfikację bazowych obliczeń, tak, że jeśli wszystkie testy jeszcze się nie powiedzie, możemy być pewni, że cały system będzie zachowywał się zgodnie z oczekiwaniami. Na tym etapie system transakcyjny Forex nie posiada następującej funkcjonalności: Slippage Handling - system obecnie generuje duże poślizgi ze względu na dużą częstotliwość danych tickowych dostarczanych przez OANDA. Oznacza to, że saldo portfela obliczane lokalnie nie odzwierciedla salda obliczonego przez OANDA. Dopóki nie zostanie przeprowadzona poprawna obsługa zdarzeń i regulacja poślizgu, będzie to oznaczać, że test historyczny nie będzie właściwie odzwierciedlał rzeczywistości. Wiele walut podstawowych - obecnie ograniczamy się do GBP. Przynajmniej musimy uwzględnić główne nominały walutowe - USD, EUR, CAD, AUD, JPY i NZD. Wiele par walutowych - Podobnie musimy wspierać główne pary walutowe poza Cable (GBPUSD). Istnieją dwa aspekty tego. Pierwszym z nich jest poprawna obsługa obliczeń, gdy ani podstawa, ani oferta pary walutowej nie jest równa walucie denominacji rachunku. Drugim aspektem jest obsługa wielu pozycji, dzięki czemu możemy handlować portfelem par walutowych. Zarządzanie ryzykiem - wiele badań historycznych całkowicie ignoruje zarządzanie ryzykiem. Niestety jest to zazwyczaj konieczne ze względu na zwięzłość w opisywaniu zasad strategii. W rzeczywistości - podczas handlu musimy stosować nakładkę na ryzyko, w przeciwnym razie bardzo prawdopodobne jest, że na pewnym etapie poniesiemy znaczną stratę. Nie oznacza to, że zarządzanie ryzykiem może całkowicie temu zapobiec, ale z pewnością czyni to mniej prawdopodobnym Optymalizacja portfela - W warunkach instytucjonalnych będziemy mieli mandat inwestycyjny, który będzie dyktował solidny system zarządzania portfelem z różnymi zasadami alokacji. W przypadku handlu detalicznego możemy chcieć zastosować podejście polegające na zmianie wielkości pozycji, takie jak Kryterium Kelly, aby zmaksymalizować naszą długoterminową stopę wzrostu. Solidne strategie - Pokazałem tylko niektóre proste strategie zabawek generujących losowe sygnały do tej pory. Teraz, gdy zaczynamy tworzyć niezawodny intradayowy system handlu forex, powinniśmy zacząć realizować bardziej interesujące strategie. Przyszłe wpisy do pamiętnika będą koncentrować się na strategiach pochodzących z mieszanki filtrów wskaźników technicznych, a także modeli szeregów czasowych i technik uczenia maszynowego. Zdalne wdrażanie - ponieważ potencjalnie interesuje nas handel 24-godzinny (przynajmniej w ciągu tygodnia), wymagamy bardziej zaawansowanej konfiguracji niż przeprowadzanie testów na lokalnym komputerze stacjonarnym w domu. Istotne jest, abyśmy stworzyli solidne zdalne wdrożenie naszego serwera z odpowiednią redundancją i monitorowaniem. Historyczne analizy historycznej - Zbudowaliśmy obiekt Portfolio, aby umożliwić nam realistyczną weryfikację historyczną. Na tym etapie brakuje nam historycznego systemu przechowywania danych kleszczy. W kolejnych artykułach przyjrzymy się uzyskaniu historycznych danych zaznaczenia i zapisaniu ich w odpowiedniej bazie danych, takiej jak HDF5. Trade Database - W końcu będziemy chcieli przechowywać nasze transakcje live w naszej własnej bazie danych. Umożliwi nam to przeprowadzanie naszych własnych analiz danych na żywo. Dobrą rekomendacją dla relacyjnej bazy danych byłby PostgreSQL lub MySQL. Monitorowanie i wysoka dostępność - ponieważ rozważamy wprowadzenie systemu intraday o wysokiej częstotliwości, musimy wprowadzić kompleksowy monitoring i nadmiarowość wysokiej dostępności. Oznacza to raportowanie użycia procesora, użycia dysku, sieci IO, opóźnień i sprawdzenia, czy ustawione są okresowe skrypty. Ponadto potrzebujemy strategii tworzenia kopii zapasowych i przywracania. Zadaj sobie pytanie, jakie są plany tworzenia kopii zapasowych, gdybyś miał duże otwarte pozycje, na niestabilnym rynku, a twój serwer nagle umarł. Uwierzcie mi, to się zdarza Multiple BrokerFIX Integration - W tej chwili jesteśmy silnie powiązani z brokerem OANDA. Jak już powiedziałem, to po prostu dlatego, że natknąłem się na ich API i okazało się, że jest to nowoczesna oferta. Istnieje wiele innych brokerów, z których wiele obsługuje protokół FIX. Dodanie możliwości FIX zwiększyłoby liczbę brokerów, z których można korzystać w systemie. Kontrola i raportowanie GUI - teraz system jest całkowicie oparty na konsolopomocy. Przynajmniej będziemy potrzebować kilku podstawowych wykresów, aby wyświetlić wyniki analizy historycznej. Bardziej wyrafinowany system będzie zawierał statystyki podsumowujące transakcje, wskaźniki wyników na poziomie strategii oraz ogólną wydajność portfela. Ten graficzny interfejs użytkownika można zaimplementować za pomocą wieloplatformowego systemu okienkowego, takiego jak Qt lub Tkinter. Można go również zaprezentować za pomocą interfejsu sieciowego z wykorzystaniem platformy internetowej, takiej jak Django. Jak widać, na mapie drogowej pozostało wiele funkcjonalności. W związku z tym każdy nowy wpis w dzienniku (i potencjalny wkład społeczności) przeniesie projekt do przodu. Typy danych dziesiętnych Teraz, gdy omawialiśmy plan długoterminowy, chcę przedstawić niektóre ze zmian, które wprowadziłem w kodzie od wpisu w dzienniku 2. W szczególności chcę opisać, w jaki sposób zmodyfikowałem kod do obsługi danych dziesiętnych - typ zamiast korzystania z pamięci zmiennoprzecinkowej. Jest to niezwykle ważna zmiana, ponieważ reprezentacje zmiennoprzecinkowe są istotnym źródłem długotrwałych błędów w systemach zarządzania portfelem i zamówieniami. Python natywnie obsługuje dziesiętne reprezentacje z dowolną precyzją. Funkcjonalność zawarta jest w bibliotece dziesiętnej. W szczególności musimy zmodyfikować - są wartość, która pojawia się w obliczeniu pozycji do dziesiętnego typu danych. Obejmuje to jednostki, ekspozycję, pipsy, zysk i procentowy zysk. Dzięki temu mamy pełną kontrolę nad tym, jak rozwiązywane są problemy z zaokrąglaniem, gdy mamy do czynienia z reprezentacjami walut, które mają dwa miejsca po przecinku. W szczególności musimy wybrać metodę zaokrąglania. Python obsługuje kilka różnych typów, ale my pójdziemy z ROUNDHALFDOWN. która zaokrągla do najbliższej liczby całkowitej z więzami zbliżającymi się do zera. Oto przykład modyfikacji kodu w celu obsługi typów danych dziesiętnych z ich poprzednich reprezentacji zmiennoprzecinkowych. Poniżej znajduje się lista position. py: Zauważ, że musimy podawać dziesiętny z argumentem łańcuchowym, a nie z argumentem zmiennoprzecinkowym. Dzieje się tak dlatego, że łańcuch precyzyjnie określa precyzję wartości, natomiast typ zmiennoprzecinkowy nie. Należy również zauważyć, że kiedy zaczniemy zapisywać nasze transakcje w relacyjnej bazie danych (jak opisano powyżej w mapie drogowej), musimy upewnić się, że ponownie używamy poprawnego typu danych. PostgreSQL i MySQL obsługują dziesiętną reprezentację. Bardzo ważne jest, abyśmy korzystali z tych typów danych podczas tworzenia naszego schematu bazy danych, w przeciwnym razie wystąpią błędy zaokrąglania, które są niezwykle trudne do zdiagnozowania. Dla tych, którzy są zainteresowani głębszą dyskusją na te tematy, w dziedzinie matematyki i informatyki, Przedmiot Analiza numeryczna obejmuje zagadnienia zmiennoprzecinkowe, wśród wielu innych interesujących tematów. W kolejnych wpisach do dziennika omówimy, w jaki sposób zastosowałem testowanie jednostkowe do kodu oraz w jaki sposób możemy rozszerzyć oprogramowanie na więcej par walutowych poprzez modyfikację obliczeń pozycji. Pełny kod Pythona Ponieważ pełny kod źródłowy projektu jest teraz open source, na licencji MIT. zawsze można go znaleźć na githubmhallsmooreqsforex. wraz z towarzyszącą dokumentacją. Jeśli chcesz przeczytać inne wpisy z serii, skorzystaj z poniższych linków: Rozpoczęcie handlu ilościowego
No comments:
Post a Comment