Como funciona a simulação com robôs investidores

Caro Trader, este post traz uma visão ampla sobre estratégias de investimento automatizadas, focando em um aspecto fundamental, a simulação e o backtesting. Você sabe realmente como funciona a simulação com robôs investidores e por que um setup / trading system pode ter comportamento diferente quando o robô entra em operações reais?

No post de hoje listo tudo o que você precisa saber sobre a simulação com robôs investidores e como usá-la a seu favor. Confira:

O que é a simulação com robôs investidores?

No universo do algotrading – uso de estratégias de investimento de forma automática através de algoritmos executados por plataformas preparadas para a execução de estratégias de investimento de forma automática – uma parte fundamental e contínua do processo é a simulação.

Tela SmarttBot - Criar robô em conta simulada

Tela SmarttBot – Criar robô em conta simulada

Simular, falando de robôs investidores, é o processo de operar em uma conta de investimentos ou corretora fictícia. O objetivo principal é validar estratégias antes da operação com dinheiro real. Suas principais vantagens são:

  • Investimento sem risco: por ser feito em conta simulada, não arrisca o capital do investidor.
  • Testar diferentes parâmetros: é possível descobrir qual seria o melhor stop ou tempo do indicador técnico usado antes de investir com dinheiro real.

Quais são os tipos de simulação de investimentos com robôs?

Existem dois tipos principais de simulação de investimentos:

  • Paper Trading: em tempo real, porém com dinheiro fictício/virtual.
  • Backtesting: feita sobre um conjunto de dados do passado.

Além da diferenciação por tipos, as simulações também variam com relação à base de dados utilizada, podendo ser de 3 tipos:

  1. Candles ou OHLC (Open High Low Close ou Abertura Máxima Mínima e Fechamento)
    Trabalha-se com candlesticks, na periodicidade dos indicadores da estratégia, sem acesso a informações mais completas sobre as negociações que formaram esses candles.
  2. Tick by Tick ou Negócio a Negócio / Times and Trades
    Trabalha-se com informações de cada negócio realizado no(s) ativo(s) acompanhado(s) pelo setup. Têm-se disponível, para cada negociação, a hora exata – com precisão de milissegundos -, a quantidade de ativos e o preço. Algumas estratégias podem trabalhar também com a informação de qual foi a corretora compradora e vendedora de cada ordem e qual das partes mandou a ordem por último – isto é, foi responsável por gerar negócio fechando uma oordem pendurada, também chamado de agressão (exemplo: ordem de venda da corretora XP agrediu a ponta compradora do book de PETR4).

    Times & Trades do Mini Dólar Futuro

    Times & Trades do Mini Dólar Futuro (WDO)

  3. Book de Ofertas
    Além dos dados tick by tick, também se tem acesso às informações usadas para se construir o book (livro) de ofertas do ativo a qualquer momento. Estas informações são os dados de cada ordem enviada, tendo ela resultado em negócio ou ficado “pendurada” no book aguardando execução.

Qual é o melhor dataset para meu robô?

Dataset é o conjunto de tipo de dados e a duração utilizada nas simulações. Normalmente o investidor pesquisador, aquele que está construindo ou aprimorando uma estratégia de investimento de sucesso, tenta utilizar a maior base de dados a que tenha acesso. Infelizmente os dados disponíveis na maioria das Plataformas de Negociação é o de candles, uma forma que não é tão completa.

É possível fazer simulações até manualmente, porém, dependendo do número de testes, tamanho e tipo da base de dados e complexidade da estratégia, plataformas mais poderosas se tornam necessárias. O uso de ticks ou book, assim como o de candles com baixas periodicidades (1, 2, 3, 4 ou 5 minuto geralmente) gera um grande volume de dados e exige conhecimento ou plataformas profissionais para serem usados corretamente em simulações.

