Lumaktaw papunta sa nilalaman
Lahat ng estratehiya

Mga Estratehiya

US Equity Turn-of-Month Seasonality — Long/Short na timing ng index sa QQQ: kunin ang dokumentadong kumpol ng kita sa turn-of-month (Long), mag-short sa kalagitnaan ng buwan pagkatapos ng ToM na ONLY kapag bearish ang regime; kalendaryo ang batayan, halos walang iniakmang parameter (QQQ.USEQ, arawang bar, 2-parameter)

Resulta: Inabandona

QqqTurnOfMonthSeasonalityLS

Nalalampasan ng avg_trade_return_pct 0.203% ang cost floor na USEQ (hindi ito pagkabigo dahil sa bayarin)

Hypothesis

Isang LONG-SHORT, SINGLE-INSTRUMENT estratehiya sa pagtiyempo ng index batay sa seasonality ng kalendaryo sa QQQ.USEQ (Nasdaq-100 ETF); lubos na wala ang pamilyang ito sa talaan ng factory at likas na hindi tinatablan ng dalawang pinakamalaking panganib dito (overfitting at ekonomiks na hindi sasapat sa bayarin). Ang signal ay ang CALENDAR, hindi threshold ng presyong iniakma sa datos: ang epekto sa pagtatapos at pagsisimula ng buwan (ToM)—na hindi proporsyonal na malaking bahagi ng kita ng equity index ay……Magpakita ng higit paMagpakita ng mas kaunti

Isang LONG-SHORT, SINGLE-INSTRUMENT estratehiya sa pagtiyempo ng index batay sa seasonality ng kalendaryo sa QQQ.USEQ (Nasdaq-100 ETF); lubos na wala ang pamilyang ito sa talaan ng factory at likas na hindi tinatablan ng dalawang pinakamalaking panganib dito (overfitting at ekonomiks na hindi sasapat sa bayarin). Ang signal ay ang CALENDAR, hindi threshold ng presyong iniakma sa datos: ang epekto sa pagtatapos at pagsisimula ng buwan (ToM)—na hindi proporsyonal na malaking bahagi ng kita ng equity index ay naiipon sa panahong mula sa huling araw ng trading ng isang buwan hanggang sa unang humigit-kumulang 3 araw ng trading sa susunod—ay isa sa pinakamatatag at pinakanananatili sa labas ng sample na mga anomalya sa equities (Ariel 1987; McConnell & Xu 2008, napatunayan sa maraming dekada at dose-dosenang merkado). Dahil DETERMINED BY THE CALENDAR ang mga petsa ng pagpasok at paglabas sa halip na in-optimize batay sa presyo, halos wala ang saklaw ng overfitting na nagpabagsak sa 338 naunang mga hypothesis—2 lang ang tunay na malalayang parameter (haba ng SMA ng trend regime at flag para paganahin ang short), at mula sa nailathalang pananaliksik ang mga hangganan ng ToM window, hindi sa pagwawalis ng mga parameter. Gumagana ito sa QQQ pang-araw-araw na bar na may 25+ taong kasaysayan (QQQ mula 1999) para sa matatag na walk-forward na maraming window at tunay na holdout. LONG-SHORT ang direksiyon (pinupunan ang kulang na kinakatawang bucket na long_short) at hindi ito NOT market-neutral (0.7% survival), hindi rin cross-sectional rotation (0/125, L68), at hindi rin momentum na sumusunod sa trend—direksiyonal na pagtitiyempo ito batay sa kalendaryo para sa iisang likidong ETF. Bakit USEQ at hindi crypto: katamtaman ang nakukuhang ToM, humigit-kumulang 0.3-0.6% bawat window; halos lahat nito ay naiiwan sa commission-free na USEQ execution (humigit-kumulang 0.02-0.05% balikan, spread at impact lang), samantalang mauubos ito sa bayarin sa crypto na 0.10-0.20% at mga tape na 24/7 (walang buwanang daloy ng settlement o rebalance na nagtutulak sa epekto ng ToM). FEE ARITHMETIC: karaniwang nagkakaroon sa kasaysayan ang long window ng ToM ng humigit-kumulang 0.3-0.6% sa QQQ sa loob ng humigit-kumulang 4 araw ng trading; matapos ibawas ang humigit-kumulang 0.04% na bayaring balikan, humigit-kumulang 0.3-0.55% ang nakukuha, mga 8-14x ng epektibong hangganan ng gastos at mas mataas sa pamantayan ng pagiging praktikal na 0.15%. Humigit-kumulang 12 long trade bawat taon (isa bawat buwan), dagdag ang conditional na short leg, ang nagbibigay ng sapat na sample para sa significance sa loob ng 25 taon nang walang hatak sa kita mula sa bayarin sa high-frequency trading.

