Alpha Hunt Kit: falsifique ideias de trading antes de otimizá-las
Uma CLI minúscula que recebe um JSON de hipótese e um CSV de preços, roda um backtest de configuração fixa mais um teste de timing embaralhado, e diz ao seu agente se a ideia merece mais teste ou enterro imediato.
Alpha Hunt Kit é um pequeno harness de linha de comando para testar uma ideia de trading sem deixá-la se transformar num backtest bonitinho.
Você passa um JSON de hipótese, um CSV OHLCV e uma premissa de custo. Ele roda um backtest de configuração fixa, compara o resultado contra um null de timing embaralhado, e escreve o veredito no disco: continuar testando, ou enterrar a ideia.
Esse é o produto inteiro. Não é um bot. Não é um conector de corretora. Não é um repositório com a estratégia mágica. É uma máquina pequena para fazer seu agente provar que uma ideia não é lixo óbvio antes de gastar mais uma hora otimizando ela.
Repo: github.com/thiagosucupira/alpha-hunt-kit
Instruções para o agente: docs/agent_prompt.md
A fixture embutida prova só que o encanamento funciona. Edge real ainda exige dado real.
Rode uma vez
git clone https://github.com/thiagosucupira/alpha-hunt-kit.git
cd alpha-hunt-kit
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
alpha-hunt init --demo
alpha-hunt trial experiments/current.json --data fixtures/bars/demo_ohlcv.csv --budget-seconds 30
Essa primeira rodada deve criar:
.alpha-hunt/runs/<run_id>/metrics.json.alpha-hunt/runs/<run_id>/report.md- uma nova linha em
state/experiments.tsv KEEP_CANDIDATEouDISCARD_CANDIDATE
Se a demo roda, o harness funciona. Nada mais. Dado de fixture é teste de fumaça, não evidência de alpha.
Como é uma rodada limpa do agente

O loop de verdade

Um candidato não é “tenta esses parâmetros”. Um candidato é uma afirmação falsificável:
- fonte ou observação,
- hipótese,
- configuração JSON congelada,
- premissa de custo explícita,
- barras locais,
- comparação com null de timing,
- mantém ou enterra.
O null embutido é deliberadamente barato: preserva o inventário de posições do próprio candidato, embaralha-o ao longo dos timestamps, e pergunta se o timing real bate o percentil 95 do embaralhado. Passar nesse portão não significa “opera ela”. Significa “isso deixou de ser lixo óbvio; teste mais a fundo”.
Falhar significa enterrar e seguir.
alpha-hunt bury <run_id> --reason "failed shuffled timing null"
O cemitério não é arrumação. É o ativo composto. O agente de amanhã não pode gastar uma rodada redescobrindo o cadáver de ontem.
Um hunt sério também precisa de artefatos de trade auditáveis. Esse exemplo é de um dos nossos backtests, não da fixture de brinquedo:

De onde as ideias devem vir
Ranqueie fontes pela velocidade com que viram um observável:
- Inversões do cemitério. Se uma ideia falhou por uma razão específica, teste a menor mudança que ataca essa razão.
- Microestrutura de mercado e papers de FX. Bons papers normalmente entregam observáveis, não estratégias. Já basta.
- Suas próprias barras. Quando o encanamento funciona, dado de fixture tem que sumir da cadeia de evidência.
Fonte ruim: um screenshot, um vibe, ou um grid de parâmetros sem tese.
Traga o seu próprio dado
O repo espera CSV OHLCV comum:
timestamp,open,high,low,close,volume
Rode o mesmo candidato contra barras locais reais:
alpha-hunt trial experiments/current.json --data path/to/your_bars.csv --budget-seconds 120
Antes de confiar num resultado, anote timezone, premissa de spread/custo, política de barras faltantes, convenção de símbolo, e exatamente que informação estava disponível quando o sinal disparou.
Por que isso existe
Agentes são ótimos em produzir variações. Pesquisa de trading precisa em geral do oposto: deletar com disciplina.
O Alpha Hunt Kit faz o caminho da deleção sair mais barato que o caminho da otimização. Se a ideia não bate uma configuração congelada e um null barato em dado local, ela não merece um backtest mais longo, um gráfico mais bonito, ou uma história.
Clone, rode um candidato, enterre uma ideia ruim direito. Já é progresso.