Também busca-se o maior tempo ou duração de testes. Seja no backtesting ou nas simulações em tempo real, prazos maiores darão resultados mais consistentes. Testes longos são importantes para não enganarem o investidor destacando robôs que se performaram bem por sorte – isto é, por apresentarem lucro no período curto de testes sendo que não apresentarão resultados bons em outros momentos que o mercado se comporte de forma diferente. O ideal é que sejam feitos testes em períodos de tendência de alta, baixa mercado lateral (sem tendência), com alto e baixo volume. Assim é possível ter uma expectativa mais real sobre o comportamento e resultado esperado do robô.

Além da (difícil) tarefa de obtenção dos dados e/ou link de cotações em tempo real, prazos maiores aumentam – linearmente – o tamanho dos dados processados e necessitam de hardwares mais poderosos para serem testados. Fique de olho no Book ou Times & Trades de qualquer ativo de alta liquidez (ações do IBOVESPA, mini índice ou dólar, etc.) e imagine que cada novo negócio que acontece é um novo dado que precisa ser processado pelo “simulador” usado. Agora imagine simulações longas, que usam dias, meses ou anos desses dados, o trabalho é monumental.

Problemas na simulação

O uso das técnicas descritas de simulação apresenta diversos problemas. Devido à sua natureza – de não usar dinheiro real – não é possível prever o efeito que as ordens simuladas teriam sob o mercado, seja nas ordens futuras do ativo negociado ou nos negócios que definiriam o preço de execução das ordens simuladas. Todos participantes grandes do mercado que usam robôs em seus investimentos fazem testes extensos e aumentam progressivamente a quantidade investida com dinheiro real, não arriscando todo o capital destinado a uma estratégia desde o início.

Vários elementos afetam a qualidade dos testes e simulações feitas, piorando a qualidade dos resultados e levando a escolhas erradas – que muitas vezes resultam em prejuízo. Por isto, é importante entender como são feitas as simulações e como torná-las o mais próximas possível do investimento real.

curso-robo-BANNER

Tipo de ordens do seu robô

Robôs podem trabalhar com 2 tipos de ordem, ordens a mercado ou ordens limitadas, sendo o último tipo o mais complexo e raro. As estratégias prontas SmarttBot, como a Tangram Bot, trabalham apenas com ordens a mercado, porém, temos vários robôs feitos por encomenda que usam ordens limitadas. Caso tenha interesse em um robô customizado para você acesse esse link.

É importante que suas simulações de investimento sejam executados respeitando o tipo de ordem do seu robô. O uso apenas de candles nas simulações, por exemplo, torna-se problemático quando as estratégias fazem uso de ordens de stop. Em um candle longo, em que um stop foi atingido em seu meio, como o “simulador” registraria a ordem de stop? A que preço? O registro ao preço teórico – valor de disparo – do stop pode ser irreal, principalmente em movimentos rápidos no preço do ativo. Observe os candles abaixo, onde indicador muda de sentido gerando uma operação de venda na abertura do maior candle baixista (vermelho):

Candles longos após mudança de sentido do indicador

Candles longos após mudança de sentido do indicador

Neste caso qual seria o ponto correto a ser considerado para a entrada do robô? Caso a simulação só considere os candles irá considerar que a entrada foi feita na abertura (topo) do primeiro candle após a confirmação do indicador – a grande barra baixista, em vermelho. Quem tem alguma experiência de mercado sabe que muitas vezes isto é praticamente impossível.

Agora imaginemos que o candle de entrada tenha um tamanho de 50 pontos. Imaginemos também que a estratégia tem um stop de ganho de exatos 50 pontos. A maioria dos robôs que estivesse operando com dinheiro real neste trade não faria o stop neste candle. Isto porque para estes robôs a posição provavelmente não andou os 50 pontos necessários para se atingir o stop, visto que o preço médio de sua posição foi próximo ao topo do candle, mas não idêntico:

Candle mostrando que o preço de abertura é diferente do preço médio de posicionamento

Candle mostrando que o preço de abertura é diferente do preço médio de posicionamento

