Lua trading system
Guile jest językiem programowania Guile ma na celu pomóc programistom tworzyć elastyczne aplikacje, które mogą być rozszerzane przez użytkowników lub innych programistów za pomocą wtyczek, modułów lub skryptów. Z Guile możesz tworzyć aplikacje i gry na pulpit. sieć. wiersz poleceń. i więcej. Przykłady kodów Guile to implementacja języka programowania Scheme, obsługująca skorygowane 5 i większość poprawionych 6 raportów językowych, a także wiele SRFI. Jest również wyposażony w bibliotekę modułów, które oferują dodatkowe funkcje, takie jak serwer i klient HTTP, analizowanie XML i programowanie obiektowe. Program Hello world Zdefiniuj zmienną o nazwie nazwa. dołącz do tekstów Hello. Nazwa. i. razem, aby stworzyć powitanie Witaj świecie. i wyświetlić go na ekranie. Importowanie modułów Zaimportuj moduł srfi-19 i użyj jego funkcji, aby wyświetlić aktualną datę i godzinę w formacie WEEKDAY, MONTH MONTHDAY YEAR HOUR: SECOND. Witaj serwer HTTP Uruchom serwer WWW, który zwróci odpowiedź z tekstem quotHello Worldquot na każde żądanie wysłane przez klientów HTTP. Otwórz localhost: 8080, aby zobaczyć wynik. Guile to rozszerzenie platformy językowej Guile zawiera wydajny kompilator i maszynę wirtualną. Może być używany od razu po rozpakowaniu programów w Scheme lub może być łatwo zintegrowany z programami C i C. Guile jest wszechobecnym inteligentnym językiem dla rozszerzeń GNU i oficjalnym językiem rozszerzenia projektu GNU. Rozszerzanie aplikacji Oprócz Scheme, Guile zawiera front-endy kompilatora dla ECMAScript i Emacs Lisp (wsparcie jest w toku dla Lua), co oznacza, że twoja aplikacja może zostać rozszerzona w języku (lub językach) najbardziej odpowiednim dla twojej bazy użytkowników. Narzędzia Guileaposs do analizowania i kompilowania są wyeksponowane jako część standardowego zestawu modułów, więc obsługa dodatkowych języków może być dodana bez pisania pojedynczej linii C. Guile daje użytkownikom swobodę w posługiwaniu się dowolnymi słowami Używając jednego z obsługiwanych języków skryptowych, użytkownicy mogą dostosuj i rozszerzaj aplikacje w trakcie ich działania i obserwuj, jak zmiany zachodzą na żywo Użytkownicy mogą z łatwością wymieniać się i udostępniać funkcje, przesyłając i pobierając skrypty, zamiast handlować złożonymi łatami i rekompilacją swoich aplikacji. Aplikacje wykorzystujące Guile GNU Guix wzmacniacz GuixSD Menedżer pakietów i pakiet dystrybucji GNU dla elektronicznego automatyzacji projektowania Debugger GNU GNU Guile na FOSDEM 10 stycznia 2017 GNU Guile ma swoją własną sesję w FOSDEM jeszcze w tym roku. Harmonogram jest już dostępny. Dyskusje obejmują szereg tematów: interfejs użytkownika GNU Guile 2.1.5 wydany 9 grudnia 2018 Z przyjemnością ogłaszamy wydanie GNU Guile 2.1.5, kolejne wydanie wstępne w serii 2.2 stabilnej. Ta wersja poprawia paralelizm Guileaposs GNU Guile 2.0.13 wydał poprawki bezpieczeństwa 12 października 2018 Weaposve właśnie wydała nową wersję GNU Guile, wersja 2.0.13, która jest wydaniem zabezpieczeń dla Guile (patrz pierwotne ogłoszenie).To obsługuje znaczącą luka w zabezpieczeniach Informacje o tej stronie Ta strona działa pod kontrolą GNU Guile, a kod źródłowy znajduje się pod GNU AGPL. Proszę użyć listy mailingowej lub kanału guile na Freenode, aby uzyskać więcej informacji na temat GNU Guile i tej strony internetowej. Uczenie się maszyn i zautomatyzowany handel The Big Short (lubię to) Szukanie strategii handlowych z dochodowymi backtests - AKTUALIZACJA Miałem bardzo interesujące rozmowy od Zaproponowałem moje niepubliczne ramy handlu śróddziennego w zamian za informacje o dochodowych strategiach, dlatego też chcę nieodwołalnie przedłużyć to początkowo ograniczone czasowo połączenie. Zauważ, że nie szukam pomysłów na strategię. Mam ich wielu. Wyzwaniem nie jest wymyślanie pomysłu, ale wybór właściwego i przetestowanie go do samego końca, kiedy albo dowiesz się, że działa, czy nie. Najważniejszym czynnikiem jest tu czas. Więc to, co głównie handluję, to czas, w który zainwestowałem w rozwój solidnych ram handlu intraday w stosunku do czasu, który zainwestowałeś w rozwój zyskownej strategii transakcyjnej. Może to być strategia giełdowa, ETF, przyszłościowa lub opcyjna. Wszystkie dyskusje i wymiana informacji będą traktowane jako poufne. Jestem oczywiście otwarty na dyskusje na temat pomysłów, ale proszę, nie oczekujcie ode mnie, że przetestuję je dla was i nie skarżę się, jeśli zaimplementuję je bez pytania o zgodę. Zaproszenie do składania wniosków Szuka strategii handlowych z dochodowymi testami historycznymi Do 15 czerwca. Przyjmuję propozycje obiecujących strategii handlowych dotyczących akcji, walut i indeksów giełdowych. Strategia musi przynosić zysk w ramach analizy historycznej i mieć roczny wskaźnik sharpe na poziomie co najmniej 1,0. 1 lipca zostaną wybrane dwie najbardziej obiecujące strategie, a ich autorzy mogą wybrać jedną z następujących opcji: 1) Uzyskaj pełną i bezpłatną kopię ulepszonego, niepublicznego systemu handlu opartego na R, który opracowałem i wykorzystałem od 2017 r., a autorzy mogą wykorzystywać na żywo swoje strategie z Interactive Brokers. (Uproszczoną wersję publiczną można pobrać tutaj) 2) Należy zawrzeć umowę o współpracy, w której zobowiązuję się do wdrożenia ich strategii w R i handlu papierami przez maksymalnie trzy miesiące. Wszystkie indywidualne transakcje zostaną udostępnione autorom, gdy zostaną ocurr. Ponadto kod R, który jest specyficzny dla strategii (a nie kod struktury handlu) zostanie przekazany twórcom strategii. Co przesłać: Pisemny opis strategii wraz z wykazem transakcji plus czasy powrotne testu historycznego lub wykonywalnego kodu Roctavepython, który bezpośrednio oblicza backseestowe grupy czasu zwrotu wraz z pełnym zestawem danych cen stosowanych w teście historycznym. Prześlij na mój e-mail dostępny w dziale kontaktowym Aktualizacja czystego R Intrime Trading Framework Wreszcie znalazłem czas, aby to zrobić. Spóźniona. Platforma działa teraz z najnowszymi (unixowymi) wersjami IB TWSGW (wersja 9493 i nowsze). To samo w sobie wymagało częściowego przeprogramowania kilku funkcji z wielkiego, ale teraz nieco przestarzałego pakietu IBrokers R autorstwa Jeffa Ryana. Zmieniono także domyślną konfigurację handlu EURUSD, dzięki czemu można teraz uruchomić przykładową strategię manekina. Po prostu sklonuj repozytorium git na lokalną maszynę. githubcensixINTRADAY-PartAB i postępuj zgodnie z README. Coś o sprzęcie Ciągle jestem fanem posiadania własnego metalu. Oczywiście, robienie rzeczy za pomocą konfigurowalnych obrazów maszynowych w chmurze jest popularne, ponieważ nie musisz przechodzić przez kłopoty z zarządzaniem własnym sprzętem, ale nie jest to problemem dla dużych organizacji, w których setki użytkowników muszą być zadowolone minimalny koszt. Chmura jest więc nie tylko rozwiązaniem problemu osób, które muszą radzić sobie z skalą, ale jednocześnie próbują sprzedać to rozwiązanie indywidualnemu człowiekowi, który nie jest mu potrzebny. W każdym razie, jak już powiedziałem, jestem fanem posiadania własnego metalu. Tani, gotowy do użycia sprzęt może Ci pomóc, jeśli poświęcisz trochę czasu na jego prawidłowe skonfigurowanie. Pulpit RAM o pojemności 16-64 GB z jednym lub nawet dwoma procesorami graficznymi niemalże wszystko, czego potrzebujesz. Wygląda na to, że strategie analizy historycznej wykorzystują znacznie więcej zasobów obliczeniowych niż rzeczywisty obrót na żywo, dlatego obecnie można bez obaw skonfigurować i uruchomić strategię intraday z dowolnego przyzwoitego komputera przenośnego, natomiast w przypadku testów historycznych i badań naprawdę chciałbyś mieć potwornego GPU procesora graficznego. powyżej lub małego małego superkomputerowego klastra, jak ostatnio opisałem. Struktury transakcyjne Pure R Intraday dostępne w pełnej wersji Dostępne są wersje INTRADAY-PartA. tar. gz i INTRADAY-PartB. tgz do pobrania. censixdownloads. html Znajdowanie relacji między zasobami, które można wykorzystać do arbitrażu statystycznego Zamiast koncentrować się na przewidywaniu kierunku cen i zmienności cen za pomocą nieliniowych modeli pochodzących z metodami uczenia maszynowego, alternatywą byłoby spróbować odkryć możliwe do wykorzystania relacje cenowe między zasobami tej samej klasy. i reagować (handlować), gdy dzieje się niewłaściwe wyceny, innymi słowy, prowadzić arbitraż statystyczny. W pewnym sensie jest to trochę łatwiejsze niż próby prognozowania cen, ponieważ jedyne, co trzeba zrobić, to znaleźć względnie stabilną, liniową lub nieliniową relację między grupą co najmniej dwóch aktywów i przyjąć, że od czasu wykrycie, związek ten będzie trwał przez jakiś czas w przyszłości. Handel przy tym założeniu jest bardzo reaktywnym procesem, który jest uruchamiany przez ruchy cen, które znacznie odbiegają od modelowanego związku. Tradycyjna para Handel i handel aktywami w modelu VECM (Vector Error Correction Model) są dobrymi przykładami dla statystów wykorzystujących modele statystyczne. Dlaczego więc nie użyć prostej jednowarstwowej sieci neuronowej, a nawet RBM, aby odkryć nieliniową relację cenową między dwoma niezintegrowanymi zasobami i jeśli ten proces odkrywania się powiedzie, wymień go w sposób podobny do pary klasycznej. Sprawy stają się jeszcze bardziej interesujące, gdy rozważa się grupy z więcej niż dwoma zasobami. Byłby to nieliniowy odpowiednik VECM. Wybór cech Szerokość i głębokość Powiedzmy, że mamy jednoznaczny cel predykcyjny timeseries, który może być albo regresją typu albo klasyfikacją, i musimy zdecydować, które opcje wejściowe wybrać. Bardziej konkretnie, mamy duży wszechświat przedziałów czasowych, które możemy wykorzystać jako dane wejściowe i chcielibyśmy wiedzieć, ile mamy wybrać (szerokość), a także, jak daleko wstecz w czasie chcemy szukać każdego (głębokość). Istnieje dwuwymiarowa przestrzeń wyboru, ograniczona przez następujące cztery skrajne przypadki, przy założeniu, że mamy w sumie szereg N i możemy co najwyżej spojrzeć wstecz na timesteps K: (1) wybierz tylko jedną serię i okres ważności jeden punkt czasowy, (2) wybierz tylko jedną serię i powtórzone k timesteps, (3) wybierz serię N i wsteczną o jeden punkt czasowy, (4) wybierz sekwencje serii N i powrotny K timesteps. Optymalny wybór prawdopodobnie nie będzie jednym z nich, ponieważ (1) i (2) mogą nie zawierać wystarczającej informacji o przewidywaniu i (3), a zwłaszcza (4) nie będzie możliwe z powodu ograniczeń obliczeniowych lub zbyt dużego losowego hałasu. Sugerowanym sposobem podejścia do tego jest rozpoczęcie od małej w punkcie (1), sprawdzenie osiągów, a następnie zwiększenie rozmiaru przestrzeni wejściowej, zarówno w zakresie szerokości jak i głębi, aż do osiągnięcia zadowalającego wyniku prognozowania lub do momentu wyczerpania Twoje zasoby obliczeniowe i musisz albo zrezygnować z całego podejścia :( albo kupić nowy (farmę) komputera (ów) :) Używając skumulowanych autododerów i ograniczonych maszyn Boltzmanna w R, 12 lutego 2017, Stacked Autoencoders (SA) i Restricted Boltzmann Machines ( RBM) są bardzo potężnymi modelami do nauki bez nadzoru. Niestety, w chwili pisania tego tekstu wygląda na to, że nie ma dostępnych bezpośrednich wdrożeń R, co jest zaskakujące, ponieważ oba typy modeli istnieją od jakiegoś czasu, a R ma implementacje dla wielu innych modeli uczenia maszynowego. W celu obejścia tego problemu SA można by było zaimplementować za pomocą jednego z kilku pakietów sieci neuronowych R dość szybko (nnet, AMORE) i mechanizmów RBM, cóż, ktoś musiałby napisać dla nich dobrą implementację R. Ale biorąc pod uwagę to, że oba typy modeli wymagają dużej ilości zasobów obliczeniowych, potrzebujemy również implementacji, która umożliwi wykorzystanie procesorów graficznych. W tej chwili najprostszym rozwiązaniem wydaje się być użycie Theano. Może wykorzystywać procesory graficzne i zapewnia implementacje skumulowanych (odfiltrowujących) autododerów i mechanizmów RBM. Poza tym PythonTheano zawiera również kilka innych, bardziej egzotycznych wariantów maszyn Boltzmanna. Możemy użyć rPython do wywołania tych funkcji Pythona z R, ale wyzwaniem są dane. Uzyskiwanie dużych zbiorów danych pomiędzy R i Pythonem bez korzystania z serializacji ascii, które implementuje rPython (zbyt wolne), wymaga rozwiązania. Co najmniej równie silna implementacja auto-koderów obsługujących wykorzystanie GPU jest dostępna za pośrednictwem frameworku Torch7 (wersja demonstracyjna). Jednak funkcje Torch7 są wywoływane za pomocą lua, a wywoływanie ich z poziomu R wymaga trochę pracy na poziomie C. Podsumowując: używaj Theano (Python) lub Torch7 (lua), aby szkolić modele z obsługą GPU i pisać wyszkolone modele do pliku. W R, zaimportuj wyszkolony model z pliku i użyj go do przewidywania. Aktualizacja 25 kwietnia 2017: Poniższe dobre rozwiązanie Wywołanie Pythona z R do Rcpp powinno przybliżyć nas o krok do korzystania z Theano bezpośrednio z R. Jakie częstotliwości w handlu. 13 stycznia 2017 r. Podczas próby znalezienia możliwych do wykorzystania wzorców rynkowych, które można by wymienić jako handlowca detalicznego, jedno z pierwszych pytań brzmi: Jakie częstotliwości handlu powinny być przeglądane co miesiąc co tydzień dziennie lub w ciągu dnia od 5 sekund do 1 godziny przy ograniczonym czasie dostępnym dla Prowadzenie badań we wszystkich tych ramach czasowych staje się ważnym pytaniem, na które należy odpowiedzieć. Ja i inni zauważyliśmy, że wydaje się, że istnieje prosta zależność między częstotliwością transakcji a ilością wysiłku potrzebnego do znalezienia opłacalnej strategii, która jest czysto ilościowa i ma akceptowalne ryzyko. W skrócie: Im niższa (wolniejsza) częstotliwość, na której chcesz handlować, tym inteligentniejsza jest twoja opłacalna strategia. tradefreqvssmartness Na przykład można spojrzeć na (bardzo) koniec częstotliwości, gdzie strategie rynkowe oparte na naprawdę bardzo prostej matematyce mogą być bardzo opłacalne, jeśli uda się zbliżyć do centrum rynku. Biorąc duży skok w dzienną dziedzinę częstotliwości, coraz trudniej jest znaleźć strategie ilościowe, które są opłacalne, a jednocześnie opierają się na dość prostej matematyce. Handel w odstępach tygodniowych i miesięcznych za pomocą prostych metod ilościowych lub wskaźników technicznych jest bardzo dobrym przepisem na wypadek katastrofy. Tak więc, zakładając przez chwilę, że ten związek jest rzeczywiście prawdziwy, a także biorąc pod uwagę, że możemy i chcemy używać zaawansowanych technik uczenia maszynowego w naszych strategiach handlowych, moglibyśmy zacząć od tygodniowego okna częstotliwości i pracować na drodze do wyższych częstotliwości. Cotygodniowy handel nie musi być w ogóle zautomatyzowany i może być przeprowadzony z dowolnego internetowego interfejsu pośrednictwa. Możemy opracować zestaw strategii, wykorzystując publicznie dostępne dane historyczne w połączeniu z naszym ulubionym algorytmem uczenia się, aby znaleźć zbywalne wzorce rynkowe, a następnie ręcznie wykonać strategię. W tej skali wszelkie wysiłki powinny zmierzać do znalezienia i dopracowania strategii ilościowej, a bardzo niewiele myśli trzeba uwzględnić w realizacji handlu. Wymogi w zakresie automatyzacji handlu: 0. Wymagana strategia: 100 Codzienne transakcje powinny być zautomatyzowane, chyba że naprawdę możesz poświęcić określoną część dnia na monitorowanie rynków i wykonywanie transakcji. Integracja algorytmów uczenia maszynowego z automatycznym codziennym obrotem nie jest łatwym zadaniem, ale można to zrobić. Wymóg automatyzacji handlu: 20, Wymagana strategia: 80 W skali dnia śróddziennego, od minut i sekund do sekund, wysiłek, który musisz wykonać, by zautomatyzować swoje transakcje, może leżeć w dowolnym miejscu w przedziale od 20 do 90. Na szczęście mniejszy Skala czasowa staje się głupsza, twoja strategia może być, ale głupi jest oczywiście pojęciem względnym. Wysiłek automatyzacji handlu: 80, Wymagana strategia: 20 Jakich funkcji użyć. Rzemieślnicy kontra uczeni 10 grudnia 2017 r. W pewnym momencie projektowania (maszynowego) systemu uczenia się nieuchronnie zadasz sobie pytanie, jakie funkcje można zastosować w swoim modelu. Istnieją co najmniej dwie opcje. Pierwszym z nich jest wykorzystanie ręcznie wykonanych funkcji. Ta opcja zwykle daje dobre wyniki, jeśli funkcje są dobrze zaprojektowane (to oczywiście jest tautologia, ponieważ można by je nazwać tylko dobrze zaprojektowanymi, jeśli dawałyby dobre wyniki). Projektowanie ręcznie wykonanych funkcji wymaga wiedzy eksperckiej na temat dziedziny, do której zostanie zastosowany system nauczania, tj. Klasyfikacja audio, rozpoznawanie obrazu lub handel w naszym przypadku. Problem polega na tym, że możesz nie mieć żadnej z tej wiedzy eksperckiej (jeszcze) i będzie to bardzo trudne do zdobycia lub zabrania dużo czasu lub najprawdopodobniej obu. Alternatywą jest więc nauczenie się funkcji z danych lub innymi słowy, używanie uczenia bez nadzoru w celu ich uzyskania. Jednym z wymogów jest to, że naprawdę potrzebujesz dużej ilości danych. Znacznie więcej, niż byś potrzebował w przypadku ręcznie wykonanych funkcji, ale potem znowu nie musi być oznaczony etykietą. Korzyści są jednak jasne. Naprawdę nie musisz być ekspertem w dziedzinie, dla której projektujesz system, tj. W handlu i finansach. Więc nadal musisz dowiedzieć się, który podzbiór wyuczonych funkcji będzie najlepszy dla twojego systemu nauki, to także coś, co musiałbyś zrobić z ręcznie wykonanymi funkcjami. Moja sugestia: spróbuj sam zaprojektować ręcznie wykonane elementy. Jeśli nie działają i masz uzasadnione powody, by sądzić, że możliwe jest uzyskanie lepszych wyników niż te, które uzyskujesz, skorzystaj z nienadzorowanych metod nauki, aby poznać funkcje. Można nawet utworzyć system hybrydowy, który wykorzystuje wspólnie zaprojektowane i wyuczone funkcje. Dlaczego używam narzędzi Open Source do budowania aplikacji handlowych 19 listopada 2017 r. Kiedy po raz pierwszy zacząłem analizować swoje własne transakcje zautomatyzowane, miałem trzy wymagania dotyczące zestawu narzędzi, które chciałem wykorzystać. 1) Powinni kosztować tak mało, jak to tylko możliwe, aby mnie uruchomić, nawet jeśli oznaczałoby to, że sam musiałbym dużo programować i dostosowywać (kosztowałoby to czas) 2) Powinna istnieć społeczność podobnie myślących osób używając tych samych narzędzi do podobnych celów. 3) Narzędzia powinny pozwolić mi wejść tak głęboko w wnętrza systemu, jak to konieczne, nawet jeśli na samym początku moim celem było raczej odkrywanie podstaw. Nie chciałem znaleźć się w sytuacji, w której za dwa lata musiałbym przejść na inny zestaw narzędzi, tylko dlatego, że te, z którymi zacząłem, nie pozwoliły mi robić tego, co chciałem z powodu problemów z zamknięte źródła i restrykcyjne licencjonowanie. W rezultacie zdecydowałem się wybrać R jako swój ulubiony język do rozwijania algortihms handlowych i zacząłem używać Interactive Brokers, ponieważ zapewniają interfejs API do współpracy z ich systemem brokerskim. Chociaż istnieje wiele dobrych narzędzi transakcyjnych, które łączą się z IB Trader Workstation, a niektóre z nich mogą być używane do automatycznego handlu, żadna z nich nie oferuje takiej samej mocy, elastyczności i wsparcia społeczności, jakie ma projekt R. Ponadto R ma naprawdę niesamowite repozytorium bezpłatnych i bardzo atrakcyjnych pakietów statystycznych i uczenia maszynowego, co jest niezbędne, jeśli chcesz stworzyć algorytmy transakcyjne. Kopia praw autorskich Censix 2017 - 2018 Strategie BETTER 5: Krótkoterminowy system uczenia maszynowego It8217s czas na 5 i ostatnią część serii Build Better Strategies. W części 3 omawialiśmy proces rozwoju systemu opartego na modelach, a tym samym zakończyliśmy serię rozbudową systemu do eksploracji danych. Zasady eksploracji danych i uczenia maszynowego były tematem części 4. Dla naszego przykładu handlu krótkoterminowego użyjemy głębokiego algorytmu uczenia się. skumulowany autoencoder, ale będzie działał w ten sam sposób z wieloma innymi algorytmami uczenia maszynowego. Z dzisiejszymi narzędziami oprogramowania, tylko około 20 linii kodu jest potrzebnych do strategii uczenia maszynowego. I8217ll spróbuje wyjaśnić szczegółowo wszystkie kroki. Naszym przykładem będzie projekt badawczy 8211 eksperyment z uczeniem maszynowym w celu udzielenia odpowiedzi na dwa pytania. Czy bardziej złożony algorytm 8211, taki jak więcej neuronów i głębsze uczenie się 8211, daje lepszą prognozę I są krótkoterminowe ruchy cen przewidywalne przez krótkoterminową historię cen Ostatnie pytanie padło z powodu mojego sceptycyzmu w odniesieniu do handlu działaniami cenowymi w poprzedniej części tej serii. Dostałem kilka e-maili z pytaniem o generatory 8220trading generators8221 lub podobne narzędzia akcji cenowych, które są chwalone na niektórych stronach internetowych. Nie ma żadnych twardych dowodów na to, że takie narzędzia kiedykolwiek przyniosły zysk (z wyjątkiem ich sprzedawców) 8211, ale to oznacza, że wszystkie one są śmieciami, które widzimy. Nasz eksperyment jest prosty: zbieramy informacje z ostatnich świec z krzywej ceny, zasilamy je w głęboką sieć neuronową i używamy jej do przewidywania kolejnych świec. Moja hipoteza jest taka, że kilka świec nie zawiera żadnych użytecznych informacji predykcyjnych. Oczywiście, nieprzewidywalny wynik eksperymentu wygrał8217t oznacza, że I8217m rację, ponieważ mogłem użyć niewłaściwych parametrów lub źle przygotować dane. Ale wynik przewidujący byłby wskazówką, że I8217m jest błędny, a handel cenami może być opłacalny. Rozwój strategii uczenia maszynowego Krok 1: Zmienna docelowa Aby podsumować poprzednią część. nadzorowany algorytm uczenia jest szkolony z zestawem funkcji w celu przewidywania zmiennej docelowej. Pierwszą rzeczą do ustalenia jest to, czym powinna być ta zmienna docelowa. Popularnym celem, stosowanym w większości prac, jest znak zwrotu ceny na następnym pasku. Lepiej nadaje się do przewidywania, ponieważ mniej podatna na przypadkowość jest różnica w cenie do bardziej odległego horyzontu prognozy. jak 3 bary od teraz lub tego samego dnia w przyszłym tygodniu. Jak prawie wszystko w systemach transakcyjnych, horyzont prognozy jest kompromisem między skutkami losowości (mniej barów jest gorszych) a przewidywalnością (mniej słupków jest lepszych). Czasami nie interesuje Cię bezpośrednio przewidywanie ceny, ale przewidywanie innego parametru 8211, takiego jak aktualna noga wskaźnika Zigzag 8211, który inaczej można by było określić dopiero po fakcie. Lub chcesz wiedzieć, czy pewna nieefektywność rynku pojawi się następnym razem, szczególnie gdy nie wykorzystujesz uczenia maszynowego nie bezpośrednio do handlu, ale do filtrowania transakcji w systemie opartym na modelu. Albo chcesz przewidzieć coś zupełnie innego, na przykład prawdopodobieństwo krachu na rynku jutro. Wszystko to jest łatwiejsze do przewidzenia niż popularny powrót jutra. W naszym eksperymencie dotyczącym cen akcji wykorzystamy zwrot krótkoterminowej transakcji cenowej jako zmiennej docelowej. Po ustaleniu celu następnym krokiem jest wybranie funkcji. Krok 2: Funkcje Krzywa cenowa jest najgorszym przypadkiem dla każdego algorytmu uczenia maszynowego. Nie tylko niesie za sobą mało sygnału, a przede wszystkim hałas. jest również niestacjonarny, a stosunek sygnału zmienia się cały czas. Dokładny stosunek sygnału do szumu zależy od tego, co rozumie się przez 8220signal8221, ale zwykle jest zbyt niski, aby jakikolwiek znany algorytm uczenia maszynowego mógł produkować coś użytecznego. Musimy więc wyprowadzić funkcje z krzywej ceny, która zawiera więcej sygnału i mniej hałasu. Sygnał w tym kontekście to dowolna informacja, którą można wykorzystać do przewidywania celu, czymkolwiek on jest. Cała reszta to hałas. Dlatego wybór funkcji jest kluczowy dla sukcesu 8211 o wiele bardziej krytyczny niż wybór algorytmu uczenia maszynowego, który zamierzasz użyć. Istnieją dwa podejścia do wybierania funkcji. Pierwszym i najczęstszym jest wydobywanie jak największej ilości informacji z krzywej ceny. Ponieważ nie wiesz, gdzie są ukryte informacje, po prostu generujesz dziki zestaw wskaźników o szerokim zakresie parametrów i masz nadzieję, że przynajmniej kilka z nich będzie zawierało informacje potrzebne algorytmowi. Takie podejście zwykle znajdujesz w literaturze. Problem tej metody: Każdy algorytm uczenia się maszyn jest łatwo mylony z nieprzewidywalnymi predyktorami. Więc nie wystarczy rzucić na nią 150 wskaźników. Potrzebujesz algorytmu preselekcyjnego, który określa, które z nich przenoszą użyteczne informacje i które można pominąć. Bez zredukowania możliwości w ten sposób do ośmiu lub dziesięciu, nawet najgłębszy algorytm uczenia się nie przyniesie niczego użytecznego. Inne podejście, zwykle do eksperymentów i badań, wykorzystuje jedynie ograniczone informacje z krzywej ceny. Tak jest w tym przypadku: ponieważ chcemy zbadać handel cenami akcji, wykorzystujemy tylko kilka ostatnich cen jako dane wejściowe i musimy odrzucić całą resztę krzywej. Ma to tę zaletę, że nie potrzebujemy żadnego algorytmu preselekcyjnego, ponieważ i tak liczba funkcji jest ograniczona. Oto dwie proste funkcje predyktorów, których używamy w naszym eksperymencie (w C): Te dwie funkcje mają nosić informacje niezbędne do działania cenowego: ruch i zmienność per-bar. Funkcja zmiany jest różnicą aktualnej ceny do ceny n barów przed, w stosunku do bieżącej ceny. Funkcja range to całkowita odległość high-low ostatnich n świec, również w stosunku do aktualnej ceny. Funkcja skali centruje i kompresuje wartości do zakresu -100, więc dzielimy je przez 100, aby uzyskać ich normalizację do -1. Pamiętamy, że do algorytmów uczenia maszynowego potrzebna jest normalizacja. Krok 3: Wstępne wybieranie predyktorów predefiniowanych Po wybraniu dużej liczby wskaźników lub innych sygnałów jako funkcji dla swojego algorytmu, musisz określić, które z nich jest użyteczne, a które nie. Istnieje wiele metod zmniejszania liczby funkcji, na przykład: Określ korelacje między sygnałami. Usuń te z silną korelacją z innymi sygnałami, ponieważ nie przyczyniają się one do informacji. Porównaj bezpośrednio treść informacyjną sygnałów, z algorytmami takimi jak entropia informacji lub drzewa decyzyjne. Określ pośrednio zawartość informacji, porównując sygnały z losowymi sygnałami. Istnieje kilka bibliotek oprogramowania, takich jak pakiet R Boruta. Użyj algorytmu, takiego jak Analiza głównych składowych (PCA) do generowania nowego zestawu sygnałów o zmniejszonej wymiarowości. Wykorzystaj optymalizację genetyczną do określenia najważniejszych sygnałów za pomocą najbardziej dochodowych wyników procesu prognozowania. Świetne do dopasowywania krzywych, jeśli chcesz opublikować imponujące wyniki w pracy badawczej. W naszym eksperymencie nie musimy wstępnie wybierać ani wstępnie przetwarzać funkcji, ale można znaleźć przydatne informacje na ten temat w artykułach (1), (2) i (3) wymienionych na końcu strony. Krok 4: Wybierz algorytm uczenia maszynowego R oferuje wiele różnych pakietów ML, a każdy z nich oferuje wiele różnych algorytmów o wielu różnych parametrach. Nawet jeśli już zdecydowałeś o metodzie 8211 tutaj, głębokie uczenie się 8211 masz wciąż wybór między różnymi podejściami i różnymi pakietami R. Większość z nich jest całkiem nowa i nie można znaleźć wielu informacji empirycznych, które pomogą w podjęciu decyzji. Musisz spróbować wszystkich i zdobyć doświadczenie z różnymi metodami. Do naszego eksperymentu wybraliśmy pakiet Deepnet, który jest prawdopodobnie najprostszą i najłatwiejszą w użyciu biblioteką do nauki głębokiego uczenia się. Dzięki temu nasz kod jest krótki. We8217 używamy swojego algorytmu Stacked Autoencoder (SAE) do wstępnego szkolenia sieci. Deepnet oferuje również Restricted Boltzmann Machine (RBM) do wstępnego treningu, ale nie mogłem uzyskać z tego dobrych wyników. Istnieją inne i bardziej złożone pakiety głębokiego uczenia się dla R, więc możesz spędzić dużo czasu sprawdzając je wszystkie. Jak łatwo można wytłumaczyć prace przedtreningowe, ale dlaczego to działa, to inna kwestia. Co do mojej wiedzy, nikt jeszcze nie wymyślił solidnego dowodu matematycznego, że w ogóle działa. W każdym razie, wyobraź sobie dużą sieć neuronową z wieloma ukrytymi warstwami: Trening sieci oznacza ustawienie ciężarów połączeń między neuronami. Typową metodą jest wsteczna propagacja błędów. Ale okazuje się, że im więcej ukrytych warstw masz, tym gorzej działa. Zwrotne warunki błędu stają się coraz mniejsze z warstwy na warstwę, powodując, że pierwsze warstwy sieci nie uczą się prawie nic. Co oznacza, że przewidywany wynik staje się coraz bardziej zależny od losowego stanu początkowego wag. To poważnie ograniczyło złożoność sieci neuronowych opartych na warstwach, a zatem zadania, które mogą rozwiązać. Przynajmniej do 10 lat temu. W 2006 r. Naukowcy z Toronto po raz pierwszy opublikowali pomysł wstępnego szkolenia wag za pomocą nienadzorowanego algorytmu uczenia, ograniczonej maszyny Boltzmanna. Okazało się to rewolucyjną koncepcją. Zwiększyło to rozwój sztucznej inteligencji i umożliwiło wszelkiego rodzaju nowe aplikacje z maszyn do grania na samochody samojezdne. W przypadku skumulowanego autoencodera działa to w ten sposób: Wybierz ukrytą warstwę, aby rozpocząć trening z pierwszą ukrytą warstwą. Podłącz jego wyjścia do tymczasowej warstwy wyjściowej, która ma taką samą strukturę jak warstwa wejściowa sieci8217s. Nakarm sieć próbkami szkoleniowymi, ale bez celów. Wytrenuj go tak, aby pierwsza ukryta warstwa odtwarzała sygnał wejściowy 8211 dla funkcji 8211 na wyjściach tak dokładnie, jak to możliwe. Reszta sieci jest ignorowana. Podczas treningu zastosuj 8216-karowy okres karny8217, tak aby jak najmniej połączeń było używanych do odtworzenia sygnału. Teraz wyprowadzaj wyjścia przeszkolonej, ukrytej warstwy na wejścia kolejnej niewyszkolonej ukrytej warstwy i powtarzaj proces treningu, aby sygnał wejściowy był odtworzony na wyjściach następnej warstwy. Powtarzaj ten proces, dopóki nie zostaną przeszkolone wszystkie ukryte warstwy. Mamy teraz 8216 rzadką sieć8217 z bardzo małą liczbą połączeń warstwowych, które mogą odtworzyć sygnały wejściowe. Teraz trenuj sieć za pomocą wstecznej propagacji, aby poznać zmienną docelową, wykorzystując wstępnie wyszkolone wagi ukrytych warstw jako punkt wyjścia. Istnieje nadzieja, że nienadzorowany proces przedtreningowy wytwarza wewnętrzną redukcję szumu sygnałów wejściowych, którą można następnie wykorzystać do łatwiejszego uczenia się celu. I rzeczywiście wydaje się, że działa. Nikt tak naprawdę nie wie dlaczego, ale kilka teorii 8211 widzą papier (4) poniżej 8211 próbują wyjaśnić to zjawisko. Krok 5: Generowanie zestawu danych testowych Najpierw musimy stworzyć zestaw danych z funkcjami i celami, abyśmy mogli przetestować nasz proces przewidywania i wypróbować parametry. Funkcje muszą opierać się na tych samych danych dotyczących cen, co w przypadku transakcji na żywo, a dla celu musimy symulować transakcje krótkoterminowe. Dlatego warto generować dane nie za pomocą R, ale za pomocą naszej platformy transakcyjnej, która jest mimo wszystko o wiele szybsza. Oto mały skrypt Zorro do tego, DeepSignals. c: We8217 generujemy 2 lata danych z funkcjami obliczonymi przez nasze wyżej zdefiniowane funkcje zmiany i zakresu. Naszym celem jest powrót handlu z 3 barami czasu życia. Koszty transakcji są ustawione na zero, więc w tym przypadku zwrot jest równy różnicy w cenie 3 bary w przyszłości. Funkcja adviseLong została opisana w instrukcji Zorro. Jest to potężna funkcja, która automatycznie obsługuje szkolenie i przewidywanie oraz pozwala używać dowolnego opartego na R algorytmu uczenia maszynowego, tak jakby był prostym wskaźnikiem. W naszym kodzie funkcja wykorzystuje następną transakcję jako cel, a zmiany cen i zakresy ostatnich 4 pasków jako cechy. Flaga SIGNALS informuje, aby nie trenować danych, ale wyeksportować je do pliku. csv. Flaga BALANCED upewnia nas, że otrzymujemy tyle pozytywnych, co negatywnych, co jest ważne dla większości algorytmów uczenia maszynowego. Uruchom skrypt w trybie pociągu, wybierając nasz standardowy test aktywów EURUSD. Generuje plik arkusza kalkulacyjnego o nazwie DeepSignalsEURUSDL. csv, który zawiera funkcje w pierwszych 8 kolumnach, a także zwraca transakcję w ostatniej kolumnie. Krok 6: Skalibruj algorytm Złożone algorytmy uczenia maszynowego mają wiele parametrów do dostosowania. Niektóre z nich oferują ogromne możliwości dopasowania krzywej do algorytmu publikacji. Nadal musimy skalibrować parametry, ponieważ algorytm rzadko działa dobrze z jego domyślnymi ustawieniami. W tym celu znajduje się skrypt R, który odczytuje wcześniej utworzony zestaw danych i przetwarza go za pomocą algorytmu głębokiego uczenia się (DeepSignal. r): We8217 zdefiniował trzy funkcje: neuron. train. neural. predict. i neural. init do treningu, przewidywania i inicjowania sieci neuronowej. Nazwy funkcji nie są arbitralne, ale postępuj zgodnie z konwencją używaną przez funkcję Zorro8217s adv (NEURAL.). Teraz nie ma to znaczenia, ale będzie miało znaczenie później, kiedy użyjemy tego samego skryptu R do szkolenia i handlu strategią głębokiego uczenia się. Czwarta funkcja, TestOOS. jest używany do testowania poza naszą próbą naszej konfiguracji. Funkcja neural. init zasysa generator losowy R o ustalonej wartości (365 jest moim osobistym szczęśliwym numerem). W przeciwnym razie uzyskalibyśmy nieco inny wynik w dowolnym momencie, ponieważ sieć neuronowa jest inicjowana losowymi wagami. Tworzy także globalną listę R o nazwie 8220Models8221. Większość typów zmiennych R don8217t trzeba wcześniej utworzyć, inne (don8217t). Operator 8216ltlt-8216 służy do uzyskiwania dostępu do zmiennej globalnej z funkcji. Funkcja neuron. train przyjmuje jako dane wejściowe numer modelu i zestaw danych do szkolenia. Numer modelu identyfikuje wyszkolony model na liście 8220 modeli 8221. Lista nie jest naprawdę potrzebna do tego testu, ale będziemy potrzebować go do bardziej złożonych strategii, które będą trenować więcej niż jeden model. Macierz zawierająca funkcje i cel jest przekazywana do funkcji jako drugi parametr. Jeśli dane XY nie są poprawną matrycą, co często zdarza się w R, w zależności od tego, jak ją wygenerowałeś, jest konwertowane na jeden. Następnie jest dzielony na cechy (X) i cel (Y), a na koniec cel jest konwertowany na 1 dla pozytywnego wyniku handlowego i 0 dla wyniku negatywnego. Parametry sieci są następnie konfigurowane. Niektóre są oczywiste, inne mogą swobodnie się bawić: Struktura sieci jest podana przez ukryty wektor: c (50, 100,50) definiuje 3 ukryte warstwy, pierwsza z 50, druga ze 100 i trzecia z 50 neuronami. Jest to parametr, który my8217ll później zmodyfikujemy w celu określenia, czy głębiej jest lepiej. Funkcja aktywacji konwertuje sumę wartości wejściowych neuronu do wyjściowego neuronu najczęściej używanymi są sigmoidy, które nasycają się do 0 lub 1, lub tanh, które nasycają się do -1 lub 1. Używamy tu tu, ponieważ nasze sygnały są również w zakresie -1 . Wyjście sieci jest funkcją sigmoidalną, ponieważ chcemy przewidywać w zakresie 0..1. Ale wyjście SAE musi być 8220linear8221, aby Stacked Autoenoder mógł odtwarzać analogowe sygnały wejściowe na wyjściach. Szybkość uczenia się kontroluje wielkość kroku dla gradientowego zejścia podczas treningu. Niższa stawka oznacza dokładniejsze kroki i prawdopodobnie dokładniejsze przewidywanie, ale dłuższy czas treningu. Momentum dodaje ułamek poprzedniego kroku do bieżącego. Zapobiega utknięciu gradientu z minimalnego lokalnego minimum lub punktu siodłowego. Skala szybkości uczenia się jest mnożnikiem zmiany szybkości uczenia się po każdej iteracji (nie jestem pewien, co to jest dobre, ale mogą istnieć zadania, w których niższy wskaźnik uczenia się w wyższych epokach poprawia trening). Epoka to iteracja szkoleniowa w całym zbiorze danych. Trening zatrzyma się po osiągnięciu liczby epok. Więcej epok oznacza lepsze przewidywania, ale dłuższy trening. Wielkość partii to liczba losowych próbek 8211, mini partia 8211 wyjęta z zestawu danych dla pojedynczego przebiegu treningowego. Dzielenie danych na mini partie przyspiesza trening, ponieważ gradient masy jest obliczany na podstawie mniejszej liczby próbek. Im większy rozmiar partii, tym lepsze jest szkolenie, ale tym więcej czasu zajmie. Upuszczenie to liczba losowo wybranych neuronów, które są wyłączone podczas mini-wsadu. W ten sposób sieć uczy się tylko z częścią swoich neuronów. Wydaje się to dziwnym pomysłem, ale może skutecznie zmniejszyć przeuczenie. Wszystkie te parametry są wspólne dla sieci neuronowych. Pobaw się z nimi i sprawdź ich wpływ na wynik i czas treningu. Właściwa kalibracja sieci neuronowej nie jest trywialna i może być tematem innego artykułu. Parametry są przechowywane w modelu razem z macierzą wyszkolonych wag łączących. Więc nie muszą być ponownie podane w funkcji przewidywania, neural. predict. Pobiera model i wektor X funkcji, przepuszcza go przez warstwy i zwraca wynik sieci, przewidywany cel Y. W porównaniu ze szkoleniem prognozy są dość szybkie, ponieważ wymaga tylko kilku tysięcy multiplikacji. Jeśli X był wektorem wiersza, jest transponowany iw ten sposób przekształcony na wektor kolumnowy, w przeciwnym razie funkcja nn. predict nie zaakceptuje go. Użyj RStudio lub innego podobnego środowiska do wygodnej pracy z R. Edytuj ścieżkę do danych. csv w powyższym pliku, zainstaluj go, zainstaluj wymagane pakiety R (deepnet, e1071 i caret), a następnie wywołaj funkcję TestOOS z polecenia linia. Jeśli wszystko działa, powinien wydrukować coś takiego: TestOOS czyta najpierw nasz zestaw danych z folderu Zorro8217s Data. Dzieli dane w 80 na szkolenia (XY. tr) i 20 na testy pozapróbkowe (XY. ts). Zestaw treningowy jest wyszkolony, a wynik zapisany na liście modeli w indeksie 1. Zestaw testów jest dodatkowo podzielony na funkcje (X) i cele (Y). Y jest konwertowane na binarne 0 lub 1 i przechowywane w Y. ob. nasz wektor obserwowanych celów. Następnie możemy przewidzieć cele z zestawu testowego, przekonwertować je ponownie na binarne 0 lub 1 i zapisać je w Y. pr. W celu porównania obserwacji z prognozą używamy funkcji confusionMatrix z pakietu caret. Matryca zaklasyfikowania binarnego klasyfikatora jest po prostu macierzą 22152, która mówi, ile 08217 i ile 18217 zostało przepowiedzianych źle i poprawnie. Wiele wskaźników pochodzi z macierzy i wydrukowanych w wierszach powyżej. Najważniejsza w tej chwili jest dokładność przewidywania 62. Może to wskazywać, że przedwcześnie zahamowałem handel akcjami cenowymi. Ale oczywiście 62 mogło być tylko szczęściem. We8217ll zobaczymy to później, gdy przeprowadzimy test WFO. Ostatnia rada: pakiety R są czasami aktualizowane, z możliwą konsekwencją, że poprzedni kod R nagle może działać inaczej lub wcale. To się naprawdę dzieje, więc sprawdź dokładnie po każdej aktualizacji. Krok 7: Strategia Teraz, gdy testowaliśmy nasz algorytm i uzyskaliśmy pewną dokładność przewidywania powyżej 50 za pomocą zestawu danych testowych, możemy ostatecznie zakodować naszą strategię uczenia maszynowego. W rzeczywistości już zakodowaliśmy większość z nich, musimy tylko dodać kilka linii do powyższego skryptu Zorro, który wyeksportował zestaw danych. Jest to ostateczny skrypt do szkolenia, testowania i (teoretycznie) handlu systemem (DeepLearn. c): We8217 wykorzystujemy cykl WFO jednego roku, podzielony na 90 treningów i 10 testów poza próbą. Możesz zapytać, dlaczego wcześniej użyłem dwóch danych z roku 8217 i innego podziału, 8020, do kalibracji sieci w kroku 5. Ma to na celu użycie odmiennie skomponowanych danych do kalibrowania i testowania do przodu. Jeśli użyjemy dokładnie tych samych danych, kalibracja może nadużyć i narazić na szwank test. Wybrane parametry WFO oznaczają, że system jest szkolony z około 225 dniowymi danymi, po czym następuje 25-dniowy okres testowy lub transakcyjny bez treningu. W literaturze czasami znajdziesz zalecenia, aby przekwalifikować system uczenia maszynowego po jakimkolwiek handlu lub przynajmniej w dowolnym dniu. Ale to nie ma dla mnie większego sensu. Kiedy zużyłeś prawie 1 rok8217 danych do szkolenia systemu, nie może on ulec pogorszeniu po jednym dniu. A jeśli tak, i produkowała tylko pozytywne wyniki testu z codziennym przekwalifikowaniem, mocno podejrzewałbym, że wyniki są artefaktami za pomocą jakiegoś błędu w kodowaniu. Szkolenie głębokiej sieci trwa naprawdę długo, w naszym przypadku około 10 minut dla sieci z 3 ukrytymi warstwami i 200 neuronami. Ponieważ jest to powtarzane w dowolnym cyklu WFO, zaleca się stosowanie wielu rdzeni do równoległego szkolenia wielu cykli. Zmienna NumCores na -1 aktywuje wszystkie rdzenie procesora, ale jedną. Wiele rdzeni jest dostępnych tylko w Zorro S, więc pełne przejście do przodu z wszystkimi cyklami WFO może zająć kilka godzin w wersji bezpłatnej. W skrypcie szkolimy teraz zarówno długie, jak i krótkie transakcje. W tym celu musimy zezwolić na hedging w trybie treningowym, ponieważ długie i krótkie pozycje są otwarte w tym samym czasie. Wpisanie pozycji jest teraz zależne od zwracanej wartości z funkcji advise, która z kolei wywołuje funkcję neurural. train lub neurural. predict ze skryptu R. W związku z tym wprowadzamy pozycje, gdy sieć neuronowa przewiduje wynik powyżej 0,5. Skrypt R jest teraz kontrolowany przez skrypt Zorro (do tego musi mieć tę samą nazwę, NeuralLearn. r, tylko z innym rozszerzeniem). Jest identyczny z naszym skryptem R powyżej, ponieważ używamy tych samych parametrów sieciowych. Do obsługi testu WFO wymagana jest tylko jedna dodatkowa funkcja: Funkcja neuron. save przechowuje listę modeli 8211, zawiera teraz 2 modele dla długich i krótkich transakcji 8211 po każdym szkoleniu uruchamianym w folderze danych Zorro8217s. Ponieważ modele są przechowywane do późniejszego wykorzystania, nie trzeba ich ponownie trenować w celu powtarzania testów. Jest to krzywa equity WFO wygenerowana za pomocą powyższego skryptu (EURUSD, bez kosztów handlowych): chociaż nie wszystkie cykle WFO uzyskują pozytywny wynik, wydaje się, że istnieje pewien efekt prognostyczny. Krzywa jest równoważna rocznemu zwrotowi 89, osiągniętemu przy 50-100-50 ukrytej strukturze warstw. We8217ll sprawdź w następnym kroku, w jaki sposób różne struktury sieci wpływają na wynik. Od neural. init. neuron. train. neural. predict. a funkcje neuron. save są automatycznie wywoływane przez funkcje Zorro8217s adviseLongadviseShort, nie ma żadnych funkcji R bezpośrednio wywoływanych w skrypcie Zorro. W związku z tym skrypt może pozostać niezmieniony podczas korzystania z innej metody uczenia maszynowego. Tylko skrypt DeepLearn. r musi zostać zmodyfikowany, a sieć neuronowa, na przykład, zastąpiona przez maszynę wektorów wsparcia. Aby handlować takim systemem uczenia maszynowego na VPS, upewnij się, że R jest również zainstalowany na VPS, potrzebne pakiety R są zainstalowane, a ścieżka do terminala R jest ustawiona w pliku ini Zorro8217s. W przeciwnym razie podczas uruchamiania strategii pojawi się komunikat o błędzie. Krok 8: Eksperyment Jeśli naszym celem było opracowanie strategii, następnym krokiem byłoby sprawdzenie rzeczywistości, zarządzanie ryzykiem i pieniędzmi oraz przygotowanie do handlu na żywo, zgodnie z opisem opisanym w strategii rozwoju opartej na modelach. Ale w naszym eksperymencie przeprowadzimy teraz serię testów z liczbą neuronów na warstwę zwiększoną z 10 do 100 w 3 krokach i 1, 2 lub 3 ukrytymi warstwami (deepnet nie obsługuje więcej niż 3). Zatem analizujemy następujące 9 struktur sieci: c (10), c (10,10), c (10, 10, 10), c (30), c (30,30), c (30,3030 ), c (100), c (100,100), c (100,100,100). Do tego eksperymentu potrzebujesz popołudnia nawet z szybkim komputerem i trybem wielordzeniowym. Oto wyniki (współczynnik SR Sharpe'a, liniowość nachylenia R2): Widzimy, że prosta sieć z tylko 10 neuronami w pojedynczej ukrytej warstwie wygrała dobrze dla prognoz krótkoterminowych. Złożoność sieci wyraźnie poprawia wydajność, jednak tylko do pewnego momentu. Dobry wynik dla naszego systemu został już osiągnięty dzięki 3 warstwom x 30 neuronów. Nawet więcej neuronów nie pomogło, a czasem nawet przyniosło gorszy wynik. Nie jest to niespodzianką, ponieważ do przetworzenia tylko 8 wejść, 300 neuronów prawdopodobnie nie wykona lepszej pracy niż 100. Wniosek Naszym celem było ustalenie, czy kilka świec może mieć moc predykcyjną i jak na wyniki wpływa złożoność algorytmu . Wydaje się, że wyniki sugerują, że krótkoterminowe ruchy cen można faktycznie przewidzieć czasami, analizując zmiany i zakresy ostatnich 4 świec. Prognozy nie są bardzo dokładne 8211 it8217s w zakresie 58..60, a większość systemów z serii testów stają się nieopłacalne, gdy uwzględnione są koszty handlowe. Muszę jednak ponownie rozważyć moją opinię na temat akcji cenowej. Fakt, że prognozy są lepsze dzięki złożoności sieci, jest szczególnie przekonującym argumentem na rzecz krótkoterminowej przewidywalności cen. Interesujące byłoby przyjrzenie się długoterminowej stabilności predykcyjnych schematów cenowych. W tym celu musieliśmy przeprowadzić kolejną serię eksperymentów i zmodyfikować okres treningu (WFOPeriod w powyższym skrypcie) i 90 podział ISOOS. To zajmuje więcej czasu, ponieważ musimy użyć więcej danych historycznych. Zrobiłem kilka testów i stwierdziłem, że rok wydaje się być naprawdę dobrym okresem szkoleniowym. System pogarsza się z okresami dłuższymi niż kilka lat. Prognozy cenowe, przynajmniej EURUSD, mają ograniczony czas życia. Gdzie możemy stąd wyjść? Istnieje wiele możliwości, na przykład: używaj nakładów z większej liczby świec i przetwarzaj je w znacznie większych sieciach z tysiącami neuronów. Użyj oversampling do rozszerzenia danych treningowych. Prognozowanie zawsze poprawia się dzięki większej liczbie próbek szkoleniowych. Kompresja szeregów czasowych f. i. z analizą widmową i analizować nie świece, ale ich reprezentację częstotliwościową za pomocą metod uczenia maszynowego. Użyj danych wejściowych z wielu świec 8211, takich jak 100 8211, i przygotuj sąsiednie świece z jednowymiarowymi splotowymi warstwami sieci. Używaj sieci powtarzalnych. Szczególnie LSTM może być bardzo interesująca do analizy szeregów czasowych 8211 i według mojej wiedzy, do tej pory rzadko były wykorzystywane do prognoz finansowych. Użyj zestawu sieci neuronowych do prognozowania, takich jak Aronson8217s 8220oracles8221 i 8220comitees82221. Artykuły Artykuły I8217ve dodał skrypty C i R do repozytorium skryptów 2018. Potrzebujesz obu w folderze Strategii Zorro8217. Wersja Zorro 1.474 i R wersja 3.2.5 (64-bitowa) została użyta do eksperymentu, ale powinna również działać z innymi wersjami. Poniższe wyniki zostały wygenerowane przez poprawioną wersję DeepSignals. r 8211 Jedyną zmianą było użycie LSTM net z pakietu rnn na CRAN. Autorzy pakietu uważają, że ich implementacja LSTM ma postać 8220experimental8221 i nie wydaje się, aby uczenie się było jak na razie prawidłowe, więc mam nadzieję, że uda się wprowadzić dalsze ulepszenia. (Zużyty wiek próbuje osiągnąć element LSTM przy użyciu pakietu mxnet, ale zrezygnował z tego, jak mógł poprawnie odczytać format wejściowy podczas korzystania z wielu funkcji treningowych.) Opublikuje wyniki pełnego WFO po zakończeniu LSTM wersji DeepLearn. r Confusion Matrix i Prognoza statystyczna odniesienia 0 1 0 1641 1167 1 1225 1701 Dokładność. 0,5828 95 CI. (0,5699, 0,5956) Brak współczynnika informacji. 0,5002 P-wartość Acc gt NIR. lt2e-16 Kappa. 0,1657 Mcnemar039s Test P-Value. 0.2438 Czułość. 0,5726 Specyficzność. 0.5931 Pos Pred Value. 0.5844 Neg Pred Value. 0.5813 Prevalence. 0.4998 Detection Rate. 0.2862 Detection Prevalence. 0.4897 Balanced Accuracy. 0.5828 039Positive039 Class. 0 Results of WFO test below. Again, only change to original files was the use of LSTM in R, rather than DNNSAE. Walk-Forward Test DeepLearnLSTMV4 EURUSD Simulated account AssetsFix Bar period 1 hour (avg 87 min) Simulation period 15.05.2017-07.06.2018 (12486 bars) Test period 04.05.2018-07.06.2018 (6649 bars) Lookback period 100 bars (4 days) WFO test cycles 11 x 604 bars (5 weeks) Training cycles 12 x 5439 bars (46 weeks) Monte Carlo cycles 200 Assumed slippage 0.0 sec Spread 0.0 pips (roll 0.000.00) Contracts per lot 1000.0 Gross winloss 3628 -3235 (5199p) Average profit 360year, 30month, 1.38day Max drawdown -134 34 (MAE -134 34) Total down time 95 (TAE 95) Max down time 5 weeks from Aug 2018 Max open margin 40 Max open risk 35 Trade volume 5710964 (5212652year) Transaction costs 0.00 spr, 0.00 slp, 0.00 rol Capital required 262 Number of trades 6787 (6195year, 120week, 25day) Percent winning 57.6 Max winloss 16 -14 Avg trade profit 0.06 0.8p (12.3p -14.8p) Avg trade slippage 0.00 0.0p (0.0p -0.0p) Avg trade bars 1 (1 -2) Max trade bars 3 (3 hours) Time in market 177 Max open trades 3 Ma x loss streak 17 (uncorrelated 11) Annual return 137 Profit factor 1.12 (PRR 1.08) Sharpe ratio 1.79 Kelly criterion 2.34 R2 coefficient 0.435 Ulcer index 13.3 Prediction error 152 Confidence level AR DDMax Capital 10 143 128 252 20 129 144 278 30 117 161 306 40 107 179 336 50 101 190 355 60 92 213 392 70 85 232 425 80 77 257 466 90 64 314 559 95 53 383 675 100 42 495 859 Portfolio analysis OptF ProF WinLoss Wgt Cycles EURUSD .219 1.12 39072880 100.0 XXX EURUSD:L .302 1.17 18301658 65.0 EURUSD:S .145 1.08 20771222 35.0 Interesting For a still experimental LSTM implementation that result looks not bad. Could you help me answering some questions I have few question below: 1.I want to test Commission mode. If I use interactive broker, I should set Commission . in normal case. 2.If I press the 8220trade8221 button, I see the log the script will use DeepLearnEURUSD. ml. So real trade it will use DeepLearnEURUSD. ml to get the model to trade And use neural. predict function to trade 3.If I use the slow computer to train the data , I should move DeepLearnEURUSD. ml to the trade computer I test the real trade on my interactive brokers and press the result button. Can I use Commission0.60 to train the neural and get the real result Thank you. Result button will show the message below: Trade Trend EURUSD Bar period 2 min (avg 2 min) Trade period 02.11.2018-02.11.2018 Spread 0.5 pips (roll -0.020.01) Commission 0.60 Contracts per lot 1000.0 Commission should be normally not set up in the script, but entered in the broker specific asset list. Otherwise you had to change the script every time when you want to test it with a different broker or account. IB has different lot sizes and commissions, so you need to add the command to the script when you want to test it for an IB account. Yes, DeepLearnEURUSD. ml is the model for live trading, and you need to copy it to the trade computer. Dear jcl Do I write assetList(AssetsIB. csv) in the right place So below code8217s result includes Commission I test the result with Commission that seems pretty good. Annual 93 3177p function run() StartDate 20170601 BarPeriod 60 1 hour LookBack 100 WFOPeriod 25224 1 year DataSplit 90 NumCores -1 use all CPU cores but one assetList(8220AssetsIB. csv8221) set(RULES) Spread RollLong RollShort Commission Slippage 0 LifeTime 3 if(Train) Hedge 2 if(adviseLong(NEURALBALANCED,0, change(1),change(2),change(3),change(4), range(1),range(2),range(3),range(4)) gt 0.5) enterLong() if(adviseShort() gt 0.5) enterShort() Problem 1: I run the DeepLearn. c in the IB paper trade. The code 8220LifeTime 3 prediction horizon8221 seems to close the position that you open after 3 bars(3 hours). But I can8217t see it close the position on third bar close. I see the logs below: Closing prohibited 8211 check NFA flag EURUSD::L4202 Can8217t close 11.10995 at 09:10:51 Problem 2: In my IB paper trade, it the default order size is 1k on EURUSD. How to change the order size in paper trade Thank you very much. IB is an NFA compliant broker. You can not close trades on NFA accounts. You must set the NFA flag for opening a reverse position instead. And you must enable trading costs, otherwise including the commission has no effect. I don8217t think that you get a positive result with trading costs. Those account issues are not related to machine learning, and are better asked on the Zorro forum. Or even better, read the Zorro manual where all this is explained. Just search for 8220NFA8221. I do some experiment to change the neural8217s parameter with commission. The code is below: function run() StartDate 20170601 BarPeriod 60 1 hour LookBack 100 WFOPeriod 25224 1 year DataSplit 90 NumCores -1 use all CPU cores but one assetList(8220AssetsIB. csv8221) set(RULES) Spread RollLong RollShort Slippage 0 LifeTime 3 if(Train) Hedge 2 if(adviseLong(NEURALBALANCED,0, change(1),change(3),change(5),change(7),change(9), range(1),range(3),range(5),range(7),range(9)) gt 0.7) enterLong() if(adviseShort() gt 0.7) enterShort() I get the result with commission that Annual Return is about 23. But I don8217t complete understand the zorro8217s setting and zorro8217s report. Dziękuję Ci. The result: Annual 23 661p Walk-Forward Test DeepLearn EURUSD Simulated account AssetsIB. csv Bar period 1 hour (avg 86 min) Simulation period 15.05.2017-09.09.2018 (14075 bars) Test period 23.04.2018-09.09.2018 (8404 bars) Lookback period 100 bars (4 days) WFO test cycles 14 x 600 bars (5 weeks) Training cycles 15 x 5401 bars (46 weeks) Monte Carlo cycles 200 Simulation mode Realistic (slippage 0.0 sec) Spread 0.0 pips (roll 0.000.00) Commission 0.50 Contracts per lot 20000.0 Gross winloss 24331 -22685 (914p) Average profit 1190year, 99month, 4.58day Max drawdown -1871 114 (MAE -1912 116) Total down time 92 (TAE 41) Max down time 18 weeks from Dec 2018 Max open margin 2483 Max open risk 836 Trade volume 26162350 (18916130year) Transaction costs 0.00 spr, 0.00 slp, 0.00 rol, -1306 com Capital required 5239 Number of trades 1306 (945year, 19week, 4day) Percent winning 52.5 Max winloss 375 -535 Avg trade profit 1.26 0.7p (19.7p -20.3p) Avg trade slippage 0.00 0.0p (0.0p -0.0p) Avg tra de bars 2 (2 -3) Max trade bars 3 (3 hours) Time in market 46 Max open trades 3 Max loss streak 19 (uncorrelated 10) Annual return 23 Profit factor 1.07 (PRR 0.99) Sharpe ratio 0.56 Kelly criterion 1.39 R2 coefficient 0.000 Ulcer index 20.8 Confidence level AR DDMax Capital 10 29 1134 4153 20 27 1320 4427 30 26 1476 4656 40 24 1649 4911 50 23 1767 5085 60 22 1914 5301 70 21 2245 5789 80 19 2535 6216 90 16 3341 7403 95 15 3690 7917 100 12 4850 9625 Portfolio analysis OptF ProF WinLoss Wgt Cycles EURUSD .256 1.07 685621 100.0 XXXXXXXXXXXX EURUSD:L .476 1.16 294278 94.5 EURUSD:S .026 1.01 391343 5.5
Comments
Post a Comment