O fecho oficial num ficheiro de ações parece qualquer outro preço. Timestamp 16:00:00 Eastern, um número, pronto a executar. Os sinais diários marcam-no. Os rebalanceamentos atingem-no. Um agente de investigação trata-o como uma cotação que estava no livro, à sua espera.
O fecho é um leilão, não uma cotação. É o preço de descruzamento de ordens on-close que tinham de ser aceites antes de uma hora limite. Se o backtest executou aí sem se juntar a esse lote, ficou com um print do qual não faria parte.
Executar às 16:00 como se o descruzamento fosse uma ordem de mercado
O atalho habitual é: calcular o sinal no fecho ou imediatamente antes, executar ao fecho oficial, carimbar 16:00. Numa terça-feira calma em AAPL, a mentira são uns cêntimos. Nos dias que dominam um livro de rebalanceamento diário, é a operação inteira.
Às 16:00:00.000 o cruzamento de fecho está a decorrer, ou acabou de decorrer. Uma ordem marketable enviada nessa altura não entra nesse cruzamento. Cai no que restar: quantidade visível residual, um odd lot, horário alargado na ARCA ou na Nasdaq. Esse print pode estar a dois cêntimos do fecho oficial, ou a quarenta pontos base, e é um pool de liquidez diferente. Numa reconstituição Russell, num final de mês, ou numa sexta-feira de triple-witching, o fecho é muitas vezes uma fatia de dois dígitos do volume do dia. Essa era a liquidez. Não estava nela.
Fizemos paper trading disto por acidente. Um ajuste de parâmetro caiu às 15:48. O backtest mesmo assim executou todos os nomes ao fecho oficial. O OMS enviou ordens de mercado comuns às 16:00:03 porque ninguém tinha ligado o MOC. Prints after-hours, um punhado de rejeições, e um desvio de 19 pontos base face ao ficheiro num dia em que o ficheiro dizia que estávamos flat até ao fecho. A estratégia não tinha falhado. A regra de execução é que tinha.
Ainda penso nas 15:49 como um sítio físico. Alguém está a alterar um peso. Outra pessoa está a olhar para o relógio. A hora limite não se importa qual de vocês tem razão.
O MOC é a ordem que realmente pede esse descruzamento, e nem o MOC é uma promessa. Uma suspensão, uma pausa LULD, um leilão cancelado, um nome que nunca abriu: pode estar flat às 16:00 com um on-close ativo que morre. O LOC pode falhar por completo. Se o descruzamento é $40.12 e o seu limite é $40.00, não fica com nada. Muitos backtests mesmo assim registam o fecho.
Pior: alguns ficheiros de fornecedores guardam um fecho composto que nunca teve print em nenhuma plataforma. Não se pode participar num composto. Se a estratégia tivesse enviado um MOC NYSE, a execução que conta é o descruzamento da NYSE, no tamanho que o leilão teria absorvido.
Chamar ao último print da sessão regular o fecho
Algumas pipelines recusam o fecho oficial por princípio e ficam com o último print SIP antes das 16:00, porque esse print pelo menos "aconteceu." Numa mega-cap, o last e o oficial ficam muitas vezes a um ou dois cêntimos e não se dá por isso. Numa mid-cap o último print pode ser 200 ações às 15:59:51, assinado por quem levantou um residual visível. O fecho oficial dois segundos depois é um descruzamento de um milhão de ações a um preço diferente.
O índice, o cabaz de criação do ETF e todos os rebalanceamentos MOC negociaram o descruzamento. O seu backtest negociou o residual. E um último print não vem com o seu tamanho associado. Se esse print é de 400 ações e o seu clip é de 5,000, não obteve esse preço. Obteve um timestamp que por acaso foi o último.
Já vi um ficheiro de mid-cap em que last-print versus fecho oficial se moveu 28 cêntimos numa quinta-feira de rebalanceamento. O backtest que usou o last parecia mais "consciente da microestrutura." Era apenas um mercado diferente, mais fino, e mesmo assim assumia que poderíamos ter sido aquelas 200 ações.
Deslizar a execução para a abertura de amanhã para ser conservador
O terceiro subterfúgio aparece na revisão de código como um comentário: não assumir que conseguimos negociar o fecho, por isso executar a abertura seguinte. Soa a adulto. Constrói outra estratégia.
Um sinal close-to-close executado na abertura seguinte já comeu o gap overnight. Para muitos fatores de ações, esse gap é uma fatia grande do movimento que pensava possuir. Executar a abertura não torna o backtest cuidadoso. Transfere o P&L para uma sessão que não se propôs negociar, e deixa-o num leilão de abertura que também não modelou.
No papel, o estrago é fácil de interpretar mal. O P&L diário do backtest continua alinhado com o sinal. O livro de paper carrega uma noite de gap de índice e uma manhã de slippage do cruzamento de abertura. Depois discute-se implementation shortfall quando a descrição honesta é que os dois sistemas não estão a fazer a mesma operação.
Mas a abertura também é um leilão. Se perdeu a hora limite de ontem, não recebe automaticamente um last limpo das 9:30. Recebe mecânicas MOO/LOO, um imbalance e um gap. Chamar a isso uma execução conservadora ao fecho só esconde um segundo cruzamento não modelado debaixo de um comentário virtuoso.
| Execução que registou | O que a plataforma realmente exigia | Como se vê o estrago |
|---|---|---|
| Fecho oficial, sem tipo de ordem | MOC ou LOC aceite antes da hora limite dessa plataforma | Print after-hours, uma rejeição, ou um preço composto que ninguém alojou |
| Último print SIP antes das 16:00 | Uma operação de que poderia ter feito parte, no seu tamanho | Um residual de 200 ações tratado como execução de um clip |
| Abertura seguinte como um fecho "mais seguro" | Um modelo de cruzamento de abertura, mais o gap overnight | Outra estratégia, ainda um leilão, ainda falhada |
A divisão honesta é pequena. Ou o contrato de investigação diz que estamos no fecho, e nesse caso a ordem é on-close, com timestamp antes das 15:50 na NYSE ou das 15:55 na Nasdaq, dimensionada face ao volume de fecho esperado, e autorizada a expirar sem execução se for um LOC. Ou não estamos no fecho, e nesse caso after-hours ou a abertura seguinte é uma política nomeada com o seu próprio leilão, e a curva de equity deixa de vestir um rótulo das 16:00.
Agora reprovamos um backtest que regista o fecho oficial sem uma ordem on-close dentro da hora limite dessa plataforma. Já matou umas curvas bonitas de sinal diário. Essas curvas nunca foram executáveis ao preço que reivindicavam.
← Todos os artigos