Outro erro comum em simulações é o registro de ordens a preço de fechamento de candles. A forma mais correta, que é como é feita na prática a negociação, é o registro da ordem na abertura do candle seguinte em que esta foi sinalizada pelos indicadores. Imagine que você esteja investindo aguardando o cruzamento de duas médias móveis, no candle atual as médias podem se cruzar e descruzar várias vezes enquanto este não é fechado. Por isto é preciso aguardar o fechamento do candle para a confirmação da operação e opera-se na abertura do candle seguinte.

Repare que no parágrafo acima falei ORDENS e não NEGÓCIOS. Quando falamos de ordens a mercado o preço de execução provavelmente será diferente da ordem, seja: o preço de abertura do candle em que a ordem foi emitida; o preço do último negócio no ativo no momento em que a ordem foi enviada.

Para o caso do uso de ordens limite, é necessária uma lógica mais complexa no robô, explicando, além de a que preço limite se envia as ordens, o que fazer com ordens não executados e parcialmente executadas. Este aumento na complexidade faz com que a correta simulação de estratégias que usem esse tipo de ordem só seja possível com dados tick by tick ou mais completos.

Liquidez

A liquidez não é um problema, mas a desconsiderá-la sim. É preciso adequar, de alguma forma, seus testes à liquidez do ativo. Outra forma de se dizer isso seria: garantir que o volume que você usa nas simulações seria efetivamente negociado ao preço que se registra nas ordens simuladas.

Uma forma simples de conferir se a liquidez é suficiente é acompanhar o livro de ofertas (Book) do ativo negociado e avaliar até onde sua ordem “agressora” iria:

Book de Ofertas WIN Mini Índice Futuro

Book de Ofertas Mini Índice Futuro (WIN)

Na imagem acima, vemos o Book de Ofertas do mini índice futuro durante o pregão. Imaginemos que queremos vender 5 contratos do mini índice neste momento. Poderíamos:

  • Deixar uma ordem limite “pendurada” a 57.340, ou qualquer valor maior e aguardar que ela seja completada.
    • Pode ser que ela não seja executada, ou seja executada apenas parcialmente, caso o mercado caminhe no sentido oposto.
  • Mandar uma ordem a mercado de venda, vendendo 5 contratos para a ponta compradora (azul, na imagem acima), cujo melhor preço é de 57.335 para compra de até 8 contratos.

Agora imaginemos que não queremos vender 5 e sim 15 mini contratos, os preços da ordem a mercado seriam:

  • 8 contratos a 57.335
  • 7 contratos a 57.330
  • Preço médio: 57.332,67

Parece pouco a diferença (2,33 pontos), porém quanto mais o robô operar mais ele vai perder (ou deixar de ganhar), por trade, e a soma disto é muito relevante no resultado final. Assim, mesmo em um ativo de alta liquidez, o volume negociado afeta o preço médio de execução das ordens. Para ordens a mercado quanto mais se pretende negociar pior será o preço, pois mais fundo se precisará ir no Book até o fechamento completo da ordem.

Book de Ofertas LREN3 - Lojas Renner

Book de Ofertas LREN3 – Lojas Renner

Vejamos agora um ativo de menor liquidez, como a ação negociada na Bovespa LREN3 (Lojas Renner). Como pode-se ver na imagem acima, existe uma distância (gap) de 14 centavos entre a melhor oferta de compra (R$26,06) e a melhor oferta de venda (R$26,20). Parece pouco, mas representa 0,5% de variação no preço do ativo, tal variação no mini índice equivaleria a mais de 250 pontos!

Uma simulação com robôs investidores correta, de qualquer estratégia de investimentos, deve então, para não trazer resultados irreais, levar de alguma forma a liquidez em consideração nos seus resultados. Uma forma muito comum é o uso do “slippage“, que é feito piorando toda ordem com relação ao preço teórico – ordens de compra são registradas mais caras e de venda mais baratas. Algumas plataformas de negociação dão a opção de se configurar um valor, fixo ou percentual, para ser considerado como slippage em seus testes.

