Strategie
Replikacja źródłowej strategii long/cash SPY z kontrariańskim sygnałem z poprzedniej sesji
Wynik: Porzucona
SpyPreviousSessionContrarian
Podsumowanie wyniku
SpyPreviousSessionContrarian próbowała replikować strategię kontrariańską opartą na znaku stopy zwrotu SPY, z realizacją na otwarciu następnej sesji. QA ustaliła, że wielkość pozycji wyliczana według ceny zamknięcia w chwili decyzji pozwalała na wejście przy ekspozycji 100.7458%, mimo stałego limitu 100% NAV. Raport testu dymnego zawierał również tylko jedną zamkniętą pozycję wśród 1,647 świec dziennych, przez co sposób realizacji zleceń pozostał niewyjaśniony. Po trzech iteracjach strategię porzucono podczas weryfikacji, przed przeglądem backtestu, optymalizacją i oceną ryzyka.
Hipoteza
Wiernie zaimplementuj kontrariański sygnał z artykułu na dziennych świecach SPY.USEQ. Punkt odniesienia return_lookback=1: oblicz log(close_t/close_(t-1)), kup po ujemnej stopie zwrotu, a sprzedaj po nieujemnej. Ostatnia zakończona stopa zwrotu dotyczy poprzedniego przedziału względem okresu prognozy; nie dodawaj opóźnienia o kolejną sesję. Nie dodawaj RSI, progu krachu, stop lossa, celu ani modelu predykcyjnego. Zinterpretuj źródłowe DFL=1 jako ekspozycję bez dźwigni, ograniczoną do 100% kapitału rachunku NAV, przy użyciu całych akcji. Zarządzanie ryzykiem obejmuje wyjście według sygnału i ograniczenie wielkości pozycji. Utrzymuj istniejącą liczbę akcji przez kolejne sesje z ujemną stopą zwrotu, unikając zbędnych zamknięć i ponownych otwarć. Decyzje są realizowane na otwarciu następnej sesji, więc wejście nie może przynieść zysku z poprzedzającej je luki nocnej. Wyszukaj return_lookback wśród 1–3 sesji wokół bazowego okresu jednego dnia ze źródła; zachowaj jawny raport replikacji punktu odniesienia. Prognoza wynosi około 50–90 zamkniętych pozycji rocznie.
Jawny cel replikacji odróżnia tę regułę znaku stopy zwrotu z jednego okresu od ogólnego powrotu do średniej RSI i momentum tygodniowego. Wyszukiwanie w snapshotach nie znalazło dokładnego dopasowania dla strategii kontrariańskiej SPY. Koszty akcji i długa historia dzienna pozwalają na wierny test możliwy do wykonania. Zgodność ze źródłem ma pierwszeństwo przed dodawaniem opcji, krótkiej sprzedaży lub niezwiązanych filtrów w celu spełnienia limitów.
Implementacja
Replikacja dziennego sygnału long/cash opartego na znaku stopy zwrotu na SPY, z realizacją na otwarciu następnej sesji. Punkt odniesienia return_lookback=1 pozostaje jawny. Składanie zlecenia jest wstrzymane: obecny mechanizm realizacji nie gwarantuje wymaganego limitu 100% NAV przy wejściu.
Wyniki weryfikacji
Wstrzymaj składanie tego zlecenia, dopóki wspólny moduł dopasowywania zleceń backtestu i zwalnianie przetrzymywanych zleceń paper trading nie będą ustalać liczby całych akcji przy wejściu według ceny wykonania i dostępnych NAV, z uwzględnieniem kosztów wejścia, przed dopasowaniem. Sprawdź wejścia po luce wzrostowej i ponownie uruchom jawny punkt odniesienia return_lookback=1. Stały bufor ustalony w chwili decyzji nie może zagwarantować limitu przy dowolnie dużych lukach nocnych; nie zmieniaj stałych warunków ekspozycji ani nie odczytuj przyszłej ceny otwarcia na świecy decyzyjnej.
position_size() ustala liczbę całych akcji jako floor(NAV z chwili podjęcia decyzji / cena zamknięcia), mimo że zlecenie jest realizowane na otwarciu następnej sesji. Luka wzrostowa przez noc może sprawić, że wartość pozycji przy wejściu przekroczy stały limit 100% NAV określony w hipotezie. Wspólne kontrole wejścia odbywają się przy składaniu zlecenia, next_open_ticks dostarcza późniejszą cenę bez zmiany wielkości pozycji, a _release_held_orders przekazuje pierwotną liczbę akcji. Dostarczony sandbox pokazuje naruszenie limitu: peak_entry_leverage i peak_margin_utilization wynoszą 1.007458 (100.7458%). Użycie get_equity_mtm() nie rozwiązuje problemu ustalenia wielkości pozycji według ceny wykonania. To błąd w ustalaniu wielkości pozycji przy wejściu, a nie zwykła zmiana dźwigni istniejącej pozycji.
Sprawdź datowane decyzje, zlecenia, transakcje, liczniki entry_diag oraz stan odrzuceń i zleceń w toku w tym samym okresie, szczególnie po pierwszym zamknięciu pozycji. Uzgodnij kwalifikujące się epizody ujemnych stóp zwrotu ze złożonymi i zrealizowanymi wejściami, zanim zaufasz raportowi replikacji punktu odniesienia; nie rozluźniaj sygnału, by sztucznie zwiększyć liczbę transakcji.
Raport testu dymnego zawiera tylko jedną zamkniętą pozycję wśród 1,647 przetworzonych świec dziennych, wobec prognozy hipotezy wynoszącej około 50–90 pozycji rocznie. Reguły znaku stopy zwrotu są osiągalne i wydają się poprawnie zaimplementowane; dostarczone podsumowanie nie pozwala ustalić, czy brakujące wejścia wynikają z odrzucenia zlecenia, utrzymującego się stanu zlecenia w toku czy innego problemu z realizacją. Współczynnik zysku do straty równy zero przy jednej zyskownej transakcji nie dowodzi błędu księgowego.
Historia iteracji
Przy granicy realizacji po otwarciu następnej sesji egzekwuj wielkość pozycji w całych akcjach <= floor(dostępny NAV / rzeczywista cena realizacji), z uwzględnieniem kosztów realizacji, używając wyłącznie ceny dostępnej przy tym otwarciu. W razie potrzeby skoordynuj poprawkę mechanizmu realizacji na poziomie platformy; nie odczytuj kursu otwarcia następnej świecy przy kursie zamknięcia chwili podjęcia decyzji ani nie zmieniaj po cichu stałego notional_fraction. Ponownie przeprowadź weryfikację i potwierdź, że ekspozycja przy wejściu nigdy nie przekracza 1.0.
Wielkość pozycji przy wejściu wynosi floor(NAV / decision_close), ale zlecenie rynkowe jest realizowane po otwarciu następnej sesji. Wzrostowa luka overnight powoduje zatem, że nominał wejścia przekracza limit 100% NAV określony w hipotezie. Dostarczone środowisko testowe potwierdza peak_entry_leverage=1.007458 oraz avg_position_pct=100.7458%. Bazowe margin_capped_size sprawdza kurs zamknięcia w chwili podjęcia decyzji, a submit_order sprawdza przed realizacją; żaden z tych mechanizmów nie zmniejsza rozmiaru oczekującego zlecenia przy otwarciu następnej sesji. Twierdzenie w konfiguracji, że zabezpieczenia wykonania zmniejszają wielkość pozycji, nie znajduje potwierdzenia w sprawdzonej ścieżce ani w tym wyniku.
Po skorygowaniu wielkości pozycji przy realizacji sprawdź diagnostykę odrzuceń wejść i zleceń w toku oraz księgę zamkniętych pozycji. Zanim oprzesz się na wynikach z pełnej historii, potwierdź, że powtarzające się przejścia znaku z ujemnego na nieujemny generują oczekiwane wejścia i wyjścia na kolejnym otwarciu sesji.
Środowisko testowe wykazuje tylko jedną zamkniętą pozycję w ciągu 1,647 dziennych świec, podczas gdy hipoteza przewiduje około 50–90 pozycji rocznie. Reguły znaku można uruchomić i są poprawnie zaimplementowane, więc samo to nie dowodzi wady strategii, ale test dymny nie wykazuje wielokrotnego działania wejść i wyjść. Implikowane zaangażowanie wynosi około 100.75% kapitału własnego, co jest zgodne z odrębnie stwierdzonym naruszeniem limitu.
Przed dopasowaniem zlecenia po otwarciu następnej sesji egzekwuj limit 1.0 NAV, używając znanej wówczas możliwej do uzyskania ceny, dostępnego NAV i mających zastosowanie kosztów wejścia; dozwoloną wielkość pozycji zaokrąglaj w dół do całych akcji. Zastosuj równoważne postępowanie do oczekujących zleceń papierowych i zweryfikuj, że wejścia po wzrostowej luce mieszczą się w limicie. Zachowaj realizację po otwarciu następnej sesji i stałe notional_fraction=1.0; ani odczytywanie przyszłych kursów otwarcia w chwili podejmowania decyzji, ani dodanie arbitralnego bufora opartego na kursie zamknięcia nie gwarantuje spełnienia warunków.
position_size() oblicza liczbę całych akcji na podstawie kapitału i ceny zamknięcia w chwili decyzji, ale akcje te są kupowane na otwarciu następnej sesji bez limitu NAV w chwili realizacji. Luka wzrostowa przez noc może zatem sprawić, że wartość pozycji przy wejściu przekroczy ustalony w hipotezie limit 100% NAV lub ekspozycji bez dźwigni. Dostarczony sandbox pokazuje tę sytuację: peak_entry_leverage=1.007458 i peak_margin_utilization=1.007458. Podstawowa funkcja pomocnicza wejścia ogranicza depozyt według ceny z chwili decyzji; next_open_ticks dostarcza późniejszą cenę otwarcia bez zmiany wielkości pozycji, a _release_held_orders przekazuje pierwotną liczbę akcji. Komentarze opisujące błąd go nie naprawiają.
Po skorygowaniu limitu realizacji sprawdź diagnostykę odrzuceń zleceń i zleceń w toku oraz datowaną księgę wejść i wyjść; potwierdź, że powtarzające się przejścia ujemnych i nieujemnych stóp zwrotu mogą być realizowane w całym okresie. Zachowaj jawny raport punktu odniesienia return_lookback=1.
Środowisko testowe wykazuje tylko jedną zamkniętą pozycję wśród 1,647 dziennych świec, w porównaniu z przewidywanymi w hipotezie 50–90 rocznie, przy zaledwie dwóch efektywnych dziennych obserwacjach. Nie dowodzi to wady sygnału, ale pomyślny wynik testu dymnego stanowi niewielki dowód na to, że wielokrotne wejścia po otwarciu następnej sesji działają przez cały analizowany okres.
Podsumowanie wyniku
Egzekwuj ustalanie wielkości pozycji na podstawie możliwej do uzyskania ceny, dostępnego NAV i kosztów wejścia, a następnie uzgodnij decyzje, zlecenia i realizacje, zanim uznasz wartość bazową za wiarygodną.
Po trzech iteracjach warstwa 4 QA odrzuciła ustalanie wielkości pozycji według ceny zamknięcia, ponieważ luka wzrostowa przez noc mogła naruszyć limit NAV w chwili realizacji. Niska liczba transakcji pozostała niewyjaśniona, a dalsze etapy procesu nie zostały osiągnięte.
Replikuj dzienny kontrariański sygnał long/cash na SPY, z realizacją na otwarciu następnej sesji, utrzymując pozycję przez kolejne ujemne stopy zwrotu i ograniczając ekspozycję na całe akcje do 100% NAV.
QA podał szczytową dźwignię przy wejściu i wykorzystanie depozytu zabezpieczającego w sandboxie na poziomie 1.007458 (100.7458%), powyżej limitu. Raport testu dymnego wykazał jedną zamkniętą pozycję wśród 1,647 świec dziennych; nie podano stopy zwrotu z backtestu ani wskaźnika Sharpe'a.
Powód porzucenia
Analiza
Właściwości zabezpieczające algorytmicznych strategii inwestycyjnych z wykorzystaniem modeli długiej pamięci krótkotrwałej i szeregów czasowych dla indeksów akcji
Stratmill to narzędzie do badań i handlu na papierze (paper trading), a nie doradztwo finansowe ani broker. Wyniki backtestów i paper tradingu mają charakter hipotetyczny. Handel wiąże się z ryzykiem straty.