Thursday 7 December 2017

Przeprowadzanie analizy back testing średniej


Proste średnie kroczące - Testy handlowe, jakie parametry ruchome są najlepsze Ta strona ma ocean średniej ruchomej backtests, którą przeprowadziłem dla DAX, SP500, a także USDEU (Forex). Testy te zostały wykonane przy użyciu różnych strategii sygnałowych: prostych wariantów wykładniczych i krzyżowych oraz różnych indeksów dla okresu 1000 dni handlowych. W przeciwieństwie do innych stron internetowych, przetestowałem wszystkie wartości średniej ruchomej w ciągu dnia od 1 do 1000 dni, ponieważ strategie krzyżowania również są w połączeniu. Te dane są również niewystarczające, ponieważ próbowałem wykonywać realistyczne testy, symulując spread sprzedaży i podatki dla porównanie ze strategią referencyjną (buy hold). Szybko reagująca wartość okna wygląda dobrze w teorii i przy prostym teście. Jednak spread, opłaty i podatki zniszczą wszystkie osiągnięcia w praktycznym zastosowaniu. Właśnie dlatego te realistyczne testy są tak cenne. Mam nadzieję, że ta strona pomoże Ci w Twoich transakcjach, skorzystaj z niego. Testowanie swoich pomysłów na handel Jedną z najbardziej przydatnych rzeczy, które możesz zrobić w oknie analizy, jest przetestowanie strategii handlowej na danych historycznych. To może dać ci cenny wgląd w mocne i słabe punkty twojego systemu przed inwestowaniem prawdziwych pieniędzy. Ta pojedyncza funkcja AmiBroker pozwala zaoszczędzić mnóstwo pieniędzy. Pisanie zasad handlu Najpierw musisz mieć obiektywne (lub mechaniczne) reguły wejścia i wyjścia z rynku. Ten krok jest podstawą twojej strategii i musisz pomyśleć o tym sam, ponieważ system musi pasować do twojej tolerancji ryzyka, rozmiaru portfela, technik zarządzania pieniędzmi i wielu innych indywidualnych czynników. Kiedy już będziesz miał własne zasady handlu, powinieneś zapisać je jako zasady kupna i sprzedaży w AmiBroker Formula Lanugage (plus krótki i przykrywka, jeśli chcesz przetestować również krótki handel). W tym rozdziale przyjrzymy się bardzo prostemu, ruchomemu średniemu systemowi krzyżowemu. System kupowałby skrypty giełdowe, gdy cena zamknięcia wzrośnie powyżej 45-dniowej wykładniczej średniej kroczącej i będzie sprzedawać skrypty giełdowe, gdy cena zamknięcia spadnie poniżej 45-dniowej średniej kroczącej. Wykładniczą średnią kroczącą można obliczyć w AFL za pomocą wbudowanej funkcji EMA. Wszystko, co musisz zrobić, to określić tablicę wejściową i okres uśredniania, więc 45-dniowa wykładnicza średnia krocząca cen zamknięcia może być uzyskana przez następującą instrukcję: Bliski identyfikator odnosi się do wbudowanej tablicy utrzymującej ceny zamknięcia aktualnie analizowanego symbolu . Aby przetestować, czy cena zamknięcia przekracza średnią kroczącą wykładniczą, użyjemy wbudowanej funkcji krzyżowej: buy cross (close, ema (close, 45)) Powyższa instrukcja definiuje regułę kupowania. Daje quot1quot lub quottruequot, gdy cena bliskiej ceny przekracza wartość ema (zamknij, 45). Następnie możemy napisać regułę sprzedaży, która dałaby kwotą równą, gdy stanie się przeciwna sytuacja - bliskie krzyże cen poniżej ema (zamknij, 45): sprzedaj krzyż (ema (zamknij, 45), zamknij) Zwróć uwagę, że używamy tej samej funkcji krzyżowej, ale przeciwna kolejność argumentów. Tak więc pełna formuła dla długich transakcji będzie wyglądać tak: kup krzyż (zamknij, ema (zamknij, 45)) sprzedaj krzyż (ema (zamknij, 45), zamknij) UWAGA: Aby utworzyć nową formułę, otwórz edytor formuł za pomocą Analysis-gtFormula Editor menu, wpisz formułę i wybierz polecenie Narzędzia-gtWyślij do menu Analiza w edytorze formuł. Aby ponownie przetestować system, kliknij przycisk Wstecz test w oknie Automatyczna analiza. Upewnij się, że wpisałeś formułę zawierającą przynajmniej reguły kupna i sprzedaży (jak pokazano powyżej). Gdy formuła jest poprawna, AmiBroker rozpoczyna analizę twoich symboli zgodnie z twoimi regułami handlu i generuje listę symulowanych transakcji. Cały proces jest bardzo szybki - możesz przetestować tysiące symboli w ciągu kilku minut. Okno postępu pokazuje przybliżony czas ukończenia. Jeśli chcesz zatrzymać ten proces, po prostu kliknij przycisk Anuluj w oknie postępu. Po zakończeniu procesu lista symulowanych transakcji jest wyświetlana w dolnej części okna analizy automatycznej. (panel wyników). Możesz sprawdzić, kiedy pojawiły się sygnały kupna i sprzedaży, klikając dwukrotnie na okienko Wyniki transakcji. Da ci to surowe lub niefiltrowane sygnały dla każdego paska, gdy spełnione są warunki kupna i sprzedaży. Jeśli chcesz zobaczyć tylko pojedyncze strzałki handlowe (otwieranie i zamykanie aktualnie wybranej transakcji), dwukrotnie kliknij linię, przytrzymując wciśnięty klawisz SHIFT. Możesz także wybrać rodzaj wyświetlania, wybierając odpowiedni element z menu kontekstowego, które pojawi się po kliknięciu prawym przyciskiem myszy na panelu wyników. Oprócz listy wyników możesz uzyskać bardzo szczegółowe statystyki dotyczące wydajności systemu, klikając przycisk Zgłoś. Aby dowiedzieć się więcej o statystykach raportów, sprawdź opis okna raportu. Zmiana ustawień testowania wstecznego Mechanizm testowania wstecznego w programie AmiBroker używa pewnych wstępnie zdefiniowanych wartości do wykonania zadania, w tym wielkości portfela, okresowości (dailyweeklymonthly), kwoty prowizji, stopy procentowej, maksymalnej straty i zatrzymań celu zysku, rodzaju transakcji, pól cen i tak dalej. na. Wszystkie te ustawienia mogą zostać zmienione przez użytkownika za pomocą okna ustawień. Po zmianie ustawień pamiętaj, aby ponownie przeprowadzić testowanie, jeśli chcesz, aby wyniki były zsynchronizowane z ustawieniami. Na przykład, aby wykonać test z powrotem na cotygodniowych paskach zamiast codziennie, wystarczy kliknąć przycisk Ustawienia, wybrać opcję Co tydzień z listy "Okresowość" i kliknąć OK. następnie przeprowadź analizę, klikając Back test. Zarezerwowane nazwy zmiennych W poniższej tabeli przedstawiono nazwy zarezerwowanych zmiennych używanych przez narzędzie Automatic Analyzer. Znaczenie i przykłady ich użycia podano w dalszej części tego rozdziału. Pozwala kontrolować kwotę dolara lub procent portfela, który jest inwestowany w handel (patrz wyjaśnienia poniżej) Analiza automatyczna (nowa w 3.9) Do tej pory omawialiśmy dość proste użycie testera wstecznego. AmiBroker obsługuje jednak znacznie bardziej wyrafinowane metody i koncepcje, które zostaną omówione w dalszej części tego rozdziału. Należy pamiętać, że początkujący użytkownik powinien najpierw trochę zagrać z łatwiejszymi tematami opisanymi powyżej, zanim przejdzie dalej. Tak więc, kiedy jesteś gotowy, zapoznaj się z następującymi ostatnio wprowadzonymi funkcjami back-testera: a) Host skryptów AFL dla zaawansowanych twórców formularzy b) ulepszona obsługa krótkich transakcji c) sposób kontrolowania ceny wykonania zlecenia od skrypt d) różne rodzaje przystanków w testerze wstecznym e) dobór pozycji f) rozmiar całej partii i jej wielkość g) Konto marginesu h) weryfikacja historyczna hosta Host skryptów AFL to zaawansowany temat, który omówiono w oddzielnym dokumencie dostępnym tutaj i nie będę dyskutować to w tym dokumencie. Pozostałe funkcje są znacznie łatwiejsze do zrozumienia. W poprzednich wersjach AmiBroker, jeśli chciałeś przetestować system za pomocą zarówno długich, jak i krótkich transakcji, możesz symulować strategię stop-and-reverse. Po zamknięciu długiej pozycji natychmiast otworzono nową pozycję krótką. Wynika to z faktu, że zmienne zastrzeżone kupione i sprzedane zostały użyte dla obu typów transakcji. Teraz (z wersją 3.59 lub wyższą) istnieją oddzielne zastrzeżone zmienne do otwierania i zamykania długich i krótkich transakcji: buy - quottruequot lub 1 wartość otwiera długą transakcję sprzedaży - quottruequot lub 1 wartość zamyka długą transakcję - quottruequot lub 1 wartość otwiera krótką transakcję - quottruequot lub 1 wartość zamyka krótki handel Som w celu przetestowania krótkich transakcji, musisz przypisać zmienne krótkie i kryjące. Jeśli używasz systemu stop-and-reverse (zawsze na rynku), po prostu przypisz sprzedaż do krótkiej sprzedaży i kup na pokrycie kosztów zakupu krótkiej sprzedaży. Symuluje to sposób działania wersji sprzed 3.59. Ale teraz AmiBroker umożliwia posiadanie oddzielnych reguł handlowych na długie i krótkie terminy, jak pokazano w tym prostym przykładzie: długie reguły wejścia i wyjścia transakcji: kupuj krzyż (cci (), 100) sprzedaj krzyż (100, cci ()) zasady wejścia i wyjścia: krzyż krzyżowy (-100, cci ()) pokrywający (cci (), -100) Należy zauważyć, że w tym przykładzie, jeśli CCI wynosi od -100 do 100, nie ma już rynku. Kontrolowanie ceny handlu AmiBroker oferuje teraz 4 nowe zmienne zarezerwowane do określania ceny, po której realizowane są zlecenia kupna, sprzedaży, krótkich i okładkowych. Te tablice mają następujące nazwy: buyprice, sellprice, shortprice and coverprice. Głównym zastosowaniem tych zmiennych jest kontrolowanie ceny handlowej: BuyPrice IIF (dayofweek () 1, HIGH, CLOSE) w poniedziałek kupuj na wysokim, inaczej kupuj przy zamykaniu Więc możesz napisać, aby symulować prawdziwe zlecenia stop: BuyStop. formuła dla poziomu kupowania SellStop. formuła do sprzedaży stopu zatrzymania, jeśli w dowolnym momencie w ciągu dnia ceny wznoszą się powyżej poziomu buystop (highgtbuystop) następuje zamówienie kupna (na buystop lub niski, który z nich jest wyższy) Kup Cross (High, BuyStop), jeśli kiedykolwiek w ciągu dnia ceny spadną poniżej poziomu sellprice (low lt sellstop) ma miejsce zamówienie sprzedaży (w sellstop lub wyższej, która wartość jest niższa) Sell Cross (SellPrice, SellStop) BuyPrice max (BuyStop, Low) upewnij się, że cena kupna nie jest niższa niż Low SellPrice min (SellStop, High) upewnij się, że cena sprzedaży nie większa niż wysoka Należy zauważyć, że AmiBroker ustawia zmienne tablicowe buyprice, sellprice, shortprice i coverprice z wartościami zdefiniowanymi w oknie ustawień testów systemowych (pokazanych poniżej), więc możesz, ale nie musisz ich definiować w formule. Jeśli ich nie zdefiniujesz, AmiBroker działa tak, jak w starych wersjach. Podczas testowania wstecznego AmiBroker sprawdzi, czy wartości przypisane do buyprice, sellprice, shortprice, coverprice pasują do zakresu high-low danego paska. Jeśli nie, AmiBroker dostosuje go do wysokiej ceny (jeśli cena tablicy jest wyższa niż wysoka) lub do niskiej ceny (jeśli cena tablicy jest niższa niż niska) Zatrzymanie celu zysku Jak widać na powyższym obrazku, nowe ustawienia dla Ograniczenia celu zysku są dostępne w oknie ustawień testu systemu. Zatrzymania celu zysku są wykonywane, gdy wysoka cena za dany dzień przekracza poziom zatrzymania, który można podać jako procent lub wzrost punktowy w stosunku do ceny zakupu. Domyślnie zatrzymania są wykonywane po cenie definiowanej jako tablica ceny sprzedaży (dla transakcji długich) lub tablicy cen na pokrycie (w przypadku krótkich transakcji). To zachowanie można zmienić za pomocą funkcji quotExit at stopquot. quotExit at stopquot Jeśli zaznaczysz quotExit w polu stopquot w ustawieniach, zatrzymania będą wykonywane na poziomie zatrzymania dokładnego, tzn. jeśli zdefiniujesz cel docelowy stop na 10 stop, a cena kupna będzie wynosił 50, zlecenie stop zostanie wykonane na poziomie 55, nawet jeśli tablica cen sprzedaży zawiera inną wartość (na przykład cena zamknięcia 56). Straty maksymalne przestają działać w podobny sposób - są wykonywane, gdy niska cena za dany dzień spada poniżej poziomu zatrzymania, który można podać jako procent lub wzrost punktowy od ceny zakupu Ten rodzaj zatrzymania służy do ochrony zysków, ponieważ śledzi twój handel, więc za każdym razem, gdy wartość pozycji osiągnie nowy poziom, zatrzymanie końcowe jest umieszczane na wyższym poziomie. Kiedy zysk spadnie poniżej końcowego poziomu zatrzymania, pozycja zostaje zamknięta. Mechanizm ten został zilustrowany na poniższym obrazku (pokazano 10 zatrzymania końcowego): przykładowa implementacja niskiego poziomu zatrzymania zysku w AFL: Kup krzyż (MACD (), sygnał ()) dla (i 0 i lt BarCount i) if (priceatbuy 0 Kup i) priceatbuy BuyPrice i if (priceatbuy gt 0 SellPrice i gt 1.1 priceatbuy) Sprzedaj i 1 SellPrice i 1.1 priceatbuy priceatbuy 0 else Sprzedaj i 0 Jest to nowa funkcja w wersji 3.9. Pozycjonowanie wielkości w backtesterze jest realizowane za pomocą nowej zmiennej zmiennej PositionSize ltsize arraygt Teraz możesz kontrolować kwotę dolara lub procent portfela, który jest inwestowany w wartość dodatnią liczby transakcji, która jest inwestowana w handel, na przykład: PositionSize 1000 invest 1000 w każdej ujemnej liczbie transakcji -100 ..- 1 definiuje procent: -100 daje 100 aktualnej wielkości portfela, -33 daje 33 dostępnego kapitału, na przykład: PositionSize -50 zawsze inwestuje tylko połowę obecnego przykładowego rozmiaru dynamicznego equity: PositionSize - 100 RSI (), ponieważ RSI waha się od 0..100 to spowoduje pozycję w zależności od wartości RSI - gt niskie wartości RSI spowoduje większy zainwestowany procent Jeśli zainwestuje mniej niż 100 dostępnych środków, to pozostała kwota zarabia na stopie procentowej zgodnie z definicją w ustawieniach. W oknie ustawień AA znajduje się również nowe pole wyboru: quotAllow size size shrinkingquot - kontroluje to, w jaki sposób backtester radzi sobie z sytuacją, gdy żądany rozmiar pozycji (za pomocą zmiennej PositionSize) przekracza dostępną gotówkę: gdy ta flaga jest zaznaczona, pozycja jest wprowadzana z rozmiarem przymocowanym do dostępna gotówka, jeśli nie jest zaznaczone, pozycja nie została wprowadzona. Aby zobaczyć rzeczywiste rozmiary pozycji, skorzystaj z nowego trybu raportu w oknie ustawień AA: quotTrade lista z cenami i poz. sizequot Na koniec, oto przykład techniki opartej na Tharps ATR, zakodowanej w AFL: Kup tutaj formułę kupna zakupu Sprzedaj 0 sprzedaj tylko przez stop TrailStopAmount 2 ATR (20) Kapitał 100000 WAŻNE: Ustaw także w Ustawieniach: Początkowa Ryzyko akcji 0.01Capital PositionSize (RiskTrailStopAmount) BuyPrice ApplyStop (2, 2, TrailStopAmount, 1) Technikę można podsumować w następujący sposób: Całkowita wartość kapitału na symbol to 100 000, a poziom ryzyka ustalamy na 1 z sumy kapitałów własnych. Poziom ryzyka definiowany jest w następujący sposób: jeśli zatrzymanie z tyłu na 50 kursie wynosi, powiedzmy, 45 (wartość dwóch ATR w stosunku do pozycji), strata 5 jest podzielona na 1000 ryzyka, aby dać 200 akcji do kupienia. Ryzyko straty wynosi 1000, ale ryzyko alokacji wynosi 200 akcji x 50 lub 10 000. Przydzielamy 10 udziałów do zakupu, ale ryzykujemy tylko 1000. (Edytowany fragment z listy mailingowej AmiBroker) Rozmiar partii i wielkość kleszcza Różne instrumenty są sprzedawane z różnymi jednostkami kwotowania lub kwotami równymi. Na przykład można kupić ułamkową liczbę jednostek funduszu inwestycyjnego, ale nie można kupić ułamkowej liczby akcji. Czasami trzeba kupować w partiach 10 lub 100. AmiBroker pozwala teraz określić rozmiar bloku na poziomie globalnym i na symbol. Na stronie Symbol-gtInformacja (rysunek 3) można zdefiniować rozmiar partii na symbol. Wartość zero oznacza, że ​​symbol nie ma specjalnego rozmiaru partii okrągłej i będzie używał wartości "Drobny okrągły lot" (ustawienie globalne) na stronie ustawień automatycznej analizy (rysunek 1). Jeśli domyślny rozmiar jest ustawiony na zero, oznacza to, że ułamkowa liczba sharecontracts jest dozwolona. Możesz także kontrolować wielkość partii okrągłej bezpośrednio z formuły AFL za pomocą zmiennej zarezerwowanej RoundLotSize, na przykład: To ustawienie kontroluje ruch minimalnej ceny danego symbolu. Możesz zdefiniować go na poziomie globalnym i na poziomie symbolu. Podobnie jak w przypadku wielkości partii, możesz zdefiniować rozmiar znacznika dla symbolu na stronie Symbol-gtInformacje (rysunek 3). Wartość zero nakazuje AmiBrokerowi użycie quotdefault tickququot zdefiniowanego na stronie Settings (rysunek 1) okna Automatic Analysis. Jeśli domyślny rozmiar znacznika jest również ustawiony na zero, oznacza to, że nie ma ruchu ceny minimalnej. Możesz ustawić i pobrać rozmiar tyknięcia również z formuły AFL za pomocą zmiennej zarezerwowanej TickSize, na przykład: Zauważ, że ustawienie rozmiaru tyknięcia ma wpływ tylko na transakcje wychodzące z wbudowanych przystanków i / lub ApplyStop (). Backtester zakłada, że ​​dane o cenach podążają za wymaganiami dotyczącymi wielkości kleszczy i nie zmieniają one tablic cen dostarczanych przez użytkownika. Tak więc określenie rozmiaru znacznika ma sens tylko wtedy, gdy używasz wbudowanych przystanków, więc punkty wyjścia są generowane po cenach zaokrąglonych, zamiast obliczanych. Na przykład w Japonii - nie możesz mieć ułamkowych części jena, więc powinieneś zdefiniować globalny ticksize na 1, więc wbudowany zatrzymuje transakcje na poziomie liczb całkowitych. Ustawienie depozytu konta definiuje wymagany margines procentowy dla całego konta. Domyślna wartość marży konta wynosi 100. Oznacza to, że musisz podać 100 funduszy, aby wejść do handlu i tak właśnie pracował backtester w poprzednich wersjach. Ale teraz możesz symulować konto margin. Kiedy kupujesz na marginesie, po prostu pożyczasz pieniądze od swojego brokera, by kupić akcje. Przy obecnych przepisach możesz postawić 50 ceny zakupu akcji, którą chcesz kupić i pożyczyć drugą połowę od swojego brokera. Aby to zasymulować, wystarczy wpisać 50 w polu Marginesu konta (patrz rys. 1). Jeśli twoje equity equity zostanie ustawione na 10000, twoja siła nabywcza wyniesie wtedy 20000 i będziesz mógł wejść na większe pozycje. Pamiętaj, że to ustawienie określa marżę dla całego konta i wcale NIE jest związane z transakcjami futures. Innymi słowy, możesz handlować zapasami na koncie depozytu zabezpieczającego. "Revers input signal force force" to pole wyboru do ustawień Backtestera. Kiedy jest włączone (ustawienie domyślne) - backtester działa tak, jak w poprzednich wersjach i zamyka już otwartą pozycję, jeśli napotkany zostanie nowy sygnał wejścia w kierunku odwrotnym. Jeśli ten przełącznik jest WYŁĄCZONY - nawet jeśli wystąpi sygnał do tyłu, backtester utrzymuje aktualnie otwarty handel i nie zamyka pozycji, dopóki nie zostanie wygenerowany normalny sygnał wyjścia (sprzedaż lub pokrycie). Innymi słowy, kiedy ten przełącznik jest wyłączony, backtester ignoruje krótkie sygnały podczas długich transakcji i ignoruje sygnały Kupuj podczas krótkich transakcji. quotAllow ten sam pasek wyjścia (pojedyncza tablica) opcja do ustawień, gdy jest włączony (ustawienia domyślne) - wejście i wyjście na tym samym pasku jest dozwolone (jak w poprzednich wersjach), jeśli jest wyłączone - wyjście może się zdarzyć od tylko następny pasek (dotyczy to zwykłych sygnałów, istnieje oddzielne ustawienie dla wyjść generowanych przez ApplyStop). Przełączenie go na OFF pozwala odtworzyć zachowanie testu backtest MS, który nie jest w stanie obsłużyć tego samego dnia wyjścia. quotAktywowanie zatrzymuje się natychmiastowoTo ustawienie rozwiązuje problem testowania systemów, które wchodzą do transakcji na rynku otwartym. W wersjach poprzedzających 4.09 backtester zakładał, że wchodziłeś do transakcji na rynku, więc wbudowane przystanki zostały aktywowane od następnego dnia. Problem polegał na tym, że w rzeczywistości zdefiniowałeś cenę otwarcia jako cenę wejścia do handlu - wtedy wahania cen w tym samym dniu nie powodowały zatrzymania. Było kilka opublikowanych obejść opartych na kodzie AFL, ale teraz nie musisz ich używać. Po prostu, jeśli handlujesz na otwartej przestrzeni, powinieneś oznaczyć quotAktywuj przystanki natychmiast (ryc. 1). Możesz zapytać, dlaczego nie wystarczy sprawdzić tablicę buyprice lub shortprice, jeśli jest ona równa cenie otwartej. Niestety to nie zadziała. Po prostu dlatego, że istnieją dni doji, kiedy cena otwarta jest bliska, a następnie test nie będzie nigdy wiedział, czy transakcja została wprowadzona na rynku, czy jest otwarta. Więc naprawdę potrzebujemy osobnego ustawienia. quotUs QuickAFLquotQuickAFL (tm) to funkcja umożliwiająca szybsze obliczanie AFL w określonych warunkach. Początkowo (od 2003 r.) Był dostępny tylko dla wskaźników, od wersji 5.14 jest dostępny również w automatycznej analizie. Początkowo pomysł polegał na umożliwieniu szybszego odświeżania wykresów poprzez wyliczenie formuły AFL tylko dla tej części, która jest widoczna na wykresie. W podobny sposób okno automatycznej analizy może wykorzystać podzbiór dostępnych ofert do obliczenia AFL, jeśli wybrany parametr 8220range8221 jest mniejszy niż 8220 wszystkich kwotowań. Szczegółowe wyjaśnienie, jak działa QuickAFL i jak go kontrolować, znajduje się w tym artykule bazy wiedzy: amibrokerkb20080703quickafl Zauważ, że ta opcja działa nie tylko w backtesterze, ale również w optymalizacjach, eksploracjach i skanach. Backestowanie ruchomej średniej Crossover w Pythonie z pandami W poprzednim artykule o środowiskach analizy historycznej w Pythonie Z pandami stworzyliśmy zorientowane obiektowo, oparte na badaniach środowisko analizy historycznej i przetestowaliśmy je na losowej strategii prognozowania. W tym artykule wykorzystamy wprowadzone przez nas maszyny do przeprowadzania badań dotyczących rzeczywistej strategii, a mianowicie średniej ruchomej crossover w AAPL. Średnia ruchoma strategia Crossovera Technika Crossover z ruchomą średnią to niezwykle znana uproszczona strategia momentum. Często jest uważany za przykład dla handlu ilościowego w Hello World. Przedstawiona tutaj strategia jest długa. Tworzone są dwa oddzielne proste filtry ruchome o różnych okresach ważności dla poszczególnych szeregów czasowych. Sygnały do ​​zakupu zasobu występują, gdy krótsza średnia krocząca z wyszukiwania z wyprzedzeniem przekracza dłuższą średnią kroczącą z podsumowaniem. 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. W tym przykładzie wybrałem Apple, Inc. (AAPL) jako serię czasową, z krótkim podsumowaniem 100 dni i długim okresem ważności wynoszącym 400 dni. Jest to przykład udostępniany przez zipline algorytmiczną bibliotekę handlową. Dlatego jeśli chcemy wdrożyć naszą własną analizę historyczną, musimy upewnić się, że jest ona zgodna z wynikami w zipline, jako podstawowym środkiem walidacji. Wdrożenie Pamiętaj, aby postępować zgodnie z poprzednim tutorialem tutaj. który opisuje, w jaki sposób konstruowana jest hierarchia obiektu początkowego dla backtestera, w przeciwnym razie poniższy kod nie zadziała. Do tej konkretnej implementacji wykorzystałem następujące biblioteki: Implementacja macross. py wymaga backtest. py z poprzedniego samouczka. Pierwszym krokiem jest zaimportowanie niezbędnych modułów i obiektów: tak jak w poprzednim tutorialu zamierzamy dokonać podklasy abstrakcyjnej klasy bazowej strategii w celu stworzenia MovingAverageCrossStrategy. który zawiera wszystkie szczegóły dotyczące generowania sygnałów, gdy średnie ruchome AAPL krzyżują się ze sobą. Obiekt wymaga krótkiego okna i długiego okna do obsługi. Wartości zostały ustawione na wartości domyślne odpowiednio 100 dni i 400 dni, które są tymi samymi parametrami, które są używane w głównym przykładzie zipline. Średnie ruchome są tworzone za pomocą funkcji pandas rollingmean w barachClose cena zamknięcia akcji AAPL. Po skonstruowaniu indywidualnych średnich ruchomych, seria sygnałów jest generowana przez ustawienie kolumny równej 1,0, gdy krótka średnia ruchoma jest większa niż długa średnia ruchoma, lub 0,0 w przeciwnym razie. Na tej podstawie można generować zlecenia pozycji w celu przedstawienia sygnałów handlowych. MarketOnClosePortfolio jest podklasą z Portfolio. który znajduje się w backtest. py. Jest prawie identyczna z implementacją opisaną w poprzednim samouczku, z tym wyjątkiem, że transakcje są teraz przeprowadzane w trybie Close-to-Close, a nie Open-to-Open. Aby uzyskać szczegółowe informacje na temat definiowania obiektu Portfolio, zobacz poprzedni samouczek. Zostawiłem kod pod kątem kompletności i utrzymania tego samouczka w formie samodzielnej: Teraz, gdy zdefiniowano klasy MovingAverageCrossStrategy i MarketOnClosePortfolio, zostanie wywołana główna funkcja, aby powiązać wszystkie funkcje. Ponadto wyniki strategii zostaną zbadane za pomocą wykresu krzywej kapitału własnego. Obiekt Pandas DataReader pobiera ceny ALCL dla cen AAPL za okres od 1 stycznia 1990 r. Do 1 stycznia 2002 r., W którym to momencie tworzone są sygnały DataFrame w celu generowania sygnałów długookresowych. Następnie portfel jest generowany z początkową bazą kapitałową 100 000 USD, a zwroty są obliczane na krzywej kapitału. Ostatnim krokiem jest użycie matplotlib do wykreślenia dwucyfrowego wykresu obu cen AAPL, nałożonego na ruchome średnie i sygnały kupna, a także krzywej kapitału z tymi samymi sygnałami kupna. Kod kreślenia jest pobierany (i modyfikowany) z przykładu implementacji zip. Graficzne dane wyjściowe kodu są następujące. Użyłem polecenia wklejania IPython, aby umieścić go bezpośrednio w konsoli IPython w systemie Ubuntu, aby graficzne wyjście pozostało w widoku. Różowe uptyki oznaczają kupowanie akcji, a czarne wyprzedaże oznaczają ich sprzedaż. Jak widać, strategia traci pieniądze w tym okresie, z pięcioma transakcjami w obie strony. Nie jest to zaskakujące, biorąc pod uwagę zachowanie się AAPL w tym okresie, które cechuje niewielka tendencja spadkowa, po którym nastąpił znaczny wzrost od 1998 r. Okres zwrotu sygnałów średniej ruchomej jest dość duży, co wpłynęło na zysk z ostatniej transakcji. , które w przeciwnym razie mogło uczynić strategię opłacalną. W kolejnych artykułach stworzymy bardziej wyrafinowany sposób analizowania wydajności, a także opis sposobu optymalizacji okresów ważności poszczególnych sygnałów średniej ruchomej. Właśnie zaczyna się handel ilościowy

No comments:

Post a Comment