Przejdź do treści
Wszystkie strategie

Strategie

ETH Deribit Tygodniowy Spread Kredytowy na Putach — Premia Ryzyka Zmienności + Zbieranie Skośności Spadkowej (Opcje z Ograniczonym Ryzykiem, Sterowany Skośnością, 3-Parametr)

Wynik: Porzucona

EthDeribitWeeklyPutCreditSpreadSkewVrp

ETH Deribit Tygodniowy Spread Kredytowy na Putach — Premia Ryzyka Zmienności + Zbieranie Skośności Spadkowej (Opcje z Ograniczonym Ryzykiem, Sterowany Skośnością, 3-Parametr)

Hipoteza

Strategia opcyjna DEFINED-RISK działająca na jednej giełdzie, na tygodniowych opcjach DERIBIT ETH, która sprzedaje stale zawyżoną wycenę spadkowej części powierzchni zmienności krypto. Raz w tygodniowym cyklu (najbliższy termin wygaśnięcia ~5-7 DTE), i ONLY wyłącznie wtedy, gdy ubezpieczenie przed spadkiem jest ewidentnie drogie (wycena puta o delcie 25 IV wyższa niż ATM IV o margines skośności AND ATM IV powyżej zmienności zrealizowanej z ostatniego okresu), otwiera PUT CREDIT SPREAD: SELL jeden put o delcie ~25……Pokaż więcejPokaż mniej

Strategia opcyjna DEFINED-RISK działająca na jednej giełdzie, na tygodniowych opcjach DERIBIT ETH, która sprzedaje stale zawyżoną wycenę spadkowej części powierzchni zmienności krypto. Raz w tygodniowym cyklu (najbliższy termin wygaśnięcia ~5-7 DTE), i ONLY wyłącznie wtedy, gdy ubezpieczenie przed spadkiem jest ewidentnie drogie (wycena puta o delcie 25 IV wyższa niż ATM IV o margines skośności AND ATM IV powyżej zmienności zrealizowanej z ostatniego okresu), otwiera PUT CREDIT SPREAD: SELL jeden put o delcie ~25 i BUY jeden put o delcie ~10 z tym samym terminem wygaśnięcia. Maksymalna strata jest ograniczona do (szerokość przedziału cen wykonania − kredyt netto), więc ruch ogonowy nie może doprowadzić do likwidacji rachunku — odpowiada to bezpośrednio na najważniejszą obawę z przeglądu ryzyka dotyczącą strategii short-vol. Strategia celowo wypełnia największą pojedynczą lukę portfela fabryki: opcje stanowią 4.7% portfela wobec kwoty docelowej ≥15%, przy niemal zerowym dotychczasowym pokryciu. Celowo różni się od zwykłego short strangle — inny instrument bazowy (ETH), inna struktura (pionowy spread o zdefiniowanym ryzyku, a nie dwustronna niezabezpieczona pozycja) i inny sygnał (zawyżona wycena putów SKEW + VRP, a nie surowe IV/RV). Tylko 3 parametrów do strojenia, aby ograniczyć przeuczenie, które pogrzebało 259 wcześniejszych hipotez. NOT carry finansowania (L33), NOT wersja portu łącząca momentum i zgodność trendu (wyczerpana), NOT odwrócenie/countertrend ceny — źródłem P&L jest strukturalna premia ubezpieczeniowa oraz premia za skośność putów krypto, a nie prognoza kierunku ceny.

Warstwa-3 „Nie wygenerowano transakcji / 0 przeanalizowanych świec” miała dwie konkretne przyczyny i żadną z nich nie był próg wejścia (informacja zwrotna słusznie mówi, by nie luzować progów). Po pierwsze, wiersz „0 przeanalizowanych świec” jest mylący dla tej rodziny: RollingOptionsStrategy.on_bar całkowicie nadpisuje FactoryStrategy.on_bar i nigdy nie wywołuje _process_primary, więc bars_seen ma wartość 0 dla każdej strategii rolling-options, również tych, które normalnie handlują — potwierdziłem to, czytając……Pokaż więcejPokaż mniej

