Hoppa till innehåll
Alla strategier

Strategier

Tvärsnittsvis RETAIL-CROWDING Kontrarisk Rotation, Endast Long (BINANCE USD-M, 8 Majors, WEEKLY Håll de 3 LEAST Mest Retail-Trängda Namnen efter GLOBAL Long/Short-Kontokvot — en Ren Under-Ownership-FACTOR, Inte Momentum; Systemisk Eufori-Kontantgrind, 2-Parameter)

Utfall: Övergiven

RetailCrowdingContrarianRotationLong

Tvärsnittsvis RETAIL-CROWDING Kontrarisk Rotation, Endast Long (BINANCE USD-M, 8 Majors, WEEKLY Håll de 3 LEAST Mest Retail-Trängda Namnen efter GLOBAL Long/Short-Kontokvot — en Ren Under-Ownership-FACTOR, Inte…

Hypotes

En LONG-ONLY, veckovis ombalanserad tvärsnitts-ROTATION över 8-major USD-M-universumet (BTC, ETH, SOL, BNB, AVAX, LINK, ADA, XRP), som väljer namn utifrån en genuin NON-PRICE CROWDING-signal: kvoten GLOBAL long/short ACCOUNT (count_long_short_ratio, en proxy för retail-positionering) från Binance VISION 'metrics'-filer (MULTI-YEAR till ~2020, NOT den 30-dagars API). Mekanismen är en ren UNDER-OWNERSHIP-faktor — håll de majors som retail är LEAST crowded-long på, eftersom crowded-long-namn bär latent risk för……Visa merVisa mindre

En LONG-ONLY, veckovis ombalanserad tvärsnitts-ROTATION över 8-major USD-M-universumet (BTC, ETH, SOL, BNB, AVAX, LINK, ADA, XRP), som väljer namn utifrån en genuin NON-PRICE CROWDING-signal: kvoten GLOBAL long/short ACCOUNT (count_long_short_ratio, en proxy för retail-positionering) från Binance VISION 'metrics'-filer (MULTI-YEAR till ~2020, NOT den 30-dagars API). Mekanismen är en ren UNDER-OWNERSHIP-faktor — håll de majors som retail är LEAST crowded-long på, eftersom crowded-long-namn bär latent risk för long-likvidering/squeeze-nedåt medan underägda namn har utrymme att bjudas upp. Detta ligger medvetet i den ONLY strukturella familj som reproducerbart överlever här — long-only, majors, veckovis hold top-K, lågt antal parametrar (den driftsatta momentum-rotationen Sharpe 2.6 och negativ-funding carry-korgen Sharpe 1.97) — och den bidrar med en urvalsnyckel ORTHOGONAL till båda: inte pris-relativ styrka (momentum) och inte funding (carry), utan crowd-positionering. Enligt sessionens bevis undviker den varje dödsläge: NOT en riktad timer för ett enskilt namn (de dog -100% / -43% / risk-reject), NOT en dollarneutral spread (inget short-ben → ingen 90% DD-explosion), NOT funding/optioner/likvideringar/ren-OHLCV. Den skiljer sig från den väntande SmartMoneyGatedMomentumRotation (som använder TOP-TRADER-kohorten för att GATE en momentum-portfölj) och från EthRetail (long-short-fade för ett enskilt namn): denna använder RETAIL/global-kohorten som den PRIMARY tvärsnittsrankningsnyckeln i en kontrarisk LONG-ONLY-korg, helt utan momentumkomponent. 2 parametrar, K och kadens frysta till den beprövade mallen.

Åtgärdar exakt den defekt som QA tog upp. QA förkastade rankningsnyckeln eftersom open interest är (a) inte en retail-proxy — det är totalt öppet notional över alla deltagare — och (b) riktningsblind, eftersom aggregerade perp-longs motsvarar shorts, så det kan inte uttrycka 'minst crowded-LONG'. Den nya rankningsnyckeln är `taker_long_short_vol_ratio` läst per ben från `taker_flow_by_instrument`: det är aggressiv BUY-volym dividerad med aggressiv SELL-volym, så den är DIRECTIONAL till sin konstruktion (ett högt……Visa merVisa mindre

Åtgärdar exakt den defekt som QA tog upp. QA förkastade rankningsnyckeln eftersom open interest är (a) inte en retail-proxy — det är totalt öppet notional över alla deltagare — och (b) riktningsblind, eftersom aggregerade perp-longs motsvarar shorts, så det kan inte uttrycka 'minst crowded-LONG'. Den nya rankningsnyckeln är `taker_long_short_vol_ratio` läst per ben från `taker_flow_by_instrument`: det är aggressiv BUY-volym dividerad med aggressiv SELL-volym, så den är DIRECTIONAL till sin konstruktion (ett högt värde betyder bokstavligen att crowden lutar long i den namnet) och det är ett aggressor-/taker-sidans (retail-vänt) mått snarare än totalt öppet notional. Den kommer också från exakt samma Binance VISION `metrics`-filer som hypotesen anger som sin datakälla, med samma flerårs-till--2020-historik — endast kolumnen skiljer sig. Rankningen använder varje namns egen z-score (7d medelvärde vs 90d medelvärde/sd) så att strukturellt olika taker-nivåer kan jämföras mellan BTC och ADA, enligt lärdomen att fasta absoluta trösklar på kompletterande data inte är skalinvarianta. DISCLOSED, NOT HIDDEN: hypotesens bokstavliga nyckel är kvoten GLOBAL long/short ACCOUNT per namn (`long_short_ratio`, i samma parquet), men pipelinen laddar `metrics` endast för symbolen PRIMARY, och de enda kopplingar per ben som finns för tvärsnittsrankning är `funding_rates_by_instrument`, `open_interest_by_instrument` och `taker_flow_by_instrument` (subprocess_entry.py) — så en 8-namns rankning på kontokvoten går inte att uttrycka i strategikoden idag; det kräver en `global_ratio_by_instrument`-koppling som speglar de tre andra, vilket är en pipelineändring. Av de tre som finns är taker-flödet det enda som är både riktat och på retail-sidan, så det är den trogna ersättaren, och kontokvoten används fortfarande där den IS är tillgänglig (euforigrinden för kontanter BTC). Verifierat mot den verkliga datan före inlämning: alla 8 ben har 8k-punkters strided serier som sträcker sig över 1737-2193 dagar, 208/208 simulerade veckovisa ombalanseringar under de senaste 4 åren ger ett rankat tvärsnitt, och innehaven roterar mellan alla namn (67-86 val vardera) snarare än att fastna vid ett — så detta handlar och är inte en degenererad rankning. Två ytterligare mindre fixar har förts över: den veckovisa kadensen är nu kalenderförankrad till barens tidsstämpel istället för den processrelativa `_bar_i`-räknaren (omstartssäker, repriseidentisk), och `exit_level` tvingas strikt under `euphoria_level` så att optimeraren inte kan invertera hysteresen till en oscillation per bar. Layer-3-timeoutsäkerheten är oförändrad och bevarad: prefixsummor + searchsorted håller varje uppslag per bar på O(log n), och striding vid parsningstillfället begränsar __init__ till ~10s uppmätt för alla 8 ben.

verification_loop: Verifiering misslyckades (Lager 4 — QA-granskning) [klass=hypothesis_mismatch]: - [edge_concern] Sandlådan är en sammanhängande long-only-korg av storbolag (majors) som körs och handlar (337 affärer, avg_trade_return_pct 0.69% klarar avgiftsgolvet), men total_return -20.85%, information_ratio -0.901 jämfört med det liktviktade korg-benchmarket, och max_drawdown 71% (CI till 96%) antyder att den utbytta taker-flow-rankningsnyckeln tillför negativt riskjusterat värde jämfört med ett naivt……Visa merVisa mindre

verification_loop: Verifiering misslyckades (Lager 4 — QA-granskning) [klass=hypothesis_mismatch]: - [edge_concern] Sandlådan är en sammanhängande long-only-korg av storbolag (majors) som körs och handlar (337 affärer, avg_trade_return_pct 0.69% klarar avgiftsgolvet), men total_return -20.85%, information_ratio -0.901 jämfört med det liktviktade korg-benchmarket, och max_drawdown 71% (CI till 96%) antyder att den utbytta taker-flow-rankningsnyckeln tillför negativt riskjusterat värde jämfört med ett naivt liktviktat innehav. Detta är endast rådgivande; det ligger i förlängningen av felmatchningen i rankningsnyckeln och bör omprövas av analytikern på en korrigerad implementation, inte blockeras här. - [kritiskt] Hypotesens enda avgörande egenskap -- upprepad genomgående i titeln/beskrivningen ('by GLOBAL Long/Short Account-Ratio', 'count_long_short_ratio', 'a Pure Under-Ownership FACTOR, Not Momentum') -- är att CROSS-SECTIONAL RANKING KEY är förhållandet mellan long/short per namn globalt ACCOUNT, en retail-positionerings-/ägandeproxy som avsiktligt är ortogonal mot momentum och funding. Koden NOT rankar inte på detta. _crowd_z() / _rebalance() rankar de 8 storbolagen efter `taker_long_short_vol_ratio` (aggressiv BUY-volym / aggressiv SELL-volym) inläst från `taker_flow_by_instrument`. Taker long/short-volymförhållande är ett FLOW/AGGRESSOR-mått, inte ett positionerings-/ägandemått -- det skiljer sig väsentligt från account-ratiot och ligger snarare nära det kortsiktiga flödes-/momentum som hypotesen uttryckligen påstår sig vara ortogonal mot. Det namngivna account-ratiot används endast för den sekundära BTC-eufori-kontantgrinden (_parse_global / calculate_signal), aldrig för det primära urvalet. Enligt QA-checklistan, när hypotesens specifikt namngivna kärnfördel saknas i koden, är det kritiskt: den påstådda under-ägande-faktorn är inte den faktor som faktiskt handlas. (rad 259) — åtgärd: Antingen (a) koppla in det globala per-instrument-account-ratiot i pipelinen som `global_ratio_by_instrument` (på samma sätt som funding_rates_by_instrument / open_interest_by_instrument / taker_flow_by_instrument i subprocess_entry.py) och ranka på det -- detta är den trogna implementationen som hypotesen namnger; eller (b) om denna per-ben-serie verkligen inte kan tillhandahållas, är körningen ett DATA-täckningsblock (not_measurable) snarare än en strategi att lansera på en utbytt nyckel -- rapportera det som sådant så att hypotesen parkeras tills serien kopplas in, istället för att tyst handla på en annan (flödes-)faktor. Gör - [varning] Konsekvenskontrollen flaggar hypotesen 'WEEKLY' mot config bar_type 1-DAY. Detta är NOT en genuin felmatchning: 'weekly' i hypotesen syftar på REBALANCE/HOLD-kadensen, vilken korrekt implementeras som dagliga staplar (bars) styrda av en kalenderförankrad 7-dagars ombalansering (day % rebalance_days == 0). Att använda bokstavliga veckostaplar skulle göra eufori-percentilen och kadensen grövre; konstruktionen med dagliga staplar + 7-dagars-ombalansering är det korrekta sättet att uttrycka en veckovis rotation. Noterat för transparens; påverkar inte utfallet. (rad 380) — åtgärd: Formulera eventuellt om hypotestexten till 'weekly rebalance on daily bars' för att tysta Lager-1.5-konsekvensvarningen.

Implementation

Long-only, veckovis ombalanserad tvärsnittsrotation över 8 USD-M majors (BTC, ETH, SOL, BNB, AVAX, LINK, ADA, XRP). Varje namns crowding mäts utifrån kvoten TAKER long/short VOLUME per namn i Binance Vision `metrics`-spegeln (aggressiv köpvolym / aggressiv säljvolym, 5-min, flerårig) som en z-score av dess 7-dagars medelvärde mot dess eget 90-dagars medelvärde och sd; de 3 LEAST mest crowded-long-namnen hålls likaviktade med 30% av eget kapital vardera. En systemisk eufori-kontantgrind byggd på PRIMARYs (BTC) globala long/short-ACCOUNT-kvot roterar hela portföljen till kontanter när den kvoten befinner sig i topp 15% av sin egen 90-dagars fördelning, och återinvesterar vid den 65:e percentilen (hysteres). Ombalanseringar är förankrade till kalendertid (days_since_epoch % 7), inte till en bar-räknare. Long-only, hävstång 1.0, inget short-ben.

Verifieringsresultat

Verifiering misslyckades (Lager 4 — QA-granskning) [klass=hypothesis_mismatch]: - [edge_concern] Sandlådan är en sammanhängande long-only-korg av storbolag (majors) som körs och handlar (337 affärer, avg_trade_return_pct 0.69% klarar avgiftsgolvet), men total_return -20.85%, information_ratio -0.901 jämfört med det liktviktade korg-benchmarket, och max_drawdown 71% (CI till 96%) antyder att den utbytta taker-flow-rankningsnyckeln tillför negativt riskjusterat värde jämfört med ett naivt liktviktat innehav. Detta……Visa merVisa mindre

Verifiering misslyckades (Lager 4 — QA-granskning) [klass=hypothesis_mismatch]: - [edge_concern] Sandlådan är en sammanhängande long-only-korg av storbolag (majors) som körs och handlar (337 affärer, avg_trade_return_pct 0.69% klarar avgiftsgolvet), men total_return -20.85%, information_ratio -0.901 jämfört med det liktviktade korg-benchmarket, och max_drawdown 71% (CI till 96%) antyder att den utbytta taker-flow-rankningsnyckeln tillför negativt riskjusterat värde jämfört med ett naivt liktviktat innehav. Detta är endast rådgivande; det ligger i förlängningen av felmatchningen i rankningsnyckeln och bör omprövas av analytikern på en korrigerad implementation, inte blockeras här. - [kritiskt] Hypotesens enda avgörande egenskap -- upprepad genomgående i titeln/beskrivningen ('by GLOBAL Long/Short Account-Ratio', 'count_long_short_ratio', 'a Pure Under-Ownership FACTOR, Not Momentum') -- är att CROSS-SECTIONAL RANKING KEY är förhållandet mellan long/short per namn globalt ACCOUNT, en retail-positionerings-/ägandeproxy som avsiktligt är ortogonal mot momentum och funding. Koden NOT rankar inte på detta. _crowd_z() / _rebalance() rankar de 8 storbolagen efter `taker_long_short_vol_ratio` (aggressiv BUY-volym / aggressiv SELL-volym) inläst från `taker_flow_by_instrument`. Taker long/short-volymförhållande är ett FLOW/AGGRESSOR-mått, inte ett positionerings-/ägandemått -- det skiljer sig väsentligt från account-ratiot och ligger snarare nära det kortsiktiga flödes-/momentum som hypotesen uttryckligen påstår sig vara ortogonal mot. Det namngivna account-ratiot används endast för den sekundära BTC-eufori-kontantgrinden (_parse_global / calculate_signal), aldrig för det primära urvalet. Enligt QA-checklistan, när hypotesens specifikt namngivna kärnfördel saknas i koden, är det kritiskt: den påstådda under-ägande-faktorn är inte den faktor som faktiskt handlas. (rad 259) — åtgärd: Antingen (a) koppla in det globala per-instrument-account-ratiot i pipelinen som `global_ratio_by_instrument` (på samma sätt som funding_rates_by_instrument / open_interest_by_instrument / taker_flow_by_instrument i subprocess_entry.py) och ranka på det -- detta är den trogna implementationen som hypotesen namnger; eller (b) om denna per-ben-serie verkligen inte kan tillhandahållas, är körningen ett DATA-täckningsblock (not_measurable) snarare än en strategi att lansera på en utbytt nyckel -- rapportera det som sådant så att hypotesen parkeras tills serien kopplas in, istället för att tyst handla på en annan (flödes-)faktor. Gör - [varning] Konsekvenskontrollen flaggar hypotesen 'WEEKLY' mot config bar_type 1-DAY. Detta är NOT en genuin felmatchning: 'weekly' i hypotesen syftar på REBALANCE/HOLD-kadensen, vilken korrekt implementeras som dagliga staplar (bars) styrda av en kalenderförankrad 7-dagars ombalansering (day % rebalance_days == 0). Att använda bokstavliga veckostaplar skulle göra eufori-percentilen och kadensen grövre; konstruktionen med dagliga staplar + 7-dagars-ombalansering är det korrekta sättet att uttrycka en veckovis rotation. Noterat för transparens; påverkar inte utfallet. (rad 380) — åtgärd: Formulera eventuellt om hypotestexten till 'weekly rebalance on daily bars' för att tysta Lager-1.5-konsekvensvarningen.

Iterationshistorik

Verifiering misslyckades (Layer 2 — syntetiska scenarier): Använda parametrar: ['top_k', 'exit_level', 'min_notional', 'per_name_frac', 'euphoria_level', 'rebalance_days', 'euphoria_window'] Kontrollera att __init__ sätter alla attribut från self.parameters.get(). - steady_uptrend: TypeError: RetailCrowdingContrarianRotationLong._asof() takes 3 positional arguments but 4 were given (bar timestamp: 1735691940000) - steady_downtrend: TypeError: RetailCrowdingContrarianRotationLong._asof() takes 3 positional……Visa merVisa mindre

Verifiering misslyckades (Layer 2 — syntetiska scenarier): Använda parametrar: ['top_k', 'exit_level', 'min_notional', 'per_name_frac', 'euphoria_level', 'rebalance_days', 'euphoria_window'] Kontrollera att __init__ sätter alla attribut från self.parameters.get(). - steady_uptrend: TypeError: RetailCrowdingContrarianRotationLong._asof() takes 3 positional arguments but 4 were given (bar timestamp: 1735691940000) - steady_downtrend: TypeError: RetailCrowdingContrarianRotationLong._asof() takes 3 positional arguments but 4 were given (bar timestamp: 1735691940000) - flat_ranging: TypeError: RetailCrowdingContrarianRotationLong._asof() takes 3 positional arguments but 4 were given (bar timestamp: 1735691940000) - volatility_spike: TypeError: RetailCrowdingContrarianRotationLong._asof() takes 3 positional arguments but 4 were given (bar timestamp: 1735691940000) - zero_volume: TypeError: RetailCrowdingContrarianRotationLong._asof() takes 3 positional arguments but 4 were given (bar timestamp: 1735691940000) - price_gap: TypeError: RetailCrowdingContrarianRotationLong._asof() takes 3 positional arguments but 4 were given (bar timestamp: 1735691940000)

Verifiering misslyckades (Layer 3 — sandbox-backtest): röktestet överskred gränsen på 300s väggklocktid. Detta betyder nästan alltid arbete per bar som skalar med historiken — t.ex. omscanning av hela funding-/kompletteringsserien, eller att bygga om en lista och anropa min()/sorted() inuti calculate_signal()/on_bar() för varje bar. Förberäkna sorterade tidsstämpelarrayer ONCE i __init__ och använd bisect, eller cacha uppslag nyckelade på tidsstämpel, så att kostnaden per bar blir O(log n) och inte O(n).

Verifiering misslyckades (Lager 4 — QA-granskning) [klass=hypothesis_mismatch]: - [edge_concern] Sandlådan är ett rökprov (smoke test) och inte en anledning till underkännande, men observera: metrics_reliable=false, Sharpe (0.10) är tecken-inkoherent med total_return (-34.3%), MDD 70%, och OI-crowding-portföljen förlorar mest i den stressade volatilitetstercilen (-37.8%). Om mekanismen når fram till backtest-granskningen, kontrollera först om OI z-rankningen har någon riktningsmässig fördel överhuvudtaget, givet……Visa merVisa mindre

Verifiering misslyckades (Lager 4 — QA-granskning) [klass=hypothesis_mismatch]: - [edge_concern] Sandlådan är ett rökprov (smoke test) och inte en anledning till underkännande, men observera: metrics_reliable=false, Sharpe (0.10) är tecken-inkoherent med total_return (-34.3%), MDD 70%, och OI-crowding-portföljen förlorar mest i den stressade volatilitetstercilen (-37.8%). Om mekanismen når fram till backtest-granskningen, kontrollera först om OI z-rankningen har någon riktningsmässig fördel överhuvudtaget, givet att OI är riktningsblind. - Hypotesens kärnfördel är en tvärsnittsrankning på GLOBAL LONG/SHORT ACCOUNT RATIO per namn — en riktad retail-underägande-faktor ('håll de namn som retail är LEAST crowded-LONG i'). Koden rankar istället på per-namn PERP OPEN INTEREST z-score och håller de 3 lägsta. Detta är en utbytt mekanism som inte bevarar ekonomin: OI är inte en retail-proxy (det är totalt öppet nominellt belopp över alla deltagare), och OI är DIRECTION-BLIND (aggregerade longs == shorts i perps), så det kan inte uttrycka 'minst crowded-long.' Hypotesens specifikt namngivna fördel saknas i koden → kritiskt.

Verifiering misslyckades (Layer 4 — QA-granskning) [class=hypothesis_mismatch]: - [edge_concern] Sandboxen ser sund ut (+93%, Sharpe 0.77, PF 1.55, avg_trade_return_pct 6.63%) just för att koden är en funding-carry-rotation som utvecklaren bekräftar överlappar den redan driftsatta negativ-funding-carry-korgen — så de goda siffrorna talar emot att befordra en nära-dubblett av en live-strategi, inte den ortogonala crowding-faktor som hypotesen var tänkt att tillföra. Rådgivande; blockeringen gäller fidelity. -……Visa merVisa mindre

Verifiering misslyckades (Layer 4 — QA-granskning) [class=hypothesis_mismatch]: - [edge_concern] Sandboxen ser sund ut (+93%, Sharpe 0.77, PF 1.55, avg_trade_return_pct 6.63%) just för att koden är en funding-carry-rotation som utvecklaren bekräftar överlappar den redan driftsatta negativ-funding-carry-korgen — så de goda siffrorna talar emot att befordra en nära-dubblett av en live-strategi, inte den ortogonala crowding-faktor som hypotesen var tänkt att tillföra. Rådgivande; blockeringen gäller fidelity. - Kärnedge inte implementerad och ersättningen är exakt den mekanism som hypotesen EXCLUDES. Hypotesen rankar efter kvoten GLOBAL long/short ACCOUNT per namn (retail crowding), uttryckligen 'inte funding (carry)... ortogonal mot momentum och funding'. Koden rankar tvärsnittet efter FUNDING per namn (lägst = hålls) — en funding-carry-rankning som utvecklaren medger överlappar den driftsatta carry-korgen. Kontokvot-crowding-nyckeln saknas och är ogenomförbar (metrics kopplade endast för primärsymbolen; ingen metrics_by_instrument). - Ombalanseringskadensen är förankrad till en processrelativ bar-räknare (self._bar_i % rebalance_days), inte barens tidsstämpel. Omstarter återställer _bar_i och driver den veckovisa rotationsrutan bort från varje fast kalenderdag; paritetsreprise kan inte reproducera rotationsdatum. Mildare punkt-20-form (ingen sentinel-/första-bar-utlösning). Härled från dagar-sedan-epoch eller en fast veckodag.

Skäl för avbrytande

verification_loop: Verifiering misslyckades (Layer 4 — QA-granskning) [class=hypothesis_mismatch]: - [edge_concern] Sandboxen är en sammanhängande long-only majors-korg som körs och handlar (337 affärer, avg_trade_return_pct 0.69% klarar avgiftsgolvet), men total_return -20.85%, information_ratio -0.901 jämfört med benchmarken för den likaviktade korgen, och max_drawdown 71% (CI till 96%) tyder på att den ersatta taker-flow-rankningsnyckeln ger negativt riskjusterat värde jämfört med ett naivt likaviktat innehav.……Visa merVisa mindre

verification_loop: Verifiering misslyckades (Layer 4 — QA-granskning) [class=hypothesis_mismatch]: - [edge_concern] Sandboxen är en sammanhängande long-only majors-korg som körs och handlar (337 affärer, avg_trade_return_pct 0.69% klarar avgiftsgolvet), men total_return -20.85%, information_ratio -0.901 jämfört med benchmarken för den likaviktade korgen, och max_drawdown 71% (CI till 96%) tyder på att den ersatta taker-flow-rankningsnyckeln ger negativt riskjusterat värde jämfört med ett naivt likaviktat innehav. Detta är endast rådgivande; det ligger nedströms om rankningsnyckel-avvikelsen och bör omprövas av analytikern på en korrigerad implementation, inte blockeras här. - [critical] Hypotesens enda definierande egenskap -- upprepad genom hela titeln/beskrivningen ('by GLOBAL Long/Short Account-Ratio', 'count_long_short_ratio', 'a Pure Under-Ownership FACTOR, Not Momentum') -- är att CROSS-SECTIONAL RANKING KEY är den globala long/short-ACCOUNT-kvoten per namn, en proxy för retail-positionering/ägande som medvetet är ortogonal mot momentum och funding. Koden NOT rankar på det. _crowd_z() / _rebalance() rankar 8 majors efter `taker_long_short_vol_ratio` (aggressiv BUY-volym / aggressiv SELL-volym) läst från `taker_flow_by_instrument`. Taker long/short-volymkvot är ett FLOW/AGGRESSOR-mått, inte ett ägande-/positioneringsmått -- det skiljer sig väsentligt från kontokvoten och ligger onekligen närmare det korthorisonts-flöde/momentum som hypotesen uttryckligen påstår sig vara ortogonal mot. Den namngivna kontokvoten används endast för den sekundära BTC euforigrinden för kontanter (_parse_global / calculate_signal), aldrig för det primära urvalet. Enligt QA-checklistan är det kritiskt när hypotesens specifikt namngivna kärnedge saknas i koden: den påstådda under-ownership-faktorn är inte den faktor som faktiskt handlas. (rad 259) — åtgärd: Antingen (a) koppla in den globala kontokvoten per instrument i pipelinen som `global_ratio_by_instrument` (som speglar funding_rates_by_instrument / open_interest_by_instrument / taker_flow_by_instrument i subprocess_entry.py) och ranka på den -- detta är den trogna implementation som hypotesen anger; eller (b) om den serien per ben genuint inte kan tillhandahållas är körningen en DATA-täckningsblockering (not_measurable) snarare än en strategi att leverera på en ersatt nyckel -- rapportera det som sådant så att hypotesen parkeras tills serien kopplas in, istället för att i tysthet handla en annan (flödes-)faktor. Do - [warning] Konsistenskontrollen flaggar hypotesen 'WEEKLY' mot config bar_type 1-DAY. Detta är NOT en genuin avvikelse: 'veckovis' i hypotesen syftar på REBALANCE/HOLD-kadensen, som korrekt implementeras som dagliga barer grindade av en kalenderförankrad 7-dagars ombalansering (day % rebalance_days == 0). Att använda bokstavliga veckovisa barer skulle göra euforipercentilen och kadensen grövre; konstruktionen med dagliga barer + 7-dagars-ombalansering är rätt sätt att uttrycka en veckovis rotation. Noterat för transparens; påverkar inte utslaget. (rad 380) — åtgärd: Formulera eventuellt om hypotestexten till 'veckovis ombalansering på dagliga barer' för att tysta konsistensvarningen i Layer-1.5.

Stratmill är ett research- och pappershandelsverktyg, inte finansiell rådgivning eller en mäklare. Backtest- och pappershandelsresultat är hypotetiska. Handel innebär risk för förlust.