Slippage

slippage é a diferença entre o preço teórico de execução de uma estratégia de investimentos e o preço real de negociação da mesma. Usamos o termo para referir-nos tanto à fórmula: [preço de execução simulado] = [preço teórico da ordem] * [1 +- [slippage]] ; quanto ao conceito amplo da diferença entre o preço teórico e o preço de execução de ordens.

O que é importante saber é que toda simulação de investimentos apresentará slippage, e o que pode ser é feito é considerá-lo corretamente em suas simulações para que se tome decisões – como qual de suas inúmeras variações de sua estratégia mandar para conta real – com base em informações corretas. Calcular o slippage a mais ou a menos levará à escolha de estratégias ruins.

Quando se tem acesso a uma base de dados tick by tick é possível fazer simulações que estimam o slippage de forma mais real e precisa, sem recorrer a um valor fixo ou percentual a ser inserido em uma fórmula.

Slippage real

Também é importante acompanhar o slippage real. Uma explicação prática sobre o que seria o slippage real: imagine dois robôs em execução na Plataforma SmarttBot, um operando na conta do cliente na corretora e outro em conta simulada. A diferença entre os preços de execução das ordens do robô em conta real para o robô em conta simulada é o slippage real, que varia de acordo com o volume negociado, a lógica da estratégia e como se considera o preço de execução das ordens nas simulações.

Calcular o slippage real de seus robôs, estratégias e setups, etc. fornece uma informação valiosa para qualquer investidor. Ao entender como seu robô se comporta realmente no mercado, em diferentes faixas de volume, com relação ao resultado obtido em conta simulada, o investidor consegue interpretar melhor seus relatórios de performance para escolher os parâmetros de seus robôs. Por isto é sempre recomendado:

  1. Iniciar operações em conta real com volume menor que o pretendido e ir aumentando gradativamente.
  2. Acompanhar e comparar as operações dos robôs em conta real com robôs simulados, com os mesmos parâmetros (clones), pelo menos no início das operações.
    • Calcular o slippage real e observar, de preferência no gráfico, as diferenças de posicionamento.
  3. Sempre adeque seus testes ao volume que pretende operar.
  4. Saber que a simulação, por sua natureza, nunca gerará resultados idênticos aos obtidos com dinheiro real. Lucros no passado, com dinheiro real ou não, não são garantia de resultados futuros.

slippage é algo inerente à simulação de investimentos, que não pode ser eliminado, mas pode ser administrado. Entender o processo e seguir os passos acima é importante para não se surpreender com resultados reais diferentes de resultados simulados. Para trades mais longos, com tempos posicionados maiores, o slippage torna-se menos significativo. Já para operações day-trade de menores periodicidades – e stops ou alvos mais curtos – considerá-lo corretamente é um desafio, senão impossível.

Slippage real positivo?

slippage real pode ser positivo ou negativo. Em alguns trades consegue-se um preço de execução melhor que o preço teórico, obtendo assim resultado positivo. Em outros, devido ao volume negociado ou a movimentos rápidos dos preços, só se consegue executar as ordens a um preço pior do que o desejado.

Algumas pessoas, devido a isso, dizem que slippage tende a zero, o que não é verdade para todas situações. Cada método de simulação erra as vezes mais para um lado e mais para o outro, isto com relação ao preço que se conseguiria operar na prática versus o preço anotado pelos testes. Isto é válido apenas para métodos avançados de simulação, que não calculem o slippage simplesmente através de uma fórmula com uma constante – tais métodos necessitam, pelo menos, de dados tick by tick.

Um slippage positivo ou que tenda a zero – após um número representativo de operações – é possível. Basta que seu método de simulação esteja ajustado com a forma que sua estratégia se comporta na prática. Também é possível medir o slippage real e identificar se seus testes, para um conjunto de estratégia e parâmetro, tendem a anotar mais ou menos lucro para o robô simulado com relação ao em conta real.