Warstwa-3 „Nie wygenerowano transakcji / 0 przeanalizowanych świec” miała dwie konkretne przyczyny i żadną z nich nie był próg wejścia (informacja zwrotna słusznie mówi, by nie luzować progów). Po pierwsze, wiersz „0 przeanalizowanych świec” jest mylący dla tej rodziny: RollingOptionsStrategy.on_bar całkowicie nadpisuje FactoryStrategy.on_bar i nigdy nie wywołuje _process_primary, więc bars_seen ma wartość 0 dla każdej strategii rolling-options, również tych, które normalnie handlują — potwierdziłem to, czytając rolling_options_template.py i base_template.py, zamiast dodawać wywołanie super().on_bar(), które skierowałoby główne świece do bariery synchronizacji między nogami w klasie bazowej, gdzie nieregularnie występujące nogi opcyjne (ten sam interwał 1-DAY co instrument bazowy) zablokowałyby przetwarzanie na zawsze. Po drugie, faktyczne blokady: (a) ANNUALIZATION MISMATCH — odziedziczone ustawienia zmienności zrealizowanej były godzinowe (rv_window=168, bars_per_year=8760), podczas gdy przebieg używa świec 1-DAY, więc dzienne logarytmiczne stopy zwrotu annualizowano przez sqrt(8760) zamiast sqrt(365), zawyżając RV o 4.90x (typowy przebieg 3%/dzień ETH odczytywany jest jako 281% zamiast 57%); warunek VRP iv >= rv*(1+margin) porównywał następnie ~60% IV z ~281% RV i w każdym cyklu miał wartość False. Naprawiono to, wyznaczając bars_per_year na podstawie skonfigurowanego typu świec i wyrażając okno RV w dniach kalendarzowych, dzięki czemu rozbieżność nie może powrócić przy żadnym interwale (potwierdzono: 1-DAY -> 365, 1-HOUR -> 8760, 4-HOUR -> 2190, a warunek przechodzi teraz przy typowym przebiegu). (b) ROLE MAPPING — odziedziczony szkielet identyfikował nogi według rodzaju opcji i wymagał jednego call oraz jednego put (strangle), więc dwie nogi P w spreadzie putowym kolidowały pod jednym kluczem, druga była odrzucana jako duplikat, kontrola gotowości wymagała nieistniejącej nogi call, a wszystkie nogi składano SELL (dwa niezabezpieczone krótkie puty, a nie pionowy spread o zdefiniowanym ryzyku). Nogi są teraz mapowane według ceny wykonania na krótką i długą; krótka jest sprzedawana, a długa kupowana przy tej samej liczbie kontraktów zapisanej w pamięci podręcznej, atomowo. Usunąłem też odziedziczony stop oparty na wielokrotności premii: długa skrzydłowa noga już ogranicza stratę, więc stop dla struktury z ograniczoną stratą jedynie wcześniej realizuje ograniczoną stratę i generuje prowizje. Obliczenia wielkości pozycji zweryfikowano od początku do końca (spread o szerokości 150, kredyt $22, maksymalna strata $128 -> 15 kontraktów = ryzyko 1.9% kapitału). Zachowałem wszystko, co przeszło warstwy 1-2: poprawne importy, funkcję wolną _bar_ts na poziomie modułu, która naprawia błąd TypeError przy ponownym wiązaniu staticmethod w warstwie -2, parser DVOL, odwracanie Blacka-Scholesa IV oraz ciągły calculate_signal. lookback_days wynosi 49 (7 cykli, 14 nóg opcyjnych), ponieważ ładowanie katalogu dla każdego typu świec zajmuje ~10s na nogę, a większy łańcuch grozi przekroczeniem limitu czasu warstwy -3; ogranicza to początkową próbkę, a wynika z właściwości loadera, nie hipotezy.

verification_loop: Weryfikacja nie powiodła się (warstwa 4 — przegląd QA) [klasa=code_defect]: - [edge_concern] Sandbox avg_trade_return_pct jest -45.45% przy 2 transakcjach, metrics_reliable=false i data_days=1 — nie jest to werdykt dotyczący wyników (stopa zwrotu w przeliczeniu na nominał nie ma znaczenia dla nóg opcyjnych, gdzie nominał premii << nominału skrzydła, a sandbox jest 1-dniowym testem dymnym). Zachowano to jedynie jako kontekst: jeśli problem loadera/okresu wstecznego poniżej zostanie rozwiązany i……Pokaż więcejPokaż mniej

