{"id":12902,"date":"2026-04-29T17:12:49","date_gmt":"2026-04-29T17:12:49","guid":{"rendered":"https:\/\/bjftradinggroup.com\/?page_id=12902"},"modified":"2026-06-04T21:05:52","modified_gmt":"2026-06-04T21:05:52","slug":"latency-arbitrage-backtest-execution-time-gap","status":"publish","type":"page","link":"https:\/\/bjftradinggroup.com\/pt\/latency-arbitrage-backtest-execution-time-gap\/","title":{"rendered":"Por Que os Backtests de Arbitragem por Lat\u00eancia N\u00e3o Sobrevivem em Produ\u00e7\u00e3o"},"content":{"rendered":"<p><\/p>\n<div class=\"lab-page\">\n<p><!-- ============================================================ --><br \/>\n<!-- HERO + H1 --><br \/>\n<!-- ============================================================ --><\/p>\n<div class=\"lab-hero\">\n<p><span class=\"lab-hero-tag\">BJF TRADING GROUP \u00a0\u00b7\u00a0 SHARPTRADER OPTIMIZER<\/span><\/p>\n<h1>Por que backtests de arbitragem de lat\u00eancia n\u00e3o sobrevivem em produ\u00e7\u00e3o: <span class=\"lab-gold\">a lacuna do tempo de execu\u00e7\u00e3o<\/span><\/h1>\n<p class=\"lab-hero-sub\">A maioria dos backtests publicados de arbitragem de lat\u00eancia parece espetacular no papel e desmorona no momento em que entra em opera\u00e7\u00e3o ao vivo. O motivo n\u00e3o \u00e9 uma l\u00f3gica de estrat\u00e9gia ruim \u2014 \u00e9 que <strong>backtesters padr\u00e3o para varejo assumem silenciosamente execu\u00e7\u00f5es com lat\u00eancia zero<\/strong>. Este guia explica exatamente como o tempo de execu\u00e7\u00e3o em n\u00edvel de milissegundos muda a matem\u00e1tica, e o que seu backtest precisa modelar para produzir resultados que voc\u00ea possa realmente negociar.<\/p>\n<div class=\"lab-hero-meta\"><strong>2,500<\/strong> palavras<br \/>\n<strong>10<\/strong> se\u00e7\u00f5es<br \/>\n<strong>~12 min<\/strong> de leitura<br \/>\n<strong>P\u00fablico:<\/strong> traders de arbitragem, desenvolvedores quantitativos, equipes t\u00e9cnicas de corretoras<\/div>\n<\/div>\n<p><!-- ============================================================ --><br \/>\n<!-- H2 #1 \u2014 The execution time gap, in one paragraph --><br \/>\n<!-- ============================================================ --><\/p>\n<h2>A lacuna do tempo de execu\u00e7\u00e3o, em um par\u00e1grafo<\/h2>\n<div class=\"lab-answer\">\n<p><strong>A lucratividade da arbitragem de lat\u00eancia vive dentro de uma janela de 50\u2013200 milissegundos.<\/strong> Esse \u00e9 o tempo pelo qual a discrep\u00e2ncia de pre\u00e7o entre um feed r\u00e1pido e uma corretora lenta normalmente permanece aberta antes que a cota\u00e7\u00e3o da corretora lenta seja atualizada. Se o seu <em>tempo real de execu\u00e7\u00e3o de ida e volta<\/em> \u2014 da detec\u00e7\u00e3o do sinal at\u00e9 a confirma\u00e7\u00e3o da execu\u00e7\u00e3o \u2014 consumir a maior parte dessa janela, quase n\u00e3o resta margem. Backtesters padr\u00e3o para varejo assumem que as ordens s\u00e3o executadas instantaneamente ao pre\u00e7o exibido, o que apaga todo esse problema da simula\u00e7\u00e3o. O resultado: um backtest que parece imprimir dinheiro e uma opera\u00e7\u00e3o ao vivo que perde em cada trade ap\u00f3s o spread.<\/p>\n<\/div>\n<p>Este artigo quantifica a lacuna, detalha para onde os milissegundos realmente v\u00e3o e explica como modelar o tempo de execu\u00e7\u00e3o dentro de um backtest para que os n\u00fameros gerados correspondam aos n\u00fameros que voc\u00ea ver\u00e1 em uma conta real.<\/p>\n<div class=\"lab-stat-row\">\n<div class=\"lab-stat-cell\"><span class=\"lab-stat-num\">50\u2013200ms<\/span><span class=\"lab-stat-lbl\">Janela t\u00edpica<\/span><\/div>\n<div class=\"lab-stat-cell\"><span class=\"lab-stat-num\">&lt;5ms<\/span><span class=\"lab-stat-lbl\">Arb co-localizado<\/span><\/div>\n<div class=\"lab-stat-cell\"><span class=\"lab-stat-num\">80\u2013180ms<\/span><span class=\"lab-stat-lbl\">VPS padr\u00e3o<\/span><\/div>\n<div class=\"lab-stat-cell\"><span class=\"lab-stat-num\">1.5\u20132x<\/span><span class=\"lab-stat-lbl\">Drawdown ao vivo vs backtest<\/span><\/div>\n<\/div>\n<p><!-- ============================================================ --><br \/>\n<!-- VIDEO EMBED \u2014 execution time gap explainer --><br \/>\n<!-- ============================================================ --><\/p>\n<div class=\"lab-video-wrap\">https:\/\/youtu.be\/UeFUfIFNfgU<\/p>\n<div><\/div>\n<p class=\"lab-video-cap\">Assista: como o tempo de execu\u00e7\u00e3o muda um backtest de arbitragem de lat\u00eancia \u2014 a mesma estrat\u00e9gia com 0\u00a0ms, 50\u00a0ms e 150\u00a0ms de lat\u00eancia de execu\u00e7\u00e3o, analisada tick a tick.<\/p>\n<\/div>\n<p><!-- ============================================================ --><br \/>\n<!-- H2 #2 \u2014 What execution time actually means --><br \/>\n<!-- ============================================================ --><\/p>\n<h2>O que \u201ctempo de execu\u00e7\u00e3o\u201d realmente significa em arbitragem de lat\u00eancia<\/h2>\n<p>Em um sistema de arbitragem de lat\u00eancia, a estrat\u00e9gia compara dois feeds de pre\u00e7o \u2014 um <strong>feed r\u00e1pido<\/strong> (normalmente um agregador tier-1 ou feed de LP) e um <strong>feed lento<\/strong> (a corretora contra a qual voc\u00ea est\u00e1 negociando). Quando o feed r\u00e1pido se adianta ao lento por mais do que o spread mais um limite configurado, a estrat\u00e9gia dispara uma ordem no lado lento, esperando que o pre\u00e7o lento converja.<\/p>\n<p>A oportunidade existe apenas enquanto os dois pre\u00e7os est\u00e3o desalinhados. No momento em que o motor de cota\u00e7\u00f5es da corretora alcan\u00e7a o pre\u00e7o \u2014 normalmente dentro de 50 a 200 milissegundos \u2014 a vantagem desaparece. Sua ordem precisa estar no mercado antes que isso aconte\u00e7a.<\/p>\n<p>\u201cTempo de execu\u00e7\u00e3o\u201d nesse contexto n\u00e3o \u00e9 um \u00fanico n\u00famero. \u00c9 uma pilha de lat\u00eancias, cada uma contribuindo com alguns milissegundos:<\/p>\n<ul class=\"lab-list\">\n<li><strong>Lat\u00eancia de decis\u00e3o da estrat\u00e9gia<\/strong> \u2014 quanto tempo seu c\u00f3digo leva para detectar a discrep\u00e2ncia e emitir uma ordem (normalmente &lt;1ms em um loop enxuto, mas pode ser 5\u201320ms em uma linguagem de script de alto n\u00edvel)<\/li>\n<li><strong>Lat\u00eancia de rede at\u00e9 a corretora<\/strong> \u2014 tempo de ida e volta pela internet p\u00fablica ou link co-localizado (1ms co-localizado, 30\u201380ms entre continentes)<\/li>\n<li><strong>Lat\u00eancia do motor de matching da corretora<\/strong> \u2014 quanto tempo o sistema de gerenciamento de ordens da corretora leva para aceitar, rotear e casar a ordem contra a liquidez (5\u2013100ms dependendo da corretora)<\/li>\n<li><strong>Lat\u00eancia de confirma\u00e7\u00e3o de execu\u00e7\u00e3o<\/strong> \u2014 a ida e volta de retorno para voc\u00ea saber que a ordem foi executada (espelha o trecho de rede)<\/li>\n<\/ul>\n<p>Para uma estrat\u00e9gia rodando em um VPS padr\u00e3o em um data center diferente do da corretora, o ida e volta realista raramente fica abaixo de 80\u2013100ms. Para uma estrat\u00e9gia co-localizada com a corretora via cross-connect, pode cair para 1\u20135ms. <strong>Essa diferen\u00e7a de ordem de grandeza \u00e9 o jogo inteiro.<\/strong><\/p>\n<p><!-- ============================================================ --><br \/>\n<!-- H2 #3 \u2014 The 50-200ms window --><br \/>\n<!-- ============================================================ --><\/p>\n<h2>A janela de 50\u2013200ms: por que milissegundos decidem tudo<\/h2>\n<p>Imagine um sinal limpo: o feed r\u00e1pido salta 1.5 pips. A corretora lenta ainda n\u00e3o atualizou. Voc\u00ea tem, em m\u00e9dia, algo entre 80 e 150 milissegundos antes que o motor de cota\u00e7\u00f5es da corretora lenta reflita o novo pre\u00e7o. Dentro dessa janela, duas coisas acontecem ao mesmo tempo:<\/p>\n<ol class=\"lab-list\">\n<li>Outros arbitradores de lat\u00eancia (e quaisquer market makers executando l\u00f3gica semelhante na corretora) tamb\u00e9m est\u00e3o correndo para conseguir execu\u00e7\u00e3o<\/li>\n<li>O feed de cota\u00e7\u00f5es da corretora est\u00e1 convergindo continuamente em dire\u00e7\u00e3o ao feed r\u00e1pido, n\u00e3o em um \u00fanico salto \u2014 portanto a vantagem se desgasta linearmente ao longo da janela<\/li>\n<\/ol>\n<p>Se seu ida e volta consome 50ms, voc\u00ea chega quando a discrep\u00e2ncia ainda est\u00e1 ~70% intacta e captura a maior parte dela. Se seu ida e volta consome 150ms, voc\u00ea chega quando a discrep\u00e2ncia j\u00e1 colapsou para ~10% \u2014 e ap\u00f3s spread + slippage provavelmente estar\u00e1 perdendo.<\/p>\n<div class=\"lab-callout\">\n<h3>A n\u00e3o linearidade<\/h3>\n<p>A rela\u00e7\u00e3o entre lat\u00eancia de ida e volta e PnL de arbitragem <strong>n\u00e3o \u00e9 linear<\/strong>. Abaixo da janela de execu\u00e7\u00e3o, a lucratividade \u00e9 alta e est\u00e1vel. Acima dela, a lucratividade colapsa para zero ou negativo. A maioria dos traders de varejo est\u00e1 do lado errado desse precip\u00edcio e n\u00e3o sabe, porque o backtest esconde isso.<\/p>\n<\/div>\n<p><!-- ============================================================ --><br \/>\n<!-- H2 #4 \u2014 Four execution-time scenarios --><br \/>\n<!-- ============================================================ --><\/p>\n<h2>Quatro cen\u00e1rios de tempo de execu\u00e7\u00e3o \u2014 com n\u00fameros concretos<\/h2>\n<p>Aqui est\u00e1 o mesmo sinal te\u00f3rico de arbitragem de lat\u00eancia com vantagem de 1.5 pip, simulado em quatro lat\u00eancias diferentes de execu\u00e7\u00e3o de ida e volta. Os n\u00fameros abaixo s\u00e3o t\u00edpicos do que voc\u00ea ver\u00e1 em EUR\/USD durante uma sess\u00e3o de Londres com liquidez normal e spread de 0.6\u20130.9 pip.<\/p>\n<table class=\"lab-tbl\">\n<thead>\n<tr>\n<th>Execu\u00e7\u00e3o de ida e volta<\/th>\n<th>Vantagem capturada<\/th>\n<th>Slippage na entrada<\/th>\n<th>PnL l\u00edquido por trade<\/th>\n<th>Veredito<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"lab-cell-feat\">~5ms (co-localizado)<\/td>\n<td>~95% do sinal<\/td>\n<td>0.0\u20130.2 pip<\/td>\n<td>+0.6 a +1.0 pip<\/td>\n<td class=\"lab-cell-good\">Lucrativo<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">~50ms (VPS pr\u00f3ximo)<\/td>\n<td>~70% do sinal<\/td>\n<td>0.2\u20130.5 pip<\/td>\n<td>+0.2 a +0.6 pip<\/td>\n<td class=\"lab-cell-good\">Lucrativo, mais apertado<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">~120ms (dist\u00e2ncia m\u00e9dia)<\/td>\n<td>~30% do sinal<\/td>\n<td>0.5\u20131.0 pip<\/td>\n<td>\u22120.3 a +0.1 pip<\/td>\n<td class=\"lab-cell-mid\">Marginal \/ perdedor<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">~200ms (longa dist\u00e2ncia)<\/td>\n<td>~10% do sinal<\/td>\n<td>1.0\u20131.8 pip<\/td>\n<td>\u22121.0 a \u22120.5 pip<\/td>\n<td class=\"lab-cell-bad\">Perde todo trade<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Observe o padr\u00e3o: de 5ms para 50ms, a lucratividade cai moderadamente. De 50ms para 120ms, ela despenca de um precip\u00edcio. Acima de 150ms, a estrat\u00e9gia vira um cara ou coroa com expectativa negativa ap\u00f3s custos. <strong>Esse precip\u00edcio \u00e9 invis\u00edvel para um backtester que assume execu\u00e7\u00f5es instant\u00e2neas.<\/strong><\/p>\n<p><!-- ============================================================ --><br \/>\n<!-- H2 #5 \u2014 Why standard backtesters assume zero latency --><br \/>\n<!-- ============================================================ --><\/p>\n<h2>Por que backtesters padr\u00e3o assumem execu\u00e7\u00f5es com lat\u00eancia zero<\/h2>\n<p>Backtesters padr\u00e3o para varejo foram criados para sistemas de acompanhamento de tend\u00eancia e baseados em indicadores \u2014 estrat\u00e9gias em que os per\u00edodos de manuten\u00e7\u00e3o s\u00e3o de minutos a dias, e alguns segundos de slippage de execu\u00e7\u00e3o s\u00e3o erro de arredondamento. Sua arquitetura reflete isso:<\/p>\n<ul class=\"lab-list\">\n<li>Eles reproduzem <strong>dados de barras<\/strong> (M1, M5, H1) e aplicam a estrat\u00e9gia nas aberturas ou fechamentos das barras<\/li>\n<li>As ordens s\u00e3o casadas ao pre\u00e7o exibido no instante em que a estrat\u00e9gia as emite, sem avan\u00e7o de tempo entre sinal e execu\u00e7\u00e3o<\/li>\n<li>O spread normalmente \u00e9 um \u00fanico n\u00famero fixo, aplicado de forma id\u00eantica a toda execu\u00e7\u00e3o<\/li>\n<li>N\u00e3o h\u00e1 conceito de ida e volta de rede, motor de matching da corretora ou confirma\u00e7\u00e3o de execu\u00e7\u00e3o<\/li>\n<\/ul>\n<p>Para uma estrat\u00e9gia que mant\u00e9m posi\u00e7\u00f5es por horas, isso \u00e9 aceit\u00e1vel \u2014 o custo dessas simplifica\u00e7\u00f5es fica bem abaixo de 1% do PnL. Para uma estrat\u00e9gia de arbitragem de lat\u00eancia que ganha 1\u20133 pips por trade e vive ou morre dentro de uma janela de 100ms, <strong>cada uma dessas simplifica\u00e7\u00f5es \u00e9 fatal<\/strong>:<\/p>\n<div class=\"lab-feat-grid\">\n<div class=\"lab-feat-card\">\n<div class=\"lab-feat-num\">PROBLEM 01<\/div>\n<h3>A reprodu\u00e7\u00e3o de barras esconde o sinal<\/h3>\n<p>Uma discrep\u00e2ncia de pre\u00e7o de 100ms \u00e9 invis\u00edvel dentro de uma barra M1 \u2014 a barra mostra OHLC, n\u00e3o o fluxo de ticks intrabarra. Backtesters de reprodu\u00e7\u00e3o de barras nem conseguem <em>detectar<\/em> corretamente sinais de arbitragem de lat\u00eancia.<\/p>\n<\/div>\n<div class=\"lab-feat-card\">\n<div class=\"lab-feat-num\">PROBLEM 02<\/div>\n<h3>Execu\u00e7\u00f5es instant\u00e2neas apagam o precip\u00edcio<\/h3>\n<p>Se as ordens s\u00e3o executadas ao pre\u00e7o exibido no momento em que s\u00e3o enviadas, toda a janela de execu\u00e7\u00e3o de 50\u2013200ms colapsa para zero. O backtest captura 100% de todo sinal, sempre. A realidade captura 30%\u201395%, dependendo da infraestrutura.<\/p>\n<\/div>\n<div class=\"lab-feat-card\">\n<div class=\"lab-feat-num\">PROBLEM 03<\/div>\n<h3>Spread fixo \u00e9 fic\u00e7\u00e3o<\/h3>\n<p>Oportunidades reais de arbitragem se concentram em torno de not\u00edcias, rollover e janelas de baixa liquidez \u2014 exatamente quando o spread se alarga 3\u20135x. Backtests com spread fixo contabilizam lucros que n\u00e3o existiriam em condi\u00e7\u00f5es reais.<\/p>\n<\/div>\n<div class=\"lab-feat-card\">\n<div class=\"lab-feat-num\">PROBLEM 04<\/div>\n<h3>Sem modelagem do lado de fechamento<\/h3>\n<p>A arbitragem de lat\u00eancia fecha posi\u00e7\u00f5es t\u00e3o r\u00e1pido quanto as abre. Backtesters padr\u00e3o ignoram completamente o slippage no lado de fechamento ou aplicam o mesmo spread fixo, dobrando o otimismo irrealista.<\/p>\n<\/div>\n<\/div>\n<p><!-- ============================================================ --><br \/>\n<!-- H2 #6 \u2014 Four latency components --><br \/>\n<!-- ============================================================ --><\/p>\n<h2>Os quatro componentes de lat\u00eancia que um backtest real precisa modelar<\/h2>\n<p>Para produzir um backtest que sobreviva ao contato com uma corretora ao vivo, o simulador precisa modelar explicitamente cada trecho da ida e volta. Aqui est\u00e1 o detalhamento que um backtest s\u00e9rio de arbitragem de lat\u00eancia precisa:<\/p>\n<table class=\"lab-tbl\">\n<thead>\n<tr>\n<th>Componente<\/th>\n<th>Faixa t\u00edpica<\/th>\n<th>O que representa<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"lab-cell-feat\">1. Lat\u00eancia de sinal para envio<\/td>\n<td>0.5\u201320 ms<\/td>\n<td>Tempo desde o recebimento do tick gatilho at\u00e9 a emiss\u00e3o de uma ordem. Depende da linguagem, do caminho do c\u00f3digo e da CPU. C++ compilado &lt;1ms; scripts de alto n\u00edvel 5\u201320ms.<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">2. Ida e volta de rede (sa\u00edda)<\/td>\n<td>1\u201380 ms<\/td>\n<td>Tempo de transmiss\u00e3o do seu host de trading at\u00e9 a corretora. Co-localizado = 1\u20133ms; mesma regi\u00e3o metropolitana = 5\u201315ms; entre regi\u00f5es = 30\u201380ms.<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">3. Lat\u00eancia de matching da corretora<\/td>\n<td>3\u2013100 ms<\/td>\n<td>Tempo gasto dentro do sistema de gerenciamento de ordens e motor de matching da corretora. Corretoras ECN tier-1: 3\u201315ms. Corretoras de varejo padr\u00e3o: 30\u2013100ms. Corretoras STP com tratamento manual: 100ms+.<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">4. Ida e volta de confirma\u00e7\u00e3o (retorno)<\/td>\n<td>1\u201380 ms<\/td>\n<td>Espelha o trecho de rede de sa\u00edda. At\u00e9 receber a confirma\u00e7\u00e3o da execu\u00e7\u00e3o, voc\u00ea n\u00e3o conhece seu pre\u00e7o de execu\u00e7\u00e3o \u2014 relevante para gest\u00e3o de risco e timing do lado de fechamento.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Para uma implanta\u00e7\u00e3o t\u00edpica de arbitragem de lat\u00eancia no varejo a partir de um VPS gen\u00e9rico por meio de uma corretora de varejo padr\u00e3o, os quatro componentes somam <strong>aproximadamente 80\u2013180ms<\/strong> \u2014 exatamente dentro da zona de perigo em que a captura de sinal cai abaixo de 50%. Para uma implanta\u00e7\u00e3o co-localizada por meio de uma corretora ECN r\u00e1pida, os mesmos componentes somam <strong>5\u201320ms<\/strong> \u2014 bem abaixo do precip\u00edcio.<\/p>\n<p>Todo backtest honesto de uma estrat\u00e9gia de arbitragem de lat\u00eancia deve permitir que o trader configure essas lat\u00eancias e veja o impacto. <a href=\"\/product\/sharptrader-optimizer\/\">SharpTrader Optimizer<\/a> modela a lat\u00eancia de execu\u00e7\u00e3o como um \u00fanico par\u00e2metro configur\u00e1vel (em milissegundos), aplicado a cada ordem no tempo de simula\u00e7\u00e3o, sobre dados hist\u00f3ricos reais de ticks.<\/p>\n<p><!-- ============================================================ --><br \/>\n<!-- H2 #7 \u2014 How to model execution time correctly --><br \/>\n<!-- ============================================================ --><\/p>\n<h2>Como modelar corretamente o tempo de execu\u00e7\u00e3o em um backtest<\/h2>\n<p>Tr\u00eas coisas precisam existir. Cada uma \u00e9 necess\u00e1ria; nenhuma \u00e9 suficiente sozinha.<\/p>\n<h3>1. Ticks hist\u00f3ricos reais \u2014 n\u00e3o interpola\u00e7\u00e3o de barras<\/h3>\n<p>Backtesters padr\u00e3o para varejo preenchem dados de \u201ctick\u201d interpolando entre valores OHLC das barras. Os ticks sint\u00e9ticos que produzem atingem a m\u00e1xima e a m\u00ednima da barra em pontos aleat\u00f3rios dentro da barra, suavemente entre a abertura e o fechamento. Mercados reais n\u00e3o se movem assim \u2014 eles saltam. O sinal de arbitragem de lat\u00eancia de 1.5 pip que voc\u00ea est\u00e1 tentando capturar <em>\u00e9<\/em> um salto que dados de tick interpolados suavizam at\u00e9 desaparecer.<\/p>\n<p>Um backtest s\u00e9rio reproduz ticks bid\/ask reais registrados a partir do motor de matching da corretora (ou um feed de refer\u00eancia limpo, como dados institucionais originados em Londres). Cada tick tem um timestamp, um bid e um ask. A estrat\u00e9gia os v\u00ea na mesma ordem e com o mesmo timing que veria em uma implanta\u00e7\u00e3o ao vivo.<\/p>\n<h3>2. Tempo de execu\u00e7\u00e3o configur\u00e1vel \u2014 aplicado por ordem<\/h3>\n<p>O trader configura o tempo de execu\u00e7\u00e3o de ida e volta T (em milissegundos) que espera ver ao vivo. Quando a estrat\u00e9gia emite uma ordem, o simulador avan\u00e7a o rel\u00f3gio pela parte do trecho de solicita\u00e7\u00e3o \u2014 normalmente <strong>T\/2<\/strong>, j\u00e1 que apenas o tempo entre o sinal e o matching do lado da corretora afeta o pre\u00e7o de execu\u00e7\u00e3o (o trecho de resposta apenas informa \u00e0 estrat\u00e9gia o que j\u00e1 aconteceu). Se T = 80ms, o simulador olha para o fluxo de ticks <strong>40ms ap\u00f3s o sinal<\/strong> e usa o bid\/ask <em>desse<\/em> tick \u2014 n\u00e3o o tick que disparou o sinal \u2014 como pre\u00e7o de execu\u00e7\u00e3o.<\/p>\n<p>Essa \u00fanica mudan\u00e7a \u2014 avan\u00e7ar o rel\u00f3gio entre sinal e execu\u00e7\u00e3o \u2014 reproduz o precip\u00edcio em lat\u00eancias realistas. Ela tamb\u00e9m torna o backtest determin\u00edstico: a mesma estrat\u00e9gia em T = 50ms vs T = 150ms no mesmo fluxo de ticks produz resultados mensuravelmente diferentes, e o trader pode ver exatamente onde a estrat\u00e9gia deixa de funcionar.<\/p>\n<p>O slippage realizado em cada execu\u00e7\u00e3o \u00e9 o que o percurso dos ticks produziu \u2014 \u00e9 uma <em>sa\u00edda<\/em> da simula\u00e7\u00e3o, n\u00e3o um n\u00famero que o trader precisa adivinhar. Algumas execu\u00e7\u00f5es caem favoravelmente (slippage positivo), outras pior (negativo), e a magnitude acompanha a volatilidade real dos ticks durante aqueles milissegundos. Essa \u00e9 a distribui\u00e7\u00e3o realista que falta em todo backtester padr\u00e3o para varejo.<\/p>\n<h3>3. Slippage resolvido por tick nos dois lados \u2014 entrada e sa\u00edda<\/h3>\n<p>A arbitragem de lat\u00eancia fecha t\u00e3o r\u00e1pido quanto abre. A sa\u00edda acontece 200\u2013800ms ap\u00f3s a entrada, em um pre\u00e7o que est\u00e1 convergindo. Se o simulador aplica o mesmo spread fixo \u00e0 entrada e \u00e0 sa\u00edda, perde duas coisas: (1) slippage de entrada da janela de lat\u00eancia, e (2) slippage de sa\u00edda do pre\u00e7o derivando de volta durante a ida e volta do lado de fechamento. Um modelo real permite configurar o tempo de execu\u00e7\u00e3o independentemente na abertura e no fechamento \u2014 refletindo o comportamento real da corretora, em que sa\u00eddas frequentemente passam por uma rota de encaminhamento mais lenta \u2014 e resolve automaticamente o slippage em cada trecho a partir do fluxo de ticks.<\/p>\n<div class=\"lab-take\">\n<h3>Como isso se parece na pr\u00e1tica<\/h3>\n<ul>\n<li>Motor de reprodu\u00e7\u00e3o de ticks que processa ticks bid\/ask reais registrados nos timestamps originais<\/li>\n<li>Par\u00e2metro de tempo de execu\u00e7\u00e3o (em ms) configur\u00e1vel por rodada de backtest, aplicado entre sinal e execu\u00e7\u00e3o<\/li>\n<li>Spread vari\u00e1vel lido diretamente do fluxo de ticks \u2014 sem fic\u00e7\u00e3o de spread fixo<\/li>\n<li>Slippage realizado <em>derivado<\/em> do percurso dos ticks \u2014 n\u00e3o definido pelo usu\u00e1rio; o motor avan\u00e7a pela parte do trecho de solicita\u00e7\u00e3o do tempo de execu\u00e7\u00e3o configurado e o bid\/ask do tick resultante se torna o pre\u00e7o de execu\u00e7\u00e3o (slippage positivo ou negativo surge naturalmente, com magnitude realista)<\/li>\n<li>Configura\u00e7\u00e3o independente de tempo de execu\u00e7\u00e3o na abertura e no fechamento da ordem \u2014 reflete o comportamento real da corretora, em que sa\u00eddas frequentemente passam por uma rota de encaminhamento mais lenta do que entradas<\/li>\n<li>Otimiza\u00e7\u00e3o em grade multi-core nas configura\u00e7\u00f5es de tempo de execu\u00e7\u00e3o para que voc\u00ea veja o PnL como uma superf\u00edcie, n\u00e3o como um \u00fanico ponto<\/li>\n<\/ul>\n<\/div>\n<p><!-- ============================================================ --><br \/>\n<!-- H2 #8 \u2014 Worked example --><br \/>\n<!-- ============================================================ --><\/p>\n<h2>Exemplo pr\u00e1tico: mesma estrat\u00e9gia, tr\u00eas configura\u00e7\u00f5es de lat\u00eancia<\/h2>\n<p>Aqui est\u00e1 um resultado representativo de uma estrat\u00e9gia de arbitragem de lat\u00eancia do SharpTrader testada em 30 dias de dados de ticks de EUR\/USD, com os mesmos par\u00e2metros mas tr\u00eas configura\u00e7\u00f5es diferentes de lat\u00eancia de execu\u00e7\u00e3o. Os n\u00fameros s\u00e3o t\u00edpicos do que vemos em backtests do BJF Feed (London \/ Tokyo \/ NY).<\/p>\n<table class=\"lab-tbl\">\n<thead>\n<tr>\n<th>M\u00e9trica<\/th>\n<th>0ms (fict\u00edcio)<\/th>\n<th>50ms (VPS pr\u00f3ximo)<\/th>\n<th>150ms (longa dist\u00e2ncia)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"lab-cell-feat\">Sinais disparados<\/td>\n<td>2,847<\/td>\n<td>2,847<\/td>\n<td>2,847<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">Sinais executados na vantagem<\/td>\n<td>2,847 (100%)<\/td>\n<td>1,983 (70%)<\/td>\n<td>854 (30%)<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">Pip m\u00e9dio capturado<\/td>\n<td>1.42<\/td>\n<td>0.98<\/td>\n<td>0.21<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">Slippage realizado na entrada (sa\u00edda do percurso de ticks)<\/td>\n<td>0.0 pip<\/td>\n<td>0.3 pip<\/td>\n<td>0.9 pip<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">PnL l\u00edquido por trade<\/td>\n<td>+0.82 pip<\/td>\n<td>+0.48 pip<\/td>\n<td>\u22120.31 pip<\/td>\n<\/tr>\n<tr>\n<td class=\"lab-cell-feat\">Retorno mensal (1 lote)<\/td>\n<td class=\"lab-cell-good\">+233%<\/td>\n<td class=\"lab-cell-good\">+137%<\/td>\n<td class=\"lab-cell-bad\">\u221288%<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A coluna de 0ms \u00e9 a \u201cfantasia do backtest\u201d que ferramentas padr\u00e3o produzem. A coluna de 50ms \u00e9 como uma estrat\u00e9gia de arbitragem de lat\u00eancia bem implantada realmente se parece. A coluna de 150ms \u00e9 o que a maioria dos traders de varejo executa sem querer quando coloca uma estrat\u00e9gia em um VPS gen\u00e9rico e negocia por meio de uma corretora padr\u00e3o sem perceber onde seu ida e volta cai no precip\u00edcio.<\/p>\n<p><strong>A mesma estrat\u00e9gia pode ser extremamente lucrativa, marginalmente lucrativa ou uma perda garantida \u2014 dependendo apenas de um n\u00famero que nenhum backtester padr\u00e3o modela.<\/strong><\/p>\n<p><!-- ============================================================ --><br \/>\n<!-- H2 #9 \u2014 Combining ingredients --><br \/>\n<!-- ============================================================ --><\/p>\n<h2>Por que tempo de execu\u00e7\u00e3o, spread vari\u00e1vel e walk-forward andam juntos<\/h2>\n<p>A lat\u00eancia de execu\u00e7\u00e3o \u00e9 a vari\u00e1vel menos modelada em backtests de arbitragem de lat\u00eancia para varejo, mas n\u00e3o \u00e9 a \u00fanica. Um backtest confi\u00e1vel combina tr\u00eas coisas, e cada uma amplifica as outras:<\/p>\n<div class=\"lab-feat-grid\">\n<div class=\"lab-feat-card\">\n<div class=\"lab-feat-num\">A<\/div>\n<h3>Modelagem de lat\u00eancia de execu\u00e7\u00e3o<\/h3>\n<p>Revela o precip\u00edcio. Mostra qual infraestrutura a estrat\u00e9gia realmente precisa para ser lucrativa e em que ponto sua vantagem desaparece.<\/p>\n<\/div>\n<div class=\"lab-feat-card\">\n<div class=\"lab-feat-num\">B<\/div>\n<h3>Spread vari\u00e1vel (por tick)<\/h3>\n<p>Captura o fato de que oportunidades de arb se concentram exatamente quando o spread se alarga. Um backtest com spread fixo contabiliza lucros que fisicamente n\u00e3o podem existir nesses momentos.<\/p>\n<\/div>\n<div class=\"lab-feat-card\">\n<div class=\"lab-feat-num\">C<\/div>\n<h3>Particionamento walk-forward<\/h3>\n<p>Detecta estrat\u00e9gias que parecem boas in-sample porque o otimizador encontrou um conjunto de par\u00e2metros que se ajusta ao ru\u00eddo do per\u00edodo in-sample. Sem walk-forward, seu backtest \u00e9 um curr\u00edculo retrospectivo.<\/p>\n<\/div>\n<div class=\"lab-feat-card\">\n<div class=\"lab-feat-num\">D<\/div>\n<h3>Slippage nos dois lados<\/h3>\n<p>Um trade de arbitragem de lat\u00eancia tem dois eventos de slippage \u2014 abertura e fechamento. A maioria dos backtests modela um (ou zero) e dobra o otimismo.<\/p>\n<\/div>\n<\/div>\n<p>Quando os quatro est\u00e3o presentes, o backtest deixa de ser uma ferramenta de marketing e se torna uma ferramenta de previs\u00e3o. Os n\u00fameros que ele produz deixam de divergir 50\u2013200% dos resultados ao vivo e come\u00e7am a ficar dentro de 10\u201320% \u2014 perto o suficiente para que decis\u00f5es de dimensionamento de risco, aloca\u00e7\u00e3o de capital e sele\u00e7\u00e3o de corretora possam realmente ser tomadas com base no backtest.<\/p>\n<div class=\"lab-callout\">\n<h3>A regra 1.5\u20132x<\/h3>\n<p>Regra pr\u00e1tica da ind\u00fastria: <strong>espere que o drawdown ao vivo seja de 1.5x a 2x o drawdown do backtest.<\/strong> Para estrat\u00e9gias de arbitragem de lat\u00eancia rodando em backtesters padr\u00e3o, essa raz\u00e3o fica mais perto de <strong>5x a 10x<\/strong> \u2014 porque o backtest n\u00e3o modelou lat\u00eancia de execu\u00e7\u00e3o, spread vari\u00e1vel ou slippage nos dois lados. Depois que esses elementos entram, a regra 1.5\u20132x se aplica; antes disso, o backtest n\u00e3o tem nenhum valor preditivo.<\/p>\n<\/div>\n<p><!-- ============================================================ --><br \/>\n<!-- H2 #10 \u2014 FAQ --><br \/>\n<!-- ============================================================ --><\/p>\n<h2>Perguntas frequentes<\/h2>\n<div class=\"lab-faq\">\n<div class=\"lab-faq-q\">Que lat\u00eancia de ida e volta devo assumir no meu backtest se ainda n\u00e3o conhe\u00e7o minha infraestrutura ao vivo?<\/div>\n<div class=\"lab-faq-a\">\n<p>Execute a otimiza\u00e7\u00e3o em pelo menos tr\u00eas configura\u00e7\u00f5es de lat\u00eancia: <strong>10ms<\/strong> (melhor caso co-localizado), <strong>50ms<\/strong> (VPS pr\u00f3ximo) e <strong>150ms<\/strong> (VPS gen\u00e9rico, corretora distante). Se a estrat\u00e9gia s\u00f3 for lucrativa em 10ms, voc\u00ea tem um problema de implanta\u00e7\u00e3o \u2014 precisa de um plano de co-localiza\u00e7\u00e3o antes de negoci\u00e1-la. Se for lucrativa em 50ms mas n\u00e3o em 150ms, a escolha do VPS e da corretora se torna o jogo inteiro.<\/p>\n<\/div>\n<div class=\"lab-faq-q\">Como me\u00e7o minha pr\u00f3pria lat\u00eancia de execu\u00e7\u00e3o no mundo real?<\/div>\n<div class=\"lab-faq-a\">\n<p>Tr\u00eas camadas: (1) fa\u00e7a ping no endpoint de entrada de ordens da sua corretora a partir do seu host de trading \u2014 isso d\u00e1 o ida e volta bruto da rede; (2) envie uma pequena ordem de teste durante um per\u00edodo calmo e registre timestamp da emiss\u00e3o do sinal vs confirma\u00e7\u00e3o da execu\u00e7\u00e3o \u2014 a diferen\u00e7a inclui a lat\u00eancia de matching da corretora; (3) repita em v\u00e1rias sess\u00f5es \u2014 a lat\u00eancia varia com a carga da corretora, hor\u00e1rio do dia e rota. O valor realista para sua implanta\u00e7\u00e3o \u00e9 a <strong>mediana de muitas medi\u00e7\u00f5es<\/strong>, n\u00e3o o melhor ping poss\u00edvel.<\/p>\n<\/div>\n<div class=\"lab-faq-q\">Isso tamb\u00e9m se aplica a trading de not\u00edcias?<\/div>\n<div class=\"lab-faq-a\">\n<p>Sim \u2014 com janelas ainda mais estreitas. Janelas de trading de not\u00edcias podem ter 10\u201350ms de largura. O problema da lacuna do tempo de execu\u00e7\u00e3o \u00e9 id\u00eantico, apenas comprimido em uma janela menor. A mesma infraestrutura de backtest (ticks reais, lat\u00eancia de execu\u00e7\u00e3o configur\u00e1vel, spread vari\u00e1vel) \u00e9 necess\u00e1ria, e a toler\u00e2ncia \u00e0 lat\u00eancia \u00e9 ainda menos permissiva.<\/p>\n<\/div>\n<div class=\"lab-faq-q\">Por que o spread se alarga nos momentos em que sinais de arb aparecem?<\/div>\n<div class=\"lab-faq-a\">\n<p>Ambos os fen\u00f4menos t\u00eam a mesma causa: provedores de liquidez ficam incertos sobre o pre\u00e7o e retiram cota\u00e7\u00f5es. Quando o feed r\u00e1pido salta, LPs que fornecem \u00e0 corretora lenta alargam brevemente suas cota\u00e7\u00f5es para se proteger de serem explorados. Portanto, o momento em que a discrep\u00e2ncia se abre tamb\u00e9m \u00e9 o momento em que o spread para captur\u00e1-la se alarga. Um backtest com spread fixo n\u00e3o v\u00ea isso e superestima a vantagem l\u00edquida em 30\u201350%.<\/p>\n<\/div>\n<div class=\"lab-faq-q\">A co-localiza\u00e7\u00e3o \u00e9 realmente necess\u00e1ria para arbitragem de lat\u00eancia em 2026?<\/div>\n<div class=\"lab-faq-a\">\n<p>Para arbitragem de lat\u00eancia de estilo institucional contra corretoras ECN tier-1, sim \u2014 o campo de jogo se moveu para ida e volta sub-5ms, e isso exige cross-connect ou proximity hosting. Para arbitragem de lat\u00eancia de estilo varejo contra corretoras de varejo mais lentas, n\u00e3o \u2014 idas e voltas de 30\u201380ms ainda podem produzir vantagem, porque a janela da corretora lenta \u00e9 mais larga. A pergunta certa n\u00e3o \u00e9 \u201cco-localiza\u00e7\u00e3o \u00e9 necess\u00e1ria\u201d, mas \u201cmeu ida e volta cabe dentro da janela da corretora contra a qual estou negociando.\u201d \u00c9 exatamente essa pergunta que o backtesting consciente de lat\u00eancia de execu\u00e7\u00e3o responde.<\/p>\n<\/div>\n<div class=\"lab-faq-q\">Como isso \u00e9 diferente de backtesting normal de forex?<\/div>\n<div class=\"lab-faq-a\">\n<p>Para estrat\u00e9gias de acompanhamento de tend\u00eancia que mant\u00eam posi\u00e7\u00f5es por horas ou dias, algumas centenas de milissegundos de lat\u00eancia de execu\u00e7\u00e3o s\u00e3o erro de arredondamento. Para arbitragem de lat\u00eancia, esses mesmos milissegundos <em>s\u00e3o<\/em> o sinal inteiro. A infraestrutura normal de backtesting de forex \u00e9 projetada para o primeiro caso e produzir\u00e1 silenciosamente resultados in\u00fateis para o segundo. \u00c9 por isso que ferramentas dedicadas de backtesting de arbitragem existem como uma categoria separada.<\/p>\n<\/div>\n<div class=\"lab-faq-q\">E quanto a plugins anti-arbitragem de corretoras \u2014 eles invalidam esta an\u00e1lise?<\/div>\n<div class=\"lab-faq-a\">\n<p>Eles mudam a estrat\u00e9gia ideal, n\u00e3o a an\u00e1lise. Corretoras que executam plugins anti-arbitragem (execu\u00e7\u00e3o atrasada, last-look, requote em lucro, hold-then-fill) introduzem efetivamente lat\u00eancia de execu\u00e7\u00e3o <em>artificial<\/em> al\u00e9m da natural. Um backtest com lat\u00eancia configur\u00e1vel permite simular o comportamento anti-arb da corretora e decidir se a estrat\u00e9gia ainda \u00e9 vi\u00e1vel contra essa corretora \u2014 ou se voc\u00ea precisa trocar de venue.<\/p>\n<\/div>\n<div class=\"lab-faq-q\">Quantas combina\u00e7\u00f5es de par\u00e2metros devo testar na otimiza\u00e7\u00e3o?<\/div>\n<div class=\"lab-faq-a\">\n<p>Para uma estrat\u00e9gia de arbitragem de lat\u00eancia com 5\u20138 par\u00e2metros, uma grade t\u00edpica \u00e9 de 30,000\u2013100,000 combina\u00e7\u00f5es \u2014 incluindo 3\u20135 configura\u00e7\u00f5es de tempo de execu\u00e7\u00e3o como uma das dimens\u00f5es varridas. O objetivo \u00e9 encontrar <strong>clusters de lucratividade<\/strong> \u2014 faixas em que a estrat\u00e9gia \u00e9 lucrativa em muitos valores de par\u00e2metros, n\u00e3o picos \u201csortudos\u201d isolados. Picos isolados s\u00e3o curve-fitting; clusters s\u00e3o robustez. Como refer\u00eancia realista em uma esta\u00e7\u00e3o de trabalho de varejo t\u00edpica, uma grade de 30,000 combina\u00e7\u00f5es contra 1 semana de dados de ticks de XAUUSD em uma CPU de 4 n\u00facleos termina em cerca de 12 horas; a mesma grade leva cerca de 3 horas em 16 n\u00facleos. <a href=\"\/product\/sharptrader-optimizer\/\">SharpTrader Optimizer<\/a> lida com 100,000+ combina\u00e7\u00f5es por execu\u00e7\u00e3o em hardware multi-core.<\/p>\n<\/div>\n<div class=\"lab-faq-q\">De onde vem a regra \u201c1.5\u20132x drawdown ao vivo vs drawdown do backtest\u201d?<\/div>\n<div class=\"lab-faq-a\">\n<p>\u00c9 uma observa\u00e7\u00e3o emp\u00edrica no trading algor\u00edtmico institucional: mesmo um backtest bem modelado subestima o drawdown ao vivo em cerca de 50\u2013100%, porque algumas fric\u00e7\u00f5es do mundo real (rejei\u00e7\u00f5es da corretora, gaps de fim de semana, mudan\u00e7as de regime) n\u00e3o podem ser modeladas de forma limpa. A regra assume que o backtest j\u00e1 inclui lat\u00eancia de execu\u00e7\u00e3o realista, spread vari\u00e1vel e slippage nos dois lados. <strong>Se esses elementos estiverem ausentes, o multiplicador \u00e9 muito maior<\/strong> \u2014 5x a 10x especificamente para arbitragem de lat\u00eancia.<\/p>\n<\/div>\n<div class=\"lab-faq-q\">A mesma abordagem se aplica \u00e0 arbitragem cripto?<\/div>\n<div class=\"lab-faq-a\">\n<p>Conceitualmente, \u00e9 id\u00eantica. A janela de tempo de execu\u00e7\u00e3o em arbitragem cripto entre exchanges normalmente \u00e9 de 200ms\u20132s (mais lenta que forex porque as exchanges est\u00e3o mais distantes e os livros de ordens s\u00e3o mais profundos, mas mais lentos para atualizar). Os mesmos tr\u00eas ingredientes \u2014 reprodu\u00e7\u00e3o de ticks, lat\u00eancia de execu\u00e7\u00e3o configur\u00e1vel, spread vari\u00e1vel \u2014 produzem backtests honestos. As ferramentas de <a href=\"\/crypto-arbitrage\/\">crypto arbitrage<\/a> da BJF usam a mesma arquitetura adaptada para APIs de exchanges e profundidade de livro de ordens.<\/p>\n<\/div>\n<\/div>\n<p><!-- ============================================================ --><br \/>\n<!-- BUY CTA --><br \/>\n<!-- ============================================================ --><\/p>\n<div class=\"lab-buy\">\n<h2>Teste a lat\u00eancia de execu\u00e7\u00e3o na sua pr\u00f3pria estrat\u00e9gia<\/h2>\n<p>SharpTrader Optimizer \u00e9 o \u00fanico backtester acess\u00edvel ao varejo que modela tempo de execu\u00e7\u00e3o configur\u00e1vel, reprodu\u00e7\u00e3o de ticks reais, spread vari\u00e1vel por tick e slippage resolvido por tick nos dois lados \u2014 as quatro vari\u00e1veis que decidem se uma estrat\u00e9gia de arbitragem de lat\u00eancia \u00e9 real ou fict\u00edcia. A otimiza\u00e7\u00e3o em grade multi-core em 100,000+ combina\u00e7\u00f5es de par\u00e2metros termina em horas, n\u00e3o dias.<\/p>\n<p><a class=\"lab-cta\" href=\"\/product\/sharptrader-optimizer\/\">Explorar SharpTrader Optimizer \u2014 $595<\/a><\/p>\n<\/div>\n<\/div>\n<p><!-- ====================================================================== --><br \/>\n<!-- END BODY --><br \/>\n<!-- ====================================================================== --><\/p>\n<p><!-- ====================================================================== --><br \/>\n<!-- JSON-LD --><br \/>\n<!-- ====================================================================== --><br \/>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"Article\",\n      \"@id\": \"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/#article\",\n      \"headline\": \"Why Latency Arbitrage Backtests Don't Survive in Production: The Execution Time Gap\",\n      \"description\": \"Most retail latency arbitrage backtests are profitable on paper and lose money live. The reason is that standard backtesters silently assume zero-latency fills. This article quantifies the 50-200ms execution window, breaks down the four latency components, and explains exactly what a backtest must model to produce results that survive in production.\",\n      \"image\": \"https:\/\/bjftradinggroup.com\/wp-content\/uploads\/latency-arbitrage-backtest-cover.png\",\n      \"datePublished\": \"2026-04-28T10:00:00-04:00\",\n      \"dateModified\": \"2026-04-28T10:00:00-04:00\",\n      \"author\": {\n        \"@type\": \"Person\",\n        \"@id\": \"https:\/\/bjftradinggroup.com\/about-boris-fesenko\/#person\",\n        \"name\": \"Boris Fesenko\",\n        \"url\": \"https:\/\/bjftradinggroup.com\/about-boris-fesenko\/\"\n      },\n      \"publisher\": {\n        \"@type\": \"Organization\",\n        \"@id\": \"https:\/\/bjftradinggroup.com\/#organization\",\n        \"name\": \"BJF Trading Group Inc.\",\n        \"url\": \"https:\/\/bjftradinggroup.com\/\",\n        \"logo\": {\n          \"@type\": \"ImageObject\",\n          \"url\": \"https:\/\/bjftradinggroup.com\/wp-content\/uploads\/bjf-logo.png\"\n        }\n      },\n      \"mainEntityOfPage\": {\n        \"@type\": \"WebPage\",\n        \"@id\": \"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/\"\n      },\n      \"wordCount\": 2500,\n      \"articleSection\": \"Arbitrage Backtesting\",\n      \"keywords\": \"latency arbitrage backtest, execution time backtest, real tick data backtest, configurable execution latency, slippage modeling, variable spread backtest, walk forward optimization, SharpTrader Optimizer\",\n      \"about\": [\n        {\"@type\": \"Thing\", \"name\": \"Latency arbitrage\"},\n        {\"@type\": \"Thing\", \"name\": \"Backtesting\"},\n        {\"@type\": \"Thing\", \"name\": \"Execution latency\"},\n        {\"@type\": \"Thing\", \"name\": \"Slippage modeling\"}\n      ],\n      \"video\": {\n        \"@id\": \"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/#video\"\n      }\n    },\n    {\n      \"@type\": \"VideoObject\",\n      \"@id\": \"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/#video\",\n      \"name\": \"Why latency arbitrage backtests don't survive in production \u2014 execution time gap explained\",\n      \"description\": \"Walk-through of how execution time changes a latency arbitrage backtest. Same strategy at 0 ms, 50 ms, and 150 ms execution latency \u2014 tick by tick \u2014 showing why standard retail backtesters silently overstate PnL by assuming zero-latency fills.\",\n      \"thumbnailUrl\": \"https:\/\/i.ytimg.com\/vi\/UeFUfIFNfgU\/maxresdefault.jpg\",\n      \"uploadDate\": \"2026-04-28T10:00:00-04:00\",\n      \"contentUrl\": \"https:\/\/www.youtube.com\/watch?v=UeFUfIFNfgU\",\n      \"embedUrl\": \"https:\/\/www.youtube-nocookie.com\/embed\/UeFUfIFNfgU\",\n      \"publisher\": {\n        \"@type\": \"Organization\",\n        \"@id\": \"https:\/\/bjftradinggroup.com\/#organization\",\n        \"name\": \"BJF Trading Group Inc.\"\n      },\n      \"isPartOf\": {\n        \"@id\": \"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/#article\"\n      }\n    },\n    {\n      \"@type\": \"FAQPage\",\n      \"@id\": \"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/#faq\",\n      \"mainEntity\": [\n        {\n          \"@type\": \"Question\",\n          \"name\": \"What round-trip latency should I assume in my backtest if I don't know my live infrastructure yet?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Run optimization across three latency configurations: 10ms (co-located), 50ms (close VPS), and 150ms (generic VPS, distant broker). If profitable only at 10ms, you have a deployment problem and need co-location. If profitable at 50ms but not 150ms, VPS choice and broker selection become the entire game.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"How do I measure my own real-world execution latency?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Three layers: (1) ping the broker's order entry endpoint for raw network round-trip; (2) send a test order and timestamp signal emission vs fill confirmation to capture broker matching latency; (3) repeat across many sessions to get a median figure. Use the median, not the best-case ping.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Does this apply to news trading too?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Yes, with tighter windows. News trading windows can be 10-50ms wide. Same backtest infrastructure required (real ticks, configurable execution latency, variable spread), but latency tolerance is even less forgiving than latency arbitrage.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Why does spread widen during the moments arb signals appear?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Both phenomena have the same cause: liquidity providers becoming uncertain about price and pulling quotes. When the fast feed jumps, LPs widen quotes to protect against being picked off. A fixed-spread backtest misses this and over-estimates net edge by 30-50%.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Is co-location actually required for latency arbitrage in 2026?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"For institutional-style arb against tier-1 ECN brokers, yes \u2014 sub-5ms round-trip requires cross-connect or proximity hosting. For retail-style arb against slower brokers, no \u2014 30-80ms round-trips can still produce edge because the slow broker's window is wider. The real question is whether your round-trip fits inside the broker's execution window.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"How is this different from regular forex backtesting?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"For trend-following strategies, a few hundred milliseconds of execution latency is rounding error. For latency arbitrage, those milliseconds ARE the entire signal. Regular backtesting infrastructure produces useless results for arbitrage strategies, which is why dedicated arbitrage backtesters exist as a separate category.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"What about anti-arbitrage broker plugins \u2014 do they invalidate this analysis?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"They change the optimal strategy, not the analysis. Anti-arbitrage plugins (delayed execution, last-look, requotes, hold-then-fill) introduce artificial execution latency on top of the natural one. A configurable-latency backtest lets you simulate this and decide whether the strategy is still viable against that broker.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"How many parameter combinations should I test in optimization?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"For a 5-8 parameter latency arbitrage strategy, a typical grid is 30,000-100,000 combinations including 3-5 execution-time settings. The goal is to find profitability clusters \u2014 ranges where the strategy works across many parameter values \u2014 not single lucky spikes. SharpTrader Optimizer handles 100,000+ combinations per run on multi-core hardware.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Where does the 1.5-2x live drawdown vs backtested drawdown rule come from?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Empirical observation across institutional algorithmic trading: even a well-modeled backtest understates live drawdown by 50-100% due to broker rejections, weekend gaps, and regime changes. The rule assumes realistic execution latency, variable spread, and both-leg slippage are already modeled. If those are missing, the multiplier is 5x-10x for latency arbitrage specifically.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Is the same approach applicable to crypto arbitrage?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Conceptually identical. Crypto cross-exchange arbitrage windows are typically 200ms-2s (slower than forex due to exchange distance and slower orderbook updates). Same three ingredients \u2014 tick replay, configurable execution latency, variable spread \u2014 produce honest backtests.\"\n          }\n        }\n      ]\n    },\n    {\n      \"@type\": \"BreadcrumbList\",\n      \"@id\": \"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/#breadcrumb\",\n      \"itemListElement\": [\n        {\n          \"@type\": \"ListItem\",\n          \"position\": 1,\n          \"name\": \"Home\",\n          \"item\": \"https:\/\/bjftradinggroup.com\/\"\n        },\n        {\n          \"@type\": \"ListItem\",\n          \"position\": 2,\n          \"name\": \"Blog\",\n          \"item\": \"https:\/\/bjftradinggroup.com\/blog\/\"\n        },\n        {\n          \"@type\": \"ListItem\",\n          \"position\": 3,\n          \"name\": \"Why Latency Arbitrage Backtests Don't Survive in Production\"\n        }\n      ]\n    }\n  ]\n}\n<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>BJF TRADING GROUP \u00a0\u00b7\u00a0 SHARPTRADER OPTIMIZER Por que backtests de arbitragem de lat\u00eancia n\u00e3o sobrevivem em produ\u00e7\u00e3o: a lacuna do tempo de execu\u00e7\u00e3o A maioria dos backtests publicados de arbitragem de lat\u00eancia parece espetacular no papel e desmorona no momento em que entra em opera\u00e7\u00e3o ao vivo. O motivo n\u00e3o \u00e9 uma l\u00f3gica de estrat\u00e9gia ruim \u2014 \u00e9 que backtesters padr\u00e3o para varejo assumem silenciosamente execu\u00e7\u00f5es com lat\u00eancia zero. Este guia explica exatamente como o&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-ai-custom.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-12902","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Latency Arbitrage Backtest \u2014 The Execution Time Gap | BJF<\/title>\n<meta name=\"description\" content=\"Standard backtesters assume zero-latency fills. Real brokers don&#039;t. The 50\u2013200 ms execution gap that quietly breaks every retail latency arbitrage backtest.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Latency Arbitrage Backtest \u2014 The Execution Time Gap | BJF\" \/>\n<meta property=\"og:description\" content=\"Standard backtesters assume zero-latency fills. Real brokers don&#039;t. The 50\u2013200 ms execution gap that quietly breaks every retail latency arbitrage backtest.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/\" \/>\n<meta property=\"og:site_name\" content=\"Forex &amp; Cryptocurrencies Arbitrage Software | BJF Trading Group Inc.\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-04T21:05:52+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"104 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bjftradinggroup.com\\\/latency-arbitrage-backtest-execution-time-gap\\\/\",\"url\":\"https:\\\/\\\/bjftradinggroup.com\\\/latency-arbitrage-backtest-execution-time-gap\\\/\",\"name\":\"Latency Arbitrage Backtest \u2014 The Execution Time Gap | BJF\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bjftradinggroup.com\\\/#website\"},\"datePublished\":\"2026-04-29T17:12:49+00:00\",\"dateModified\":\"2026-06-04T21:05:52+00:00\",\"description\":\"Standard backtesters assume zero-latency fills. Real brokers don't. The 50\u2013200 ms execution gap that quietly breaks every retail latency arbitrage backtest.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bjftradinggroup.com\\\/latency-arbitrage-backtest-execution-time-gap\\\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bjftradinggroup.com\\\/latency-arbitrage-backtest-execution-time-gap\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bjftradinggroup.com\\\/latency-arbitrage-backtest-execution-time-gap\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bjftradinggroup.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why Latency Arbitrage Backtests Don&#8217;t Survive in Production\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bjftradinggroup.com\\\/#website\",\"url\":\"https:\\\/\\\/bjftradinggroup.com\\\/\",\"name\":\"Forex &amp; Cryptocurrencies Arbitrage Software | BJF Trading Group Inc.\",\"description\":\"FX Software pioneer since 2000\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bjftradinggroup.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/bjftradinggroup.com\\\/#organization\",\"name\":\"BJF Trading Group Inc.\",\"legalName\":\"BJF Trading Group Inc.\",\"url\":\"https:\\\/\\\/bjftradinggroup.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/bjftradinggroup.com\\\/wp-content\\\/uploads\\\/logo.png\",\"width\":512,\"height\":512},\"foundingDate\":\"2000\",\"founder\":{\"@id\":\"https:\\\/\\\/bjftradinggroup.com\\\/about-boris-fesenko\\\/#person\"},\"address\":{\"@type\":\"PostalAddress\",\"addressRegion\":\"Ontario\",\"addressCountry\":\"CA\"},\"contactPoint\":[{\"@type\":\"ContactPoint\",\"contactType\":\"customer support\",\"email\":\"support@bjftradinggroup.com\",\"availableLanguage\":[\"English\",\"German\",\"Japanese\",\"Korean\",\"Spanish\",\"Portuguese\",\"Arabic\",\"Indonesian\",\"Vietnamese\"]}],\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/bjftradinggroup\",\"https:\\\/\\\/twitter.com\\\/BjfGroup\",\"https:\\\/\\\/www.youtube.com\\\/@bjftradinggroup\",\"https:\\\/\\\/t.me\\\/bjftradinggroup\",\"https:\\\/\\\/instagram.com\\\/bjftradinggroup\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/bjf-trading-group\\\/\"],\"knowsAbout\":[\"Forex arbitrage\",\"Cryptocurrency arbitrage\",\"Latency arbitrage\",\"News trading\",\"FIX API trading\",\"High-frequency trading\",\"Lock arbitrage\",\"Hedge arbitrage\",\"Pair trading\",\"Algorithmic trading software\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Latency Arbitrage Backtest \u2014 The Execution Time Gap | BJF","description":"Standard backtesters assume zero-latency fills. Real brokers don't. The 50\u2013200 ms execution gap that quietly breaks every retail latency arbitrage backtest.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/","og_locale":"pt_PT","og_type":"article","og_title":"Latency Arbitrage Backtest \u2014 The Execution Time Gap | BJF","og_description":"Standard backtesters assume zero-latency fills. Real brokers don't. The 50\u2013200 ms execution gap that quietly breaks every retail latency arbitrage backtest.","og_url":"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/","og_site_name":"Forex &amp; Cryptocurrencies Arbitrage Software | BJF Trading Group Inc.","article_modified_time":"2026-06-04T21:05:52+00:00","twitter_card":"summary_large_image","twitter_misc":{"Tempo estimado de leitura":"104 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/","url":"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/","name":"Latency Arbitrage Backtest \u2014 The Execution Time Gap | BJF","isPartOf":{"@id":"https:\/\/bjftradinggroup.com\/#website"},"datePublished":"2026-04-29T17:12:49+00:00","dateModified":"2026-06-04T21:05:52+00:00","description":"Standard backtesters assume zero-latency fills. Real brokers don't. The 50\u2013200 ms execution gap that quietly breaks every retail latency arbitrage backtest.","breadcrumb":{"@id":"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/bjftradinggroup.com\/latency-arbitrage-backtest-execution-time-gap\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bjftradinggroup.com\/"},{"@type":"ListItem","position":2,"name":"Why Latency Arbitrage Backtests Don&#8217;t Survive in Production"}]},{"@type":"WebSite","@id":"https:\/\/bjftradinggroup.com\/#website","url":"https:\/\/bjftradinggroup.com\/","name":"Forex &amp; Cryptocurrencies Arbitrage Software | BJF Trading Group Inc.","description":"FX Software pioneer since 2000","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bjftradinggroup.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/bjftradinggroup.com\/#organization","name":"BJF Trading Group Inc.","legalName":"BJF Trading Group Inc.","url":"https:\/\/bjftradinggroup.com\/","logo":{"@type":"ImageObject","url":"https:\/\/bjftradinggroup.com\/wp-content\/uploads\/logo.png","width":512,"height":512},"foundingDate":"2000","founder":{"@id":"https:\/\/bjftradinggroup.com\/about-boris-fesenko\/#person"},"address":{"@type":"PostalAddress","addressRegion":"Ontario","addressCountry":"CA"},"contactPoint":[{"@type":"ContactPoint","contactType":"customer support","email":"support@bjftradinggroup.com","availableLanguage":["English","German","Japanese","Korean","Spanish","Portuguese","Arabic","Indonesian","Vietnamese"]}],"sameAs":["https:\/\/www.facebook.com\/bjftradinggroup","https:\/\/twitter.com\/BjfGroup","https:\/\/www.youtube.com\/@bjftradinggroup","https:\/\/t.me\/bjftradinggroup","https:\/\/instagram.com\/bjftradinggroup","https:\/\/www.linkedin.com\/company\/bjf-trading-group\/"],"knowsAbout":["Forex arbitrage","Cryptocurrency arbitrage","Latency arbitrage","News trading","FIX API trading","High-frequency trading","Lock arbitrage","Hedge arbitrage","Pair trading","Algorithmic trading software"]}]}},"_links":{"self":[{"href":"https:\/\/bjftradinggroup.com\/pt\/wp-json\/wp\/v2\/pages\/12902","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bjftradinggroup.com\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bjftradinggroup.com\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bjftradinggroup.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bjftradinggroup.com\/pt\/wp-json\/wp\/v2\/comments?post=12902"}],"version-history":[{"count":10,"href":"https:\/\/bjftradinggroup.com\/pt\/wp-json\/wp\/v2\/pages\/12902\/revisions"}],"predecessor-version":[{"id":13117,"href":"https:\/\/bjftradinggroup.com\/pt\/wp-json\/wp\/v2\/pages\/12902\/revisions\/13117"}],"wp:attachment":[{"href":"https:\/\/bjftradinggroup.com\/pt\/wp-json\/wp\/v2\/media?parent=12902"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}