Iteration 2 - iisang naka-target na pag-aayos para sa pagkabigo ng Layer-2, walang ibang pagbabago. Ang crash ay TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given: kinokopya ng Layer-2 proxy ang bawat callable papunta sa plain wrapper gamit ang types.MethodType, kaya nagiging BOUND method ang @staticmethod at ipinapasa ang instance bilang unang positional argument. Pag-aayos: (1) hindi na tinatawag ng estratehiya ang base static helper na self._bar_ts(bar) - kinukuha nito ang……Magpakita ng higit paMagpakita ng mas kaunti

Iteration 2 - iisang naka-target na pag-aayos para sa pagkabigo ng Layer-2, walang ibang pagbabago. Ang crash ay TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given: kinokopya ng Layer-2 proxy ang bawat callable papunta sa plain wrapper gamit ang types.MethodType, kaya nagiging BOUND method ang @staticmethod at ipinapasa ang instance bilang unang positional argument. Pag-aayos: (1) hindi na tinatawag ng estratehiya ang base static helper na self._bar_ts(bar) - kinukuha nito ang timestamp sa sarili nitong instance method na _ts_of(bar) (ts_event na may fallback na ts_init, kapareho ang semantics); (2) ginawang plain instance method ang tatlong calendar helper (_days_from_ns, _civil_from_days, _days_in_month) sa parehong dahilan, dahil magkakaroon din sila ng kaparehong maling binding sa susunod na tawag. Wala nang ibang ginalaw: hindi nagbago ang imports (math, collections, decimal, nautilus_trader, src lang pa rin - walang ipinagbabawal na module, kaya nananatiling green ang Layer 1), at byte-identical sa nakaraang iteration ang lohika ng signal, mga calendar window, tuntunin sa pagpasok/paglabas, sizing at config. Hindi nagbago ang pinagbabatayang disenyo mula iteration 1: kalendaryo, hindi iniakmang antas ng presyo, ang trigger (2 malayang parameter, regime_sma_len nakatala sa _param_bounds dahil nililimitahan ito ng code, dagdag ang flag na short_enabled); kinukuha ang petsa ng session mula sa timestamp ng bar sa pamamagitan ng purong integer civil-date arithmetic na inusog nang 5h para tumapat sa araw ng kalendaryo sa New York sa ilalim ng EST at EDT; binibilang ang trading-day index sa loob ng buwan mula sa mga naobserbahang bar kaya hindi kailangan ng talahanayan ng kalendaryo para sa mga holiday at half-day; at walang nakabatay sa bar counter na relatibo sa proseso, kaya pareho ang iskedyul sa mga restart, replay at backtest.

Kalendaryong anomalya sa USEQ na likas na mababa ang Sharpe at walang matatag na edge na mao-optimize. 0.237 ang base Sharpe, at sumasaklaw sa sero ang bootstrap na CI [-0.11, 0.60] — hindi ito maihihiwalay sa estadistika sa kawalan ng kasanayan bago pa ang anumang bias sa pagpili ng optimization; lalo pa itong ibinababa ng deflation at holdout. Nasa ibaba ng hangganang 1.2 para sa makabuluhang edge ang profit_factor 1.195; sa halos walang alitan na USEQ, nangangahulugan itong halos wala ang turn-of-month effect……Magpakita ng higit paMagpakita ng mas kaunti

