Sunday 19 November 2017

Kalman trading strategy


Statystyczny arbitraż za pomocą filtru Kalmana Jedno z wyzwań związanych z podejściem kointegracyjnym do arbitrażu statystycznego, które omówiłem w poprzednim poście. jest to, że relacje kointegracji rzadko są statyczne: zmieniają się dość często i często całkowicie się psują. W 2009 roku zacząłem eksperymentować z bardziej dynamicznym podejściem do handlu parami, opartym na Filmie Kalmana. W najprostszej postaci modelujemy relację między parą papierów wartościowych w następujący sposób: beta (t) beta (t-1) w beta (t), nieobserwowana zmienna stanu, która następuje po losowym spacerze Y (t) beta (t) X (t) v Obserwowane procesy cen akcji Y (t) i X (t) N (0, Q) oznacza w jest hałas gaussowski ze średnią zerową i wariancją QN (0, R), co oznacza v jest szumem gaussowskim z wariancją R Tak to jest jak zwykła relacja par Y beta X v, gdzie typowe podejście polega na oszacowaniu beta przy użyciu regresji najmniejszych kwadratów lub pewnego rodzaju regresji toczenia (aby spróbować wziąć pod uwagę fakt, że beta może się zmienić czas). W tej tradycyjnej strukturze beta jest statyczna lub powoli się zmienia. W środowisku Kalmana beta jest przypadkowym procesem, który ewoluuje w miarę upływu czasu, jako przypadkowy spacer. Ponieważ jest on losowy i zanieczyszczony przez szum, nie możemy bezpośrednio obserwować wersji beta, ale musimy wywnioskować jego (zmieniającą się) wartość z obserwowalnych cen akcji X i Y. (Uwaga: poniżej będę używał X i Y w odniesieniu do cen akcji.) możesz również użyć cen dziennika lub zwrotów). Nieznane mi wtedy, kilku innych badaczy myślało tak samo, a później opublikowało swoje badania. Jednym z takich przykładów jest statystyczny arbitraż i dane o wysokiej częstotliwości z wnioskiem o Eurostoxx 50 akcji. Rudy, Dunis, Giorgioni and Laws, 2017. Kolejnym ściśle powiązanym ze sobą studium jest analiza wydajności strategii handlu parami, wykorzystująca dane o wysokiej częstotliwości wraz z wnioskiem do KOSPI 100 Equities. Kim, 2017. Oba badania naukowe podążają bardzo podobną ścieżką, odrzucając ocenę beta za pomocą regresji toczącej lub wygładzania wykładniczego na korzyść podejścia Kalmana i stosując model Ornsteina-Uhlenbecka do oszacowania okresu półtrwania średniego powrotu portfeli par. W badaniach podano bardzo wysokie wskaźniki informacji pozapróbkowej, które w niektórych przypadkach przekraczają 3. Już wcześniej zauważyłem, że tak niezwykle wysoka wydajność jest zwykle wynikiem ignorowania faktu, że wartość netto PnL na akcję może leżeć w obszarze średnia rozpiętość między ceną kupna a ofertą, co sprawia, że ​​wdrożenie jest bardzo problematyczne. W tym poście chcę się zastanowić nad kolejną krytyczną kwestią, która jest szczególnie ważna w podejściu Kalmana: stosunek sygnału do szumu, QR, który wyraża stosunek wariancji procesu beta do procesu cenowego. (Co ciekawe, oba artykuły popełniają ten sam błąd oznaczania Q i R jako odchylenia standardowe, w rzeczywistości są to wariancje). Beta, będąc przypadkowym procesem, oczywiście zawiera trochę hałasu: ale nadzieja jest taka, że ​​jest mniej hałaśliwy niż proces cenowy. Chodzi o to, że związek między dwoma zasobami jest bardziej stabilny 8211 mniej lotny 8211 niż same procesy magazynowe. Na pierwszy rzut oka wydaje się to uzasadnione z empirycznego punktu widzenia. Pytanie brzmi: jak stabilny jest proces beta, w stosunku do procesu cenowego Jeśli wariancja w procesie beta jest niska w stosunku do procesu cenowego, możemy z czasem dokładnie określić wersję beta, a zatem uzyskać dokładne oszacowanie prawdziwej ceny Y ( t), na podstawie X (t). Następnie, jeśli zaobserwujemy wystarczająco duże odejście w podanej cenie Y (t) od prawdziwej ceny w czasie t, mamy potencjalny handel. Innymi słowy, jesteśmy zainteresowani: alfa (t) Y (t) 8211 Y (t) Y (t) 8211 beta (t) X (t) gdzie Y (t) i X (t) są obserwowanymi cenami akcji a beta (t) to szacowana wartość beta w czasie t. Jak zwykle, standaryzujemy alfa przy użyciu oszacowania odchylenia standardowego alfa, którym jest sqrt (R). (Alternatywnie, można oszacować odchylenie standardowe alfa bezpośrednio, stosując okres obserwacji w oparciu o okres półtrwania alfa). Jeśli wystandaryzowana alfa jest wystarczająco duża, model sugeruje, że cena Y (t) jest cytowana znacznie powyżej wartości rzeczywistej. Dlatego skracamy czas Y i kupujemy akcje X. (W tym kontekście, gdzie X i Y reprezentują ceny surowe, posiadałbyś równą i przeciwną liczbę akcji w Y i X. Jeśli X i Y reprezentowałyby zwroty, i przeciwnej wartości rynkowej dla każdego zasobu). Sukces takiej strategii zależy krytycznie od jakości naszych oszacowań alfa, które z kolei opierają się na dokładności naszych szacunków beta. To zależy od hałaśliwości procesu beta, tj. Jego wariancji, Q. Jeśli proces beta jest bardzo hałaśliwy, tj. Jeśli Q jest duży, nasze oszacowania alfa będą zbyt hałaśliwe, aby mogły być użyteczne jako podstawa strategii powrotu . Tak więc kluczowym pytaniem, które chciałbym zająć w tym poście, jest: aby podejście Kalmana było skuteczne w modelowaniu relacji między parami, jaki byłby dopuszczalny zakres dla wariancji procesu beta Q. (Często mówi się, że to, co ważne w ramie Kalmana nie jest wariancja Q per se, ale raczej stosunek sygnału do szumu QR. Okazuje się, że nie jest to ściśle prawda, jak zobaczymy). Aby poradzić sobie z problemem, zastosowałem następujące podejście: (i) Symulacja procesu magazynowania X (t) jako procesu geometrycznego ruchu w branie z określonym dryftem i zmiennością (użyłem 0, 5 i 10 dla rocznego dryfu, oraz 10, 30 i 60 dla odpowiedniej rocznej zmienności). (ii) symulować proces beta (t) jako spacer losowy o wariancji Q w zakresie od 1E-10 do 1E-1. (iii) Wygeneruj prawdziwy proces cenowy Y (t) beta (t) X (t) (iv) Symuluj obserwowany proces cenowy Yobs (t), dodając losowy szum z wariancją R do Y (t), z R w zakres od 1E-6 do 1,0 (v) Oblicz rzeczywistą, znaną alfa (t) Y (t) 8211 Yobs (t) (vi) Dopasuj model filtra Kalmana do symulowanych procesów i oszacuj beta (t) i Yest (t) . W związku z tym należy przedstawić oszacowania kfalpha (t) Yobs (t) 8211 Yest (t) i porównać je ze znaną, prawdziwą alfa (t). Wykresy na rys. 1 poniżej ilustrują procedurę dla procesu zapasowego X (t) z rocznym dryfowaniem 10, roczną zmiennością 40, zmiennością procesu Q Q 8,65E-9 i zmiennością procesu cenowego R 5,62E-2 (współczynnik QR 1,54E-7). Rys. 1 Prawdziwe i szacunkowe beta i alfa za pomocą filtru Kalmana Jak widać, filtr Kalmana wykonuje bardzo dobrą robotę polegającą na aktualizacji oceny beta, aby śledzić podstawową, prawdziwą wersję beta (która w tym eksperymencie jest znana). Ponieważ współczynnik szumów QR jest mały, szacunki Filma Kalmana dotyczące procesu alfa, kfalpha (t), odpowiadają ściśle prawdziwej alfa (t), która ponownie jest nam znana w tym doświadczalnym ustawieniu. Możesz sprawdzić związek między prawdziwą alfa (t) a szacunkami Filtra Kalmana kfalpha (t) jest wykresem w lewym górnym kwadracie figury. Korelacja między tymi dwoma wynosi około 89. Przy poziomie dokładności, który jest dobry dla naszych oszacowań alfa, para symulowanych zapasów byłaby idealnym kandydatem do strategii handlu parami. Oczywiście wynik jest wysoce zależny od wartości, które przyjmujemy dla Q i R (a także w pewnym stopniu na założeniach dotyczących dryfu i zmienności procesu cen X (t)). Następnym etapem analizy jest zatem wygenerowanie dużej liczby symulowanych obserwacji cenowych i beta oraz zbadanie wpływu różnych poziomów Q i R, wariancji beta i procesu cenowego. Wyniki podsumowano w tabeli na ryc. 2 poniżej. Ryc. 2. Korelacja między prawdziwymi wartościami alfa (t) i kfalpha (t) dla wartości Q i R Zgodnie z przewidywaniami, korelacja między prawdziwą alfa (t) a wartościami szacunkowymi generowanymi przez filtr Kalmana jest bardzo wysoka, gdy stosunek sygnału do szumu jest mały, tj. rzędu 1E-6 lub mniejszy. Średnie korelacje zaczynają bardzo szybko spadać, gdy QR przekracza ten poziom, spadając do 30, gdy współczynnik szumu przekracza 1E-3. Przy współczynniku QR równym 1E-2 lub wyższym oszacowania alfa stają się zbyt głośne, by były przydatne. Uważam, że jest to raczej przypadkowy, a nawet niewiarygodny, że w swoim badaniu Rudy i in., Czują się w stanie przyjąć współczynnik szumu 3E-7 dla wszystkich par zapasów w ich badaniu, który akurat znajduje się w słodkim miejscu alfa. oszacowanie. Z moich własnych badań wynika, że ​​znacznie większa wartość w obszarze od 1E-3 do 1E-5 jest bardziej typowa. Ponadto współczynnik szumów zmienia się znacznie w zależności od pary i czasu. Istotnie, posunąłbym się tak daleko, że zaleciłbym zastosowanie filtru współczynnika hałasu do strategii, co oznacza, że ​​sygnały handlowe są ignorowane, gdy współczynnik szumu przekracza określony poziom. Wynika to z tego, że podejście oparte na Filmie Kalmana można z powodzeniem stosować w opracowywaniu strategii arbitrażu statystycznego, ale tylko w przypadku procesów, w których współczynnik szumów nie jest zbyt duży. Jedną z sugestii jest zastosowanie reguły filtrowania do tłumienia sygnałów handlowych generowanych w czasach, gdy współczynnik szumów jest zbyt duży, lub w celu zwiększenia alokacji do par, w których stosunek szumów jest stosunkowo niski. Filtr Kalmana i siła waluty Dołączył w sierpniu 2017 Status: Członek 1,132 Posty ostatnio gram z rekursywnymi estymatorami bayesowskimi (en. wikipedia. orgwikiRecursi, ianestimation), dla których filtr Kalmana jest szczególnym przypadkiem. Nie będę wchodził w szczegóły, patrz Bayesian Forecasting i Dynamic Models Westa i Harrisona. Początkowo próbowałem oszacować trend i zmienność rynku. Ale nie o to chodzi w tym poście. Chodzi o to, dlaczego lepiej dziś być na smoku. Zwrot z rynku nie jest normalnie dystrybuowany, ale gdzieś pomiędzy Cauchy a Studentem dystrybuowanym. Wydajności filtra Kalmana ulegają szybkiemu pogorszeniu w przypadku niestandardowych innowacji. Właśnie dlatego używam innego filtru Kalmana, który szacuje błąd pierwszego, i przekazuję tę informację do pierwszego modelu jako modulację dozwolonej wariancji stanu. Rodzaj dynamicznego kursora quotlag gładkość-tt-gt. Ten pierwszy model jest wielomianową lokalną oceną drugiego stopnia. Wybrałem wielomian drugiego rzędu, ponieważ może on przybliżać (Taylor) dowolną płynną funkcję, jak falę sinusoidalną dla rynku z komponentem cyklicznym (zakres lub trend wartościowy) lub trend wykładniczy (dla indeksu i zasobów). Również współczynnik akceleracji pomaga dogonić cenę w przypadku nagłego ruchu. Drugi filtr używa tylko modelu stałego. Używam H4 do mierzenia dziennego trendu. Oto zrzut ekranu EURUSD H4. Niebieska linia jest idealnym, ale nie przyczynowym filtrem dolnoprzepustowym sinc (en. wikipedia. orgwikiSincfilter) używanym z 41 próbkami. Daje ci to pojęcie o opóźnieniu. Filtr jest zielony, gdy trend jest najprawdopodobniej wyższy, a czerwony w przeciwnym razie. Koperta to 95 przedział ufności średniej oszacowania ceny. Poniżej znajduje się błąd między ceną a estymacją (czarny) i ta wartość jest filtrowana przy użyciu drugiego filtru (czerwony). Nie robi zbyt dużego błędu, aby nie nadwerężać głównego filtra. Załączony obraz (kliknij, aby powiększyć) Brak chciwości. Bez strachu. Po prostu matematyka. Dołączył w sierpniu 2017 Status: Członek 1132 Posty Mam szacunkowy trend najbardziej prawdopodobny. Należy pamiętać, że nie jest to pewne, czy mogę wykorzystać te informacje do określenia, czy EURUSD najprawdopodobniej jest w górę, czy w dół. OK, słyszę cię, mogę też spojrzeć na wykres i sprawdzić, czy się podnosi czy spada :-). Masz rację. Ale moim pomysłem było powtórzyć to z każdą z głównych firm, nie tylko wiedzieć, czy są one w górę, czy w dół, ale ile są w górę lub w dół. Jeśli GBPUSD spada, oznacza to, że USD jest silniejszy niż funt. Jeśli EURUSD spadnie, EUR będzie również słabszy niż USD. Ale która z GBP lub EUR jest najsłabsza Nie można po prostu użyć wartości pipsa trendu, ponieważ wartość pipsa nie jest taka sama dla wszystkich par. Z tego powodu używam procentu zmienności. Dzieląc różnicę ceny przez cenę, otrzymujesz wartość bez jednostek. W ten sposób pozbywam się skali jednostkowej i mogę bezpośrednio porównać EURNZD i USDJPY. Ponieważ EURGBP to (EURUSD) (GBPUSD), nie jest konieczne filtrowanie wszystkich par. Oszacowanie ceny i szacunkowe trendy głównych firm są wystarczające do linearyzacji z wystarczająco dobrą dokładnością. Jeśli znajdziesz GBP jest słabszy niż EUR, możesz zamówić trzy waluty: GBP lt EUR lt USD. Warto szukać dobrego hasła wejściowego na GBPUSD, ponieważ jest to miejsce, w którym mamy dużą szansę na złapanie trendu. Teraz dla każdej pary zamawiam waluty parami, mocniej - słabiej. Każda waluta jest nagradzana za każdym razem, gdy jest silniejsza od innej. Ten wynik jest oceną procentową. Na koniec każda waluta ma wynik, a lista walut jest silniejsza od niego. Mogę to zorganizować na wykresie. Ma to odzwierciedlać oszacowanie przepływu pieniędzy. Nie pytaj mnie o niestandardowe indi, ponieważ nie mogę zaprogramować MQL. Jeśli jesteś zainteresowany kodowaniem indi na podstawie tego pomysłu, mogę ci pomóc, jeśli czas na to pozwoli. Załączony obraz (kliknij, aby powiększyć) Pytanie otwarte: jeśli na wykresie jest cykl, czy warto zawrzeć handel wymienionymi walutami w pierścieniu bardzo interesującym, przyjrzymy się linkom, które opublikowałeś, obecnie używam zmian wartości dla stronniczości i trzymania transakcji i dodatków, znalazłem coś, co jest zbliżone do informacji, które otrzymuję od tych par. Zdecydowanie widzę zmianę wartości w wartości pipsa i ogólny procent. havnt dość perfekcyjnie w excell ale wciąż w toku. wspominając o handlu w koszyku, może to być bardzo satysfakcjonujące. Dobrym przykładem tego rodzaju handlu było dzisiaj, głównie przewagę w handlu, która jak wszystkie powiązane pary została zepchnięta na dół. Główną parą w dzisiejszych zmianach była wartość kabla. 60 plus pipsów, podczas gdy inne dolne krzyże nie ruszyły się. Pary jenów również utknęły w martwym punkcie, ale w tym momencie nie ma śladu zmiany kierunku. Siła w kablu była wskazówką. i umieściła transakcje na 4 jenach, doller chf, dollar cad i euro. W tym mój początkowy kabel, którego długość przekroczyła 400 pipsów. korelacje są często odrzucane na tym forum, ponieważ nie są zrozumiałe. Sposób, w jaki opisałeś i zbadałeś, pokazuje, w jaki sposób korelacje w odniesieniu do tamtej relacji są tam bardzo duże, kompensowane przez wartość pipsa wraz ze zmieniającymi się warunkami w obrębie własnej osoby. fundamenty. Ale te cykle są i mogą być użyte Wygląda na to, że waluta może być silna, albo dlatego, że otrzymuje dużo z innych walut, albo dlatego, że otrzymuje od wszystkich innych walut. Zazwyczaj 2 warunki pasują. Który jest najsilniejszym USD z największym wynikiem lub EUR otrzymywanym od wszystkich innych (wynik jest sumą nachylenia trendu) Należy również pamiętać, że istnieje cykl JPY-gtAUD-gtUSD. Bez chciwości. Bez strachu. Po prostu matematyka. Dołączył grudzień 2017 Status: Foook Bollinger-dr. Kegel wie 9,292 Postów Teraz mam szacunkowy trend najbardziej prawdopodobny. Ważne jest, aby pamiętać, że nie jest to pewność. Na koniec każda waluta ma wynik, a lista walut jest silniejsza od niego. Mogę to zorganizować na wykresie. Ma to odzwierciedlać oszacowanie przepływu pieniędzy. Nie pytaj mnie o niestandardowe indi, ponieważ nie mogę zaprogramować MQL. Jeśli jesteś zainteresowany kodowaniem indi na podstawie tego pomysłu, mogę ci pomóc, jeśli czas na to pozwoli. Robię coś podobnego. Gram z indeksami. 7 walut 21 par walutowych. Oznaczam je pewnym rozpoznawaniem statystycznym raz dziennie. Dając każdej parze walutowej numer sekwencji (quotay dayquot1 i dayquot day 0). Może być prezentowany jako przepływ pieniędzy. Ale trudno powiedzieć. Na pewno mają pewne słabości. Zdecydowanie łatwiej jest handlować, ale trzeba być zdyscyplinowanym, gdy jesteśmy w tym trendzie i kiedy mamy korektę. Twarde rzeczy. Jak widzę, pokazuje mi, jakie są najgorętsze waluty. Znaczenie w sposób negatywny i pozytywny. Top 2 in i - Lower 2. Problem z tym systemem jest zawsze opóźnieniem przejścia do korekty, później do głębiej skorygowanego etapu i ostatecznie przedstawienia nowego trendu. Trudno to zaprogramować. Dlatego tak ważne jest, że na pewno staramy się rozgryźć to, co się dzieje. Im przy użyciu 4 różnych prędkości indeksów. Silne trendy wyraźnie dają mi przedstawienie kierunku przepływu pieniądza (zdjęcie 1). Jestem mu posłuszny i staram się grać tylko w te kierunkowe gry. W ostatnich tygodniach mocno obciążamy GBP i EUR, a my staramy się pozbyć CAD i JPY. Całkiem proste rzeczy w pewien sposób, ale jeśli nie handlujesz miesięcznie wykresami i nie używasz postojów wyższych niż 300 piperów, nadal nie jest to łatwe zadanie, kiedy wejść i jak wywołać koniec korekty. Wykres Speed ​​Trend (Picture 2) to miejsce, w którym można znaleźć dowody na to, gdzie gra się skończy. Przynajmniej podejrzewam, co się stanie przy korekcie. Bardzo trudne rzeczy do zrobienia, ponieważ zmienność w tych skrajnościach będzie wyższa. Zwłaszcza, że ​​zanika początkowy ruch trendu, który reprezentuje jedną mocną codzienną świecę przeciwstawną. Na mapie walutowej (obraz 3) waluty są uznawane za jedne z najsilniejszych, a AUD za najsłabsze. W ubiegłym miesiącu po kilku silnych tygodniach wyższych stóp mogliśmy zauważyć pewną przerwę w rozwoju. Widać to również z codziennego wykresu z łatwością. Ale jak widać na wykresie, widzimy, że już 6 grudnia można było zauważyć, że niedługo dostaniemy korektę. Dlaczego wskaźniki AUDL (long) i AUDs (short) przekroczyły 4 grudnia, nadal w strefie ujemnej. To samo dotyczy obu indeksów GBP. 6 grudnia przeszli w osłabienie, więc mamy silną sugestię głębszej korekty. Przynajmniej jedno powinno być teraz bardzo ostrożne w kupowaniu spadków, na pewno powinno się w ciągu ostatnich kilku dni pozbyć się pozycji sprzed kilku dni. Moglibyśmy z łatwością poruszać się na HH codziennie, ale powinno być ograniczone. Teraz przychodzę na moje pytania. Nadal pracujesz nad tym zagadnieniem Czy możesz podzielić się swoimi ogólnymi ustaleniami dotyczącymi handlu indeksami? Cykle Czy uzyskałeś pewne wyniki w znalezieniu obiecujących czynników, które pozwolą ci przejść na prostą sprawę, odnosząc się do twojej przysługi, odnosząc się do zwykłej retrakcji. Wygląda na to, że waluta może być silna również dlatego, że otrzymuje dużo od innych walut lub odbiera od wszystkich innych walut. Zazwyczaj 2 warunki pasują. Który jest najsilniejszym USD z największym wynikiem lub EUR otrzymywanym od wszystkich innych (wynik jest sumą nachylenia trendu) Należy również pamiętać, że istnieje cykl JPY-gtAUD-gtUSD. Dołączył w sierpniu 2017 Status: Członek 1132 Postów Nie robiłem śledztwa w sprawie cykli. Zauważyłem, że może to być interesujące dla handlarzy koszyków. Opóźnienie jest zabójcą z tym wskaźnikiem. Często tak jest. Kiedy znajdzie parę, która jest silnie trendująca, ruch już jest wykonany. Ale blaknięcie tego ruchu jest śmiertelne. Musisz więc czekać na odrodzenie. Przechodząc do wielu przedziałów czasowych, znalazłem kolejny logiczny krok. Zrobiłeś to również. Na przykład AN jest na mojej codziennej liście najlepszych niedźwiedzi. Oczywiście nikt nie potrzebuje filtra Kalmana, aby zobaczyć, że AN jest niedźwiedzi na co dzień. Ale na H4 okazało się, że zwyżkuje. Przetłumaczyłbym to przez: czas, w którym niedźwiedzie czerpią zyski. Jest również hojny na H1. Kiedy stanie się bessy na H1, spróbuję znaleźć techniczną okazję do skontrowania z H4, aby wejść do następnej huśtawki na D1. Oczywiście spóźnię się na H1 i na pewno za wcześnie na H4. Ale jest lepsza niż 300 pipsów SL na D1, ponieważ nie mogę wiedzieć, czy ten ruch nie jest pierwszym etapem odwrócenia. Niestety bardzo trudno jest obiektywnie oszacować trafność tego podejścia, aby oszacować siłę obrotu przepływów pieniężnych. Podobnie jak w przypadku każdego wskaźnika, nie można oszacować jego mocy poza zakresem systemu handlu wykorzystującego go. Jeśli otrzymujesz słabe wyniki, to z powodu indi, systemu, przedsiębiorcy, który nie potrafi korzystać z systemu Jeśli wyniki są dobre, nie wiesz, czy to dlatego, że indi jest dobrym narzędziem, czy też masz szczęście, aby być w korzystnym warunku rynkowym dla systemu w okresie testowania. Załączone obrazy (kliknij, aby powiększyć) Jeśli wyniki są dobre, nie wiesz, czy to dlatego, że indi jest dobrym narzędziem, czy też masz szczęście, aby być w dobrym stanie rynkowym dla systemu w okresie testowania. To jest dokładnie słuszne. Testuję to od 13 sierpnia i otrzymuję bardzo dobre wyniki. Zachwycony. Ale wciąż nie mogę zobaczyć, czy było to naprawdę korzystne przez ostatnie cztery miesiące, czy może to naprawdę działać przez dłuższy czas. Jestem pewien, że dzięki filtrowaniu wpisów i znalezieniu dobrej kontroli zarządzania otwartymi pozycjami. wszystko to może zapewnić względnie dobrą krzywą dochodowości. Przechodzę przez pracę statystyczną, w której głównie koncentruję się na wygranych przez EA6 dla każdej reguły. Znalezienie optymalnego R: R, który jest najlepszy bez dodatkowego filtrowania. Później spróbuję znaleźć tam wyluzowaną część. Jestem na czwartej fazie bankomatu, a ja myślałem, że już znalazłem kilka bardzo interesujących ustawień, które pozytywnie wpłynęły na ten zakres testów. Zabiłem wiele złych nasion, ale zachowałem tylko kilka i wciąż go zawężam ... czas. Nie mogę przetestować tego systemu, ponieważ zajmuje on cały rynek naraz. Próbowałem zrobić to w programie Excel, ale zajęłoby to dużo czasu. Jestem pracoholikiem, ale zajęłoby to miesiące, żeby ustalić, a potem miesiące. itd. Buduję dobrze zachowującą się świnkę ... Zastanawiam się, czy kiedykolwiek pomyślałeś o użyciu swoich pomiarów KF jako części danych wejściowych dla systemu uczenia maszynowego, aby uzyskać sygnały transakcyjne. Niektóre z używanych przeze mnie systemów wykorzystują podobne pomiary słabości waluty i przyzwoite możliwości prognostyczne. Generalnie uczę się maszynowo z wykorzystaniem bibliotek maszynowych R lub niektórych opartych na C (biblioteki takie jak gofry lub rekiny). Widzę, że można potencjalnie zbudować system, w którym KF działa jako dane wejściowe i można uzyskać prognozy zmian trendu dla koszyka walut. Pomysł polegał na wybraniu koszyka trzech par prawdopodobnie parujących się parami, łącząc trzy najsilniejsze i trzy najsłabsze waluty. Parowanie odbywa się poprzez dbanie o ich korelacje. Korzystając z tej metody, uzyskuję wagi do zastosowania w MM: są to trzy pary i odsetek na zrzutach ekranu. Para z dwóch pozostałych walut prawdopodobnie ma zasięg i powinna być zapewniona dla systemu opartego na średniej rewersji. O użyciu KF do oszacowania trendu rynkowego zrobiłem jeden przy użyciu wykresów słupkowych zakresu. Do tej pory klasyfikuje 9 trendów rynkowych: bardzo wysoko, bardzo wysoko, w górę, trochę w górę, płasko. bardzo nisko. Są oznaczone kolorami. Od tego podzielę dane dla każdej klasy, aby uzyskać prawdopodobieństwo odległości kursu od średniej danej klasy: Załączony obraz (kliknij, aby powiększyć) Wynik jest ładnie liniowy i mogę poprawić ocenę średniej. Ta zielona linia i niebieskie i czerwone wypustki z bandsenami Attached Image (kliknij, aby powiększyć) Moim problemem jest teraz użyć tego do aktualizacji ekspozycji systemu. Tutaj jestem całkowicie zablokowany na teraz. Pomysł polegał na wybraniu koszyka trzech par prawdopodobnie parujących się parami, łącząc trzy najsilniejsze i trzy najsłabsze waluty. Parowanie odbywa się poprzez dbanie o ich korelacje. Korzystając z tej metody, uzyskuję wagi do zastosowania w MM: są to trzy pary i odsetek na zrzutach ekranu. Jednak jeśli dobrze rozumiem, co robisz z tym wydaje się, aby uzyskać oszacowanie obecnego trendu na rynku, może to nie być przydatne, ponieważ jesteś zainteresowany w przyszłości, a nie w stanie, który rozwijał się do tej pory (cóż to jest wiedzieć, że rynek zyskuje na popularności, jeśli wchodząc do handlu, przestanie działać). Zastanawiam się, czy próbowałeś zastosować metody uczenia maszynowego - używając swoich wartości KF jako danych wejściowych - aby oszacować, jaki będzie przyszły trend rynkowy. To, co byłoby najbardziej użyteczne, nie byłoby miarą bieżącego trendu rynkowego, ale prawdopodobnym oszacowaniem przyszłego trendu rynkowego. Zastanawiam się, czy pomiary oparte na KF mają zdolność przewidywania w odniesieniu do przyszłych trendów rynkowych. Ponieważ oceniasz złożony wachlarz interakcji rynkowych, wydaje się prawdopodobne, że tak właśnie jest. Jak myślisz, wybacz mi, jeśli coś nie rozumiem, być może już dostajesz prognozy i brakuje mi tych informacji. Dołączył w sierpniu 2017 Status: Członek 1132 Postów Nigdy nie próbowałem przewidywać stanu poza wielomianową ekstrapolacją, która nie ma absolutnie żadnej mocy prognostycznej. Przyszły stan trendu będzie taki sam jak bieżący i losowy dryf: liniowo rosnąca wariancja. Trendem jest czerwona linia poniżej wykresu. Ten niebieski jest stopą zmiany trendu. Oba osciallte wokół ich średniej (0). Uwaga: jednostka skali to standardowe odchylenie własnych wartości (orange2 sigma). Ten trend to średnie przywrócenie, ale nigdy nie próbowałem dopasować procesu O-U. OK. Jeszcze jedna linia na TODO :-) Bez chciwości. Bez strachu. Po prostu matematyka. Członkowie muszą mieć co najmniej 0 kuponów do opublikowania w tym wątku. 1 podgląd inwestora Forex Factoryreg jest zarejestrowanym znakiem handlowym. Sierpień 18, 2018 6 października 2018 Filtr Kalmana i handel parami Wyobraź sobie ten scenariusz. jesteś handlowcem arbitrażu statystycznego przy rekwiacie lub HF. W związku z tym rutynowo przechowujesz inwentarz ekspozycji ETF, którą musisz zabezpieczyć. Poprzedniego wieczoru poleciłeś swoim nocnym inwestorom obliczyć wskaźniki zabezpieczenia dla matrycy ETF8217. Następnego ranka przed otwarciem rynku Twoi młodsi handlarze chętnie prezentują wyniki swoich badań. Ciesząc się tym, co widzisz, ładujesz wskaźniki hedgingowe do swojej platformy transakcyjnej i czekasz na otwarte. Kiedy rynek po raz pierwszy otwiera się do obrotu, ponownie bilansuje swoje zabezpieczenia zgodnie z nowymi wskaźnikami. Potem oglądasz z przerażeniem, że twoje żywopłoty nie działają zgodnie z oczekiwaniami. Co poszło nie tak Każdy dobry przedsiębiorca wie, że musi się dostosować, gdy zmieniają się warunki na rynku, dlaczego więc wymagamy od naszych modeli handlowych inaczej. Handlowcy w naszym przykładzie polegali na statycznych wskaźnikach zabezpieczenia, aby zasilić swoją logikę handlową. W rezultacie otworzyli się na tak zwane ryzyko parametrów. Aktualizacja parametrów w miarę pojawiania się nowych informacji jest jednym ze sposobów zabezpieczenia się przed tym niedoszacowanym ryzykiem handlowym. Zdecydowanie najbardziej powszechnym modelem do osiągnięcia tego w scenariuszu transakcyjnym jest Filtr Kalmana. Jest to użyteczne, gdy mamy do czynienia z modelem liniowym, takim jak handel parami, który w najprostszej formie sprowadza się do obrotu rezydualnego regresji liniowej: Gdzie jest obecna cena pierwszego stada, to bieżąca cena drugiego stada , jest naszym obecnym kursem hedgingowym i jest bieżącą ceną spreadu, którą handlujemy. Możemy również oszacować współczynnik zabezpieczenia za pomocą zmian w dziennikach w X i Y, zamiast ich poziomów. Byłoby to bardziej prawdopodobne w scenariuszu High Frequency Trading, gdzie zależy nam tylko na zmianach cen. Filtr Kalmana pozwala nam zmieniać stosunek zabezpieczenia w czasie. Załóżmy na przykład, że współczynnik zabezpieczenia następuje po losowym spacerze, tzn. Gdzie jest obecny stan współczynnika zabezpieczenia, jest ostatnim stanem i jest losowym białym szumem ze średnią zerową i zmiennością. Filtr Kalmana został zaprojektowany do oszacowania 8220hidden stanu 8221 liniowego modelu Gaussa, takiego jak Pairs Trading. Filtr jest oparty na systemie równań: aktualny stan ukryty (np. Nasz współczynnik zabezpieczenia), jest macierzą przejścia (np. Matrycą tożsamości) jest najnowszym wektorem obserwacji (np. Zmiana logu zapasów Y) jest ostatnia matryca obserwacyjna (np. logarytmiczna zmiana zasobu X) to biały szum Gaussa ze średnim zerem i wariancjami Let8217 patrzą na konkretny przykład Filtra Kalmana w akcji, aby lepiej zrozumieć jego ruchome części. W szczególności chcieliśmy podkreślić znaczenie wyboru i. Stosunek tych dwóch parametrów nazywany jest stosunkiem sygnału do szumu. Jeśli jest mały w stosunku do, filtr umieści większość swojej wagi dla następnego oszacowania na stanie ostatniego oszacowania (tj. Filtr będzie faworyzował jego bieżący stan w oparciu o nowe informacje). Jeśli odwrotność jest prawdą, filtr bardzo szybko dostosuje się do nowych informacji kosztem poprzedniego stanu. Poniższa tabela przedstawia ładnie efekt. Każda linia reprezentuje bieżące oszacowanie modelu 8217 współczynnika zabezpieczenia pomiędzy SPY ETF8217 i EEM przy użyciu różnych wartości dla utrzymania stałej. Im wyższy stosunek sygnału do szumu, tym szybciej model dostosowuje się do nowych informacji: Python ma prostą i skuteczną implementację filtru Kalman o nazwie pykalman. Pobraliśmy bezpłatne dane dotyczące okresu śróddziennego dla SPY i EEM za pomocą funkcji getgoogledata, którą udostępniliśmy wcześniej. Aby zaimplementować to dla siebie, możesz wykonać poniższe czynności. Pierwszym krokiem jest zaimportowanie wymaganych modułów: Następnie możemy pobrać ceny akcji i przetransformować je do zmian w dzienniku: Teraz let8217s oddzielają zestaw danych na próbki w celu oszacowania początkowego stanu filtra: Teraz możemy uruchomić każdy filtr przy użyciu innego stosunek sygnału do szumu: Jest to luźno powiązana kontynuacja naszego poprzedniego postu, Tworzenie statystyk par statów Dla dobrze napisanego przykładu użycia modelu rozproszonego z przechwyceniem, jak również współczynnika zabezpieczenia, sprawdź TheAlgoEngineer. Zainteresowane zasobami do handlu parami Chcesz dowiedzieć się, jak wydobywać źródła danych społecznościowych, takie jak Google Trends, StockTwits, Twitter i szacunkowe Upewnij się, że pobierz naszą książkę Intro do danych społecznościowych dla handlowców Śledź blog przez e-mail Nawigacja po wpisie Ostatnie posty Ostatnie komentarze KategorieKalman Filter - Strategia handlowania parami opartymi na parach W QSTrader Poprzednio w QuantStart rozważaliśmy matematyczne podstawy modeli przestrzeni kosmicznej i filtrów Kalmana. a także zastosowanie biblioteki pykalman do pary funduszy ETF, aby dynamicznie korygować wskaźnik zabezpieczenia jako podstawę dla średniej strategii odwrócenia transakcji. W tym artykule omówimy strategię handlową pierwotnie należącą do Ernest Chan (2017) 1 i przetestowaną przez Aidana OMahony w Quantopian 2. Wykorzystamy opartą na Pythonie open source analizę QSTrader w celu wdrożenia strategii. QSTrader przeprowadzi intensywne podnoszenie pozycji, śledzenie pozycji i przetwarzanie danych, podczas gdy my koncentrujemy się wyłącznie na kodzie generującym sygnały transakcyjne. Strategia handlowa Strategia handlowania parami ma zastosowanie do kilku funduszy ETF (Exchange Traded Funds), które śledzą wyniki różnych obligacji skarbowych USA o różnym czasie trwania. Są to: Celem jest zbudowanie strategii średniej cofnięcia z tej pary funduszy ETF. Syntetyczna rozpiętość między TLT i IEI jest szeregiem czasowym, które faktycznie interesuje nas tęsknota lub zwarcie. Filtr Kalmana służy do dynamicznego śledzenia stopnia zabezpieczenia między tymi dwoma celami, aby utrzymać rozpiętość spreadu (a więc i przywrócić wartość średnią). Aby utworzyć reguły handlu, należy określić, kiedy spread został przesunięty zbyt daleko od jego oczekiwanej wartości. W jaki sposób określamy, za bardzo daleko, czy moglibyśmy wykorzystać zestaw stałych wartości bezwzględnych, ale musielibyśmy to ustalić empirycznie. Wprowadziłoby to do systemu kolejny darmowy parametr, który wymagałby optymalizacji (i dodatkowego niebezpieczeństwa przeuczenia). Jednym z nieparametrycznych podejść do tworzenia tych wartości jest uwzględnienie wielokrotności odchylenia standardowego spreadu i wykorzystanie ich jako granic. For simplicity we can set the coefficient of the multiple to be equal to one. Hence we can go long the spread if the forecast error drops below the negative standard deviation of the spread. Respectively we can go short the spread if the forecast error exceeds the positive standard deviation of the spread. The exit rules are simply the opposite of the entry rules. The dynamic hedge ratio is represented by one component of the hidden state vector at time t, thetat, which we will denote as theta0t. This is the beta slope value that is well known from linear regression. Longing the spread here means purchasing (longing) N units of TLT and selling (shorting) lfloor , where lfloor is the floor representing the highest integer less than x. The latter is necessary as we must transact a whole number of units of the ETFs. Shorting the spread is the opposite of this. N controls the overall size of the position. et represents the forecast error or residual error of the prediction at time t, while Qt represents the variance of this prediction at time t. For completeness, the rules are specified here: et lt - sqrt - Long the spread: Go long N shares of TLT and go short lfloor units of IEI et ge - sqrt - Exit long: Close all long positions of TLT and IEI et gt sqrt - Short the spread: Go short N shares of TLT and go long lfloor units of IEI et le sqrt - Exit short: Close all short positions of TLT and IEI The role of the Kalman filter is to help us calculate thetat, as well et and Qt. thetat represents the vector of the intercept and slope values in the linear regression between TLT and IEI at time t. It is estimated by the Kalman filter. The forecast errorresidual et yt - hat t is the difference between the predicted value of TLT today and the Kalman filters estimate of TLT today . Qt is the variance of the predictions and hence sqrt is the standard deviation of the prediction. The implementation of the strategy involves the following steps: Receive daily market OHLCV bars for both TLT and IEI Use the recursive online Kalman filter to estimate the price of TLT today based on yesterdays observations of IEI Take the difference between the Kalman estimate of TLT and the actual value, often called the forecast error or residual error . which is a measure of how much the spread of TLT and IEI moves away from its expected value Long the spread when the movement is negatively far from the expected value and correspondingly short the spread when the movement is positively far from the expected value Exit the long and short positions when the series reverts to its expected value In order to carry out this strategy it is necessary to have OHLCV pricing data for the period covered by this backtest. In particular it is necessary to download the following: TLT - For the period 3rd August 2009 to 1st August 2018 (link here ) IEI For the period 3rd August 2009 to 1st August 2018 (link here ). This data will need to placed in the directory specified by the QSTrader settings file if you wish to replicate the results. Python QSTrader Implementation Since QSTrader handles the position tracking, portfolio management, data ingestion and order management the only code we need to write involves the Strategy object itself. The Strategy communicates with the PortfolioHandler via the event queue, making use of SignalEvent objects to do so. In addition we must import the base abstract strategy class, AbstractStrategy . Note that in the current alpha version of QSTrader we must also import the PriceParser class. This is used to multiply all prices on input by a large multiple (108) and perform integer arithmetic when tracking positions. This avoids floating point rounding issues that can accumulate over the long period of a backtest. We must divide all the prices by PriceParser. PRICEMULTIPLIER to obtain the correct values: The next step is to create the KalmanPairsTradingStrategy class. The job of this class is to determine when to create SignalEvent objects based on received BarEvent s from the daily OHLCV bars of TLT and IEI from Yahoo Finance. There are many different ways to organise this class. Ive opted to hardcode all of the parameters in the class for clarity of the explanation. Notably Ive fixed the value of delta10 and vt10 . They represent the system noise and measurement noise variance in the Kalman Filter model. This could also be implemented as a keyword argument in the init constructor of the class. Such an approach would allow straightforward parameter optimisation. The first task is to set the time and invested members to be equal to None. as they will be updated as market data is accepted and trade signals generated. latestprices is a two-array of the current prices of TLT and IEI, used for convenience through the class. The next set of parameters all relate to the Kalman Filter and are explained in depth in the previous two articles here and here . The final set of parameters include days. used to track how many days have passed as well as qty and curhedgeqty. used to track the absolute quantities of ETFs to purchase for both the long and short side. I have set this to be 2,000 units on an account equity of 100,000 USD. The next method setcorrecttimeandprice is a helper method utilised to ensure that the Kalman Filter has all of the correct pricing information available at the right point. This is necessary because in an event-driven backtest system such as QSTrader market information arrives sequentially. We might be in a situation on day K where weve received a price for IEI, but not TFT. Hence we must wait until both TFT and IEI market events have arrived from the backtest loop, through the events queue. In live trading this is not an issue since they will arrive almost instantaneously compared to the trading period of a few days. However, in an event-driven backtest we must wait for both prices to arrive before calculating the new Kalman filter update. The code essentially checks if the subsequent event is for the current day. If it is, then the correct price is added to the latestprice list of TLT and IEI. If it is a new day then the latest prices are reset and the correct prices are once again added. This type of housekeeping method will likely be absorbed into the QSTrader codebase in the future, reducing the necessity to write boilerplate code, but for now it must form part of the strategy itself. The core of the strategy is carried out in the calculatesignals method. Firstly we set the correct times and prices (as described above). Then we check that we have both prices for TLT and IEI, at which point we can consider new trading signals. y is set equal to the latest price for IEI, while F is the observation matrix containing the latest price for TLT, as well as a unity placeholder to represent the intercept in the linear regression. The Kalman Filter is subsequently updated with these latest prices. Finally we calculate the forecast error et and the standard deviation of the predictions, sqrt . Lets run through this code step-by-step, as it looks a little complicated. The first task is to form the scalar value y and the observation matrix F. containing the prices of IEI and and TLT respectively. We calculate the variance-covariance matrix R or set it to the zero-matrix if it has not yet been initialised. Subsequently we calculate the new prediction of the observation yhat as well as the forecast error et . We then calculate the variance of the observation predictions Qt as well as the standard deviation sqrtQt. We use the update rules derived here to obtain the posterior distribution of the states theta. which contains the hedge ratioslope between the two prices: Finally we generate the trading signals based on the values of et and sqrt . To do this we need to check what the invested status is - either long, short or None. Notice how we need to adjust the curhedgeqty current hedge quantity when we go long or short as the slope theta0t is constantly adjusting in time: This is all of the code necessary for the Strategy object. We also need to create a backtest file to encapsulate all of our trading logic and class choices. The particular version is very similar to those used in the examples directory and replaces the equity of 500,000 USD with 100,000 USD. It also changes the FixedPositionSizer to the NaivePositionSizer. The latter is used to naively accept the suggestions of absolute quantities of ETF units to trade as determined in the KalmanPairsTradingStrategy class. In a production environment it would be necessary to adjust this depending upon the risk management goals of the portfolio. Here is the full code for the kalmanqstraderbacktest. py : As long as QSTrader is correctly installed and the data has been downloaded from Yahoo Finance the code can be executed via the following command in the terminal: Thanks to the efforts of many volunteer developers, particularly ryankennedyio and femtotrader. the code is well-optimised for OHLCV bar data and carries out the backtesting rapidly. Strategy Results One of the latest features to be added to QSTrader is that of the tearsheet developed primarily by nwillemse. This feature is still in an early stage of development but will be demonstrated here. A tearsheet is primarily used within institutional settings as a one pager description of a trading strategy. The TearsheetStatistics class in the QSTrader codebase replicates many of the statistics found in a typical strategy performance report. The top two graphs represent the equity curve and drawdown percentage, respectively. Beneath this are the monthly and yearly performance panels. Finally the equity curve, trade-level and time-based statistics are presented: Click the image for a larger view. The equity curve begins relatively flat for the first year of the strategy but rapidly escalates during 2017. During 2017 the strategy becomes significantly more volatile remaining underwater until 2018 and reaching a maximum daily drawdown percentage of 15.79. The performance gradually increases from the maximum drawdown in late 2017 through to 2018. The strategy has a CAGR of 8.73 with a Sharpe Ratio of 0.75. It also has a long maximum drawdown duration of 777 days - over two years Note that this strategy is carried out gross of transaction costs so the true performance would likely be worse. Next Steps There is a lot of research work necessary to turn this into a profitable strategy that we would deploy in a live setting. Potential avenues of research include: Parameter Optimisation - Varying the parameters of the Kalman Filter via cross-validation grid search or some form of machine learning optimisation. However, this introduces the distinct possibility of overfitting to historical data. Asset Selection - Choosing additional, or alternative, pairs of ETFs would help to add diversification to the portfolio, but increases the complexity of the strategy as well as the number of trades (and thus transaction costs). In future articles we will consider how to carry out these procedures for various trading strategies. References 1 Chan, E. P. (2017) Algorithmic Trading: Winning Strategies and their Rationale . Wiley 2 OMahony, A. (2017) Ernie Chans EWAEWC pair trade with Kalman filter . quantopianpostsernie-chans-ewa-slash-ewc-pair-trade-with-kalman-filter Just Getting Started with Quantitative Trading

No comments:

Post a Comment