verification_loop: Weryfikacja nie powiodła się (warstwa 4 — przegląd QA) [klasa=code_defect]: - [edge_concern] Sandbox avg_trade_return_pct jest -45.45% przy 2 transakcjach, metrics_reliable=false i data_days=1 — nie jest to werdykt dotyczący wyników (stopa zwrotu w przeliczeniu na nominał nie ma znaczenia dla nóg opcyjnych, gdzie nominał premii << nominału skrzydła, a sandbox jest 1-dniowym testem dymnym). Zachowano to jedynie jako kontekst: jeśli problem loadera/okresu wstecznego poniżej zostanie rozwiązany i zbierze się rzeczywista próbka tygodniowych opcji, analityk powinien ponownie sprawdzić, czy zebrany kredyt netto pokrywa opłatę Deribit w wysokości 0.03% za stronę w obrocie złożonym z 4 nóg (otwarcie+zamknięcie x krótka+długa) oraz ewentualny poślizg przy przypisaniu, ponieważ przewaga spreadu put-credit w przeliczeniu na nominał jest strukturalnie niewielka. - [krytyczne] rolling_options.lookback_days=49 ogranicza rozwiązywalny łańcuch opcyjny ENTIRE backtestu ANY do około 49 dni kończących się „teraz” = ~7 tygodniowych cykli / ~14 nóg opcyjnych, niezależnie od 6.5-letniej historii opcji ETH na Deribit. Przez resztę badanego okresu strategia pozostaje bez pozycji i handluje tylko na jego końcu. Sandbox potwierdza to empirycznie: bars_processed=2400 (~6.5 lat), a mimo to data_days=1 i total_trades=2 (trades_count=4). Przewagi opartej na premii za ryzyko wariancji i skośności nie da się odróżnić od szumu na podstawie ~7 cykli / ~14 nóg — to znacznie mniej niż ~30-100 transakcji potrzebnych do uzyskania mierzalnej próbki opcyjnej. To dokładnie ta pułapka kompromisu między kosztem loadera a wielkością próbki-22, która doprowadziła do porzucenia niemal identycznej strategii BtcDeribitWeeklyDeltaHedgedAtmStraddleVrp (ta sama giełda, to samo lookback_days=49) na warstwie 4 dni temu. Uzasadnienie samego dewelopera przyznaje, że istnieje limit („lookback_days wynosi 49 (7 cykli, 14 nóg opcyjnych), ponieważ ładowanie katalogu dla każdego typu świec zajmuje ~10s na nogę, a większy łańcuch grozi przekroczeniem limitu czasu warstwy -3”). Przy obecnej konfiguracji strategia nie może wygenerować pełnego backtestu z mierzalnymi wynikami. — naprawa: Nie zatwierdzać na podstawie ~7 cykli. Przed ponownym zgłoszeniem rozwiązać pułapkę kompromisu między kosztem loadera a wielkością próbki-22: grupować/równoleglić lub buforować wywołania catalog.bars() dla poszczególnych nóg między świecami, aby lookback_days mogło objąć wiele lat tygodniowych cykli (~200-300 cykli) bez przekraczania limitu czasu sandboxa, a następnie ustawić lookback_days, by obejmowało cały okres testowy. Jeśli loader rzeczywiście nie potrafi w dostępnym budżecie czasu rozwiązać mierzalnej historii tygodniowych opcji, tej rodziny nie da się testować przy tygodniowej częstotliwości w obecnym środowisku i należy ją przeprojektować (np. mniej cykli miesięcznych o dłuższym terminie zapadalności na przestrzeni całego okresu), zamiast

Implementacja

Tygodniowy put credit spread na Deribit o zdefiniowanym ryzyku ETH. W każdym tygodniowym cyklu wygaśnięcia (~7 DTE) framework rolling-options rozwiązuje dwie nogi put (~5% i ~10% OTM); strategia mapuje je według ceny wykonania na krótką (wyższa cena wykonania, delta ~25) i długą (niższa cena wykonania, delta ~10) nogę, SELLS krótką i BUYS długą przy identycznej liczbie kontraktów 1:1 i utrzymuje pozycję do bufora rolowania, przed rozliczeniem gotówkowym w stylu europejskim. Wejście jest uzależnione od dwóch……Pokaż więcejPokaż mniej