Kalendaryong anomalya sa USEQ na likas na mababa ang Sharpe at walang matatag na edge na mao-optimize. 0.237 ang base Sharpe, at sumasaklaw sa sero ang bootstrap na CI [-0.11, 0.60] — hindi ito maihihiwalay sa estadistika sa kawalan ng kasanayan bago pa ang anumang bias sa pagpili ng optimization; lalo pa itong ibinababa ng deflation at holdout. Nasa ibaba ng hangganang 1.2 para sa makabuluhang edge ang profit_factor 1.195; sa halos walang alitan na USEQ, nangangahulugan itong halos wala ang turn-of-month effect matapos ibawas ang spread, hindi pinigilan ng bayarin (L75). Sa loob ng 27 taon, ~116% lang ang balik (~2.9%/yr) at NEGATIVE ang information ratio (-0.296), kaya hindi nito nahihigitan ang buy-and-hold; pabigat ang conditional short leg (short_win_rate 0.457) na sumasalo pa rin ng malalaking directional loss (2002 -33.5%, 2001 -14.5%) — hindi totoo ang palagay na hindi ito tinatablan ng drawdown (max DD 43.7%, CI hanggang 87.8%). Dahil 2 lang ang malalayang parameter, walang paraang itaas ang Sharpe na 0.24 tungo sa matatag na antas na maaaring i-promote. Ito ang pattern ng turn-of-month na walang survivor sa L75 USEQ; abandonahin sa BACKTEST_REVIEW sa halip na ulitin.

Implementasyon

Pagtitiyempo ng index batay sa seasonality ng kalendaryo sa QQQ.USEQ pang-araw-araw na bar, long at short. LONG leg: bumili sa pagsasara ng huling session ng trading bawat buwan (o sa unang dalawang session ng bagong buwan kung napalampas ang pagsarang iyon) at lumabas sa pagsasara ng araw ng trading na 3 ng bagong buwan, para makuha ang dokumentadong kumpol ng kita sa pagtatapos at pagsisimula ng buwan. SHORT leg (opsyonal, nakabatay sa regime): mag-short sa paghina sa kalagitnaan ng buwan pagkaraan ng ToM, sa……Magpakita ng higit paMagpakita ng mas kaunti

Pagtitiyempo ng index batay sa seasonality ng kalendaryo sa QQQ.USEQ pang-araw-araw na bar, long at short. LONG leg: bumili sa pagsasara ng huling session ng trading bawat buwan (o sa unang dalawang session ng bagong buwan kung napalampas ang pagsarang iyon) at lumabas sa pagsasara ng araw ng trading na 3 ng bagong buwan, para makuha ang dokumentadong kumpol ng kita sa pagtatapos at pagsisimula ng buwan. SHORT leg (opsyonal, nakabatay sa regime): mag-short sa paghina sa kalagitnaan ng buwan pagkaraan ng ToM, sa mga araw ng trading na 7-15 ng buwan, kapag lamang makabuluhang mas mababa ang QQQ sa 200-session nitong regime na SMA; isinasara ang short kapag nagtatapos ang window o nawawala ang bearish na regime. Nagbabalik ang calculate_signal ng tuloy-tuloy na score ng lapit sa petsa ng kalendaryo sa bawat bar—isang exponential na lobe na tumataas sa loob ng ToM window, bawas ang lobe sa kalagitnaan ng buwan na pinaliliit o pinalalaki ayon sa pagiging bearish ng regime—at nilalagyan ng threshold ng should_enter ang score na iyon. Batay sa kapital ang laki ng posisyon, sa buong share (95% ng equity para sa long, 50% para sa short, leverage na 1.0), at 5% na catastrophe stop lamang ang tuntuning nakabatay sa presyo. Humigit-kumulang 12 long trade bawat taon, dagdag ang mga conditional na short.

Mga Resulta ng Beripikasyon

CLEAN RESTART 2026-09-04 — inalis ang kasaysayan ng mga hatol at tala ng pagkatuto sa run na ito, at sinimulan itong muli mula sa verification. Pipeline ang dahilan ng dating pag-abandona, hindi ang merkado: nagkamali ng binding ang Layer-2 harness sa mga @staticmethod helper (naayos na), nagbigay ang QA ng mga pinal na hatol sa performance batay sa hindi na-optimize na smoke test (inalis na — correctness na lang ang hinahatulan ngayon ng QA), at dulot ng kakulangan ng backtest slot ang mga timeout sa sandbox (naayos na). Hindi nagbago ang hypothesis at ang code ng estratehiya. Suriin ang code batay sa merito nito; ang full backtest at optimizer ang magpapasya sa performance sa susunod.