Como diminuir o slippage na simulação com robôs

Mesmo sendo algo sempre presente, existem soluções para se obter resultados consistentes mesmo com o slippage. Existem robôs que naturalmente apresentarão um slippage real mais alto porque fazem:

  • Posicionamentos curtos: de poucos minutos ou menos
  • Operações em ativos de baixa liquidez
  • Operações no after market
  • Simulações em momentos de altíssima volatilidade

Por isso, os resultados de simulações de certos tipos de estratégias dificilmente serão próximos ao obtido em operações com dinheiro real, mesmo com o uso de dados tick by tick. Então lembre-se de sempre calcular e acompanhar o slippage real de cada setup. Uma estratégia como estas seria:

operação no cruzamento do preço com média móvel de 3 períodos do mini índice futuro (WIN%), negociando 10 contratos por vez, fazendo reversões (ordens de 20 contratos)

Tradicionalmente todos ativos também apresentam comportamentos diferentes em diferentes horas do dia. Experimentar diferentes valores nos filtros de horário do seu robô, definindo hora inicial e final para operações no dia, permite ajustar as operações do robô aos horários em que os parâmetros escolhidos apresentam melhores resultados.

Filtros de Horário disponíveis na Plataforma SmarttBot

Filtros de Horário disponíveis na Plataforma SmarttBot

Dica: caso não queira parar de operar em nenhum horário experimente usar dois robôs, com parâmetros diferentes, para diferentes momentos do pregão (por exemplo, um robô que negocia da abertura até meio dia e o outro que só negocia a partir daí)

Estratégias personalizadas para diminuir o slippage

Vários investidores já usaram, e usam, o serviço da SmarttBot de desenvolvimento customizado de estratégias. Nesta modalidade a SmarttBot programa um robô exclusivo de acordo com a vontade do cliente. Recebemos constantemente a demanda por novos (ou alterações de) robôs que incluam técnicas para minimizar o slippage.

As técnicas mais comuns que executamos explicarei a seguir. Caso você tenha interesse em um robô personalizado com sua estratégia preencha este formulário. Adaptações de estratégias prontas, como a Tangram Bot e a Tangram Bot 2 – a ser lançada em breve – são feitas a um preço reduzido, já que não é necessário programar uma estratégia nova por inteiro.

Uso de preço teórico para cálculo de stops

Uma modificação muito comum que executamos é o ajuste de estratégias para utilizarem o preço teórico e não o preço médio (preço real) para cálculo de stops e outros valores relacionados. Esta é uma forma de garantir que robôs simulados e reais operarão sempre no mesmo momento, até se estiverem negociando volumes diferentes, apesar de não garantir execução de ordens nos mesmos preços, assim o resultado dos robôs pode variar.

A explicação do uso do preço teórico é simples, imaginemos que – enquanto se opera PETR4 no candle de 10 minutos – ocorreu uma sinalização de compra no candle das 12:30 (que vai até 12:39:59). A compra se daria então próxima ao preço de abertura (preço do primeiro negócio) do candle de 12:40. Imaginemos que o preço de abertura da PETR4 no candle de 12:40 foi de R$12,30. O robô opera com stop de ganho fixo em R$0,50. O preço de disparo do stop de venda dele seria de R$12,80 independentemente do preço médio de execução.

No exemplo acima, um robô que operasse 100 ações operaria no mesmo momento que um que estivesse programado para negociar 1.000 ou 2.000 – e estes robôs também sairiam da operação no mesmo momento. Pode ser que o robô que negocie apenas 100 ações conseguiu comprar a, por exemplo, R$12,31 – em média – enquanto o robô que negocie 1.000 ações consiga um preço médio de R$12,34. Usando o preço teórico ambos robôs dispararão uma ordem de saída por stop de ganho quando o preço atingisse R$12,80, mesmo tendo preços médios de entrada diferentes.