Tygodniowy put credit spread na Deribit o zdefiniowanym ryzyku ETH. W każdym tygodniowym cyklu wygaśnięcia (~7 DTE) framework rolling-options rozwiązuje dwie nogi put (~5% i ~10% OTM); strategia mapuje je według ceny wykonania na krótką (wyższa cena wykonania, delta ~25) i długą (niższa cena wykonania, delta ~10) nogę, SELLS krótką i BUYS długą przy identycznej liczbie kontraktów 1:1 i utrzymuje pozycję do bufora rolowania, przed rozliczeniem gotówkowym w stylu europejskim. Wejście jest uzależnione od dwóch testów zawyżenia wyceny mierzonych w oknie wejścia danego cyklu: skośności spadkowej (short-put IV >= Deribit DVOL ATM IV x (1 + skew_margin)) oraz premii za ryzyko wariancji (ATM IV >= zmienność zrealizowana z ostatnich 14 dni x (1 + vrp_margin)). Zmienności implikowane nóg są wyznaczane przez odwrócenie modelu Blacka-Scholesa na podstawie świecy USD-premium każdej nogi. Maksymalna strata na spreadzie wynosi (szerokość przedziału cen wykonania - kredyt netto), ustalana przy wejściu, a wielkość pozycji uwzględnia dokładnie tę wartość: liczba kontraktów = floor(kapitał własny x risk_frac / max_loss), z limitem zapewniającym, że łączna szerokość spreadu brutto nie przekroczy 50% kapitału własnego i minimum 1 kontraktu ETH wymagane przez Deribit. Parametry 3 do strojenia (skew_margin, vrp_margin, risk_frac); dźwignia 1.0; brak ścieżki handlu perpetualami/instrumentem bazowym.

Wyniki weryfikacji

Weryfikacja nie powiodła się (Warstwa 4 — przegląd QA) [class=code_defect]: - [edge_concern] Piaskownica avg_trade_return_pct wynosi -45.45% dla 2 transakcji z metrics_reliable=false i data_days=1 — nie jest to werdykt dotyczący wyników (zwrot per-notional nie jest znaczący dla nóg opcyjnych, gdzie notional premii << notional skrzydła, a piaskownica jest testem dymnym trwającym 1 dni). Jest przenoszony dalej wyłącznie jako kontekst: jeśli problem z ładowarkiem/okresem lookback poniżej zostanie rozwiązany i pojawi……Pokaż więcejPokaż mniej