I-optimize ang short_enabled True laban sa False bilang pangunahing sangay; ilunsad ang long-only ToM kung hindi napapabuti ng short leg ang Sharpe na OOS matapos isaalang-alang ang tail nito.

Ang regime-conditional short leg (19 sandbox trade) ang pangunahing pinagmumulan ng tail risk at bahaging hindi gaanong sinusuportahan ng nailathalang anomalya (long-side effect ang ToM; overlay ng developer ang bearish na short sa kalagitnaan ng buwan). Hindi ito depekto, pero pinalalawak nito ang drawdown CI (max_dd_ci_high 47%), at hindi pa napatutunayan ang edge nito sa sample na ito. Hindi ito hadlang.

Pagsusuri ng Backtest

Sharpe
0.24
Kabuuang Return
116.03%
Max Drawdown
43.70%
Kabuuang Trade
460
Win Rate
55.7%
Profit Factor
1.20

Nalalampasan ng avg_trade_return_pct 0.203% ang cost floor na USEQ (hindi ito pagkabigo dahil sa bayarin)

460 trade sa loob ng 27 taon — sapat ang sample, kalendaryo ang batayan kaya maliit ang saklaw ng overfitting

mababang market beta (0.087) — hindi lang exposure sa index ang pinagmulan ng balik

Saklaw ng sero ang Sharpe na 0.237 at bootstrap na CI [-0.11, 0.60] — walang matatag sa estadistika na edge na iniakma sa panganib bago ang anumang optimization

Mas mababa ang profit_factor 1.195 sa hangganang 1.2 para sa makabuluhang edge (L75: ang halos walang alitan na USEQ + PF<1.2 ay nangangahulugang wala ang anomalya, hindi pinigilan ng bayarin)

information_ratio -0.296: mas mahina kaysa buy-and-hold sa aktibong batayang iniakma sa panganib; total_return mga ~116% lang sa loob ng 27 taon (~2.9%/yr)

pabigat ang conditional short leg (short_win_rate 0.457), at malalaking directional loss pa rin ang tinatanggap ng estratehiya (2002 -33.5%, 2001 -14.5%), salungat sa pahayag na hindi ito tinatablan ng drawdown

max_drawdown 43.7% (CI hanggang 87.8%) laban sa balik na mas mababa sa -3%/yr

tumutugma sa pattern ng turn-of-month na walang survivor sa L75 USEQ

Kasaysayan ng Iterasyon

Bumagsak ang verification (Layer 2 — mga sintetikong senaryo): Mga ginamit na parameter: ['decay', 'bear_ref', 'tom_days', 'short_end', 'long_thresh', 'short_start', 'warmup_bars', 'min_notional', 'short_thresh', '_param_bounds', 'long_exposure', 'short_enabled', 'stop_loss_pct', 'regime_sma_len', 'short_exposure'] Tiyaking itinatakda ng __init__ ang lahat ng attribute mula sa self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (timestamp ng……Magpakita ng higit paMagpakita ng mas kaunti

Bumagsak ang verification (Layer 2 — mga sintetikong senaryo): Mga ginamit na parameter: ['decay', 'bear_ref', 'tom_days', 'short_end', 'long_thresh', 'short_start', 'warmup_bars', 'min_notional', 'short_thresh', '_param_bounds', 'long_exposure', 'short_enabled', 'stop_loss_pct', 'regime_sma_len', 'short_exposure'] Tiyaking itinatakda ng __init__ ang lahat ng attribute mula sa self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (timestamp ng bar: 1735691340000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (timestamp ng bar: 1735691340000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (timestamp ng bar: 1735691340000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (timestamp ng bar: 1735691340000) - zero_volume: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (timestamp ng bar: 1735691340000) - price_gap: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (timestamp ng bar: 1735691340000)

Ang Stratmill ay isang tool para sa pananaliksik at paper trading, hindi payo sa pananalapi o isang broker. Ang mga resulta ng backtest at paper trading ay hypothetical. May panganib ng pagkalugi ang pangangalakal.