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 uma seguidora 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 "minha seguidora ficou invertida 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 está no Rithmic, não no Replikanto, e 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 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 uma seguidora, quando o líder fecha a posição e o Replikanto copia esse Close para as seguidoras, e quando o Follower Guard zera uma seguidora.
- Antes de o Follower Guard agir sobre uma seguidora fora de sincronia: quando ele verifica uma seguidora cuja execução recente não teve atualização de posição, e de novo antes de o timer de fora de sincronia zerar a seguidora. Uma posição desatualizada não dispara mais 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.
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. Conexões Tradovate, Sim e outras não são afetadas.
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.
O que você pode notar
- Zerar uma conta Rithmic espera a resposta do Rithmic, normalmente cerca de 200 ms e nunca mais que 750 ms. Se o Rithmic demorar mais, o zeramento segue com a posição que o NinjaTrader mostra, como nas versões anteriores (a aba Log mostra
Warning [1100]). - 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=.
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 seguidora antes de zerá-la. A própria conta líder é zerada com a posição que o NinjaTrader mostra naquele momento; para a 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 da 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.
- Seguidoras 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. - 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 "Copy Market Orders (Executions only)" resolve isso? Não.
O modo de cópia controla apenas como as ordens do líder são copiadas para as seguidoras. 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: https://forum.ninjatrader.com/forum/ninjatrader-8/platform-technical-support-aa/1309410-ninjatrader-rithmic-not-updating-positions
Comentários
0 comentário
Artigo fechado para comentários.