Pomyślne testowanie wsteczne algorytmicznych strategii handlowych - część I W tym artykule kontynuowane są serie dotyczące handlu ilościowego, które rozpoczęły się od Przewodnika dla początkujących i identyfikacji strategii. Oba te dłuższe, bardziej zaangażowane artykuły stały się bardzo popularne, więc będę kontynuował tę kwestię i przedstawię szczegóły na temat analizy historycznej strategii. Algorytmiczna weryfikacja historyczna wymaga znajomości wielu dziedzin, w tym psychologii, matematyki, statystyki, rozwoju oprogramowania i mikrostruktury rynku. Nie mogłem mieć nadziei na pokrycie wszystkich tych tematów w jednym artykule, więc zamierzam podzielić je na dwie lub trzy mniejsze części. O czym będziemy dyskutować w tej sekcji Zacznę od zdefiniowania analizy historycznej, a następnie opiszę podstawy jej wykonania. Następnie przedstawię uprzedzenia, które poruszyliśmy w Poradniku dla początkujących w handlu ilościowym. Następnie przedstawię porównanie różnych dostępnych opcji oprogramowania do testowania wstecznego. W kolejnych artykułach przyjrzymy się szczegółom realizacji strategii, które są często rzadko wspomniane lub ignorowane. Zastanowimy się również nad tym, jak sprawić, by proces analizy historycznej był bardziej realistyczny dzięki uwzględnieniu specyfiki giełdy. Następnie omówimy koszty transakcji i sposób ich prawidłowego modelowania w ustawieniach historycznych. Zakończymy dyskusję na temat wyników naszych testów historycznych i na koniec przedstawimy przykład wspólnej strategii ilościowej, znanej jako handel parami średniej reaktywności. Zacznijmy od dyskusji na temat tego, czym jest backtesting i dlaczego powinniśmy go przeprowadzić w naszym handlu algorytmicznym. Co to jest Backtesting Algorithmic trading różni się od innych typów klas inwestycyjnych, ponieważ możemy bardziej wiarygodnie przewidzieć przyszłe wyniki z wcześniejszych osiągnięć, w wyniku dużej dostępności danych. Proces, w którym odbywa się to jest znany jako backtesting. W uproszczeniu, weryfikacja historyczna przeprowadzana jest poprzez eksponowanie danego algorytmu strategii na strumień historycznych danych finansowych, co prowadzi do zestawu sygnałów transakcyjnych. Każda transakcja (która będzie oznaczać tutaj w obiegu dwa sygnały) będzie miała powiązany zysk lub stratę. Nagromadzenie tego zysku w czasie trwania strategii historycznej doprowadzi do całkowitego rachunku zysków i strat (znanego również jako PL lub PnL). To jest sedno idei, chociaż oczywiście diabeł tkwi w szczegółach Jakie są kluczowe powody weryfikacji historycznej strategii algorytmicznej Filtracja - Jeśli pamiętasz z artykułu o identyfikacji strategii. naszym celem na początkowym etapie badań było przygotowanie strategii, a następnie odfiltrowanie strategii, która nie spełniała określonych kryteriów. Backtesting zapewnia nam inny mechanizm filtracji, ponieważ możemy wyeliminować strategie, które nie spełniają naszych wymagań dotyczących wydajności. Modelowanie - analiza historyczna pozwala nam (bezpiecznie) testować nowe modele pewnych zjawisk rynkowych, takich jak koszty transakcyjne, routing zamówień, opóźnienia, płynność lub inne problemy z mikrostrukturą rynku. Optymalizacja - chociaż optymalizacja strategii jest obarczona uprzedzeniami, weryfikacja historyczna pozwala nam zwiększyć wydajność strategii poprzez modyfikację ilości lub wartości parametrów powiązanych z tą strategią i ponowne obliczenie jej wydajności. Weryfikacja - nasze strategie są często pozyskiwane zewnętrznie za pośrednictwem naszej strategii. Analiza historyczna strategii zapewnia, że nie została ona nieprawidłowo zaimplementowana. Chociaż rzadko będziemy mieli dostęp do sygnałów generowanych przez strategie zewnętrzne, często będziemy mieć dostęp do wskaźników wydajności, takich jak Sharpe Ratio i Charakterystyka Drawdown. W ten sposób możemy je porównać z naszą własną implementacją. Backtesting zapewnia szereg korzyści dla handlu algorytmicznego. Jednak nie zawsze możliwe jest bezpośrednie przetestowanie strategii. Ogólnie biorąc, wraz ze wzrostem częstotliwości strategii, trudniej jest poprawnie modelować mikrostrukturę rynku i wymiany. Prowadzi to do mniej wiarygodnych testów historycznych, a tym samym do trudniejszej oceny wybranej strategii. Jest to szczególny problem, w którym system wykonawczy jest kluczem do wydajności strategii, podobnie jak w przypadku algorytmów o bardzo wysokiej częstotliwości. Niestety analiza historyczna jest obarczona uprzedzeniami wszystkich typów. Poruszaliśmy niektóre z tych problemów w poprzednich artykułach, ale teraz omówimy je szczegółowo. Zagadki wpływające na strategie Backtests Istnieje wiele błędów, które mogą wpłynąć na skuteczność strategii testowanej wstecz. Niestety, te uprzedzenia mają tendencję do zwiększania wydajności, a nie umniejszania jej. Dlatego zawsze powinieneś uważać test historyczny za wyidealizowaną górną granicę rzeczywistej realizacji strategii. Niemożliwe jest wyeliminowanie odchyleń od handlu algorytmicznego, więc naszym zadaniem jest zminimalizować je tak, jak najlepiej, aby podejmować świadome decyzje dotyczące naszych algorytmicznych strategii. Istnieją cztery główne błędy, które chcę omówić: błąd optymalizacji. Look-Ahead Bias. Odchylenie w stresie i tendencja tolerancji psychologicznej. Odchylenie w optymalizacji Jest to prawdopodobnie najbardziej podstępne ze wszystkich błędów uprzedzeń. Polega ona na dostosowaniu lub wprowadzeniu dodatkowych parametrów transakcyjnych, dopóki skuteczność strategii w zestawie danych historycznych nie będzie bardzo atrakcyjna. Jednak raz na żywo wydajność strategii może być znacznie inna. Inna nazwa tego odchylenia to dopasowanie krzywej lub odchylanie danych. Trudności z optymalizacją są trudne do wyeliminowania, ponieważ strategie algorytmiczne często obejmują wiele parametrów. Parametrami w tym przypadku mogą być kryteria entryexit, okresy oczekiwania, okresy uśredniania (tj. Parametr średniej wygładzania ruchomej) lub częstotliwość pomiaru zmienności. Optymalizacja obciążenia może zostać zminimalizowana poprzez utrzymanie minimalnej liczby parametrów i zwiększenie ilości punktów danych w zbiorze treningowym. W rzeczywistości należy uważać na te ostatnie, ponieważ starsze punkty treningowe mogą podlegać wcześniejszemu reżimowi (np. Środowisku regulacyjnemu), a zatem mogą nie mieć związku z aktualną strategią. Jedną z metod łagodzenia tego błędu jest przeprowadzenie analizy wrażliwości. Oznacza to stopniowe zmienianie parametrów i wykreślanie powierzchni wydajności. Rozsądne, fundamentalne uzasadnienie wyboru parametrów powinno, przy uwzględnieniu wszystkich innych czynników, prowadzić do płynniejszej powierzchni parametrów. Jeśli masz bardzo skąpą powierzchnię działania, często oznacza to, że parametr nie odzwierciedla zjawiska i jest artefaktem danych testowych. Istnieje obszerna literatura na temat wielowymiarowych algorytmów optymalizacyjnych i jest to wysoce aktywny obszar badań. Nie będę się nad tym zastanawiał, ale zatrzymaj to w umyśle, gdy znajdziesz strategię z fantastycznym testem historycznym. Look-Ahead Bias Spojrzenie z wyprzedzeniem jest wprowadzane do systemu analizy historycznej, gdy przyszłe dane są przypadkowo zawarte w punkcie w symulacja, w której dane nie byłyby faktycznie dostępne. Jeśli przeprowadzamy analizę historyczną chronologicznie i osiągamy punkt czasowy N, to przewidywane odchylenie występuje, jeśli dane są uwzględnione dla dowolnego punktu Nk, gdzie k0. Błędy uprzedzeń z wyprzedzeniem mogą być niezwykle subtelne. Oto trzy przykłady tego, jak można wprowadzić uprzedzenia: Błędy techniczne - Wektory z kodami często zawierają iteratory lub zmienne indeksowe. Nieprawidłowe przesunięcia tych indeksów mogą prowadzić do uprzedzeń wyprzedzających poprzez uwzględnienie danych w Nk dla niezerowej k. Obliczanie parametrów - Innym częstym przykładem błędu wyprzedzającego przy obliczaniu optymalnych parametrów strategii, takich jak regresje liniowe między dwoma szeregami czasowymi. Jeśli cały zestaw danych (w tym dane przyszłe) zostanie wykorzystany do obliczenia współczynników regresji, a tym samym z mocą wsteczną zastosowany do strategii handlowej w celu optymalizacji, wówczas włączane są przyszłe dane i istnieje uprzedzające uprzedzenie. MaximaMinima - Niektóre strategie handlowe wykorzystują wartości ekstremalne w dowolnym okresie, na przykład obejmujące wysokie lub niskie ceny w danych OHLC. Ponieważ jednak maksymalne wartości minimalne można obliczyć tylko na końcu okresu czasu, wprowadza się błąd wyprzedzenia, jeśli te wartości są używane - w trakcie bieżącego okresu. Zawsze należy liczyć się z wysokimi wartościami przez co najmniej jeden okres w dowolnej strategii handlowej wykorzystującej je. Podobnie jak w przypadku błędu optymalizacji, należy być bardzo ostrożnym, aby uniknąć jego wprowadzenia. Często jest to główny powód, dla którego strategie inwestycyjne znacznie słabiej radzą sobie z backtestami w handlu na żywo. Przerwa w nieczystościach Przerwa w nieczystościach jest wyjątkowo niebezpiecznym zjawiskiem i może prowadzić do znacznego zawyżenia wyników w przypadku niektórych typów strategii. Występuje, gdy strategie są testowane na zestawach danych, które nie obejmują pełnego wszechświata wcześniejszych zasobów, które mogły zostać wybrane w określonym momencie, ale uwzględniają tylko te, które przetrwały do obecnego czasu. Jako przykład rozważenie przetestowania strategii losowego wyboru akcji przed i po krachu na rynku w 2001 roku. Niektóre zapasy technologii zbankrutowały, podczas gdy inne zdołały utrzymać się na powierzchni, a nawet prosperować. Gdybyśmy ograniczyli tę strategię tylko do zapasów, które przeszły przez okres wyprzedaży rynkowej, wprowadzilibyśmy uprzedzenia do przetrwania, ponieważ już nam udowodnili swój sukces. W rzeczywistości jest to kolejny konkretny przypadek uprzedzeń, ponieważ przyszłe informacje są włączane do wcześniejszych analiz. Istnieją dwa główne sposoby na złagodzenie rozbieżności dotyczących przetrwania w strategicznych testach historycznych: Survivorship Bias Free Datasets - W przypadku danych kapitałowych możliwe jest kupowanie zestawów danych zawierających delikatesowe podmioty, chociaż nie są one tanie i są zwykle wykorzystywane przez firmy instytucjonalne . W szczególności, dane Yahoo Finance NIE są danymi dotyczącymi przetrwania, które są powszechnie używane przez wielu sprzedawców detalicznych. Można również handlować klasami aktywów, które nie są podatne na błędy w zachowaniu, takie jak niektóre towary (i ich przyszłe instrumenty pochodne). Użyj bardziej aktualnych danych - w przypadku akcji, wykorzystanie nowszego zestawu danych zmniejsza prawdopodobieństwo, że wybrany wybór akcji jest ważony dla osób, które przeżyły, po prostu dlatego, że istnieje mniejsze prawdopodobieństwo całkowitego wycofania akcji z krótszych okresów. Można również rozpocząć tworzenie osobistego zestawu danych, który nie uwzględniałby obciążenia biologicznego, gromadząc dane z bieżącego punktu. Po 3-4 latach będziesz mieć solidny zestaw danych dotyczących papierów wartościowych, dzięki któremu będziesz mógł przetestować dalsze strategie. Przyjrzymy się teraz pewnym zjawiskom psychologicznym, które mogą mieć wpływ na wyniki handlowe. Tolerancja psychologiczna Ten szczególny fenomen nie jest często omawiany w kontekście handlu ilościowego. Jednakże jest szeroko omawiany w odniesieniu do bardziej uznaniowych metod handlowych. Ma różne nazwy, ale ja postanowiłem nazwać to psychologicznym odchyleniem tolerancji, ponieważ oddaje istotę problemu. Podczas tworzenia backtestów przez okres 5 lat lub więcej, łatwo jest spojrzeć na krzywą akcyjną w górę trendu, obliczyć złożony roczny zwrot, współczynnik Sharpe'a, a nawet cechy wypłaty i być zadowolonym z wyników. Jako przykład strategia może mieć maksymalną względną wypłatę wynoszącą 25, a maksymalny czas wyprowadzania 4 miesiące. Nie byłoby to nietypowe dla strategii momentum. Łatwo jest przekonać się, że łatwo jest tolerować takie okresy strat, ponieważ ogólny obraz jest różowy. Jednak w praktyce jest o wiele trudniej Jeśli historyczne historie 25 lub więcej wystąpią w testach historycznych, najprawdopodobniej zobaczysz okresy podobnych wypłat w handlu na żywo. Te okresy wypłaty są psychicznie trudne do zniesienia. Zauważyłem z pierwszej ręki, jak może wyglądać przedłużona wypłata, w otoczeniu instytucjonalnym, i nie jest to przyjemne - nawet jeśli testy sugerują, że takie okresy się pojawią. Powodem, dla którego nazwałem to błędem, jest to, że często strategia, która w przeciwnym razie byłaby skuteczna, zostaje zatrzymana z handlu w czasach przedłużonej wypłaty, a zatem doprowadzi do znacznych wyników w porównaniu z testem historycznym. Tak więc, mimo że strategia ma charakter algorytmiczny, czynniki psychologiczne nadal mogą mieć poważny wpływ na rentowność. Na wynos upewniamy się, że jeśli zauważysz wypłaty o pewnej wartości procentowej i czasu trwania w testach historycznych, powinieneś oczekiwać, że pojawią się one w warunkach handlu na żywo i będą musieli wytrwać, aby ponownie osiągnąć rentowność. Pakiety oprogramowania do analizy historycznej Oprogramowanie do testowania historycznego strategii jest ogromne. Rozwiązania obejmują od całkowicie zintegrowanego zaawansowanego oprogramowania klasy instytucjonalnej, aż po języki programowania takie jak C, Python i R, w których prawie wszystko musi być napisane od podstaw (lub odpowiednie wtyczki uzyskane). Jako handlowcy kwantowi jesteśmy zainteresowani równowagą możliwości posiadania naszego stosu technologii handlowej w porównaniu do szybkości i niezawodności naszej metodologii rozwoju. Oto kluczowe kwestie dotyczące wyboru oprogramowania: Umiejętność programowania - Wybór środowiska w dużej mierze sprowadza się do umiejętności programowania oprogramowania. Twierdzę, że kontrola nad całkowitym stosem będzie miała większy wpływ na długoterminowy PL niż outsourcing jak najwięcej do oprogramowania dostawcy. Wynika to z ryzyka związanego z wadami zewnętrznymi lub dziwactwami, których nie można naprawić w oprogramowaniu dostawcy, które w przeciwnym razie można by łatwo naprawić, gdybyś miał większą kontrolę nad swoim stosem technologii. Potrzebujesz również środowiska, które zapewni odpowiednią równowagę między wydajnością, dostępnością biblioteki i szybkością wykonania. Poniżej zamieszczam moją własną osobistą rekomendację. Zdolność do wykonywania działań Interakcja z przeglądarkami - niektóre programy weryfikacji historycznej, takie jak Tradestation, wiążą się bezpośrednio z usługą brokerską. Nie jestem zwolenniczką tego podejścia, ponieważ obniżenie kosztów transakcji jest często ważnym elementem uzyskania wyższego wskaźnika Sharpe'a. Jeśli jesteś powiązany z konkretnym brokerem (i Tradestation zmusza cię do tego), będziesz miał trudniejsze przejście do nowego oprogramowania (lub nowego brokera), jeśli zajdzie taka potrzeba. Interactive Brokers udostępniają interfejs API, który jest solidny, choć z nieco rozwartym interfejsem. Dostosowywanie - środowisko takie jak MATLAB lub Python zapewnia dużą elastyczność przy tworzeniu strategii algo, ponieważ zapewniają one fantastyczne biblioteki do prawie dowolnej operacji matematycznej, jaką można sobie wyobrazić, ale także umożliwiają szerokie dostosowywanie w razie potrzeby. Złożoność strategii - Pewne oprogramowanie nie jest przeznaczone do poważnego komplikowania lub złożoności matematycznej. Excel jest jednym z takich programów. Chociaż jest to dobre dla prostszych strategii, nie może tak naprawdę poradzić sobie z licznymi zasobami lub bardziej skomplikowanymi algorytmami, z dużą szybkością. Minimalizacja obciążenia - czy konkretna część oprogramowania lub danych nadaje się bardziej do odchyleń w handlu Należy upewnić się, że jeśli chcesz samemu stworzyć całą funkcjonalność, nie wprowadzaj błędów, które mogą prowadzić do uprzedzeń. Szybkość rozwoju - Nie trzeba wydawać miesięcy i miesięcy na wdrożenie silnika analizy historycznej. Prototypowanie powinno zająć tylko kilka tygodni. Upewnij się, że twoje oprogramowanie nie ogranicza w żaden sposób twoich postępów, po prostu zdobyć kilka dodatkowych punktów procentowych szybkości realizacji. C to słoń w pokoju tutaj Prędkość wykonania - jeśli twoja strategia jest całkowicie zależna od czasu wykonania (tak jak w HFTUHFT), konieczny będzie język taki jak C lub C. Będziesz jednak miał problemy z optymalizacją jądra systemu Linux i wykorzystaniem FPGA dla tych domen, co wykracza poza zakres tego artykułu. Koszt - Wiele środowisk oprogramowania, w które możesz programować algorytmiczne strategie transakcyjne, jest całkowicie darmowe i otwarte. W rzeczywistości wiele funduszy hedgingowych korzysta z oprogramowania open source dla wszystkich swoich zestawów transakcyjnych algo. Ponadto, Excel i MATLAB są względnie tanie i istnieją nawet darmowe alternatywy dla każdego. Teraz, gdy już wymieniliśmy kryteria, z którymi musimy wybrać naszą infrastrukturę oprogramowania, chcę przetestować niektóre z bardziej popularnych pakietów i ich porównanie: Uwaga: dołączę tylko oprogramowanie dostępne dla większości sprzedawców detalicznych i programiści, ponieważ jest to czytelnictwo strony. Chociaż dostępne jest inne oprogramowanie, takie jak bardziej instytucjonalne narzędzia oceny, uważam, że są one zbyt drogie, aby można je było skutecznie stosować w otoczeniu handlowym, a ja osobiście nie mam z nimi żadnego doświadczenia. Analiza porównawcza Porównanie oprogramowania Opis: język wysokiego poziomu zaprojektowany z myślą o szybkości rozwoju. Szeroka gama bibliotek dla prawie dowolnego zadania programowego, jakie można sobie wyobrazić. Uzyskanie szerszej akceptacji w społecznościach funduszy hedgingowych i bankowości inwestycyjnej. Nie tak szybki jak CC dla szybkości wykonania. Wykonanie: Wtyczki Python istnieją dla większych brokerów, takich jak Interactive Brokers. Stąd system testów historycznych i system wykonawczy mogą być częścią tego samego zestawu technologii. Personalizacja: Python ma bardzo zdrową społeczność programistyczną i jest językiem dojrzałym. NumPySciPy zapewnia szybkie narzędzia obliczeń naukowych i analizy statystycznej istotne dla handlu kwantowego. Złożoność strategii: Istnieje wiele wtyczek dla głównych algorytmów, ale nie tak duża jak dla społeczności MATLAB. Minimalizacja odchylenia: takie same problemy z minimalizacją stron jak w przypadku języka wysokiego poziomu. Trzeba być bardzo ostrożnym w testowaniu. Szybkość rozwoju: główną zaletą Pythona jest szybkość rozwoju, z solidnymi wbudowanymi możliwościami testowania. Szybkość wykonania: Nie tak szybki jak C, ale naukowe komponenty obliczeniowe są zoptymalizowane, a Python może rozmawiać z natywnym kodem C z pewnymi wtyczkami. Koszt: FreeOpen Opis źródła: Dojrzały, wysokopoziomowy język zaprojektowany z myślą o szybkości realizacji. Szeroka gama finansowania ilościowego i bibliotek numerycznych. Trudniejsze do debugowania i często zajmuje więcej czasu niż Python lub MATLAB. Niezwykle rozpowszechniony zarówno po stronie kupna, jak i sprzedaży. Realizacja: Większość interfejsów API do obsługi maklerskich jest napisanych w językach C i Java. Tak więc istnieje wiele wtyczek. Dostosowanie: CC umożliwia bezpośredni dostęp do podstawowej pamięci, dzięki czemu można wdrażać strategie o bardzo wysokiej częstotliwości. Złożoność strategii: C STL zapewnia szeroką gamę zoptymalizowanych algorytmów. Prawie każdy wyspecjalizowany algorytm matematyczny ma darmową implementację CC w Internecie. Minimalizacja odchyleń: nastawienie wyprzedzające może być trudne do wyeliminowania, ale nie trudniejsze niż w przypadku innych języków wysokiego poziomu. Dobre narzędzia do debugowania, ale trzeba być ostrożnym, gdy mamy do czynienia z pamięcią bazową. Szybkość rozwoju: C jest dość szczegółowe w porównaniu do Pythona lub MATLABa dla tego samego algorytmu. Więcej linii kodu (LOC) często prowadzi do większego prawdopodobieństwa błędów. Szybkość wykonania: CC ma wyjątkowo szybką prędkość wykonywania i może być dobrze zoptymalizowany dla konkretnych architektur obliczeniowych. Jest to główny powód, aby go wykorzystać. Koszt: Różne kompilatory: LinuxGCC jest bezpłatny, MS Visual Studio ma różne licencje. Różne strategie będą wymagać różnych pakietów oprogramowania. Strategie HFT i UHFT będą pisane w CC (obecnie są często wykonywane na układach GPU i FPGA), podczas gdy strategie equity z niską częstotliwością są łatwe do wdrożenia w TradeStation, ze względu na wszystko w jednym bractwie oprogramowania. Moje osobiste preferencje dotyczą Pythona, ponieważ zapewnia on odpowiedni stopień dostosowania, szybkość rozwoju, możliwości testowania i szybkość realizacji dla moich potrzeb i strategii. Jeśli potrzebuję czegoś szybciej, mogę przejść do C bezpośrednio z moich programów w Pythonie. Jedną z metod preferowanych przez wielu handlowców ilościowych jest prototypowanie ich strategii w Pythonie, a następnie konwersja wolniejszych sekcji wykonawczych na C w sposób iteracyjny. Ostatecznie całe algo jest napisane w C i można je zostawić w spokoju. W następnych kilku artykułach na temat analizy historycznej przyjrzymy się niektórym szczególnym problemom związanym z wdrożeniem algorytmicznego systemu analizy historycznej, a także jak włączyć efekty giełdy handlowe. Omówimy pomiar wydajności strategii i na koniec zakończymy przykładową strategią. Pierwsze kroki w handlu iloś ciowym Biblioteka wstę pnego testowania dla profesjonalnych strategii handlowych Programiści Wsteczne testowanie to proces testowania strategii handlowych na podstawie historycznych danych rynkowych, aby spróbować symulować, jak system handlu może działać w przyszłoś ci. Powrót testowanie jest do rozwoju strategii handlowej, co badania i poprawy jakości są dla sektora opieki zdrowotnej i transportu. Kto by chciał wypróbować niesprawdzonego monitora serca lub samochodu Nikt. To samo dotyczy strategii handlu finansowego. Wszystkie strategie transakcyjne muszą zostać przetestowane, zoptymalizowane i zatwierdzone przed wprowadzeniem do obrotu za pomocą prawdziwych pieniędzy. Niemal każda strategia handlowania analizą techniczną może być testowana. Prawdą jest, że wiele pośredniczących aplikacji handlujących na poziomie zapewnia języki skryptowe, które umożliwiają handlowcom rozwijanie i wycofywanie testowych strategii transakcyjnych, ale okazało się, że nie było dostępnych bibliotek do testowania wstecznego dla zaawansowanych programistów systemów transakcyjnych, którzy wolą programować swoje strategie transakcyjne w programowaniu niskiego poziomu języki takie jak C, C i Java. Dlatego opracowaliśmy mechanizm testowania wstecznego dla zaawansowanych programistów systemów. Teraz programiści mogą tworzyć strategie w dowolnym języku programowania, a następnie przeprowadzić test i zoptymalizować te strategie, aby poprawić wydajność. BackTestLib pozwala programistom na przetestowanie swoich systemów transakcyjnych w językach C, C, VB, F, R, IronPython lub w dowolnym innym języku przy użyciu danych tick lub bar. To po prostu nie ma znaczenia, jak napisano twój system transakcyjny. Wszystko, co musisz zrobić, to dostarczyć listę transakcji, a biblioteka testowania wstecznego zajmie się resztą. BackTestLib może obliczyć twoją wydajność systemu transakcyjnego za pomocą dwóch tuzinów pomiarów ryzyka, w tym współczynnika Sharpe'a, wskaźnika Calmara, wskaźnika Sortino, maksymalnego obniżenia, Monte Carlo Draw Down, Total PL, współczynnika ryzyka do nagrody, największego zysku, największej straty, średniej liczby transakcji Miesiąc, dzienniki transakcji i inne. Idealny do optymalizacji strategii Profesjonalni handlowcy wiedzą, że wszystkie dobre rzeczy dobiegają końca. Nawet najlepsze systemy transakcyjne ostatecznie popadają w straty, wymagające optymalizacji lub wycofania systemu transakcyjnego. Powody są różne, w tym zmiany płynności, zmienność i dynamika rynku bazowego, a także inne czynniki. BackTestLib generuje wyniki, które reprezentują zakres pomiarów w oparciu o rentowność i ryzyko twojego systemu transakcyjnego podczas testowania z danymi, z którymi został dostarczony. Przykładowy kod Utwórz symulowane transakcje Lista lt Trade wymienia nową listę lt Trade gt () trades. Add (nowa transakcja (DateTime. Parse (quot112017 9: 30: 45.422 AMquot), SignalType. Buy, 24)) trades. Add (new Handel (DateTime. Parse (quot112017 9: 32: 33.891 AMquot), SignalType. ExitLong, 24.09)) trades. Add (new Trade (DateTime. Parse (quot112017 9: 37: 12.839 AMQ), SignalType. Sell, 24.07)) handluje. Dodaj (nowa transakcja (DateTime. Parse (quot112017 9: 48: 27.488 AMquot), SignalType. Exit, 24.19)) trades. Add (nowa transakcja (DateTime. Parse (quot112017 9: 49: 16.415 AMQ), SignalType. Buy, 24)) trades. Add (new Trade (DateTime. Parse (quot112017 9: 50: 45.512 AMquot), SignalType. Exit, 24.09)) trades. Add (nowa transakcja (DateTime. Parse (quot112017 9: 51: 14.212 AMQ), SignalType. Buy, 24,01)) Uruchom backtest double lastPrice 24.03 BacktestResults results Backtester. Backtest (trades, lastPrice) Wyprowadź wyniki Console. WriteLine (quotałowa liczba transakcji: quot. Results. TotalNumberOfTrades) ole. WriteLine (quot; Avant liczba transakcji miesięcznie: quot. results. AverageTradesPerMonth) Console. WriteLine (quotałowa liczba dochodowych transakcji: quotent results. NumberOfProfitableTrades) Console. WriteLine (quotałowa liczba przegrywających transakcji: quotent results. NumberOfLosingTrades) Console. WriteLine (quotałPrzykład ogólny: quot. results. TotalProfit) Console. WriteLine (quotałowa strata: quot. Results. TotalLoss) Console. WriteLine (quotPercent dochodowe transakcje: quot. Results. PercentProfit) Console. WriteLine (quotPercent dochodowe transakcje: quot. Results. PercentProfit) Console. WriteLine (notujący najwyższy zysk: wyniki..LargestProfit) Console. WriteLine (quotaroważniejsza strata: quot. Results. LargestLoss) Console. WriteLine (quotMaximum drawdown: quot. Results. MaximumDrawDown) Console. WriteLine (quotMaximum drawdown Monte Carlo: quot. Results. MaximumDrawDownMonteCarlo) Console. WriteLine (quotStandard dewiacja : quot. results. StandardDeviation) Console. WriteLine (quotStandard deviation annualized: quot. results. StandardDeviationAnnualized) Console. WriteLi ne (quot) Odchylenie od tyłu (MAR 10): quot. results. DownsideDeviationMar10) Console. WriteLine (quotValue Added Monthly Index (VAMI): quot. results. ValueAddedMonthlyIndex) Console. WriteLine (quotSharpe ratio: quot. results. SharpeRatio) Console. WriteLine (quotSortino ratio: quot. results. SortinoRatioMAR5) Console. WriteLine (quotSnalizowany współczynnik sortowania: quot. Results. AnnalizedSortinoRatioMAR5) Console. WriteLine (quotSterling ratio: quot. Results. SterlingRatioMAR5) Console. WriteLine (quotalent ratio: quot. Results. CalmarRatio) Console. WriteLine (quotRisk do ratio nagrody: quot. Wyniki. RiskRewardRatio) Wyświetl foreach dziennika transakcji (Handel handlu wynikami. Trades) Console. WriteLine (trade. Date quot: quot trade. Signal. ToString () quot na quot trade. Price. ToString ()) MultiCharts 10 MultiCharts to nagroda - winning platforma transakcyjna Niezależnie od tego, czy potrzebujesz oprogramowania do codziennego inwestowania, czy inwestujesz przez dłuższy czas, MultiCharts ma funkcje, które mogą pomóc w osiągnięciu twoich celów handlowych. Wysokiej rozdzielczości wykresy, wbudowane wskaźniki i strategie, jednokrotne klikanie z wykresu i DOM, precyzyjne testowanie wsteczne, brutalna siła i optymalizacja genetyczna, automatyczne wykonywanie i obsługa skryptów EasyLanguage to kluczowe narzędzia do Twojej dyspozycji. hoice brokerów i kanałów danych Wolność wyboru była motorem idei naszych MultiCharts i można ją zobaczyć w szerokim wyborze obsługiwanych kanałów danych i brokerów. Wybierz metodę handlu, przetestuj ją i zacznij handlować z dowolnym obsługiwanym brokerem, który Ci się podoba. MultiCharts. Jak skutecznie zweryfikować swoją strategię handlową Wielu udanych handlowców podziela jeden nawyk. 8211 przeprowadzają backtest swoich strategii handlowych. Backtesting strategii handlowej nie tylko gwarantuje, że staniesz się rentowny, ale jest to gigantyczny krok we właściwym kierunku. W tym artykule przeanalizujemy niektóre potencjalne błędy, które mogą wkradnąć się do analizy historycznej, i przyjrzymy się, jak zminimalizować wpływ tych błędów. Istnieje wiele problemów, które mogą wystąpić podczas analizy historycznej systemu handlu, ale większość problemów należy do jednej z trzech kategorii: błędów wyprzedzających, zbyt wielu zmiennych lub nie przewidywania drastycznych zmian na rynku. Każdy z tych błędów jest wyjaśniony wraz z metodami unikania błędów. Kliknij tutaj, aby dowiedzieć się, jak wykorzystywać wstęgi Bollingera z kwantyfikowanym, uporządkowanym podejściem, aby zwiększyć obroty handlowe i uzyskać większe zyski dzięki Trading with Bollinger Bands 8211 A Quantified Guide. 1. Błąd postdictive Postdictive error jest po prostu fantazyjnym sposobem stwierdzenia, że użyto informacji dostępnych tylko 8220 po fakcie 8221 w celu przetestowania systemu. Wierzcie lub nie, jest to bardzo powszechny błąd podczas testowania systemów transakcyjnych. Ten błąd jest łatwy do wykonania. Niektóre programy pozwolą ci wykorzystać dane z dzisiejszych czasów w testowaniu systemu transakcyjnego, co zawsze jest błędem postdictive (nie wiemy, czy dane dzisiejsze są przydatne do przewidywania przyszłości, ale na pewno wiemy, czy jest to przydatne w przewidywaniu przeszłości ). Czy chciałbyś móc wykorzystać cenę zamknięcia GBPUSD, aby przewidzieć, co rynek zrobi dzisiaj? Oczywiście, że tak, na pewno bym to zrobił, ale niestety ta informacja nie jest dla nas dostępna, dopóki dzień się nie skończy. Na przykład, możesz mieć system, który zawiera cenę zamknięcia, to oczywiście oznacza, że handel nie może zostać zainicjowany aż do zakończenia dnia. w przeciwnym razie jest to błąd postdictive. Inny przykład może pomóc zilustrować błąd popełnienia błędu, jeśli masz regułę w swoim systemie transakcyjnym na temat najwyższych cen, wtedy będziesz mieć postdictive błąd. Wynika to z faktu, że najwyższe ceny są często definiowane przez dane, które pojawią się później, w przyszłości. Sposób na uniknięcie błędu po dezorientacji polega na upewnieniu się, że podczas backtestu system, który tylko informacje, które są dostępne w przeszłości w tym momencie jest używany w backtestingu. Z ręcznym testowaniem wstecznym lub testowaniem wstecznym za pomocą testera forex możesz to zrobić dość łatwo, ale dzięki automatycznemu testowaniu wstecznemu, ostry błąd może wkraść się do twojego systemu transakcyjnego. 2. Zbyt wiele zmiennych Jest to również znane jako błąd 8220Degrees of Freedom8221. Oznacza to po prostu, że masz zbyt wiele zmiennych lub wskaźników handlowych w systemie transakcyjnym. Bardzo możliwe jest wymyślenie systemu transakcyjnego, który może wyjaśnić zachowanie cen w przeszłości w parze walutowej. W rzeczywistości im więcej wskaźników dodasz, tym łatwiej się staje. Problem pojawia się, gdy chcesz zastosować ten system w przyszłości. Często, gdy system transakcyjny ma zbyt wiele wskaźników, może bardzo dobrze przewidywać zachowanie rynku w czasie. Ale do tego cały system jest dobry, ponieważ w przyszłości system się rozpada. Powyższe stwierdzenie jest często trudne do opanowania przez handlowców, ale to prawda. Zastanów się, co William Eckhardt, z New Market Wizards, ma do powiedzenia na temat systemów transakcyjnych. Ogólnie rzecz biorąc, delikatne testy, których używają statystycy, aby wycisnąć znaczenie z marginalnych danych, nie mają miejsca w handlu. Potrzebujemy tępych instrumentów statystycznych, solidnych technik. Oczywiście ostrzega przed błędem stopni swobody i sugeruje, że proste systemy transakcyjne są bardziej skłonne przetrwać próbę czasu. Jest to absolutnie prawdziwe. Niektóre z najpotężniejszych dostępnych systemów transakcyjnych są niezwykle proste. Miej to na uwadze podczas handlu i podczas próby znalezienia dochodowego systemu transakcyjnego. Większość handlowców odkryje, że dzięki doświadczeniu łatwiej zaakceptują pogląd, że prostsze transakcje są preferowane w stosunku do złożonego podejścia. 3. Drastyczne zmiany na rynku Wielu przedsiębiorców zapomina przewidzieć nieprzewidziane zdarzenia, które wystąpią w przyszłości. To naprawdę nie ma znaczenia, że nie wiesz, co wydarzy się w przyszłości 8211, ponieważ wiesz o tym: w przyszłości rynki będą się zachowywać chaotycznie. Kiedy tak się stanie, powinieneś zaprojektować swój system handlu, aby działał w tych czasach. Być może niektóre przykłady mogą pomóc w tym: Kiedy Saddam Hussein został znaleziony (przez weekend), rynki walutowe zareagowały dość drastycznie na otwarciu Monday8217s. Kiedy światowy kryzys finansowy zaczął się rozwijać we wrześniu 2008 r., Większość par walutowych handlowała ze znacznie większą zmiennością niż było to widoczne od lat. Faktem jest, że w przyszłości pojawią się nieoczekiwane wydarzenia, a te wydarzenia będą miały wpływ na rynki, więc najlepszą rzeczą, jaką możesz zrobić, to być przygotowanym. Jak przygotować się na nieoczekiwane Rozważ te proste rozwiązania: 1) Wyolbrzymuj spodziewane straty. Jeśli analiza historyczna ujawnia maksymalną utratę 5000, zakładaj maksymalną utratę 10.000. Czy twoje systemy transakcyjne będą nadal rentowne w tych warunkach? 2) Zdecyduj się na odpowiedni poziom ryzyka dla każdej transakcji. Pamiętaj, że nawet ten poziom ryzyka może zostać przekroczony. Jeśli zdecydowałeś się ryzykować 1 przy każdym handlu, powinieneś założyć, że kiedyś w przyszłości możesz być w transakcji i nastąpi nieoczekiwane zdarzenie, a twój handel nie straci 1, ale zamiast tego 5 zostanie utracone. 3) Powinieneś mieć przygotowany plan awaryjny. That is, how will you exit a trade if something bad happens and you cannot access your account For instance, what happens if your trading platform is inaccessible and you desperately want out of a trade Most brokers offer a telephone line to traders for these instances. Do you have the phone number 4) Do you have a maximum risk level set This would be applicable if you have several trades open simultaneously. If you decide to risk 1 per trade and you have 7 trades open simultaneously, does this mean that you will be risking 7 of your account Or have you decided on a maximum risk level of say, 3 Keeping in mind that the unexpected will occur, you should probably have a maximum risk level for those times when you have several open trades. 5) What is the maximum drawdown (amount of money your trading system loses over an extended period of time) you are willing to tolerate Keeping in mind that you (and you are not alone) are more likely to overestimate the severity of drawdowns that you can withstand, it is important to be realistic. If you lose 30 of your account will you stop trading What about if you lose 50 Or if you see 70 of your account disappear Again, the best way to plan for drawdowns is to do extensive backtesting to find out what sort of historical drawdowns your trading system experiences and then plan for even worse drawdowns in the future. Anticipating drastic changes in the markets is the single best way to preserve the equity in your account. So, you know that successful traders share this habit 8211 they backtest their trading strategies. You know that backtesting separates the wealthy traders from those who lose money. You also know several ways of incorporating backtesting into your trading regimen. And you know of the pitfalls 8211 what to look out for 8211 when you are backtesting, so that you can get the most out of the process. But, what exactly, will you get out of backtesting your trading system In the next article I will explore the side effects of backtesting. Walter Peters, PhD is a professional forex trader and money manager for a private forex fund. In addition, Walter is the co-founder of Fxjake. a resource for forex traders. Walter loves to hear from other traders, he can be reached by email at walterfxjake .
No comments:
Post a Comment