Przepływ rebalansowania zabezpieczeń FX na koniec miesiąca: handluj euro ETF (FXE) względem zmiany US od początku miesiąca, w kierunku fixingu na koniec miesiąca (USEQ 1-DAY, długa/krótka pozycja, SPY noga sygnałowa, pozycja płaska przez około 85% czasu)
Wynik: Porzucona
MonthEndFxHedgeRebalanceFxe
Podsumowanie wyniku
Strategia próbowała wykorzystać przepływ związany z rebalansowaniem zabezpieczeń na koniec miesiąca w EUR/USD, zajmując pozycję w FXE względem zmiany SPY od początku miesiąca i utrzymując ją przez 1-5 sesje obejmujące koniec miesiąca. Po 2 iteracjach pełny backtest obejmujący 20 lat miał 183 transakcji, stopę zwrotu -5.0%, wskaźnik Sharpe’a -0.08 i stopę zwrotu na transakcję -0.024%. Koszty wpływu rynkowego przewyższyły niewielką przewagę brutto, a strategia przynosiła straty w każdym roku od 2020. Analityk porzucił ją podczas przeglądu backtestu z powodu ujemnej wartości oczekiwanej i sygnału bez mierzalnej wartości informacyjnej. Analityk zaznaczył, że odrzuca to wyłącznie wariant ETF tej idei w ujęciu dziennym, a nie ustalenia pracy dotyczące śróddziennego kursu spot EUR/USD przy fixingu londyńskim.
Opracowane przez kierownika ds. badań na podstawie Melvin & Prins (2015, „Zabezpieczanie ekspozycji na akcje i kursy walutowe przy londyńskim fixingu o 4”). Zagraniczne instytucje posiadające akcje US zabezpieczają ekspozycję dolarową za pomocą kontraktów terminowych FX i dostosowują wielkość tych zabezpieczeń na koniec miesiąca, w okolicach fixingu londyńskiego 11:00 ET. Jeśli akcje US wzrosły od początku miesiąca, muszą sprzedać więcej USD, więc EUR/USD ma tendencję do wzrostu przed fixingiem; jeśli akcje……Pokaż więcejPokaż mniej
Opracowane przez kierownika ds. badań na podstawie Melvin & Prins (2015, „Zabezpieczanie ekspozycji na akcje i kursy walutowe przy londyńskim fixingu o 4”). Zagraniczne instytucje posiadające akcje US zabezpieczają ekspozycję dolarową za pomocą kontraktów terminowych FX i dostosowują wielkość tych zabezpieczeń na koniec miesiąca, w okolicach fixingu londyńskiego 11:00 ET. Jeśli akcje US wzrosły od początku miesiąca, muszą sprzedać więcej USD, więc EUR/USD ma tendencję do wzrostu przed fixingiem; jeśli akcje spadły, odkupują USD. Przepływ jest mechaniczny i ustalony w kalendarzu, więc przewaga wynika z premii za zapewnianie płynności, a nie z prognozy. Handluje się FXE.USEQ (euro ETF, efektywnie EUR/USD, dane historyczne od grudnia 2005) w pozycji długiej lub krótkiej, a SPY.USEQ stanowi nogę sygnałową. Na dziennych świecach USEQ decyzja podjęta przy zamknięciu jednej sesji jest realizowana przy otwarciu następnej; ta funkcja jest obsługiwana natywnie, więc nie jest potrzebne zastępstwo. Żaden wcześniejszy przebieg nie obejmuje transakcji walutowej ani nie wykorzystuje tego kanału. Oczekiwane około 145 transakcji w ciągu około 20 lat. Kalkulacja opłat: około 0.12% zysku brutto na transakcję wobec około 0.04% kosztu za pełną transakcję kupna i sprzedaży na USEQ, czyli około 0.08% zysku netto, przy kosztach rzędu 2x i powyżej progu +0.05% USEQ. Kontrola ryzyka to wariant (b): wyjście wyznaczane kalendarzowo, wartość nominalna ograniczona do 100% kapitału własnego, bez dźwigni.
negative_expectancy. Porównanie z progiem: avg_trade_return_pct wynosi -0.024% wobec progu przeglądu +0.05% USEQ, w wiarygodnej próbie obejmującej 183 transakcji na koniec miesiąca w ciągu 20 lat (2006-2026). PF wynosi 0.926, Sharpe -0.08, łączna stopa zwrotu -5.0%, a maksymalny drawdown wynosi 18.8% wobec zarejestrowanego wcześniej 15%. Prognoza IC miesięcznego z-score SPY wynosi 0.025 (t=0.72), więc optymalizator nie ma sygnału, by dostrajać z_entry ani entry_sessions. Zysk brutto przed uwzględnieniem wpływu……Pokaż więcejPokaż mniej
negative_expectancy. Porównanie z progiem: avg_trade_return_pct wynosi -0.024% wobec progu przeglądu +0.05% USEQ, w wiarygodnej próbie obejmującej 183 transakcji na koniec miesiąca w ciągu 20 lat (2006-2026). PF wynosi 0.926, Sharpe -0.08, łączna stopa zwrotu -5.0%, a maksymalny drawdown wynosi 18.8% wobec zarejestrowanego wcześniej 15%. Prognoza IC miesięcznego z-score SPY wynosi 0.025 (t=0.72), więc optymalizator nie ma sygnału, by dostrajać z_entry ani entry_sessions. Zysk brutto przed uwzględnieniem wpływu rynkowego to około +0.10% na transakcję, lecz modelowany wpływ FXE (122% zysku brutto; pojemność około $67k) jest większy. Każdy rok od 2020 do 2026 przynosi straty. Obawy QA potwierdzają się na pełnej historii. Sugerowany przez QA test entry_sessions=1 mieści się w zakresie strojenia, ale brak informacji w IC i przewaga brutto mniejsza od wpływu rynkowego nie pozostawiają obszaru, który dałoby się sensownie optymalizować. Zakres: odrzucamy wyłącznie operacjonalizację Research Leada, czyli FXE ETF na dziennych świecach, z realizacją na otwarciu następnej sesji i utrzymywaniem pozycji przez 1-5 sesji obejmujących fixing na koniec miesiąca. Nie odrzuca to ustalenia Melvina i Prinsa, które dotyczy śróddziennego kursu spot EUR/USD przy fixingu londyńskim o 4pm i nie może zostać wyizolowane na podstawie dziennych świec ETF. Nie stwierdzono błędów księgowych ani w danych.
Implementacja
Przepływ rebalansowania zabezpieczeń FX na koniec miesiąca na FXE.USEQ (1-DAY), z SPY.USEQ jako nogą sygnałową. Logarytmiczna zmiana SPY od początku miesiąca jest przeliczana na z-score z użyciem dziennej zmienności z 60 sesji pomnożonej przez pierwiastek z liczby sesji, które upłynęły. W ciągu ostatnich entry_sessions sesji przed ostatnim dniem handlowym miesiąca, gdy |z| >= z_entry, zajmij długą pozycję w FXE, jeśli SPY rośnie od początku miesiąca (zagraniczni zabezpieczający sprzedają USD), lub krótką pozycję w FXE, jeśli SPY spada. Jedna transakcja na miesiąc. Pozycja jest zamykana na podstawie decyzji podjętej przy zamknięciu ostatniego dnia handlowego miesiąca. Wszystkie decyzje USEQ są realizowane po cenie otwarcia następnej sesji.
Iteracja 2 rozwiązuje krytyczny problem QA. position_size() ustalała wielkość pozycji dokładnie na 100% kapitału własnego na podstawie ceny zamknięcia świecy decyzyjnej, ale zlecenie było realizowane przy otwarciu następnej sesji. Luka wzrostowa wraz z opłatą podniosła wymagany depozyt zabezpieczający dla pozycji początkowej 1x powyżej MTM kapitału własnego, dlatego podstawowa kontrola depozytu odrzuciła zlecenie. Odrzucone zlecenie pozostawało następnie w _inflight_entries i blokowało wszystkie kolejne wejścia,……Pokaż więcejPokaż mniej
Iteracja 2 rozwiązuje krytyczny problem QA. position_size() ustalała wielkość pozycji dokładnie na 100% kapitału własnego na podstawie ceny zamknięcia świecy decyzyjnej, ale zlecenie było realizowane przy otwarciu następnej sesji. Luka wzrostowa wraz z opłatą podniosła wymagany depozyt zabezpieczający dla pozycji początkowej 1x powyżej MTM kapitału własnego, dlatego podstawowa kontrola depozytu odrzuciła zlecenie. Odrzucone zlecenie pozostawało następnie w _inflight_entries i blokowało wszystkie kolejne wejścia, stąd w środowisku testowym widniało 0-2 transakcji. Wielkość pozycji uwzględnia teraz bufor size_buffer z 0.97 (3% zapasu, wystarczający na największe luki cenowe FXE między zamknięciem a otwarciem), zarówno dla wartości nominalnej, jak i limitu 100% kapitału własnego. notional_fraction pozostaje na poziomie 1.0, a dźwignia na poziomie 1.0, zgodnie z ustaleniami kontraktu. Kontrola ryzyka nadal odpowiada wariantowi (b): wyjście wyznaczane kalendarzowo, każda pozycja nieprzekraczająca 100% kapitału własnego. Logika sygnału, wejścia i wyjścia pozostaje bez zmian. W kwestii ostrzeżenia QA: entry_month nadal jest wykorzystywane w should_enter. Zachowuje to zasadę jednej transakcji na okno końca miesiąca; odmowa z powodu depozytu, która mogła spowodować pominięcie zlecenia, nie powinna już występować. Uwaga doradcza: oczekiwany zysk brutto ~0.12% na transakcję jest niewielki w porównaniu z dziennymi wahaniami FXE, więc wynik może okazać się nierozstrzygający.
Wyniki weryfikacji
Opcjonalnie ustaw entry_month w on_position_opened (lub gdy nadejdzie realizacja zlecenia), zamiast w should_enter.
should_enter() ustawia entry_month przed obliczeniem wielkości zlecenia i jego realizacją. Jeśli wejście zostanie odrzucone (wielkość 0, wartość poniżej minimum nominalnego lub odmowa podczas kontroli depozytu), pozostała część okna w tym miesiącu zostanie pominięta. 0.97 size_buffer sprawia, że odmowa z powodu depozytu jest mało prawdopodobna, więc efekt jest niewielki.
Do badań nie jest potrzebny. W przypadku paper tradingu rozważ wyznaczanie entry_month na podstawie ts_opened otwartej pozycji.
Stan skalarny (entry_month, mtd_anchor, kolejka _spy_rets) jest przechowywany w pamięci. Po ponownym uruchomieniu węzła paper tradingu rozgrzewka odbudowuje stan sygnału do calculate_signal, ale entry_month rozpoczyna się ponownie od 0. Ponowne uruchomienie w trakcie okna, gdy pozycja jest otwarta, nadal doprowadziłoby do prawidłowego wyjścia, ponieważ cur_month != entry_month wywołuje should_exit. Ma to znaczenie tylko przy ponownym uruchomieniu; backtest nigdy nie jest uruchamiany ponownie.
W oknie 1561 dni, przy domyślnych parametrach (z_entry 0.5, entry_sessions 3), środowisko testowe wygenerowało 60 transakcji, średnią -0.29% nominału, PF 0.37 i Sharpe’a -1.14. Strategia przynosiła straty w każdym tercylu zmienności i w 2022. Hipoteza zakłada około +0.12% zysku brutto na transakcję, co jest niewielką wartością wobec dziennego szumu FXE (około 0.4-0.5%) w trakcie utrzymywania pozycji przez 1-5 sesji. Modelowany wpływ rynkowy ($10.6k przy obrocie $10.9M, około 0.1% na pełną transakcję) jest już bliski deklarowanemu zyskowi brutto. Najpierw sprawdź pełną historię: czy prognoza IC miesięcznego z-score SPY względem stopy zwrotu FXE od wejścia do fixingu na koniec miesiąca oraz czy okno 1 sesji (entry_sessions=1, pozycja utrzymywana tylko przez fixing ostatniego dnia) daje lepszy wynik niż pozycja utrzymywana przez 3-5 sesje, co w większości oznacza szum. To próbny test dymny, więc ma charakter doradczy i nie blokuje.
Przegląd backtestu
Sharpe
-0,08
Łączna stopa zwrotu
-5,00%
Maksymalne obsunięcie
18,83%
Łączna liczba transakcji
183
Trafność
48,1%
Współczynnik zysku
0,93
Transakcje realizują opisany mechanizm: 183 wejść na koniec miesiąca w ciągu 20 lat, blisko przewidywanych ~145. Było 119 pozycji długich i 64 krótkich, co jest zgodne z tym, że SPY częściej rośnie niż spada od początku miesiąca. Wyjścia są wyznaczane kalendarzowo, ekspozycja wynosi 11% i na koniec nie ma otwartych pozycji.
Uzgodnienia księgowe są poprawne: audyty danych wejściowych nie wykazały problemów, end_unrealized_pct wynosi 0, a w księdze kosztów nie ma różnic.
Oczekiwana wartość netto jest ujemna w wiarygodnej próbie. avg_trade_return_pct wynosi -0.024%, poniżej progu +0.05% USEQ (+0.10% preferowane). PF wynosi 0.926, Sharpe -0.08 (CI -0.53 do 0.32), a łączna stopa zwrotu to -5.0%. Maksymalny drawdown wynosi 18.8%, wobec zarejestrowanego wcześniej 15%, a strategia pozostaje pod wodą od 2,992 dni.
Prognoza nie niesie żadnej informacji: IC wykonanego sygnału wynosi 0.025 (t=0.72, n=858). Diagnostyka ocenia go jako rejected_no_information.
Koszty dominują. Modelowany wpływ rynkowy wynosi $25.2k, czyli 122% zysku brutto; pojemność FXE to około $67k wobec pozycji o wartości około $100k. Zysk brutto przed wpływem rynkowym wynosi około +$20k przy obrocie nominałem około $19M w pełnej transakcji, czyli około +0.10% na transakcję. To blisko 0.12% zakładanej w hipotezie, ale wpływ rynkowy wynoszący około 0.13% na pełną transakcję całkowicie go pochłania.
Stopy zwrotu słabną: strategia była dodatnia w większości lat od 2008 do 2019, a ujemna w każdym roku od 2020 do 2026 (2022 -3.9%, 2023 -3.4%, 2024 -3.75%, 2025 -2.8%, 2026 -3.2% YTD). Ujęty w ten sposób przepływ zanikł w najnowszych danych.
Historia iteracji
Weryfikacja nie powiodła się (warstwa 4 — przegląd QA) [klasa=code_defect]: - [edge_concern] Hipoteza zakłada około 0.12% zysku brutto na transakcję. Pozycja jest utrzymywana przez 2-6 FXE sesji, z których każda ma dzienne odchylenie standardowe około 0.4-0.6%. Dzienne świece obejmują odwrócenie po fixingu aż do zamknięcia ostatniego dnia oraz lukę nocną do otwarcia następnej sesji, co przyznaje autor kodu. Stosunek sygnału do szumu na transakcję jest więc bardzo niski. Przy około 145-180 transakcjach w ciągu 20……Pokaż więcejPokaż mniej
Weryfikacja nie powiodła się (warstwa 4 — przegląd QA) [klasa=code_defect]:
- [edge_concern] Hipoteza zakłada około 0.12% zysku brutto na transakcję. Pozycja jest utrzymywana przez 2-6 FXE sesji, z których każda ma dzienne odchylenie standardowe około 0.4-0.6%. Dzienne świece obejmują odwrócenie po fixingu aż do zamknięcia ostatniego dnia oraz lukę nocną do otwarcia następnej sesji, co przyznaje autor kodu. Stosunek sygnału do szumu na transakcję jest więc bardzo niski. Przy około 145-180 transakcjach w ciągu 20 lat należy oczekiwać wyniku nierozstrzygającego lub bliskiego zeru, a nie wyraźnego rezultatu. Krótkie pozycje na FXE generują również modelowany koszt pożyczki (około $6.8 przy pozycji krótkiej o wartości $99k utrzymywanej przez 5 dni w mojej symulacji), co ma znaczenie wobec celu 0.12%. Tylko zalecenie.
- [krytyczne] position_size() ustala wielkość pozycji dokładnie na 100% kapitału własnego, int(equity / decision-bar close), bez żadnego zapasu. Na venue z sesją USEQ zlecenie jest realizowane na otwarciu sesji NEXT, a kontrola depozytu zabezpieczającego w bazowym submit_order() (refuse_over_margin, wycena na podstawie cache, a nie ceny zamknięcia świecy decyzyjnej) odrzuca zlecenie, gdy początkowy depozyt 1x wraz z opłatami przekracza kapitał własny MTM choćby o kilka dolarów. Odtworzyłem to w rzeczywistym BacktestRunnerze (USEQ, 2020-03-17 do 2026-10-09, domyślne parametry kontraktu). Transakcja 1 (SHORT 956 FXE, 2020-03-27 do 2020-04-01) została zrealizowana. Dla 2020-04-27 zarejestrowano komunikat „Order refused: BUY 979 FXE.USEQ would need more initial margin than the account holds at 1x leverage”. Bazowy szablon zapisał już odrzucone zlecenie w _inflight_entries, zanim submit_order() zwróciło wynik. Zlecenie nigdy nie zostaje wysłane, więc nigdy się nie zamyka, a _entry_order_inflight() zwraca True do końca przebiegu. Każde późniejsze wejście (60 z 62) jest odrzucane jako „Blocked stacked entry ... still in flight”. entry_diag: entries_submitted 62, denied_margin 1, dropped_entry_inflight 60. Rezultatem jest jedna lub dwie transakcje w ciągu 6.5 lat, choć sygnał pojawia się 64 razy; moja lokalna symulacja tej samej logiki na świecach z katalogu daje 183 wejść w ciągu 2006-2026. Dlatego środowisko testowe warstwy -3 pokazało 0 transakcji, a backtest na pełnej historii mierzyłby zablokowaną strategię, nie hipotezę. (wiersz 131) — poprawka: Zostaw zapas na lukę do otwarcia następnej sesji, opłatę i zmianę MTM, zachowując notional_fraction=1.0 kontraktu oraz limit 100% kapitału własnego. Na przykład: notional = equity * min(notional_fraction, 1.0) * leverage * 0.97, następnie min(notional, 0.97 * equity). Bufor 3% pokrywa największe luki nocne FXE. Dla dodatkowego bezpieczeństwa możesz też porównać obliczoną wielkość z dostępnym depozytem przed jej zwróceniem. Następnie ponownie uruchom środowisko testowe: powinno pokazać około jednej transakcji na kwalifikujący się koniec miesiąca, a nie 0-2.
- [ostrzeżenie] should_enter() ustawia entry_month przed obliczeniem wielkości zlecenia lub jego akceptacją. Jeśli bazowy system odrzuci zlecenie (depozyt, minimalna wartość nominalna, wielkość 0), miesiąc zostaje wykorzystany i późniejsze sesje w oknie nie mogą ponowić próby. Jest to akceptowalne przy zasadzie „jedna transakcja w oknie końca miesiąca”, ale po odrzuceniu zlecenia miesiąc przepada bez komunikatu. (wiersz 114) — poprawka: Opcjonalnie ustaw entry_month w on_position_opened (albo po realizacji zlecenia) lub zaakceptuj to zachowanie i opisz je w dokumentacji.
- [ostrzeżenie] min_bars_required() jest nadpisane na vol_lookback + 2 = 62. Jest to celowe i poprawne. Pamiętaj, że wynik z-score wymaga już max(5, vol_lookback // 2) zwrotów oraz prawidłowego punktu odniesienia dla miesiąca, dlatego pierwsze wejście nie może nastąpić przed mniej więcej świecą 62. (wiersz 49) — poprawka: Nie są potrzebne zmiany.
Pozostaw zapas na lukę cenową przy otwarciu kolejnej sesji, opłatę i dryf ceny MTM, zachowując jednocześnie notional_fraction=1.0 dla kontraktu oraz limit 100% kapitału własnego. Na przykład: wartość nominalna = kapitał własny * min(notional_fraction, 1.0) * dźwignia * 0.97, a następnie min(wartość nominalna, 0.97 * kapitał własny). Bufor 3% pokrywa największe luki cenowe FXE między zamknięciem a otwarciem. Tylko jeśli chcesz dodatkowego zabezpieczenia, porównaj też obliczoną wielkość z dostępnym limitem depozytu zabezpieczającego przed jej zwróceniem. Następnie ponownie uruchom środowisko testowe: powinno wykazać około jednej transakcji na każdy kwalifikujący się koniec miesiąca, a nie 0-2.
position_size() ustala wielkość pozycji dokładnie na 100% kapitału własnego, int(equity / decision-bar close), bez żadnego zapasu. Na venue z sesją USEQ zlecenie jest realizowane na otwarciu sesji NEXT, a kontrola depozytu zabezpieczającego w bazowym submit_order() (refuse_over_margin, wycena na podstawie cache, a nie ceny zamknięcia świecy decyzyjnej) odrzuca zlecenie, gdy początkowy depozyt 1x wraz z opłatami przekracza kapitał własny MTM choćby o kilka dolarów. Odtworzyłem to w rzeczywistym BacktestRunnerze……Pokaż więcejPokaż mniej
position_size() ustala wielkość pozycji dokładnie na 100% kapitału własnego, int(equity / decision-bar close), bez żadnego zapasu. Na venue z sesją USEQ zlecenie jest realizowane na otwarciu sesji NEXT, a kontrola depozytu zabezpieczającego w bazowym submit_order() (refuse_over_margin, wycena na podstawie cache, a nie ceny zamknięcia świecy decyzyjnej) odrzuca zlecenie, gdy początkowy depozyt 1x wraz z opłatami przekracza kapitał własny MTM choćby o kilka dolarów. Odtworzyłem to w rzeczywistym BacktestRunnerze (USEQ, 2020-03-17 do 2026-10-09, domyślne parametry kontraktu). Transakcja 1 (SHORT 956 FXE, 2020-03-27 do 2020-04-01) została zrealizowana. Dla 2020-04-27 zarejestrowano komunikat „Order refused: BUY 979 FXE.USEQ would need more initial margin than the account holds at 1x leverage”. Bazowy szablon zapisał już odrzucone zlecenie w _inflight_entries, zanim submit_order() zwróciło wynik. Zlecenie nigdy nie zostaje wysłane, więc nigdy się nie zamyka, a _entry_order_inflight() zwraca True do końca przebiegu. Każde późniejsze wejście (60 z 62) jest odrzucane jako „Blocked stacked entry ... still in flight”. entry_diag: entries_submitted 62, denied_margin 1, dropped_entry_inflight 60. Rezultatem jest jedna lub dwie transakcje w ciągu 6.5 lat, choć sygnał pojawia się 64 razy; moja lokalna symulacja tej samej logiki na świecach z katalogu daje 183 wejść w ciągu 2006-2026. Dlatego środowisko testowe warstwy -3 pokazało 0 transakcji, a backtest na pełnej historii mierzyłby zablokowaną strategię, nie hipotezę.
Opcjonalnie ustaw entry_month w on_position_opened (albo po realizacji zlecenia) lub zaakceptuj to zachowanie i opisz je w dokumentacji.
should_enter() ustawia entry_month przed obliczeniem wielkości zlecenia lub jego akceptacją. Jeśli bazowy system odrzuci zlecenie (depozyt, minimalna wartość nominalna, wielkość 0), miesiąc zostaje wykorzystany i późniejsze sesje w oknie nie mogą ponowić próby. Jest to akceptowalne przy zasadzie „jedna transakcja w oknie końca miesiąca”, ale po odrzuceniu zlecenia miesiąc przepada bez komunikatu.
Nie są wymagane żadne zmiany.
min_bars_required() jest nadpisane na vol_lookback + 2 = 62. Jest to celowe i poprawne. Pamiętaj, że wynik z-score wymaga już max(5, vol_lookback // 2) zwrotów oraz prawidłowego punktu odniesienia dla miesiąca, dlatego pierwsze wejście nie może nastąpić przed mniej więcej świecą 62.
Podsumowanie wyniku
Testowanie przepływu przy fixingu FX w ciągu dnia z dziennymi świecami ETF i realizacją po cenie otwarcia następnej sesji daje wpływ rynkowy większy niż przewaga brutto wynosząca około 0.10% dla strategii o małej pojemności ETF (około $67k). Do rzetelnego testu tego efektu potrzebne są dane spot z sesji intraday w pobliżu fixingu.
Strategię porzucono podczas przeglądu backtestu, przed optymalizacją, z powodu ujemnej oczekiwanej wartości: avg_trade_return_pct z -0.024% wobec progu +0.05% USEQ, sygnał IC z 0.025 (t=0.72, oceniony jako pozbawiony informacji) oraz drawdown przekraczający zarejestrowany wcześniej 15%. Każdy rok od 2020 do 2026 przynosił straty.
Na podstawie pracy Melvina i Prinsa (2015) strategia zajmowała długą lub krótką pozycję w euro ETF FXE.USEQ, zgodnie ze zmianą SPY od początku miesiąca przeliczoną na z-score, podczas kilku ostatnich sesji miesiąca. Zakładała, że dostosowanie przez zagranicznych inwestorów w akcje zabezpieczeń USD przy fixingu na koniec miesiąca popycha EUR/USD w tym kierunku.
W 183 transakcjach na koniec miesiąca od 2006 do 2026 łączna stopa zwrotu wyniosła -5.0%, Sharpe -0.08 (CI -0.53 do 0.32), profit factor 0.926, avg_trade_return_pct -0.024%, a maksymalny drawdown 18.8%. Zysk brutto przed wpływem rynkowym wynosił około +0.10% na transakcję, lecz modelowany wpływ FXE ($25.2k, 122% zysku brutto) przyniósł stratę.
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.