O fechamento oficial em um arquivo de ações parece qualquer outro preço. Timestamp 16:00:00 Eastern, um número, pronto para executar. Sinais diários marcam esse preço. Rebalanceamentos batem nele. Um agente de pesquisa vai tratar isso como uma cotação que estava parada no book, esperando por você.
O fechamento é um leilão, não uma cotação. É o preço de descruzamento das ordens on-close que precisavam ser aceitas antes de um horário de corte. Se o backtest executou ali sem entrar nesse lote, ele tomou um print do qual você não teria feito parte.
Executar as 16:00 como se o descruzamento fosse uma ordem a mercado
O atalho usual é: calcular o sinal no fechamento ou logo antes, executar no fechamento oficial, carimbar 16:00. Numa terça-feira calma em AAPL, a mentira são alguns cents. Nos dias que dominam um book de rebalanceamento diário, é a operação inteira.
Às 16:00:00.000 o closing cross está rodando, ou acabou de rodar. Uma ordem agressiva que você envia nesse instante não entra nesse cruzamento. Ela cai no que sobrou: tamanho residual em display, um odd lot, after-hours na ARCA ou na Nasdaq. Esse print pode estar a dois cents do fechamento oficial, ou a quarenta pontos-base, e é um pool de liquidez diferente. Numa reconstituição do Russell, num fim de mês ou numa sexta de triple witching, o fechamento costuma ser uma fatia de dois dígitos do volume do dia. Aquela era a liquidez. Você não estava nela.
Fizemos paper trade disso por acidente. Um ajuste de parâmetro caiu às 15:48. O backtest ainda executou todos os papéis no fechamento oficial. O OMS enviou ordens a mercado comuns às 16:00:03 porque ninguém tinha habilitado o MOC. Prints after-hours, um punhado de rejeições e um shortfall de 19 pontos-base contra o arquivo num dia em que o arquivo dizia que estávamos flat até o fechamento. A estratégia não tinha quebrado. A regra de fill tinha.
Eu ainda penso em 15:49 como um lugar físico. Alguém está mudando um peso. Outra pessoa está olhando o relógio. O horário de corte não se importa com quem de vocês está certo.
MOC é a ordem que de fato pede esse descruzamento, e mesmo o MOC não é uma promessa. Um halt, uma pausa LULD, um leilão cancelado, um papel que nunca abriu: você pode estar flat às 16:00 com uma on-close ainda ativa que morre. O LOC pode perder a execução por completo. Se o descruzamento é $40.12 e o seu limite é $40.00, você não fica com nada. Muitos backtests ainda lançam o fechamento.
Pior: alguns arquivos de vendor guardam um fechamento composto que nunca printou em nenhuma praça. Você não entra num composto. Se a estratégia teria enviado MOC na NYSE, o fill que importa é o descruzamento da NYSE, no tamanho que o leilão teria absorvido.
Chamar o último print do horário regular de fechamento
Alguns pipelines recusam o fechamento oficial por princípio e pegam o último print SIP antes das 16:00, porque aquele print pelo menos "aconteceu." Numa mega cap, o último e o oficial muitas vezes ficam a um ou dois cents de distância e você não percebe. Numa mid cap o último print pode ser 200 ações às 15:59:51, assinado por quem tomou um display residual. O fechamento oficial dois segundos depois é um descruzamento de um milhão de ações a um preço diferente.
O índice, a cesta de criação do ETF e todo rebalanceamento MOC operaram o descruzamento. O seu backtest operou o residual. E um último print não vem com o seu tamanho colado. Se esse print é de 400 ações e o seu clip é 5,000, você não levou esse preço. Você levou um timestamp que por acaso foi o último.
Eu já vi um arquivo de mid cap em que last-print versus fechamento oficial andou 28 cents numa quinta de rebalanceamento. O backtest que usou o last parecia mais "consciente da microestrutura." Era só um mercado diferente, mais fino, e ainda assumia que poderíamos ter sido aquelas 200 ações.
Deslocar o fill para a abertura de amanhã para ser conservador
O terceiro desvio aparece no code review como um comentário: não assuma que conseguimos operar o fechamento, então execute na próxima abertura. Soa adulto. Constrói outra estratégia.
Um sinal close-to-close executado na próxima abertura já comeu o gap overnight. Para muitos fatores de ações, esse gap é um pedaço grande do movimento que você achava que era seu. Executar na abertura não deixa o backtest cuidadoso. Ele realoca o P&L para uma sessão que você não se propôs a operar, e te joga num leilão de abertura que você também não modelou.
No papel, o estrago é fácil de ler errado. O P&L diário do backtest ainda se alinha com o sinal. O book de paper carrega uma noite de gap de índice e uma manhã de slippage do opening cross. Aí as pessoas discutem implementation shortfall quando a descrição honesta é que os dois sistemas não estão fazendo a mesma operação.
Mas a abertura também é um leilão. Se você perdeu o horário de corte de ontem, você não ganha automaticamente um last limpo das 9:30. Você leva a mecânica de MOO/LOO, um imbalance e um gap. Chamar isso de um fill conservador de fechamento só esconde um segundo cruzamento não modelado debaixo de um comentário virtuoso.
| Fill que você lançou | O que a praça realmente precisava | Como o estrago aparece |
|---|---|---|
| Fechamento oficial, sem tipo de ordem | MOC ou LOC aceitos antes do horário de corte daquela praça | Print after-hours, uma rejeição, ou um preço composto que ninguém hospedou |
| Último print SIP antes das 16:00 | Uma operação da qual você poderia ter participado, no seu tamanho | Um residual de 200 ações tratado como fill de clip |
| Próxima abertura como um fechamento "mais seguro" | Um modelo de opening cross, mais o gap overnight | Outra estratégia, ainda um leilão, ainda perdido |
A divisão honesta é pequena. Ou o contrato de pesquisa diz que estamos no fechamento, e nesse caso a ordem é on-close, com timestamp antes das 15:50 na NYSE ou das 15:55 na Nasdaq, dimensionada contra o volume esperado do fechamento, e autorizada a expirar sem fill se for um LOC. Ou não estamos no fechamento, e nesse caso after-hours ou a próxima abertura é uma política explícita com o seu próprio leilão, e a curva de equity para de vestir um rótulo de 16:00.
Agora reprovamos um backtest que lança o fechamento oficial sem uma ordem on-close sentada dentro do horário de corte daquela praça. Isso já matou umas curvas bonitas de sinal diário. Essas curvas nunca foram executáveis no preço que alegavam.
← Todos os artigos


