Sunday 17 December 2017

Ema trading system afl


Jak zoptymalizować system transakcyjny UWAGA: To dość zaawansowany temat. Przeczytaj najpierw samouczki AFL. Idea optymalizacji jest prosta. Najpierw musisz mieć system transakcyjny, może to być na przykład zwykły, ruchomy crossover. W prawie każdym systemie istnieją pewne parametry (jako okres uśredniania), które decydują o tym, jak dany system zachowuje się (tj. Czy jest dobrze dostosowany do długoterminowego lub krótkoterminowego, jak reaguje na wysoce lotne zapasy itp.). Optymalizacja to proces znajdowania optymalnych wartości tych parametrów (dających najwyższy zysk z systemu) dla danego symbolu (lub portfolio symboli). AmiBroker jest jednym z niewielu programów, które pozwalają zoptymalizować system na wielu symbolach jednocześnie. Aby zoptymalizować swój system, musisz zdefiniować od jednego do dziesięciu parametrów do optymalizacji. Ty decydujesz, jaka jest minimalna i maksymalna dozwolona wartość parametru oraz w jakich przyrostach ta wartość powinna zostać zaktualizowana. Następnie AmiBroker wykonuje wiele testów wstecz, wykorzystując WSZYSTKIE możliwe kombinacje wartości parametrów. Po zakończeniu tego procesu program AmiBroker wyświetli listę wyników posortowaną według zysku netto. Jesteś w stanie zobaczyć wartości parametrów optymalizacji, które dają najlepszy wynik. Zapisywanie wzoru AFL Optymalizacja w backsecie jest obsługiwana za pomocą nowej funkcji o nazwie optimize. Składnia tej funkcji jest następująca: zmienna optymalizuj zmienną (quot. Opis, domyślna, minimalna maks. Krokowa) - jest normalną zmienną AFL, której przypisuje się wartość zwróconą przez funkcję optymalizacji. Przy normalnych testach historycznych, skanowaniu, eksploracji i trybach comentary funkcja optymalizacji zwraca wartość domyślną, więc powyższe wywołanie funkcji jest równoważne: zmienna domyślna W trybie optymalizacji funkcja optymalizacji zwraca kolejne wartości od minimalnej do maksymalnej (włącznie) z krokowym krokiem. quot Opisquot jest łańcuchem, który służy do identyfikacji zmiennej optymalizacji i jest wyświetlany jako nazwa kolumny na liście wyników optymalizacji. wartość domyślna to wartość domyślna, która optymalizuje zwrot funkcji w trybie eksploracji, wskaźnik, komentarz, skanowanie i normalny tryb testu wstecznego min jest minimalną wartością optymalizowanej zmiennej max jest maksymalną wartością zoptymalizowanego kroku zmiennej to interwał stosowany do zwiększenia wartość od minimum do maksimum AmiBroker obsługuje do 64 wywołań optymalizacji funkcji (a więc do 64 zmiennych optymalizacyjnych), należy pamiętać, że jeśli używasz wyczerpującej optymalizacji, to naprawdę dobrym pomysłem jest ograniczenie liczby zmiennych optymalizacyjnych do zaledwie kilku. Każde wywołanie optymalizacji pętli optymalizacji procesu generowania (maks. Min.) I wielokrotne wywoływanie optymalizacji zwiększa liczbę wymaganych cykli. Na przykład optymalizacja dwóch parametrów przy użyciu 10 kroków wymaga 1010 100 pętli optymalizacji. Funkcja optymalizacji połączeń tylko JEDNO na każdą zmienną na początku formuły, ponieważ każde połączenie generuje nowe pętle optymalizacji Optymalizacja wielu symboli jest w pełni obsługiwana przez AmiBroker Maksymalna przestrzeń wyszukiwania to 2 64 (10 19 10 000 000 000 000 000 000) kombinacji 1. Pojedyncza optymalizacja zmiennych: sigavg Optymalizacja (Średnia sygnału 9. 2. 20. 1) Kup krzyż (MACD (12. 26), sygnał (12. 26. sigavg)) Sprzedaj krzyż (sygnał (12. 26. sigavg), MACD (12. 26)) 2. Optymalizacja dwóch zmiennych (odpowiednia dla wykresów 3D) na Optymalizowanie (na 2. 2. 50. 1) Optymalizacja poziomu (poziom 2. 2. 150. 4) Kupuj krzyż (CCI (per), - Level) Sprzedaj Cross (poziom, CCI (per)) 3. Wielokrotna (3) optymalizacja zmiennych: mfast Optymalizuj (MACD Szybki 12. 12. 16. 1) mslow Optymalizuj (MACD zwolniony 26. 17. 30. 1) sigavg Optymalizuj (sygnał średnio 9. 2. 20. 1) Kupuj Cross (MACD (mfast, mslow) Signal (mfast, mslow, sigavg)) Sprzedaj Cross (Signal (mfast, mslow, sigavg), MACD (mfast, mslow)) Po wejściu f ormula po prostu kliknij przycisk Optymalizuj w oknie quotAutomatic Analysisquot. AmiBroker rozpocznie testowanie wszystkich możliwych kombinacji zmiennych optymalizacyjnych i zgłosi wyniki na liście. Po przeprowadzeniu optymalizacji lista wyników jest prezentowana według zysku netto. Ponieważ możesz posortować wyniki według dowolnej kolumny na liście wyników, łatwo jest uzyskać optymalne wartości parametrów dla najniższej wyprzedaży, najniższej liczby transakcji, największego współczynnika zysku, najniższej ekspozycji rynkowej i najwyższej rocznej stopy zwrotu skorygowanej o ryzyko. Ostatnie kolumny listy wyników przedstawiają wartości zmiennych optymalizacyjnych dla danego testu. Kiedy zdecydujesz, która kombinacja parametrów pasuje do twoich potrzeb, wszystko, co musisz zrobić, to zastąpić wartości domyślne optymalizacją wywołań funkcji z optymalnymi wartościami. Na obecnym etapie musisz wpisać je ręcznie w oknie edycji formuły (drugi parametr optymalizacji wywołania funkcji). Wyświetlanie animowanych wykresów 3D animacji Aby wyświetlić wykres optymalizacji 3D, należy najpierw przeprowadzić optymalizację dwóch zmiennych. Dwie zmienne optymalizacje wymagają formuły, która ma 2 wywołania funkcji Optimize (). Przykładowa optymalizacja dwóch zmiennych wygląda następująco: per Optimize (per 2. 2. 5. 50. 1) Level Optimize (poziom 2. 2. 150. 4) Kup Cross (CCI (per), - Level) Sell Cross (Poziom, CCI (per)) Po wprowadzeniu formuły należy kliknąć przycisk quotOptimizequot. Po zakończeniu optymalizacji kliknij strzałkę w dół na przycisku Optymalizuj i wybierz opcję Wyświetl wykres optymalizacji 3D. W ciągu kilku sekund kolorowy trójwymiarowy wykres powierzchni pojawi się w oknie przeglądarki 3D. Przykładowy wykres 3D wygenerowany za pomocą powyższej formuły pokazano poniżej. Domyślnie wykresy 3D pokazują wartości zysku netto względem zmiennych optymalizacyjnych. Można jednak wykreślić wykres powierzchniowy 3D dla dowolnej kolumny w tabeli wyników optymalizacji. Wystarczy kliknąć nagłówek kolumny, aby go posortować (pojawi się niebieska strzałka wskazująca, że ​​wyniki optymalizacji są sortowane według wybranej kolumny), a następnie ponownie wybrać opcję Wyświetl wykres optymalizacji 3D. Wizualizując, jak parametry systemów wpływają na wydajność handlu, można łatwiej zdecydować, które wartości parametrów wytwarzają quotfragilequot i które generują wysoką wydajność systemu. Solidne ustawienia to regiony na wykresie 3D, które wykazują stopniowe, a nie gwałtowne zmiany na wykresie powierzchni. Wykresy optymalizacji 3D są doskonałym narzędziem do zapobiegania dopasowywaniu krzywych. Dopasowanie do krzywej (lub nadmierna optymalizacja) występuje, gdy system jest bardziej złożony, niż powinien, i cała ta złożoność była skoncentrowana na warunkach rynkowych, które mogą się już nigdy nie powtórzyć. Radykalne zmiany (lub skoki) na wykresach optymalizacji 3D pokazują wyraźnie obszary nadmiernej optymalizacji. Powinieneś wybrać region parametrów, który tworzy szerokie i szerokie plateau na wykresie 3D dla twojego prawdziwego handlu. Zestawy parametrów generujące wzrost zysków nie będą działać w sposób wiarygodny w prawdziwym obrocie. Przeglądarka trójwymiarowej mapy AmiBrokers Przeglądarka trójwymiarowa oferuje całkowite możliwości oglądania z pełną rotacją wykresu i animacją. Teraz możesz zobaczyć wyniki swojego systemu z każdej możliwej perspektywy. Możesz kontrolować pozycję i inne parametry wykresu za pomocą myszy, paska narzędzi i skrótów klawiaturowych, niezależnie od tego, co jest dla Ciebie łatwiejsze. Poniżej znajdziesz listę. - Obrót - przytrzymaj lewy przycisk myszy i poruszaj się w kierunkach XY - aby powiększyć, pomniejszyć - przytrzymaj PRAWY przycisk myszy i poruszaj się w kierunkach XY - aby przesunąć (tłumaczyć) - przytrzymaj LEWY przycisk myszy i klawisz CTRL i poruszaj się w kierunkach XY - w celu animacji - przytrzymaj LEWY przycisk myszy, przeciągnij szybko i zwolnij przycisk podczas przeciągania SPACJA - animacja (automatyczne obracanie) LEWA KLUCZA STRZAŁKI - obróć vert. lewa STRZAŁKA W PRAWO - obracaj w pionie. prawe KLAWIATURA W GÓRĘ - obracaj w poziomie. UP DOWN ARROW KEY - obracaj w poziomie. w dół KLAWIATURA NUM (PLUS) - W pobliżu (powiększanie) KLAWIATURA NUM - (MINUS) - daleko (pomniejszanie) KLAWIATURA NUM 4 - przesuń w lewo KLAWIATURA NUM 6 - przesuń w prawo KLAWIATURA NUM 8 - przesuń w górę KLAWIATURA NUM 2 - przesuń w dół PAGE UP - poziom wody w górę PAGE DOWN - obniżenie poziomu wody Inteligentna (nie wyczerpująca) optymalizacja AmiBroker oferuje obecnie inteligentną (nie wyczerpującą) optymalizację, a także regularne, wyczerpujące wyszukiwanie. Niewyczerpujące wyszukiwanie jest przydatne, gdy liczba wszystkich kombinacji parametrów danego systemu transakcyjnego jest po prostu zbyt duża, aby była możliwa do wykonania w przypadku wyczerpujących poszukiwań. Wyczerpujące wyszukiwanie jest całkowicie w porządku, o ile uzasadnione jest jego użycie. Powiedzmy, że masz 2 parametry, każdy od 1 do 100 (krok 1). To jest 10000 kombinacji - doskonale nadaje się do wyczerpujących poszukiwań. Teraz z trzema parametrami masz 1 milion kombinacji - nadal jest OK dla wyczerpujących poszukiwań (ale może być długotrwały). Dzięki 4 parametrom masz 100 milionów kombinacji i 5 parametrów (1..100) masz 10 miliardów kombinacji. W takim przypadku sprawdzanie ich wszystkich byłoby zbyt czasochłonne i jest to obszar, w którym niewyczerpujące metody inteligentnego wyszukiwania mogą rozwiązać problem, którego nie można rozwiązać w rozsądnym czasie za pomocą wyczerpujących poszukiwań. Oto absolutnie instrukcja SIMPLEST, jak korzystać z nowego niewyczerpującego optymalizatora (w tym przypadku CMA-ES). 1. Otwórz formułę w Edytorze formuł 2. Dodaj tę pojedynczą linię u góry swojej formuły: OptimizerSetEngine (quotcmaequot) możesz również użyć quotspsoquot lub quottribquot tutaj 3. (Opcjonalnie) Wybierz cel optymalizacji w Automatycznej analizie, Ustawieniach, quotWalk - Forwardquot tab, pole cel optymalizacji. Jeśli pominiesz ten krok, zoptymalizujesz dla CARMDD (złożona roczna stopa zwrotu podzielona przez maksymalne pobranie). Teraz, jeśli uruchomisz optymalizację przy użyciu tej formuły, użyje ona nowego ewolucyjnego (niewyczerpującego) optymalizatora CMA-ES. Jak to działa Optymalizacja to proces znajdowania minimum (lub maksimum) danej funkcji. Każdy system transakcyjny może być traktowany jako funkcja pewnej liczby argumentów. Dane wejściowe są parametrami i danymi ofertowymi. wynik to twój cel optymalizacji (powiedzmy CARMDD). I szukasz maksimum danej funkcji. Niektóre z inteligentnych algorytmów optymalizacyjnych opierają się na naturze (zachowanie zwierząt) - algorytmie PSO lub procesie biologicznym - algorytmy genetyczne, a niektóre oparte są na pojęciach matematycznych opracowanych przez ludzi - CMA-ES. Algorytmy te są wykorzystywane w wielu różnych obszarach, w tym w finansach. Wpisz quotPSFO financequot lub quotCMS-ES financequot w Google, a znajdziesz wiele informacji. Niewyczerpujące (lub quotsmartquot) metody znajdą optimum globalne lub lokalne. Celem jest oczywiście znalezienie globalnego, ale jeśli istnieje jeden ostry szczyt z kombinacji parametrów zilionów, nie wyczerpujące metody mogą nie znaleźć tego pojedynczego szczytu, ale biorąc go z perspektywy handlowców, znalezienie pojedynczego ostrego szczytu jest bezużyteczne dla handlującego, ponieważ ten wynik byłby niestabilny (zbyt delikatny) i niemożliwy do powielenia w rzeczywistym obrocie. W procesie optymalizacji szukamy raczej regionów płaskowyżu o stabilnych parametrach i jest to obszar, w którym inteligentne metody świecą. W odniesieniu do algorytmu stosowanego do wyszukiwania niewyczerpującego wygląda on następująco: a) optymalizator generuje pewną (zazwyczaj losową) początkową populację zestawów parametrów, b) test wsteczny jest wykonywany przez AmiBroker dla każdego zestawu parametrów z populacji c) wyniki backtests są oceniana zgodnie z logiką algorytmu, a nowa populacja jest generowana w oparciu o ewolucję wyników, d) jeśli zostanie znaleziony nowy najlepszy - zapisz go i przejdź do etapu b) aż do spełnienia kryteriów stopu Przykładowe kryteria stopu mogą obejmować: a) osiągnięcie określonego maksymalne iteracje b) zatrzymaj się, jeśli zakres najlepszych obiektywnych wartości ostatnich X generacji wynosi zero c) zatrzymaj się, jeśli dodanie 0,1 standardowego wektora odchylenia w jakimkolwiek kierunku głównej osi nie zmienia wartości obiektywnej wartości d) inne Aby użyć dowolnego inteligentnego (nie wyczerpujący) optymalizator w AmiBroker, musisz określić silnik optymalizujący, którego chcesz użyć w formule AFL za pomocą funkcji OptimizerSetEngine. Funkcja wybiera zewnętrzny silnik optymalizacji określony przez nazwę. AmiBroker jest obecnie dostarczany z 3 silnikami: Standard Particle Swarm Optimizer (quotspsoquot), Tribes (quottribquot) i CMA-ES (quotcmaequot) - nazwy w nawiasach używane są w wywołaniach OptimizerSetEngine. Oprócz wyboru silnika optymalizatora możesz chcieć ustawić niektóre jego wewnętrzne parametry. Aby to zrobić, użyj funkcji OptimizerSetOption. Funkcja OptimizerSetOption (quotnamequot, value) Funkcja ustawiała dodatkowe parametry dla zewnętrznego silnika optymalizacyjnego. Parametry zależą od silnika. Wszystkie trzy optymalizatory dostarczane z AmiBroker (SPSO, Trib, CMAE) obsługują dwa parametry: quotRunsquot (liczba przebiegów) i quotMaxEvalquot (maksymalne oceny (testy) na pojedynczy przebieg). Zachowanie każdego parametru zależy od silnika, więc te same wartości mogą i zwykle przynoszą różne wyniki przy użyciu różnych silników. Różnica między Runami i MaxEval jest następująca. Ocena (lub test) to pojedyncza analiza historyczna (lub ocena wartości funkcji celu). RUN to jeden pełny przebieg algorytmu (znalezienie optymalnej wartości) - zwykle obejmujący wiele testów (ocen). Każdy bieg po prostu URUCHOMI się cały proces optymalizacji od nowego początku (nowa początkowa losowa populacja). Dlatego każdy przebieg może prowadzić do znalezienia innej lokalnej maksima (jeśli nie znajdzie globalnego). Parametr Runs określa liczbę kolejnych przebiegów algorytmu. MaxEval to maksymalna liczba ocen (bactests) w dowolnym pojedynczym przebiegu. Jeśli problem jest stosunkowo prosty i 1000 testów wystarczy, aby znaleźć globalne maksimum, 5x1000 jest bardziej prawdopodobne, aby znaleźć globalne maksimum, ponieważ istnieje mniejsze prawdopodobieństwo utknięcia w lokalnym maksimum, ponieważ kolejne uruchomienia będą rozpoczynać się od różnej początkowej losowej populacji. Wybór wartości parametrów może być trudne. Zależy to od testowanego problemu, jego złożoności itp. Każda stochastyczna, niewyczerpująca metoda nie daje gwarancji znalezienia globalnej wartości maksymalnej, niezależnie od liczby testów, jeśli jest ona mniejsza niż wyczerpująca. Najłatwiejszą odpowiedzią jest. określić tak dużą liczbę testów, jaka jest dla ciebie uzasadniona pod względem czasu wymaganego do ukończenia. Inną prostą radą jest pomnożenie przez 10 liczby testów z dodaniem nowego wymiaru. To może prowadzić do przeszacowania liczby wymaganych badań, ale jest dość bezpieczne. Dostarczone silniki są zaprojektowane tak, aby były proste w użyciu, dlatego użytych jest kilka użytecznych wartości domyślnych, dlatego optymalizacja może być zwykle uruchamiana bez określania czegokolwiek (akceptowanie wartości domyślnych). Ważne jest, aby zrozumieć, że wszystkie inteligentne metody optymalizacji działają najlepiej w ciągłych przestrzeniach parametrów i stosunkowo gładkich funkcjach celu. Jeśli przestrzeń parametru jest dyskretnym algorytmem ewolucyjnym, może mieć problem ze znalezieniem optymalnej wartości. Jest to szczególnie prawdziwe w przypadku parametrów binarnych (onoff) - nie są one dostosowane do żadnej metody wyszukiwania wykorzystującej gradient zmiany funkcji celu (jak czyni to większość inteligentnych metod). Jeśli twój system transakcyjny zawiera wiele parametrów binarnych, nie powinieneś używać inteligentnego optymalizatora bezpośrednio na nich. Zamiast tego spróbuj zoptymalizować tylko ciągłe parametry za pomocą inteligentnego optymalizatora i przełącz parametry binarne ręcznie lub za pomocą zewnętrznego skryptu. SPSO - Standard Particle Swarm Optimizer Standardowy Optimizer Partial Swarm opiera się na kodzie SPSO2007, który powinien dawać dobre wyniki, pod warunkiem, że dla określonego problemu zapewnione są poprawne parametry (to znaczy Runs, MaxEval). Zbieranie poprawnych opcji optymalizatora PSO może być trudne, dlatego wyniki mogą znacznie różnić się w poszczególnych przypadkach. SPSO. dll zawiera pełne kody źródłowe w podfolderze quotADKquot. Przykładowy kod dla Standard Particle Swarm Optimizer: (znalezienie optymalnej wartości w 1000 testów w przestrzeni wyszukiwania 10000 kombinacji) OptimizerSetEngine (quotspsoquot) OptimizerSetOption (quotRunsquot, 1) OptimizerSetOption (quotMaxEvalquot, 1000) sl Optimize (quotsquot, 26, 1, 100, 1 ) fa Optymalizuj (quotququot, 12, 1, 100, 1) Kupuj Cross (MACD (fa, sl), 0) Sprzedaj Cross (0, MACD (fa, sl)) TRIBES - Adaptacyjny bez parametrów , bez parametrowej wersji PSO (optymalizacja roju cząstek) niewyczerpujący optymalizator. Dla zaplecza naukowego patrz: particleswarm. infoTribes2006Cooren. pdf Teoretycznie powinno działać lepiej niż zwykłe PSO, ponieważ może automatycznie dostosować rozmiary roju i strategię algorytmu do rozwiązania problemu. Praktyka pokazuje, że jej działanie jest podobne do PSO. Wtyczka Tribes. DLL implementuje wariant "Tribes-Dquot" (tzn. Bezwymiarowy). Na podstawie clerc. maurice. free. frpsoTribesTRIBES-D. zip autorstwa Maurice Clerc. Oryginalne kody źródłowe używane za zgodą autora Tribes. DLL pochodzą z pełnego kodu źródłowego (wewnątrz folderu quotADKquot) Obsługiwane parametry: quotMaxEvalquot - maksymalna liczba ocen (backtests) na przebieg (domyślnie 1000). Powinieneś zwiększyć liczbę ocen wraz z rosnącą liczbą wymiarów (liczba parametrów optymalizacji). Wartość domyślna 1000 jest dobra dla 2 lub maksymalnie 3 wymiarów. quotRunsquot - liczba uruchomień (restartów). (domyślnie 5) Możesz zostawić liczbę uruchomień przy domyślnej wartości 5. Domyślnie liczba uruchomień (lub ponownych uruchomień) jest ustawiona na 5. Aby użyć optymalizatora Tribes, wystarczy dodać jeden wiersz do kodu: OptimizerSetOption (quotMaxEvalquot , 5000) 5000 ocen maks. CMA-ES - Adaptacja macierzy kowariancji Optymalizator strategii ewolucyjnej CMA-ES (Zaawansowana strategia adaptacji macierzy kowariancji) to zaawansowany, niewyczerpujący optymalizator. Jeśli chodzi o podstawy naukowe, patrz: bionik. tu-berlin. deusernikocmaesintro. html Według naukowych punktów odniesienia wyniki są lepsze od dziewięciu innych, najpopularniejszych strategii ewolucyjnych (takich jak PSO, ewolucja genetyczna i różnicowa). bionik. tu-berlin. deusernikocec2005.html Wtyczka CMAE. DLL zaimplementowała wariant wyszukiwania przydziału quotGlobalquot z kilkoma restartami ze zwiększającym się rozmiarem populacji CMAE. DLL pochodzi z pełnym kodem źródłowym (wewnątrz folderu quotADKquot) Domyślnie ustawiona jest liczba uruchomień (lub restartów) do 5. Zaleca się pozostawienie domyślnej liczby ponownych uruchomień. Możesz go zmienić za pomocą wywołania OptimizerSetOption (quotRunsquot, N), gdzie N powinno znajdować się w zakresie 1..10. Określanie więcej niż 10 uruchomień nie jest zalecane, chociaż możliwe. Zauważ, że każdy bieg używa DWUKROTNIE wielkości populacji z poprzedniego przebiegu, więc rośnie wykładniczo. Dlatego przy 10 biegach otrzymujesz 210 razy więcej (1024 razy) niż pierwszy bieg. Jest jeszcze jeden parametr quotMaxEvalquot. Wartością domyślną jest ZERO, co oznacza, że ​​wtyczka automatycznie obliczy wymagany MaxEval. Zaleca się NIE definiować MaxEval samodzielnie, ponieważ domyślnie działa dobrze. Algorytm jest wystarczająco inteligentny, aby zminimalizować liczbę wymaganych ewaluacji i bardzo szybko zbiega się do punktu rozwiązania, dlatego często znajduje rozwiązania szybciej niż inne strategie. To normalne, że wtyczka pominie niektóre kroki oceny, jeśli wykryje, że to rozwiązanie zostało znalezione, dlatego nie powinieneś się dziwić, że pasek postępu optymalizacji może poruszać się bardzo szybko w niektórych punktach. Wtyczka ma także możliwość zwiększenia liczby kroków w stosunku do początkowo oszacowanej wartości, jeśli jest potrzebna do znalezienia rozwiązania. Ze względu na swój charakter adaptacyjny, wartość czasu wyrażona w cudzysłowie i liczba kroków, które są wyświetlane w oknie dialogowym postępu, jest tylko przy zgadywaniu według czasu i może się różnić podczas kursu optymalizacji. Aby korzystać z optymalizatora CMA-ES, wystarczy dodać jeden wiersz do kodu: To uruchomi optymalizację z domyślnymi ustawieniami, które są odpowiednie dla większości przypadków. Należy zauważyć, podobnie jak w przypadku wielu algorytmów wyszukiwania przestrzeni kosmicznej, że zmniejszenie parametru quotepepot w wywołaniach funkcji Optimize () nie ma znaczącego wpływu na czasy optymalizacji. Liczy się jedynie problem dziesięciokrotnie, tj. Liczba różnych parametrów (liczba optymalizacji wywołań funkcji). Liczbę kilkukrotnych wartości dla każdego parametru można ustawić bez wpływu na czas optymalizacji, dlatego należy wybrać najlepszą rozdzielczość. Teoretycznie algorytm powinien być w stanie znaleźć rozwiązanie w co najwyżej 900 (N3) (N3) testach historycznych, gdzie quotWartość jest wymiarem. W praktyce jest to szybsze połączenie LOTU. Na przykład rozwiązanie w 3 (N3) przestrzeni parametrów wymiarowych (powiedzmy 100100100 1 milion wyczerpujących kroków) można znaleźć w zaledwie 500-900 kroków CMA-ES. Wielowątkowa optymalizacja indywidualna Począwszy od AmiBroker 5.70 oprócz wielowątkowości wielowątkowej. możesz przeprowadzić wielowątkową optymalizację pojedynczego symbolu. Aby uzyskać dostęp do tej funkcji, kliknij strzałkę rozwijania obok przycisku quotOptymizequot w oknie Nowa analiza i wybierz opcję Indywidualnie optymalizuj quot. quotIndywidualny Optimizequot użyje wszystkich dostępnych rdzeni procesorów do przeprowadzenia optymalizacji pojedynczego symbolu, co znacznie przyspieszy normalną optymalizację. W trybie symbolicznym QuotCurrent wykona optymalizację na jednym symbolu. W trybach quotallquot i quotilquotquot przetwarza kolejno wszystkie symbole, tj. Pierwsza pełna optymalizacja pierwszego symbolu, następnie optymalizacja drugiego symbolu itp. Ograniczenia: 1. Niestandardowy backtester NIE jest obsługiwany (jeszcze) 2. Inteligentne silniki optymalizacji NIE są obsługiwane - działa tylko optymalizacja EXHAUSTIVE. Ostatecznie możemy pozbyć się ograniczeń (1) - kiedy AmiBroker zostanie zmieniony, niestandardowy backtester nie będzie już używać OLE. Ale (2) prawdopodobnie pozostanie tu na dłużej. 10.2a Wybór ruchomych średnich crossoverów Przejrzyj nowo dodane formuły o średniej ruchomej z mniejszym opóźnieniem w sekcji 10.5. Oto wspólne średnie okresy używane dla średniej ruchomej - wskaźniki skrzyżowania MA: 10 okresów - Najczęściej stosowane w przypadku wskaźników następujących po trendach. Jeśli cena jest wyższa niż 10 EMA, tendencja jest uważana za górę i dół, jeśli poniżej. 15 okresów - dobry powolny krzyżowy MA lub EMA do użytku z 10-letnią EMA dla trendu następującego po systemie handlu. 21 okresów - Alternatywa dla 15 okresu MA lub EMA i wskazuje status trendu średnioterminowego. 50 okresów - wskaźnik trendu średnioterminowego. W połączeniu ze średnią ruchomą z niskim opóźnieniem stanowi dobrą opcję dla systemu transakcyjnego. 200 okresów - używane przez długoterminowych inwestorów do inwestowania lub wyjścia, gdy cena jest powyżej lub poniżej tej średniej. W ciągu dnia i krótkookresowe podmioty gospodarcze mogą łączyć kilka tych średnich systemów transakcyjnych, które dają dobre akceptowalne wyniki w trendach. Użyj EMA do generowania sygnału i MA jako podstawowej niskiej średniej. 10.3 Transakcje Breakout Trading (ORB) na otwarciu sesji (ORB) W przeciwieństwie do obrotu opartego na średniej ruchomej, które są nieodłącznie związane z ceną w całym okresie rozliczeniowym, metoda handlowa otwierająca zakres wykorzystuje wczesny okres dnia w celu określenia zakresu transakcji. Pierwotnie, jako system handlu śróddziennego, nie ma powodu, dla którego nie można go wykorzystać do zawierania transakcji na rynku pozycyjnym i długoterminowym z odpowiednimi regulacjami. Ważne jest, aby zwrócić uwagę na jego ważne cechy: W intradayowej wersji handlu Otwartymi Ramami, odnotujemy najwyższą lub najniższą wartość dnia, powiedzmy za pierwsze 5, 10 lub 15 lub 20 lub 30 minut lub 1 godzinę i weźmy albo wysokie i niskie jako poziomy wybuchu w górę i w dół. Wybrany okres czasu to taki, który możesz osiągnąć eksperymentując. Otrzymasz dobre wyniki, nawet jeśli użyjesz 5, 10 lub 15 minut, jako poziomów zasięgu. Koncepcja tego polega na tym, że zakres otwarcia rynku determinuje poziomy uparty i niedźwiedzi dla handlu. Powyżej wysokiego poziomu rynek jest zwyżkujący, a poniżej niskiego poziomu - słabszy. W pewnym sensie jest to środek rynkowy dla okresu handlowego. Do wykorzystania w transakcjach pozycyjnych można użyć zakresu, który może rozciągnąć się nawet do 1-2 godzin na wykresach godzinowych, a nawet na dzień do długoterminowych transakcji pozycyjnych w celu obliczenia poziomu zasięgu. Długie transakcje są inicjowane powyżej wysokiego poziomu, natomiast krótkie transakcje są inicjowane poniżej niskiego poziomu tego okresu. Zobacz wykres poniżej, gdzie udało nam się złapać trend dobrze wykonane 122 punktów w 3 transakcjach. Zobacz, co robi w dniach graniczących z zasięgiem: 10.4 Specjalne ORB - Wykorzystanie pojedynczego poziomu W metodzie ORB opisanej w 8.3 powyżej, możesz myśleć, że tracisz część zysków z transakcji w oparciu o zmienność, która określa twoje poziomy początkowe zasięgu otwarcia. Cóż, istnieje prosta odpowiedź na to pytanie. Przełącz na jeden poziom, który może być jednym z poniższych: Po prostu biorąc średnią z wysokiego i niskiego poziomu wybranego okresu, możesz pracować z jednym poziomem, gdzie długi jest powyżej średniej, a krótki poniżej średniego poziomu . To jest jak średnia rynkowa dla celów handlowych. Pojedynczy poziom ORB 1 (HighLow) 2 pierwszych n minut. n5,10,15,20,30 minut lub 1 godzina w zależności od wyboru lub ciągła przez cały dzień. Przeczytaj to wraz z innymi komentarzami dotyczącymi przedłużenia koncepcji obrotu pozycyjnego, w której średnia z wysokich i niskich może wynosić 1-2 godziny lub nawet dzień, a może nawet tydzień w przypadku dłuższych okresów. Przygotuj się na odmierzanie biczami wokół poziomu ORB, gdy rynek nie ma kierunku. Zobacz wykresy poniżej: I zobacz, jakie whipaki mogą wystąpić. Można tego uniknąć za pomocą różnych technik redukcji szumów, które omówimy później. Jeśli masz jakieś sugestie lub uwagi, napisz do mnie na abnash1978yahoo. co. uk lub opublikuj komentarze na forum 10.5 Bardziej elastyczna średnia krocząca i usuwanie hałasu Tradycyjne proste i wykładnicze średnie kroczące dostarczają sygnałów handlowych, które nie są tak wrażliwe jak handlowcy chciałoby to doprowadzić do znacznej części wymiany handlowej przy wykorzystaniu tej średniej. Oczywiście, gdy trwa długa tendencja, wszystkie systemy handlu oparte na średniej ruchomej będą działać dobrze. Istnieje wiele informacji na temat niższej średniej kroczącej lagów, a ta, która jest łatwo dostępna w domenie publicznej, to średnia krocząca Hull. Czytałem także o Juriku, ale nie jestem pewien, czy odpowiednie formuły są dostępne. Poniżej znajduje się AFL, która zapewnia średnią ruchomą o niskim opóźnieniu, która została połączona ze standardową średnią z 50 okresów ruchomych, aby pokazać, w jaki sposób może generować sygnały kupna i sprzedaży. Poniżej znajduje się kolejna AFL, która pozwala na wykreślenie różnych typów ruchomych średnich, które mogą stać się częścią twojego arsenału handlowego. Oba pochodzą ze źródeł publicznych w Internecie. Możesz łatwo stworzyć system transakcyjny, używając albo jak pokazano poniżej z 50-milionowym krzyżem albo dwoma innymi okresami, powiedzmy, 10 i 15 okresami. SYSTEM TRADING AFL FREE i sprawię, że AFL AR TRADING SYSTEM AFL FREE zrobię to AFL FREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREE FREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREEFREE FREE sk ((C-MA (C, nol)) MA (C, nol)) 100 Graph0sk Graph0BarColorIIf (skgt0,5,4) SECTIONBEGIN (quotemaquot) Lk EMA (Close, 22) Plot (lk, quot quot, colorBrightGreen, styleDots) GfxSelectFont (quottohomaboldquot, Status (quotpxheightquot) 16) GfxSetTextAlign ( 6) GfxSetTextColor (ColorRGB (10,250,250)) GfxSetBkMode (0) GfxTextOut (Name (), Status (quotpxwidthquot) 2, Status (quotpxheightquot) 10) cxParam (quotcxposnquot, 1085,0, 1200,1) cyParam (quotcyposnquot, 16,0 1000,1) Gfx SetBkColor (ColorRGB (200,50,100)) GfxSelectFont (quottohomaboldquot, 20,98, False) GfxSetTextColor (colorYellow) GfxSetTextColor (ColorHSB (100, 10, 400)) GfxTextOut (quotLTP. quotquot, cx, cy) DDayO TimeFrameGetPrice (quotOquot, inDaily) DHiDay TimeFrameGetPrice (quotHquot, inDaily) DLoDay TimeFrameGetPrice (quotQquot, inDaily) gfr TimeFrameGetPrice (quotCquot, inDaily, -1) close Tytuł EncodeColor (colorWhite) quot AR SYSTEM TRADING quotEncodeColor ( ColorRGB (220, 10,150) quot. Interval (2) quot quot Date () EncodeColor (ColorRGB (200,150,120) quot. N Otwórz quot; O, High. quot H quot, Low. quot L EncodeColor (colorGreen) quot Poprzedni dzień Zamknij. quot EncodeColor (colorGreen) gfr EncodeColor (colorYellow) quotn ToDay Open. quot DDayO quot High. quot DHiDay quot Low. quot DLoDay SECTIONEND () Colcci IIf (CCI (8) gt 5, colorBrightGreen, IIf (CCI (8) lt-5, colorRed, IIf (CCI (8) gt Ref (CCI (8), - 1), colorBrightGreen, colorDarkRed ))) HaClose EMA ((OHLLC) 5,3) HaOpen AMA (Ref (HaClose, -1), 0,5) HaHigh Max (H, Max (HaClose, HaOpen)) HaLow Min (L, Min (HaClose, HaOpen)) PlotOHLC (HaOpen, HaHigh, HaLow, HaClose, quotquot. Colcci, styleCandle styleNoLabel) BKswitch ParamToggle (quotBackground Colorquot, quotOn, Offquot) OUTcolor ParamColor (quotPanel Panel Colorquot, colorBlack) INUPcolor ParamColor (quot Panel środkowy Upperquot, colorGrey40) INDNcolor ParamColor (quotInner Panel Lowerquot, colorBlack) TitleColor ParamColor (quotTitle Color quot, colorBlack) if (NOT BKswitch) SetChartBkColor (OUTcolor) kolor zewnętrznej krawędzi SetChartBkGradientFill (INUPcolor, INDNcolor, TitleCo lor) kolor panelu wewnętrznego SECTIONEND () SECTIONBEGIN (quotquot) SetBarsRequired (100000, 0) GraphXSpace 15 ea EMA (C, 10) eb EMA (C, 20) SetBarFillColor (IIf (ea gt eb, colorGreen, colorRed)) Kup e a gt eb AND TimeNum () gt 092000 AND TimeNum () lt 150000 Sprzedaj eb gt ea LUB TimeNum () gt 150000 Krótki 0 Okładka 0 Kup ExRem (kup, sprzedaj) Sprzedaj ExRem (sprzedawaj, kupuj) Short ExRem (Short, Cover) Cover ExRem (Cover, Short) FactorParam (quotFactorquot, 4,1,10,1) PdParam (quotATR Periodsquot, 10,1,100,1) Up (HL) 2 (FactorATR (Pd)) Dn (HL) 2- (FactorATR ( Pd)) iATRATR (Pd) TrendUpTrendDownNull trend01 changeOfTrend0 flagflagh0 dla (i 1 i ltBarCount i) TrendUpi Null TrendDowni Null, jeśli (CloseigtUpi-1) trendi1 jeśli (trend-1 -1) changeOfTrend 1 else, jeśli (CloseiltDni-1) trendi-1 if (trendi-1 1) changeOfTrend 1 else if (trendi-11) trendi1 changeOfTrend 0 else if (trendi-1-1) trendi-1 changeOfTrend 0 Kup trend1 Selltrend-1 BuyExRem (kup, sprzedaj) SellExRem (sprzedawaj, kupuj) ShortSell CoverBuy BuyPriceValueWhen (Buy, C) SellPriceValueGdy (Sell, C) ShortPriceValueGdy (Short, C) CoverPriceValueGdy (Cover, C) PlotShapes (IIf (Buy, shapeSquare, shapeNone), colorGreen, 0, L, Offset-40) PlotShapes (IIf (Kup, shapeSquare, shapeNone), colorLime, 0, L, Offset-50) PlotShapes (IIf (Kup, shapeUpArrow, shapeNone), colorWhite, 0, L, Offset-45) PlotShapes (IIf (Short, shapeSquare, shapeNone), colorRed, 0, H, Offset40) PlotShapes ( IIf (Short, shapeSquare, shapeNone), colorOrange, 0, H, Offset50) PlotShapes (IIf (Short, shapeDownArrow, shapeNone), colorWhite, 0, H, Offset-45) dla (iBarCount-1igt1i--) if (Buyi 1 ) wpis Ci sig quotBUYwartość t TrendSLi pozycja tar1 (pozycja .0050) pozycja tar2 (pozycja .0092) pozycja tar3 (pozycja .0179) pasy ii 0 jeśli (Selli 1) sig quotSELLybot wejście Ci sl TrendSLi pozycja tar1 - (wejście .0050) wejście tar2 - (wejście .0112) wejście tar3 - (wejście .0212) pasy ii 0 Przesunięcie 20 Clr IIf (sig quotBUYquot, colorLime, colorRed) ssl IIf (słupki BarCount-1, TrendSLBarCount-1, Ref (TrendSL, -1) ) sl ssBBarCount-1 Plot (LineArray (paski-przesunięcie, tar1, BarCount, tar1,1), quotquot, Clr, styleLinestyleDots, Null, Null, przesunięcie) Wykres (LineArray (paski-przesunięcie, tar2, BarCount, tar2,1) , quotquot, Clr, styleLinestyleDots, Null, Null, Offset) Wykres (Arkusz linii (prążki-przesunięcie, tar3, BarCount, tar3,1), quotquot, Clr, stylLinistycznydots, Null, Null, przesunięcie) Wykres (LineArray (pręty-przesunięcie, sl, BarCount, sl, 1), quotquot, colorDarkRed, styleLinestyleLine, Null, Null, Offset) Plot (LineArray (paski-przesunięcie, wpis, BarCount, wpis, 1), quotquot, colorGreen, styleLinestyleLine, Null, Null, Offset) dla (ibars i ltBarCounti) PlotText (quotquotsigquotententry, BarCount1, entry, Null, colorBlue) PlotText(quotT1quottar1,BarCount3,tar1,Null, Clr)Plot Text(quotT2quottar2,BarCount3,tar2,Null, Clr)PlotText (quotT3quottar3,BarCount3,tar3,Null, Clr) messageboard ParamToggle(quotMessage Boardquot, quotShowHidequot, 1) if (messageboard 1 ) GfxSelectFont( quotTahomaquot, 13, 100 ) GfxSetBkMode( 1 ) GfxSetTextColor( colorWhite ) if ( sig quotBUYquot) GfxSelectSolidBrush( colorGreen ) this is the box background color else GfxSelectSolidBrush( colorRed ) this is the box background color pxHeight Status( quotpxchartheightquot ) xx Status( quotpxchartwidthquot) Lef t 1100 width 310 x 5 x2 290 GfxSelectPen( colorWhite, 4) broader color GfxRoundRect( x, y - 165, x2, y. 160, 90 ) GfxTextOut( ( quot AR TRADING SYSTEM quot),141,y-160) GfxTextOut( (quot quot),130,y-160) GfxTextOut( (quotLast quot sig quot Signal came quot (BarCount-bars-1) Interval()60 quot mins agoquot), 148, y-140) The text format location GfxTextOut( (quotquot WriteIf(sig quotBUYquot, sig quot quot, sig quot quot) quot. quot entry), 130, y-120) GfxTextOut( (quotSTOP LOSS. quot sl quot (quot WriteVal(IIf(sig quotSELLquot, entry-sl, sl-entry), 2.2) quot)quot), 130, y-100) GfxTextOut( (quotTGT:1. quot tar1), 130, y -80) GfxTextOut( (quotTGT:2. quot tar2), 130,y-60) GfxTextOut( (quotTGT:3. quot tar3), 130,y-40) GfxTextOut( (quotCurrent PL . quot WriteVal(IIf(sig quotBUYquot,(C-entry),(entry-C)),2.2)), 130, y-22) Buy ExRem(Buy, Sell) Sell ExRem(Sell, Buy) shape Buy shapeUpArrow Sell shapeDownArrow PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorGreen, 0, L, Offset-40) PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorLime, 0,L, Offset-50) PlotShapes(IIf(Buy, sha peUpArrow, shapeNone),colorWhite, 0,L, Offset-45) PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorRed, 0, H, Offset40) PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorOrange, 0,H, Offset50) PlotShapes(IIf(Sell, shapeDownArrow, shapeNone),colorWhite, 0,H, Offset-45) PlotShapes( shape, IIf( Buy, colorGreen, colorRed ),0, IIf( Buy, Low, High ) ) dist 2.5ATR(5) for( i 0 i lt BarCount i ) if( Buyi ) PlotText( quotBuynquot Closei, i, Lowi - disti, colorWhite ) if( Selli ) PlotText( quotsellnquot Closei, i, Lowi disti, colorWhite ) SECTIONBEGIN(quotemaquot) P ParamField(quotFieldquot) Type ParamList(quotTypequot, quotWeighted, Simple, Exponential, Double Exponential, Tripple Exponential, Wildersquot) Periods89 Param(quotPeriods180quot, 180, 2, 300 ) Displacement2 Param(quotDisplacement2quot, 2, -50, 50 ) Plot( EMA( P, Periods89 ), DEFAULTNAME(), colorWhite, styleDots, 0, 0, Displacement2 ) SECTIONEND() rjlCross(Lk, tar1) golCross(tar1,Lk ) PlotShapes(shapeHollowStarrjl, colorAqua,0,H,- 20) PlotShapes(shapeHollowStargol, colorViolet,0,L,20) SECTIONEND() for( i 0 i lt BarCount i ) if( bvei ) PlotText( quotABnquot. i, L i - disti, colorWhite, colorDarkBlue ) if( rfwi ) PlotText( quotASnquot. i, H i disti, colorWhite, colorRed ) SECTIONBEGIN(quotdayquot) TimeFrameSet( inDaily ) switch now to dayily TimeFrameRestore() restore time frame to original Plot( TimeFrameExpand( Oo, inDaily),quotquot, colorYellow,10304 styleNoLabel) cx Param(quotcxposnquot,476,0,1200,1) cy Param(quotcyposnquot, 500,0,1000,10 ) GfxSelectFont( quot Arial quot, 14, 98, False ) GfxSetTextColor(ColorRGB(10,250,250)) GfxTextOut(quotVolume. quot Volume quotquot, cx 20,cy 50) SECTIONBEGIN(quottomquot) function GetSecondNum() Time Now( 4) Seconds int( Time 100 ) Minutes int( Time 100 100 ) Hours int( Time 10000 100 ) SecondNum int( Hours 60 60 Minutes 60 Seconds ) return SecondNum RequestTimedRefresh( 1 ) TimeFrame Interval() SecNumber GetSecondNum() Newperiod SecNumber TimeFrame 0 SecsLeft SecNumber - int( SecNumber TimeFrame ) TimeFrame SecsToGo TimeFrame - SecsLeft xParam(quotxposnquot,99,0,1000,1) yP aram(quotyposnquot,40,0,1000,1) GfxRoundRect( x615, y530, x738, y499, 0,0 ) GfxSelectSolidBrush( ColorRGB( 230, 230, 230 ) ) GfxSelectPen( ColorRGB( 203, 25, 23 ), 3 ) if ( NewPeriod ) GfxSelectSolidBrush( colorYellow ) GfxSelectPen( colorYellow, 2 ) Say( quotNew periodquot ) GfxSetBkMode(1) GfxSelectFont( quotArialquot, 13, 800, False ) GfxSetTextColor(ColorRGB(220,10,150) ) GfxTextOut( quotTimeleftquotquot. quotNumToStr( SecsToGo, 1.0 ), x674, y507 ) GfxSetTextColor(ColorRGB(10,250,250)) GfxTextOut( ( quot Develop By quot),1150,y-45) GfxSetTextColor(ColorRGB(10,250,250)) GfxTextOut( ( quotAR Trading SYSTEM quot),1150,y-25) SECTIONBEGIN(quotRibbonquot) uptrendPDI()gtMDI()AND Signal()ltMACD() downtrendMDI()gtPDI()AND Signal()gtMACD() Plot( 1, efines the height of the ribbon in percent of pane width quotribbonquot, IIf( uptrend, colorLime, IIf( downtrend, colorRed, IIf(Signal()ltMACD(), colorLightGrey, colorLightGrey ))), choose color styleOwnScalestyleAreastyleNoLabel, -.05,50 ) SECTIONEND() Last edited by skumar4545 3rd January 2017 at 11:22 AM. Reason: add img

No comments:

Post a Comment