Podemos concluir que, se todos robôs enviarem ordens a mercado, quanto menor o volume negociado maior será o lucro bruto (ou menor será o prejuízo) da operação. Também, quanto maior a liquidez – ou volume negociado médio do ativo – menor será o slippage. Foi usado lucro bruto e não simplesmente lucro por que em algumas situações pode-se ter vantagem negociando volumes maiores, mesmo com um slippage maior. São os casos em que paga-se corretagem por ordem e não por ativo (ação ou contrato) e em que a economia com a corretagem, ao se mandar uma ordem de volume maior, compense o slippage de se operar este volume. Em todos casos os custos operacionais devem ser considerados nos testes para que se possa identificar situações como essa.

Uso de ordens limite em sua estratégia

Esta modificação é sem dúvida a mais popular entre nossos clientes. O uso de ordens limite aumenta a complexidade da estratégia, porém, pode eliminar totalmente o slippage. O aumento de complexidade se dá porque é necessário definir e programar o robô para se comportar de acordo com novas situações. Além de definir a que preço se envia as ordens limite, caso elas fiquem penduradas, é preciso especificar:

  • O que fazer com ordens executadas parcialmente
  • O que fazer com ordens não executadas

Para ambas as perguntas não existe resposta certa. Listo as formas mais solicitadas nos robôs customizados que desenvolvemos, porém não fique preso a elas:

  1. Envia a ordem limite e, caso não executada ou executada parcialmente, após X segundos cancela a ordem e envia a mercado
  2. Envia a ordem limite e, caso não executada ou executada parcialmente, não opera naquele posicionamento ou opera com posição reduzida

A segunda opção acima garante slippage real zero, com relação ao preço de execução, porém o robô pode ficar fora de operações ou não conseguir participar de outras com volume total.

Como ocorrem as simulações na Plataforma SmarttBot?

A plataforma SmarttBot utiliza dados tick by tick (negócio a negócio) para registrar seus negócios simulados. Nosso simulador aguarda o envio de ordens e as registra nos preços dos próximos negócios que ocorrerem nos ativos, até a quantidade total da ordem ser atendida. Acreditamos que esta é uma forma mais precisa que a “fórmula” tradicional e suas principais vantagens são:

  • Resultados que variam de acordo com o volume negociado
  • Maior precisão em momentos de movimento mais rápido / maior volatilidade
  • Apresenta resultados consistentes em robôs que utilizam ordens limitadas
  • Slippage real tendendo a zero

Tais testes exigem grande esforço computacional, afinal, para cada robô – em simulação ou operação real -, deve-se enviar e processar os dados de todos negócios realizados, em todos ativos acompanhados pela estratégia. Porém na SmarttBot acreditamos que este é o nível de qualidade mínimo para uma simulação de qualquer estratégia de investimentos.

Apesar de todos os esforços diferenças e slippage real sempre acontecerão. Em momentos em que, por exemplo, um stop é atingido e logo depois o mercado muda de sentido, um robô simulado e um real – operando com os mesmos parâmetros – podem estar posicionados tendo preços médios de entrada diferentes. Neste caso, é possível que um robô seja “stopado” e o outro não, mantendo-se posicionado enquanto o mercado se inverte. Esta situação pode ser boa – quando não se atingiu um stop de perda enquanto o mercado mudava de sentido e a posição passou a ser vencedora – ou ruim – quando se deixa de acionar um stop de ganho e a posição passa a ficar negativa.

Espero que tenha gostado do conteúdo. Caso ainda tenha dúvidas você pode preencher este formulário que um de nossos especialistas entrará em contato para esclarecer qualquer ponto. Não se esqueça de se inscrever em nossa newsletter para receber novos materiais e ser avisado de novidades!

Abraços e bons Trades,

Ex agente autônomo, apaixonado por estratégias de investimento e inovação! Sócio fundador da SmarttBot, atua desde 2007 no mercado financeiro.