Weryfikacja nie powiodła się (Warstwa 4 — przegląd QA) [class=code_defect]: - [edge_concern] Piaskownica avg_trade_return_pct wynosi -45.45% dla 2 transakcji z metrics_reliable=false i data_days=1 — nie jest to werdykt dotyczący wyników (zwrot per-notional nie jest znaczący dla nóg opcyjnych, gdzie notional premii << notional skrzydła, a piaskownica jest testem dymnym trwającym 1 dni). Jest przenoszony dalej wyłącznie jako kontekst: jeśli problem z ładowarkiem/okresem lookback poniżej zostanie rozwiązany i pojawi się rzeczywista próba opcji tygodniowych, analityk powinien ponownie sprawdzić, czy zebrany kredyt netto pokrywa koszty round-trip Deribit 0.03%/stronę przez 4 nóg (otwarcie+zamknięcie x krótka+długa) plus ewentualne poślizgi przy przypisaniu, ponieważ przewaga per-notional spreadu kredytowego put jest strukturalnie niewielka. - [krytyczne] rolling_options.lookback_days=49 ogranicza rozwiązywalny łańcuch opcji ENTIRE backtestu ANY do ~49 dni kończących się „teraz" = ~7 cykli tygodniowych / ~14 nóg opcyjnych, niezależnie od 6.5-letniej historii opcji ETH na Deribit. Strategia pozostaje płaska przez resztę okna i handluje tylko na końcu. Piaskownica potwierdza to empirycznie: bars_processed=2400 (~6.5 lat), a jednak data_days=1 i total_trades=2 (trades_count=4). Przewaga składająca się z premii za ryzyko wariancji + skośności nie może być odróżniona od szumu przy ~7 cyklach / ~14 nogach — znacznie poniżej ~30-100 transakcji potrzebnych do mierzalnej próbki opcji. Jest to dokładnie ta pułapka kosztu ładowarki vs wielkości próbki-22, która spowodowała porzucenie niemal identycznego BtcDeribitWeeklyDeltaHedgedAtmStraddleVrp (ta sama giełda, ten sam lookback_days=49) w Warstwie 4 dni temu. Uzasadnienie samego dewelopera potwierdza limit („lookback_days wynosi 49 (7 cykli, 14 nóg opcyjnych), ponieważ ładowarka katalogu per typ słupka kosztuje ~10s na nogę, a większy łańcuch grozi przekroczeniem czasu zegara ściennego Warstwy-3"). W obecnej konfiguracji strategia nigdy nie wygeneruje mierzalnego pełnego backtestu. — poprawka: Nie akceptuj ~7 cykli. Rozwiąż pułapkę kosztu ładowarki vs wielkości próbki-22 przed ponownym przesłaniem: grupuj/równolegl lub buforuj ładowania catalog.bars() per noga między słupkami, aby lookback_days mogło osiągnąć wiele lat cykli tygodniowych (~200-300 cykli) bez przekraczania limitu czasu zegara ściennego piaskownicy, następnie ustaw lookback_days, aby pokryć pełne okno testowe. Jeśli ładowarka rzeczywiście nie może rozwiązać mierzalnej historii opcji tygodniowych w ramach budżetu czasowego, ta rodzina nie może być testowana w bieżącym środowisku przy kadencji tygodniowej i powinna być przeprojektowana (np. mniej, dłużej datowanych cykli miesięcznych przez cały okres) zamiast

Historia iteracji

Weryfikacja nie powiodła się (warstwa 2 — scenariusze syntetyczne): Użyte parametry: ['contracts', 'leg_sides', 'risk_frac', 'rv_window', 'atm_offset', 'skew_margin', 'iv_rv_margin', 'bars_per_year', 'min_contracts', 'iv_stale_hours', 'rv_slow_window', 'long_put_offset', 'rolling_options', 'short_put_offset', 'max_notional_frac', 'min_bars_required', 'roll_buffer_hours', 'entry_window_hours'] Sprawdź, czy __init__ ustawia wszystkie atrybuty na podstawie self.parameters.get(). - steady_uptrend: TypeError:……Pokaż więcejPokaż mniej

Weryfikacja nie powiodła się (warstwa 2 — scenariusze syntetyczne): Użyte parametry: ['contracts', 'leg_sides', 'risk_frac', 'rv_window', 'atm_offset', 'skew_margin', 'iv_rv_margin', 'bars_per_year', 'min_contracts', 'iv_stale_hours', 'rv_slow_window', 'long_put_offset', 'rolling_options', 'short_put_offset', 'max_notional_frac', 'min_bars_required', 'roll_buffer_hours', 'entry_window_hours'] Sprawdź, czy __init__ ustawia wszystkie atrybuty na podstawie self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000) - zero_volume: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000) - price_gap: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000)

Weryfikacja nie powiodła się (warstwa 2 — scenariusze syntetyczne): Użyte parametry: ['contracts', 'leg_sides', 'risk_frac', 'rv_window', 'stop_mult', 'put_offset', 'call_offset', 'iv_rv_margin', 'bars_per_year', 'min_contracts', 'iv_stale_hours', 'rv_slow_window', 'max_delta_ratio', 'rolling_options', 'max_notional_frac', 'min_bars_required', 'roll_buffer_hours', 'entry_window_hours'] Sprawdź, czy __init__ ustawia wszystkie atrybuty na podstawie self.parameters.get(). - steady_uptrend: TypeError:……Pokaż więcejPokaż mniej

Weryfikacja nie powiodła się (warstwa 2 — scenariusze syntetyczne): Użyte parametry: ['contracts', 'leg_sides', 'risk_frac', 'rv_window', 'stop_mult', 'put_offset', 'call_offset', 'iv_rv_margin', 'bars_per_year', 'min_contracts', 'iv_stale_hours', 'rv_slow_window', 'max_delta_ratio', 'rolling_options', 'max_notional_frac', 'min_bars_required', 'roll_buffer_hours', 'entry_window_hours'] Sprawdź, czy __init__ ustawia wszystkie atrybuty na podstawie self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000) - zero_volume: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000) - price_gap: TypeError: FactoryStrategy._bar_ts() przyjmuje 1 argumentów pozycyjnych, ale przekazano 2 (znacznik czasu świecy: 1735691040000)

