Este artigo explica por que o NinjaTrader pode continuar mostrando uma conta Rithmic posicionada quando a corretora (RTrader Pro) já fechou a posição, ou perder uma execução e mostrar a conta zerada enquanto a corretora ainda tem uma posição; por que zerar essa posição "fantasma" (desatualizada) pode abrir uma operação invertida de verdade; e o que o Replikanto faz a respeito a partir do Replikanto 1.7.0.0. Vale para qualquer conta em uma conexão Rithmic no NinjaTrader, incluindo contas de mesas proprietárias como Apex e Topstep.
O que está acontecendo
O NinjaTrader mantém a sua própria cópia da posição de cada conta. Em uma conexão Rithmic, essa cópia pode ficar atrasada em relação à corretora: depois que a posição fecha, o NinjaTrader continua mostrando a posição aberta, ou perde uma execução e mostra a conta zerada enquanto a corretora tem uma posição. O RTrader Pro mostra a posição real; o NinjaTrader mostra uma posição antiga.
O prejuízo acontece quando algo tenta fechar a posição fantasma. O Zerar Tudo, o botão Zerar de um seguidor ou o Follower Guard enviam uma ordem de fechamento para uma posição que já não existe na corretora, e essa ordem de "fechamento" abre uma posição nova na direção oposta. É o relato típico de "o Zerar Tudo abriu uma posição" ou "meu seguidor ficou invertido depois de zerar".
A causa: como o Rithmic entrega as atualizações de posição
Como o aviso do Rithmic acima informa, a sequência dos eventos não é garantida pelo design da API do provedor. Na prática, a API do Rithmic não garante que as atualizações de posição cheguem em sincronia com as execuções. A conexão Rithmic do NinjaTrader obtém a posição da conta a partir das atualizações de posição e de PnL que o Rithmic envia, e não das execuções em si; quando uma dessas atualizações atrasa, chega fora de ordem ou se perde, o NinjaTrader fica com a posição errada até a próxima atualização chegar. É também por isso que colocar e cancelar uma ordem limitada distante resolvia a exibição: isso faz o Rithmic enviar uma atualização nova.
A causa não está no Replikanto, e a posição fantasma não aparece em conexões Tradovate. A partir do Replikanto 1.7.0.0, o Replikanto contorna o problema.
O que o Replikanto 1.7.0.0 ou posterior faz a respeito
A partir do Replikanto 1.7.0.0, o Replikanto pergunta ao Rithmic qual é a posição real da conta e entrega a resposta ao NinjaTrader. Nenhuma ordem é enviada. Se o NinjaTrader estava errado, a posição dele é corrigida primeiro e a ação segue sobre a posição real, então uma posição fantasma não está mais lá para ser zerada. O Replikanto faz isso:
- Antes de zerar uma conta seguidora: quando você clica em Zerar Tudo (Flatten All), quando clica no botão Zerar (×) (Flatten) de um seguidor, quando o líder fecha a posição e o Replikanto copia esse Close para os seguidores, e quando o Follower Guard zera um seguidor.
- Antes de o Follower Guard agir sobre um seguidor fora de sincronia: quando ele verifica um seguidor cuja execução recente não teve atualização de posição, e de novo antes de o timer de fora de sincronia zerar o seguidor. Uma posição desatualizada não deve disparar um zeramento falso por falta de sincronia.
- Por conta própria, cerca de um segundo depois de uma execução em uma conta Rithmic que não seja seguida de atualização de posição. Isso corrige a posição no próprio NinjaTrader, inclusive na aba Posições (Positions), mesmo quando nada está para ser zerado.
1 = Zerar Tudo, 2 = botão Zerar (×) de um seguidor. Em contas Rithmic, o Replikanto 1.7.0.0 ou posterior relê no Rithmic a posição de cada seguidor antes de esses botões enviarem a ordem de fechamento.
Isso cobre toda conta em uma conexão Rithmic no NinjaTrader, líder ou seguidora, ligada ou desligada, incluindo contas de mesas proprietárias como Apex e Topstep. A posição fantasma em si é um problema da Rithmic, então a releitura é usada somente na Rithmic. Em outras conexões o NinjaTrader ainda pode demorar um instante para aplicar uma execução à posição, e o Replikanto 1.7.0.0 ou posterior espera por isso antes de zerar um seguidor (veja Posição do seguidor invertida); essa espera não é controlada pela propriedade Rithmic descrita abaixo.
A configuração
Clique com o botão direito na janela do Replikanto, escolha Propriedades... (Properties...) e, no grupo Geral (General), localize Atualizar a posição de uma conta Rithmic antes de agir sobre ela (Refresh a Rithmic account's position before acting on it). Ela vem ligada por padrão, vale para todas as abas do Replikanto (não só para aquela em que você a abriu) e é salva junto com o workspace do NinjaTrader. Recomendamos deixá-la ligada. Desligada, o Replikanto não relê a posição antes de agir nem a corrige depois das execuções.
Propriedades > Geral > Atualizar a posição de uma conta Rithmic antes de agir sobre ela (ligada por padrão).
O que você pode notar
- Zerar uma conta Rithmic espera a resposta do Rithmic, normalmente cerca de 200 ms e no máximo 750 ms. Se a resposta não chegar a tempo, a releitura estoura o tempo e o zeramento segue com a posição que o NinjaTrader mostra, como nas versões anteriores ao 1.7.0.0; a aba Log mostra
Warning [1100]para aquela conta. - Quando o líder fecha e o Replikanto copia esse Close para vários seguidores Rithmic, a partir do Replikanto 1.7.0.1 as releituras de todos esses seguidores começam no mesmo instante e dividem os mesmos 750 ms, e assim os seguidores são zerados juntos (seguidores em Market Only são relidos um a um, cada um com os seus 750 ms). Um seguidor cuja própria ordem foi executada enquanto o Close era enviado é relido mais uma vez logo antes do Close dele, com 750 ms só para ele; por isso esse seguidor pode esperar até cerca de 1,5 s.
- No Replikanto 1.7.0.0, com muitos seguidores Rithmic, a releitura de um Close copiado podia estourar o tempo em todos os seguidores (
Warning [1100]em todos eles), e o Close deles saía mais tarde do que devia e sem a verificação. Isso foi corrigido no Replikanto 1.7.0.1: se você está no 1.7.0.0, atualize. UmWarning [1100]ocasional ainda pode acontecer; depois do Close, compare esse seguidor com o RTrader Pro. Se ele aparecer para todos os seguidores em todo Close no 1.7.0.1, envie o seu log para o suporte. - No Replikanto 1.7.0.1 e anteriores, quando uma releitura do Rithmic falhava (sem resposta a tempo), o Follower Guard voltava a perguntar a cada verificação, cerca de duas vezes por segundo enquanto a conta continuava suspeita, e a aba Log podia se encher de linhas
Warning [1100]comaction='guard-sync-check'. A partir do Replikanto 1.7.1.0, depois de uma releitura que falhou, o Follower Guard espera 30 segundos antes de perguntar de novo por aquela conta e instrumento, a menos que chegue uma execução nova. Um zeramento (Flatten) continua relendo a posição antes de agir, então umWarning [1100]ainda pode aparecer quando um Flatten não recebe a resposta do Rithmic a tempo. - Quando uma execução perdida é corrigida, o preço médio da posição pode aparecer como 0 por alguns segundos, até a próxima atualização do Rithmic.
Como confirmar na aba Log
-
Info [1097]: o Replikanto vai reler a posição de uma conta.reason=diz o motivo, por exemploflatten-manual,guard-out-of-sync-timerouexecution-without-position-update. -
Info [1098]: a releitura terminou.outcome=Confirmedsignifica que o Rithmic concordou com o NinjaTrader;outcome=Refreshedsignifica que o NinjaTrader estava errado e foi corrigido. -
Warning [1103]: uma posição fantasma foi detectada e corrigida.changes=mostra a posição antes e depois. -
Warning [1101]: o mecanismo se desligou sozinho para aquela conexão Rithmic, por exemplo porque não consegue rodar naquela versão do NinjaTrader ou do Rithmic. Essa conexão passa a se comportar como antes do 1.7.0.0. Envie essa linha para o suporte, incluindo oreason=. -
Warning [1100]: a releitura não terminou a tempo, e a ação seguiu com a posição que o NinjaTrader mostrava.waitedMs=é quanto tempo ela esperou; num Close copiado, é o que sobrava dos 750 ms que os seguidores Rithmic dividem, e pode ser 0. A resposta ainda chega depois, como umInfo [1098]da mesma conta. Compare essa conta com o RTrader Pro. É um Warning, não um Error. Uma linha que se repete a cada um ou dois segundos comaction='guard-sync-check'para a mesma conta indica o Replikanto 1.7.0.1 ou anterior: atualize. A partir do 1.7.1.0, o Follower Guard espera 30 segundos depois de uma releitura que falhou antes de perguntar de novo, e um Flatten continua relendo antes de agir. -
Error [1102]: uma falha inesperada dentro da releitura de posição do Replikanto. No 1.7.0.0 ela podia aparecer logo depois de uma reconexão com a corretora, por causa de um problema que também podia parar a releitura da conta reconectada; isso foi corrigido no Replikanto 1.7.0.1. Se aparecer umError [1102]no 1.7.0.1, fale com o suporte e envie a linha.
Ordem das linhas: num Close copiado, as linhas Info [1097] de todos os seguidores Rithmic aparecem primeiro, juntas, e as linhas Info [1098] vêm depois. Um Info [1098] ou Warning [1103] pode aparecer depois das linhas do zeramento que esperou por ele, porque o Replikanto entrega a resposta ao zeramento primeiro e só depois escreve a linha. Um seguidor que teve execução durante o Close pode mostrar um segundo par [1097]/[1098]. Isso é normal.
Limites: quando ainda conferir o RTrader Pro
- É preciso ter uma janela do Replikanto aberta. A releitura só funciona enquanto houver pelo menos uma janela do Replikanto aberta no NinjaTrader.
- A conta líder quando você clica em Zerar Tudo. O Zerar Tudo relê cada seguidor antes de zerá-lo. A própria conta líder é zerada com a posição que o NinjaTrader mostra naquele momento; para o líder, o Replikanto conta com a verificação automática de cerca de um segundo depois de cada execução. Se a posição do líder parecer errada, confira o RTrader Pro antes de clicar.
- Os botões do próprio NinjaTrader. O Zerar tudo (Flatten Everything) da aba Posições e os botões de fechamento do Chart Trader e do SuperDOM não são ações do Replikanto, então não passam pela releitura antes de agir. Para eles vale apenas a verificação automática depois das execuções.
- Seguidores em outro computador (cópia pela rede local ou pela Internet) são relidas pelo Replikanto que roda naquele computador, que também precisa estar no 1.7.0.0 ou mais novo.
-
Warning [1101]na aba Log significa que aquela conexão voltou ao comportamento antigo. -
Reconexões no 1.7.0.0. No Replikanto 1.7.0.0, depois de uma reconexão com a corretora, a releitura podia parar de vez em quando para a conta Rithmic reconectada até o próximo evento de conexão, às vezes com um
Error [1102]na aba Log; até lá, o zeramento e o Follower Guard usavam a posição que o NinjaTrader mostrava. Conexões > Desconectar e depois Conexões > Conectar restabelecia a releitura. Isso foi corrigido no Replikanto 1.7.0.1. - Versões anteriores ao 1.7.0.0 não releem a posição. Atualize o Replikanto para ter essa proteção.
Soluções manuais
Nos casos acima, ou sempre que o NinjaTrader e o RTrader Pro discordarem, considere verdadeiro o que o RTrader Pro mostra. Se o NinjaTrader mostrar uma posição desatualizada, não tente fechá-la. Atualize-a de uma destas formas:
- Vá em Conexões > Desconectar e, em seguida, Conexões > Conectar.
- Ou coloque uma ordem limitada distante do preço e, em seguida, cancele-a.
Em resumo:
- Considere o RTrader Pro a fonte da verdade para a sua posição real.
- Não clique repetidamente em Zerar Tudo sobre uma posição que o RTrader Pro mostra como fechada; isso pode abrir uma operação invertida.
- Reconecte (ou coloque e cancele uma ordem limitada distante) para atualizar a posição.
Follower Guard em contas Rithmic
Antes do 1.7.0.0, o Follower Guard agia sobre a posição que o NinjaTrader informava, então, em uma conta Rithmic, uma posição fantasma podia disparar um falso alarme de fora de sincronia e um zeramento desnecessário; por isso recomendávamos não depender do Follower Guard em contas Rithmic. A partir do Replikanto 1.7.0.0, o Follower Guard obtém a posição real do Rithmic antes de agir, como descrito acima, e pode ser usado em contas Rithmic, incluindo Apex, Topstep e mesas semelhantes. Se você ainda está em uma versão anterior, a recomendação antiga continua valendo: atualize primeiro.
Ativar o Market Only resolve isso? Não.
O modo de cópia controla apenas como as ordens do líder são copiadas para os seguidores. A posição fantasma está no registro que o próprio NinjaTrader mantém da posição da conta, então mudar o modo de cópia não a causa nem a evita. O que protege você é a releitura da posição descrita acima.
Mais informações
Tópico do fórum do NinjaTrader sobre posições Rithmic que não atualizam no NinjaTrader (cópia arquivada): NinjaTrader + Rithmic = Not updating positions
Comentários
0 comentário
Artigo fechado para comentários.