Pular para o conteúdo
Todas as estratégias

Estratégias

Rotação Contrária Transversal RETAIL-CROWDING, Apenas Comprada (BINANCE USD-M, Principais 8, WEEKLY Manter os 3 Ativos Mais Congestionados no Varejo LEAST pela Razão de Contas Compradas/Vendidas GLOBAL — um FACTOR puro de subposicionamento, não momentum; filtro de caixa por euforia sistêmica, 2 parâmetros

Resultado: Abandonada

RetailCrowdingContrarianRotationLong

Rotação Contrária Transversal RETAIL-CROWDING, Apenas Comprada (BINANCE USD-M, Principais 8, WEEKLY Manter os 3 Ativos Mais Congestionados no Varejo LEAST pela Razão de Contas Compradas/Vendidas GLOBAL — um FACTOR puro…

Hipótese

Um LONG-ONLY, ROTATION transversal com rebalanceamento semanal sobre o universo USD-M de 8 principais (BTC, ETH, SOL, BNB, AVAX, LINK, ADA, XRP), selecionando ativos por um sinal genuíno de CROWDING NON-PRICE: a razão ACCOUNT long/short de GLOBAL (count_long_short_ratio, um indicador indireto do posicionamento de investidores de varejo), extraída dos arquivos 'metrics' da Binance VISION (MULTI-YEAR até ~2020, NOT o API de 30 dias). O mecanismo é um fator puramente UNDER-OWNERSHIP — manter as principais moedas em……Mostrar maisMostrar menos

Um LONG-ONLY, ROTATION transversal com rebalanceamento semanal sobre o universo USD-M de 8 principais (BTC, ETH, SOL, BNB, AVAX, LINK, ADA, XRP), selecionando ativos por um sinal genuíno de CROWDING NON-PRICE: a razão ACCOUNT long/short de GLOBAL (count_long_short_ratio, um indicador indireto do posicionamento de investidores de varejo), extraída dos arquivos 'metrics' da Binance VISION (MULTI-YEAR até ~2020, NOT o API de 30 dias). O mecanismo é um fator puramente UNDER-OWNERSHIP — manter as principais moedas em que os investidores de varejo estão excessivamente posicionados em posições compradas LEAST, porque ativos com excesso de posições compradas carregam risco latente de liquidações de posições compradas/queda por compressão, enquanto ativos com baixa alocação ainda têm espaço para subir com novas compras. Isso pertence deliberadamente à família estrutural ONLY que sobrevive de forma reproduzível aqui — somente posições compradas, principais moedas, manutenção semanal das K maiores, poucos parâmetros (o Sharpe 2.6 da rotação de momentum implantada e o Sharpe 1.97 da cesta de carry com funding negativo) — e acrescenta uma chave de seleção ORTHOGONAL a ambas: não força relativa de preços (momentum) nem funding (carry), mas posicionamento de multidão. Segundo as evidências da sessão, evita todos os modos de fracasso: não é NOT um temporizador direcional de ativo único (esses fracassaram -100% / -43% / rejeição por risco), nem NOT um spread neutro em dólar (sem perna vendida → sem explosão de 90% DD), nem NOT funding/opções/liquidações/puro-OHLCV. É distinta da SmartMoneyGatedMomentumRotation pendente (que usa a coorte TOP-TRADER para GATE uma carteira de momentum) e da EthRetail (estratégia de reversão long-short de ativo único): esta usa a coorte RETAIL/global como chave de classificação transversal PRIMARY em uma cesta LONG-ONLY contrária, sem qualquer componente de momentum. Parâmetros 2, K e frequência fixados conforme o modelo comprovado.

Corrige o defeito exato levantado por QA. QA rejeitou a chave de classificação porque o open interest (a) não é um proxy de varejo — é o notional aberto total entre todos os participantes — e (b) é agnóstico em relação à direção, já que os longs agregados de perp igualam os shorts, portanto não consegue expressar 'menos lotado-LONG'. A nova chave de classificação é `taker_long_short_vol_ratio` lida por perna a partir de `taker_flow_by_instrument`: é o volume agressivo de BUY dividido pelo volume agressivo de……Mostrar maisMostrar menos

Corrige o defeito exato levantado por QA. QA rejeitou a chave de classificação porque o open interest (a) não é um proxy de varejo — é o notional aberto total entre todos os participantes — e (b) é agnóstico em relação à direção, já que os longs agregados de perp igualam os shorts, portanto não consegue expressar 'menos lotado-LONG'. A nova chave de classificação é `taker_long_short_vol_ratio` lida por perna a partir de `taker_flow_by_instrument`: é o volume agressivo de BUY dividido pelo volume agressivo de SELL, de modo que é DIRECTIONAL por construção (um valor alto significa literalmente que a multidão está inclinada para long naquele nome) e é uma medida do lado agressor/taker (voltada ao varejo) em vez do notional aberto total. Também vem dos mesmos arquivos VISION `metrics` da Binance que a hipótese nomeia como sua fonte de dados, com o mesmo histórico de múltiplos anos até -2020 — apenas a coluna difere. A classificação usa o próprio z-score de cada nome (média de 7d vs média/sd de 90d), para que níveis de taker estruturalmente diferentes se comparem entre BTC e ADA, conforme a lição de que limiares absolutos fixos em dados suplementares não são invariantes à escala. DISCLOSED, NOT HIDDEN: a chave literal da hipótese é a razão long/short ACCOUNT por nome de GLOBAL (`long_short_ratio`, no mesmo parquet), mas o pipeline carrega `metrics` apenas para o símbolo PRIMARY, e as únicas fiações por perna cross-section que existem são `funding_rates_by_instrument`, `open_interest_by_instrument` e `taker_flow_by_instrument` (subprocess_entry.py) — portanto, um ranking 8-name sobre a razão de contas não é expressável no código da estratégia hoje; ele precisa de uma fiação `global_ratio_by_instrument` espelhando essas três, o que constitui uma mudança de pipeline. Das três que existem, o taker flow é a única que é tanto direcional quanto do lado do varejo, logo é o substituto fiel, e a razão de contas ainda é usada onde IS disponível (o gate de caixa de euforia BTC). Verificado contra os dados reais antes da submissão: todas as pernas 8 carregam séries strided de 8k pontos abrangendo 1737-2193 dias, 208/208 rebalanceamentos semanais simulados nos últimos 4 anos produzem uma cross-section classificada, e as posições rotacionam entre todos os nomes (67-86 escolhas cada) em vez de ficarem presas em um — portanto isto opera e não é um ranking degenerado. Mais duas pequenas correções transmitidas: a cadência semanal agora é ancorada no calendário pelo timestamp da barra em vez do contador `_bar_i` relativo ao processo (seguro em reinício, idêntico em replay), e `exit_level` é forçado estritamente abaixo de `euphoria_level` para que o otimizador não possa inverter a histerese em uma oscilação por barra. A segurança de timeout da Camada -3 permanece inalterada e preservada: prefix sums + searchsorted mantêm cada lookup por barra em O(log n), e o striding em tempo de parse limita o __init__ em ~10s medido para todas as pernas 8.

verification_loop: Verificação falhou (Camada 4 — revisão QA) [classe=hypothesis_mismatch]: - [edge_concern] Sandbox é uma cesta de majors coerente, somente comprada, que executa e negocia (337 negociações, avg_trade_return_pct 0.69% ultrapassa o piso de taxas), mas total_return -20.85%, information_ratio -0.901 em relação ao benchmark de cesta com peso igual, e max_drawdown 71% (CI a 96%) sugerem que a chave de classificação de fluxo tomador substituída adiciona valor negativo ajustado ao risco sobre uma……Mostrar maisMostrar menos

verification_loop: Verificação falhou (Camada 4 — revisão QA) [classe=hypothesis_mismatch]: - [edge_concern] Sandbox é uma cesta de majors coerente, somente comprada, que executa e negocia (337 negociações, avg_trade_return_pct 0.69% ultrapassa o piso de taxas), mas total_return -20.85%, information_ratio -0.901 em relação ao benchmark de cesta com peso igual, e max_drawdown 71% (CI a 96%) sugerem que a chave de classificação de fluxo tomador substituída adiciona valor negativo ajustado ao risco sobre uma detenção ingênua com peso igual. Isso é apenas consultivo; é consequência do descasamento da chave de classificação e deve ser reavaliado pelo analista em uma implementação corrigida, não bloqueado aqui. - [crítico] O único recurso definidor da hipótese -- reafirmado em todo o título/descrição ('por GLOBAL Razão Long/Short de Contas', 'count_long_short_ratio', 'uma FACTOR Pura de Subpropriedade, Não Momentum') -- é que o CROSS-SECTIONAL RANKING KEY é a razão long/short ACCOUNT global por nome, um proxy de posicionamento/propriedade de varejo que é deliberadamente ortogonal a momentum e funding. O código NOT classifica com base nisso. _crowd_z() / _rebalance() classificam os 8 majors por `taker_long_short_vol_ratio` (volume BUY agressivo / volume SELL agressivo) lido de `taker_flow_by_instrument`. A razão de volume long/short do tomador é uma medida FLOW/AGGRESSOR, não uma medida de propriedade/posicionamento -- é materialmente diferente da razão de contas e é argumentavelmente mais próxima do fluxo/momentum de horizonte curto que a hipótese explicitamente afirma ser ortogonal. A razão de contas nomeada é usada apenas para o portão de caixa de euforia BTC secundário (_parse_global / calculate_signal), nunca para a seleção primária. De acordo com a lista de verificação QA, quando a vantagem central nomeada específica da hipótese está ausente do código, isso é crítico: o fator de subpropriedade declarado não é o fator que está sendo negociado. (linha 259) — correção: Ou (a) conecte a razão de contas global por instrumento ao pipeline como `global_ratio_by_instrument` (espelhando funding_rates_by_instrument / open_interest_by_instrument / taker_flow_by_instrument em subprocess_entry.py) e classifique com base nisso -- esta é a implementação fiel que a hipótese nomeia; ou (b) se essa série per-leg genuinamente não puder ser fornecida, a execução é um bloco de cobertura DATA (not_measurable) em vez de uma estratégia para enviar em uma chave substituída -- reporte como tal para que a hipótese seja pausada até que a série seja conectada, em vez de negociar silenciosamente um fator (de fluxo) diferente. Fazer - [aviso] A verificação de consistência sinaliza a hipótese 'WEEKLY' vs config bar_type 1-DAY. Isso NOT uma incompatibilidade genuína: 'semanal' na hipótese refere-se à cadência REBALANCE/HOLD, que é corretamente implementada como barras diárias controladas por um rebalanceamento de 7 dias ancorado ao calendário (dia % rebalance_days == 0). Usar barras semanais literais tornaria o percentil e a cadência de euforia mais grosseiros; a construção de barra diária + rebalanceamento de 7 dias é a maneira correta de expressar uma rotação semanal. Anotado para transparência; não conduz o veredicto. (linha 380) — correção: Opcionalmente, reformule o texto da hipótese para dizer 'rebalanceamento semanal em barras diárias' para silenciar o aviso de consistência da Camada-1.5.

Implementação

Rotação transversal apenas comprada, rebalanceada semanalmente, sobre os 8 principais ativos USD-M (BTC, ETH, SOL, BNB, AVAX, LINK, ADA, XRP). O congestionamento de cada ativo é medido pela razão por ativo entre posições compradas/vendidas TAKER VOLUME no espelho Binance Vision `metrics` (volume agressivo de compra / volume agressivo de venda, intervalo de 5 min, vários anos), como z-score da média de 7 dias em relação à média e ao desvio padrão dos próprios 90 dias; os 3 LEAST ativos mais congestionados em posições compradas são mantidos com pesos iguais, a 30% do patrimônio cada. Um filtro de caixa por euforia sistêmica, baseado na razão global entre posições compradas/vendidas PRIMARY (BTC) ACCOUNT, leva a carteira inteira para caixa quando essa razão fica no percentil superior 15% de sua própria distribuição de 90 dias, reinvestindo no percentil 65 (histerese). Os rebalanceamentos são ancorados ao calendário (days_since_epoch % 7), não a um contador de barras. Apenas posições compradas, alavancagem 1.0, sem perna vendida.

Resultados da verificação

Verificação falhou (Camada 4 — revisão QA) [classe=hypothesis_mismatch]: - [edge_concern] Sandbox é uma cesta de majors coerente, somente comprada, que executa e negocia (337 negociações, avg_trade_return_pct 0.69% ultrapassa o piso de taxas), mas total_return -20.85%, information_ratio -0.901 em relação ao benchmark de cesta com peso igual, e max_drawdown 71% (CI a 96%) sugerem que a chave de classificação de fluxo tomador substituída adiciona valor negativo ajustado ao risco sobre uma detenção ingênua com peso……Mostrar maisMostrar menos

Verificação falhou (Camada 4 — revisão QA) [classe=hypothesis_mismatch]: - [edge_concern] Sandbox é uma cesta de majors coerente, somente comprada, que executa e negocia (337 negociações, avg_trade_return_pct 0.69% ultrapassa o piso de taxas), mas total_return -20.85%, information_ratio -0.901 em relação ao benchmark de cesta com peso igual, e max_drawdown 71% (CI a 96%) sugerem que a chave de classificação de fluxo tomador substituída adiciona valor negativo ajustado ao risco sobre uma detenção ingênua com peso igual. Isso é apenas consultivo; é consequência do descasamento da chave de classificação e deve ser reavaliado pelo analista em uma implementação corrigida, não bloqueado aqui. - [crítico] O único recurso definidor da hipótese -- reafirmado em todo o título/descrição ('por GLOBAL Razão Long/Short de Contas', 'count_long_short_ratio', 'uma FACTOR Pura de Subpropriedade, Não Momentum') -- é que o CROSS-SECTIONAL RANKING KEY é a razão long/short ACCOUNT global por nome, um proxy de posicionamento/propriedade de varejo que é deliberadamente ortogonal a momentum e funding. O código NOT classifica com base nisso. _crowd_z() / _rebalance() classificam os 8 majors por `taker_long_short_vol_ratio` (volume BUY agressivo / volume SELL agressivo) lido de `taker_flow_by_instrument`. A razão de volume long/short do tomador é uma medida FLOW/AGGRESSOR, não uma medida de propriedade/posicionamento -- é materialmente diferente da razão de contas e é argumentavelmente mais próxima do fluxo/momentum de horizonte curto que a hipótese explicitamente afirma ser ortogonal. A razão de contas nomeada é usada apenas para o portão de caixa de euforia BTC secundário (_parse_global / calculate_signal), nunca para a seleção primária. De acordo com a lista de verificação QA, quando a vantagem central nomeada específica da hipótese está ausente do código, isso é crítico: o fator de subpropriedade declarado não é o fator que está sendo negociado. (linha 259) — correção: Ou (a) conecte a razão de contas global por instrumento ao pipeline como `global_ratio_by_instrument` (espelhando funding_rates_by_instrument / open_interest_by_instrument / taker_flow_by_instrument em subprocess_entry.py) e classifique com base nisso -- esta é a implementação fiel que a hipótese nomeia; ou (b) se essa série per-leg genuinamente não puder ser fornecida, a execução é um bloco de cobertura DATA (not_measurable) em vez de uma estratégia para enviar em uma chave substituída -- reporte como tal para que a hipótese seja pausada até que a série seja conectada, em vez de negociar silenciosamente um fator (de fluxo) diferente. Fazer - [aviso] A verificação de consistência sinaliza a hipótese 'WEEKLY' vs config bar_type 1-DAY. Isso NOT uma incompatibilidade genuína: 'semanal' na hipótese refere-se à cadência REBALANCE/HOLD, que é corretamente implementada como barras diárias controladas por um rebalanceamento de 7 dias ancorado ao calendário (dia % rebalance_days == 0). Usar barras semanais literais tornaria o percentil e a cadência de euforia mais grosseiros; a construção de barra diária + rebalanceamento de 7 dias é a maneira correta de expressar uma rotação semanal. Anotado para transparência; não conduz o veredicto. (linha 380) — correção: Opcionalmente, reformule o texto da hipótese para dizer 'rebalanceamento semanal em barras diárias' para silenciar o aviso de consistência da Camada-1.5.

Histórico de Iterações

Falha na verificação (Camada 2 — cenários sintéticos): Parâmetros usados: ['top_k', 'exit_level', 'min_notional', 'per_name_frac', 'euphoria_level', 'rebalance_days', 'euphoria_window'] Verifique se __init__ define todos os atributos usando self.parameters.get(). - steady_uptrend: TypeError: RetailCrowdingContrarianRotationLong._asof() recebe 3 argumentos posicionais, mas foram fornecidos 4 (timestamp da barra: 1735691940000) - steady_downtrend: TypeError: RetailCrowdingContrarianRotationLong._asof() recebe 3……Mostrar maisMostrar menos

Falha na verificação (Camada 2 — cenários sintéticos): Parâmetros usados: ['top_k', 'exit_level', 'min_notional', 'per_name_frac', 'euphoria_level', 'rebalance_days', 'euphoria_window'] Verifique se __init__ define todos os atributos usando self.parameters.get(). - steady_uptrend: TypeError: RetailCrowdingContrarianRotationLong._asof() recebe 3 argumentos posicionais, mas foram fornecidos 4 (timestamp da barra: 1735691940000) - steady_downtrend: TypeError: RetailCrowdingContrarianRotationLong._asof() recebe 3 argumentos posicionais, mas foram fornecidos 4 (timestamp da barra: 1735691940000) - flat_ranging: TypeError: RetailCrowdingContrarianRotationLong._asof() recebe 3 argumentos posicionais, mas foram fornecidos 4 (timestamp da barra: 1735691940000) - volatility_spike: TypeError: RetailCrowdingContrarianRotationLong._asof() recebe 3 argumentos posicionais, mas foram fornecidos 4 (timestamp da barra: 1735691940000) - zero_volume: TypeError: RetailCrowdingContrarianRotationLong._asof() recebe 3 argumentos posicionais, mas foram fornecidos 4 (timestamp da barra: 1735691940000) - price_gap: TypeError: RetailCrowdingContrarianRotationLong._asof() recebe 3 argumentos posicionais, mas foram fornecidos 4 (timestamp da barra: 1735691940000)

Verificação falhou (Camada 3 — backtest em sandbox): o smoke test excedeu o limite de wall-clock 300s. Isso quase sempre significa trabalho por barra que escala com o histórico — p.ex. reescanear a série completa de funding/suplementar, ou reconstruir uma lista e chamar min()/sorted() dentro de calculate_signal()/on_bar() em cada barra. Pré-calcule arrays de timestamp ordenados ONCE em __init__ e use bisect, ou faça cache de lookups chaveados por timestamp, para que o custo por barra seja O(log n) e não O(n).

Falha na verificação (Camada 4 — revisão de QA) [classe=hypothesis_mismatch]: - [edge_concern] O Sandbox é um teste de fumaça e não um motivo para reprovação, mas observe: metrics_reliable=false, o sinal do Sharpe (0.10) é incoerente com total_return (-34.3%), MDD 70%, e a carteira com concentração em OI perde mais no tercil de volatilidade sob estresse (-37.8%). Se o mecanismo sobreviver à revisão do backtest, verifique primeiro se o z-rank de OI tem alguma vantagem direcional, dado que OI é cego à direção. - A……Mostrar maisMostrar menos

Falha na verificação (Camada 4 — revisão de QA) [classe=hypothesis_mismatch]: - [edge_concern] O Sandbox é um teste de fumaça e não um motivo para reprovação, mas observe: metrics_reliable=false, o sinal do Sharpe (0.10) é incoerente com total_return (-34.3%), MDD 70%, e a carteira com concentração em OI perde mais no tercil de volatilidade sob estresse (-37.8%). Se o mecanismo sobreviver à revisão do backtest, verifique primeiro se o z-rank de OI tem alguma vantagem direcional, dado que OI é cego à direção. - A vantagem central da hipótese é um rank transversal do GLOBAL LONG/SHORT ACCOUNT RATIO por ativo — um fator direcional de subposicionamento do varejo ('manter os ativos nos quais o varejo está LEAST concentrado em posições compradas-LONG'). Em vez disso, o código classifica por z-score de PERP OPEN INTEREST por ativo e mantém os 3 menores valores. Esse mecanismo substituído não preserva a lógica econômica: OI não é um indicador do varejo (é o nocional total em aberto entre todos os participantes), e OI é DIRECTION-BLIND (no agregado, posições compradas == posições vendidas em perps), portanto não pode expressar 'menos concentrado em posições compradas'. A vantagem específica nomeada na hipótese está ausente do código → crítico.

Falha na verificação (Camada 4 — revisão QA) [classe=hypothesis_mismatch]: - [edge_concern] O sandbox parece saudável (+93%, Sharpe 0.77, PF 1.55, avg_trade_return_pct 6.63%) justamente porque o código é uma rotação de carry de funding que, conforme o desenvolvedor confirma, se sobrepõe à cesta de carry com funding negativo já implantada — portanto, os bons números são um argumento contra promover uma quase duplicata de uma estratégia ativa, e não o fator ortogonal de congestionamento que a hipótese pretendia……Mostrar maisMostrar menos

Falha na verificação (Camada 4 — revisão QA) [classe=hypothesis_mismatch]: - [edge_concern] O sandbox parece saudável (+93%, Sharpe 0.77, PF 1.55, avg_trade_return_pct 6.63%) justamente porque o código é uma rotação de carry de funding que, conforme o desenvolvedor confirma, se sobrepõe à cesta de carry com funding negativo já implantada — portanto, os bons números são um argumento contra promover uma quase duplicata de uma estratégia ativa, e não o fator ortogonal de congestionamento que a hipótese pretendia acrescentar. Consultivo; o bloqueio diz respeito à fidelidade. - Característica central não implementada, e o substituto é o mecanismo exato que a hipótese EXCLUDES. A hipótese classifica pela razão por ativo entre posições compradas/vendidas GLOBAL ACCOUNT (congestionamento do varejo), explicitamente “não funding (carry)... independente de momentum e funding”. O código classifica a seção transversal por ativo por FUNDING (menor = mantido) — uma classificação por carry de funding que, segundo o desenvolvedor, se sobrepõe à cesta de carry implantada. A chave de congestionamento baseada na razão de contas está ausente e não pode ser implementada (os dados metrics estão conectados apenas para o símbolo principal; não há metrics_by_instrument). - Periodicidade de rebalanceamento ancorada a um contador de barras relativo ao processo (self._bar_i % rebalance_days), não ao timestamp da barra. Reinicializações zeram _bar_i e deslocam a grade de rotação semanal em relação a qualquer dia fixo do calendário; o replay de paridade não consegue reproduzir as datas de rotação. Item mais brando -20 (sem disparo sentinela/na primeira barra). Derive a periodicidade dos dias desde a época Unix ou de um dia fixo da semana.

Motivo do Abandono

verification_loop: Falha na verificação (Camada 4 — revisão QA) [classe=hypothesis_mismatch]: - [edge_concern] O sandbox é uma cesta coerente de principais ativos comprados que executa e negocia (337 negociações, avg_trade_return_pct 0.69% acima do custo mínimo), mas total_return -20.85%, information_ratio -0.901 em comparação com o benchmark da cesta com pesos iguais, e max_drawdown 71% (de CI a 96%) sugerem que a chave de classificação substituta baseada no fluxo taker acrescenta valor ajustado ao risco……Mostrar maisMostrar menos

verification_loop: Falha na verificação (Camada 4 — revisão QA) [classe=hypothesis_mismatch]: - [edge_concern] O sandbox é uma cesta coerente de principais ativos comprados que executa e negocia (337 negociações, avg_trade_return_pct 0.69% acima do custo mínimo), mas total_return -20.85%, information_ratio -0.901 em comparação com o benchmark da cesta com pesos iguais, e max_drawdown 71% (de CI a 96%) sugerem que a chave de classificação substituta baseada no fluxo taker acrescenta valor ajustado ao risco negativo em relação a uma manutenção ingênua com pesos iguais. Isso é apenas consultivo; decorre da incompatibilidade da chave de classificação e deve ser reavaliado pelo analista em uma implementação corrigida, não bloqueado aqui. - [crítico] A única característica que define a hipótese — reiterada no título/descrição (“por Razão de Contas Compradas/Vendidas GLOBAL”, “count_long_short_ratio”, “um FACTOR puro de subposicionamento, não momentum”) — é que a CROSS-SECTIONAL RANKING KEY é a razão global por ativo entre posições compradas/vendidas ACCOUNT, um indicador de posicionamento/propriedade do varejo deliberadamente independente de momentum e funding. O código não faz uma classificação NOT com base nisso. _crowd_z() / _rebalance() classificam os 8 principais ativos por `taker_long_short_vol_ratio` (volume agressivo de BUY / volume agressivo de SELL), lido de `taker_flow_by_instrument`. A razão entre volumes comprados/vendidos taker é uma medida de FLOW/AGGRESSOR, não de propriedade/posicionamento — difere materialmente da razão de contas e provavelmente está mais próxima do fluxo/momentum de curto prazo, que a hipótese afirma explicitamente ser independente. A razão de contas citada só é usada para o filtro secundário de caixa por euforia BTC (_parse_global / calculate_signal), nunca para a seleção principal. Conforme a lista de verificação QA, quando a característica central específica nomeada pela hipótese está ausente do código, isso é crítico: o fator de subposicionamento declarado não é o fator negociado. (linha 259) — correção: (a) conecte a razão global de contas por instrumento ao pipeline como `global_ratio_by_instrument` (espelhando funding_rates_by_instrument / open_interest_by_instrument / taker_flow_by_instrument em subprocess_entry.py) e classifique com base nela — esta é a implementação fiel nomeada pela hipótese; ou (b) se essa série por perna realmente não puder ser fornecida, o resultado é um bloqueio por cobertura DATA (not_measurable), não uma estratégia pronta para lançamento com uma chave substituta — informe-o como tal para que a hipótese fique em espera até que a série seja conectada, em vez de negociar silenciosamente um fator diferente (de fluxo). Faça - [aviso] A verificação de consistência sinaliza a hipótese “WEEKLY” em comparação com a configuração bar_type 1-DAY. Isso não é NOT uma incompatibilidade real: “semanal” na hipótese refere-se à periodicidade de REBALANCE/HOLD, implementada corretamente como barras diárias condicionadas a um rebalanceamento de 7 dias ancorado no calendário (dia % rebalance_days == 0). Usar barras literalmente semanais reduziria a granularidade do percentil de euforia e da periodicidade; a construção com barras diárias e rebalanceamento de 7 dias é a forma correta de expressar uma rotação semanal. Registrado para transparência; não determina o veredito. (linha 380) — correção: opcionalmente reformule o texto da hipótese para dizer “rebalanceamento semanal em barras diárias” e eliminar o aviso de consistência da Camada-1.5.

Stratmill é uma ferramenta de pesquisa e paper trading, não uma consultoria financeira ou corretora. Resultados de backtest e paper trading são hipotéticos. Negociar envolve risco de perda.