Weryfikacja nie powiodła się (Warstwa 3 — backtest w piaskownicy): Brak wygenerowanych transakcji Użyty typ słupka: ETH-PERPETUAL.DERIBIT-1-DAY-LAST-EXTERNAL, Przetworzone słupki: 2400 Diagnostyka: calculate_signal() nigdy nie został oceniony (0 ocenionych słupków) -> żaden słupek główny nie dotarł do ścieżki sygnałowej szablonu bazowego -> jeśli nadpisujesz on_bar(), wywołaj super().on_bar(bar); sprawdź, czy bar_type odpowiada danym instrumentu. Do NOT poluzuj progi wejścia — logika wejścia nigdy nie została uruchomiona. Upewnij się, że Twoja strategia generuje transakcje przy zadanych danych i parametrach.

Weryfikacja nie powiodła się (warstwa 4 — przegląd QA) [klasa=hypothesis_mismatch]: - [edge_concern] Nie stanowi podstawy werdyktu — problem dotyczy zgodności, nie wyników. (Dla porządku sandbox również jest na minusie: -2.9%, PF 0.13, skuteczność 0.125, ogon -$2,149 w księdze, która rzekomo miała stop — ale to wynik niewłaściwej strategii.) - WHOLE-STRATEGY SWAP / MISLINK. Hipoteza dotyczy ETH tygodniowego PUT na Deribit CREDIT SPREAD (sprzedaż puta ~25d, BUY put ~10d — pionowy spread o zdefiniowanym ryzyku).……Pokaż więcejPokaż mniej

Weryfikacja nie powiodła się (warstwa 4 — przegląd QA) [klasa=hypothesis_mismatch]: - [edge_concern] Nie stanowi podstawy werdyktu — problem dotyczy zgodności, nie wyników. (Dla porządku sandbox również jest na minusie: -2.9%, PF 0.13, skuteczność 0.125, ogon -$2,149 w księdze, która rzekomo miała stop — ale to wynik niewłaściwej strategii.) - WHOLE-STRATEGY SWAP / MISLINK. Hipoteza dotyczy ETH tygodniowego PUT na Deribit CREDIT SPREAD (sprzedaż puta ~25d, BUY put ~10d — pionowy spread o zdefiniowanym ryzyku). Kod implementuje BTC tygodniowy, neutralny deltowo SHORT na Deribit STRANGLE (nazwa klasy, docstring, uzasadnienie iter-3 i każdy mechanizm odpowiadają strangle). Zarówno instrument, jak i mechanizm AND są różne → artefakt wygenerowany/powiązany błędnie, a nie ta hipoteza. Wygenerować ponownie/powiązać właściwy put-credit-spread ETH. - Niewłaściwy instrument: hipoteza dotyczy ETH, ale instrument_id i bar_type są typu BTC-PERPETUAL.DERIBIT, a rolling_options.underlying ma wartość 'BTC'. Nigdzie nie występuje ETH. - Niewłaściwa struktura / brak zdefiniowanego ryzyka: hipoteza ogranicza maksymalną stratę skrzydłowym putem PURCHASED ~10d. Kod składa TWO nóg SELL, bez kupionego skrzydła NO; ogon ogranicza jedynie miękki stop na premii uruchamiany przy następnej świecy (sandbox largest_loss -$2,149 wobec avg_win ~$214 pokazuje, że nie ogranicza on strat ogonowych) — dokładnie taki nieograniczony profil, którego hipoteza ma uniknąć. - Brak kluczowej przewagi: sygnałem hipotezy jest zawyżenie wyceny SKEW dla strony spadkowej (25d-put IV wobec ATM IV) oraz IV>RV. Kod nie oblicza skośności — jedynie średnią IV/RV strangle'a VRP. Nie zaimplementowano strategii wykorzystującej premię za skośność putów, która odróżnia tę hipotezę.

Powód porzucenia

verification_loop: Weryfikacja nie powiodła się (warstwa 4 — przegląd QA) [klasa=code_defect]: - [edge_concern] Sandbox avg_trade_return_pct jest -45.45% przy 2 transakcjach, metrics_reliable=false i data_days=1 — nie jest to werdykt dotyczący wyników (stopa zwrotu w przeliczeniu na nominał nie ma znaczenia dla nóg opcyjnych, gdzie nominał premii << nominału skrzydła, a sandbox jest 1-dniowym testem dymnym). Zachowano to jedynie jako kontekst: jeśli problem loadera/okresu wstecznego poniżej zostanie rozwiązany i……Pokaż więcejPokaż mniej

verification_loop: Weryfikacja nie powiodła się (warstwa 4 — przegląd QA) [klasa=code_defect]: - [edge_concern] Sandbox avg_trade_return_pct jest -45.45% przy 2 transakcjach, metrics_reliable=false i data_days=1 — nie jest to werdykt dotyczący wyników (stopa zwrotu w przeliczeniu na nominał nie ma znaczenia dla nóg opcyjnych, gdzie nominał premii << nominału skrzydła, a sandbox jest 1-dniowym testem dymnym). Zachowano to jedynie jako kontekst: jeśli problem loadera/okresu wstecznego poniżej zostanie rozwiązany i zbierze się rzeczywista próbka tygodniowych opcji, analityk powinien ponownie sprawdzić, czy zebrany kredyt netto pokrywa opłatę Deribit w wysokości 0.03% za stronę w obrocie złożonym z 4 nóg (otwarcie+zamknięcie x krótka+długa) oraz ewentualny poślizg przy przypisaniu, ponieważ przewaga spreadu put-credit w przeliczeniu na nominał jest strukturalnie niewielka. - [krytyczne] rolling_options.lookback_days=49 ogranicza rozwiązywalny łańcuch opcyjny ENTIRE backtestu ANY do około 49 dni kończących się „teraz” = ~7 tygodniowych cykli / ~14 nóg opcyjnych, niezależnie od 6.5-letniej historii opcji ETH na Deribit. Przez resztę badanego okresu strategia pozostaje bez pozycji i handluje tylko na jego końcu. Sandbox potwierdza to empirycznie: bars_processed=2400 (~6.5 lat), a mimo to data_days=1 i total_trades=2 (trades_count=4). Przewagi opartej na premii za ryzyko wariancji i skośności nie da się odróżnić od szumu na podstawie ~7 cykli / ~14 nóg — to znacznie mniej niż ~30-100 transakcji potrzebnych do uzyskania mierzalnej próbki opcyjnej. To dokładnie ta pułapka kompromisu między kosztem loadera a wielkością próbki-22, która doprowadziła do porzucenia niemal identycznej strategii BtcDeribitWeeklyDeltaHedgedAtmStraddleVrp (ta sama giełda, to samo lookback_days=49) na warstwie 4 dni temu. Uzasadnienie samego dewelopera przyznaje, że istnieje limit („lookback_days wynosi 49 (7 cykli, 14 nóg opcyjnych), ponieważ ładowanie katalogu dla każdego typu świec zajmuje ~10s na nogę, a większy łańcuch grozi przekroczeniem limitu czasu warstwy -3”). Przy obecnej konfiguracji strategia nie może wygenerować pełnego backtestu z mierzalnymi wynikami. — naprawa: Nie zatwierdzać na podstawie ~7 cykli. Przed ponownym zgłoszeniem rozwiązać pułapkę kompromisu między kosztem loadera a wielkością próbki-22: grupować/równoleglić lub buforować wywołania catalog.bars() dla poszczególnych nóg między świecami, aby lookback_days mogło objąć wiele lat tygodniowych cykli (~200-300 cykli) bez przekraczania limitu czasu sandboxa, a następnie ustawić lookback_days, by obejmowało cały okres testowy. Jeśli loader rzeczywiście nie potrafi w dostępnym budżecie czasu rozwiązać mierzalnej historii tygodniowych opcji, tej rodziny nie da się testować przy tygodniowej częstotliwości w obecnym środowisku i należy ją przeprojektować (np. mniej cykli miesięcznych o dłuższym terminie zapadalności na przestrzeni całego okresu), zamiast

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.