Não existe perfeição…e quando falamos de software é difícil acharmos um que não tenha bugs ou pontos de melhoria (que as vezes tem uma análise mais subjetiva…uma melhoria para um usuário pode não ser para outro).
Este documento visa abordar as limitações conhecidas da plataforma Profit Chart referentes a automatização de estratégias e backtesting. Trata-se de uma base de dados em constante evolução, que pode crescer ou diminuir (assim esperamos) a medida que os membros da comunidade apresentarem novos itens, ou se a Nelógica lançar atualizações da plataforma para tratar as questões apresentadas.
Primeiramente, antes de começarmos precisamos fazer justiça e ressaltar que em termos de disponibilização de ferramentas para análise de mercado, a Plataforma Profit Chart entrega muitas funcionalidades interessantes e é uma plataforma muito bem aceita pelos traders! Nosso papel é um pouco cruel, pois vamos ser bem críticos neste documento, mas sem desmerecer a qualidade do software Profit Chart!
Nossos olhares estarão direcionados ao módulo de Editor de Estratégias que vinha recebendo pouca atenção até meados de Agosto/2022, quando a Nelógica começou a lançar atualizações referentes à automação de estratégias.
A primeira atualização do Editor de estratégias que nos chamou a atenção foi a possibilidade de usar dados de preço de múltiplos ativos nas estratégias. Isso era algo desejado há muito tempo e apesar de ainda haver algumas limitações nessa funcionalidade, a atualização já abriu várias oportunidades para elaborar novas estratégias. Se quiser saber mais sobre isso, assista ao vídeo que fizemos sobre estratégia baseada em múltiplos ativos no Youtube da Comunidade.
Recentemente, ainda tivemos a disponibilização da versão 5.2.2.121 na qual foi lançado o módulo de Automação de Estratégias, permitindo rodar Estratégias de Execução (robôs) em conta simulada. Esta também era outra funcionalidade há muito tempo demandada à Nelógica (clique aqui para conhecer o módulo de automação de estratégias), que em breve permitirá rodar os robôs em conta real! Será uma revolução!
Estamos vendo com muito bons olhos o esforço da Nelógica em melhorar as funcionalidades relacionadas à automatização das estratégias! Assim, esperamos que este documento também alcance a equipe de desenvolvimento da Nelógica e que possamos contribuir para o aprimoramento da Plataforma por meio das sugestões apresentadas!
Sem mais delongas, veja abaixo as limitações da Plataforma Profit Chart listadas pela Comunidade NeoTraderBot, bem como observações sobre a evolução da situação de cada item.
Limitações conhecidas da Plataforma Profit Chart
Legenda:
O código fonte desenvolvido para backtesting não pode ser exatamente o mesmo que será executado como robô no Módulo de Automação.
Seria interessante se houvesse compatibilidade entre os dois contextos, evitando assim retrabalhos e erros de tradução de código para que este funcione em áreas distintas dentro do mesmo software.
Sugestões:
- Implementar um gestor de ordens em ambiente backtesting para que as ordens sejam tratadas da mesma forma em Backtesting e no Módulo de Automação;
- Tratamento das ordens de cobertura no Módulo de Automação, pois não são reconhecidas nesse contexto;
- Estratégias com multi-objetivos (coloração, indicador e execução) quando utilizadas no Módulo de Automação ou em gráficos em tempo real são incluídas como diferentes instâncias, que dependendo do objetivo também são processadas de formas diferentes, gerando descasamento de informações.
Embora haja dados tick a tick, as ordens são enviadas apenas no fechamento dos Candles e este comportamento não pode ser alterado.
Sugestões:
- Refatorar as funções de ordens para que permitam execução no tick ou no fechamento da barra, cabendo essa decisão ao programador.
Para backtesting de estratégias baseadas em renko, não é possível garantir encerramento de posição de daytrade porque as ordens são executadas apenas no fechamento do box.
Sugestões:
- Reestruturar o modelo de simulação de renko para que o backtesting permita encerrar posição dentro do box que contiver o horário desejado.
Seguem abaixo os pontos observados em relação ao recém lançado Módulo de Automação de Estratégias (lançamento oficial em 29/set/2022)
- Velocidade de replay impacta preço de abertura de posição. Se executa replay em 1x, o preço de abertura de uma posição é diferente se fosse executado em 10x, para todas as demais condições de código e simulação iguais. Por que acontece isso em replay?
- Estratégias que possuem indicadores são inseridos como uma instância separada da instância que realiza a execução de ordens. Isso gera problemas de consistência entre um plot baseado em preço de posição com o preço efetivamente realizado na instância de execução da estratégia;
- Processamento de replay é muito lento. Mesmo em 10x. Seria possível aprimorar isso? Executar o processamento dos dados em maior frequencia do que a renderização (amostrando renderização).
- Não há funções NTSL para retornar resultado bruto no momento.
O acesso a dados de 1 minutos (por exemplo) é muito limitado . A plataforma consegue recuperar apenas os últimos 3 (três) meses de dados de preço com frequência de 1 minuto. Para desenvolvimento de estratégias de alta frequência, otimização e backtesting, esse é um volume muito pequeno de dados.
Felizmente, à medida que utiliza-se dados com menor frequência (5, 15 60 minutos, 1 dia) é possível obter uma janela maior de dados históricos. Por exemplo, se o usuário demandar dados de 15 minutos, a plataforma recupera 6 anos. O que nesses casos demonstra-se adequado.
Sugestões:
- Permitir que o usuário puxe mais dados da base, quando for conveniente;
- Permitir carregar série de dados OHLCV (Open, High, Low, Close, Volume) para fins de backtesting.
USERVOICE: PERMITIR IMPORTAÇÃO DE DADOS OHLCV e Tick PARA FINS DE BACKTESTING [NeoTraderBot]
Para desenvolvimento de estratégia o trader/programador não possui acesso à dados de negociação (times & trades) com granularidade suficiente para implementar lógicas que se baseiem na forma como as negociações estão ocorrendo no mercado.
Tampouco, há acesso para a informações do Book de ofertas, quantidade de ordens por nível de preço, volume das ordens, corretora, etc…Não ter esse tipo de dado disponível também cria limitação na implementação de estratégias que se baseiem em fundamentos diferentes da análise técnica.
Sugestões:
- Criar funções no editor de estratégia para obter acesso amplo à negociações realizadas no último tick;
- Criar funções no editor de estratégia para obter acesso às informações do book de ofertas.
A plataforma não apresenta funcionalidade para auxiliar a tarefa de otimização de parâmetros de estratégias.
Por exemplo, caso o usuário implemente um robô baseado em cruzamento de média, a plataforma poderia auxilia-lo na definição do número de períodos mais adequado para a média por meio da maximização ou minimização de alguma métrica, tal como maximização do percentual de operações vencedoras, ou minimização do drawdown médio das operações.
Sugestões:
- Criar funcionalidade para otimizar “parâmetros” das estratégias em função de uma métrica escolhida pelo usuário.
USERVOICE: CRIAR OTIMIZADOR de Estratégias no Profit [NeoTraderBot]
No Profit, toda estratégia de execução precisa estar vinculada a um gráfico de um ativo. Desta forma, não é possível criar ordens em um ativo baseado em sua posição em outros ativos. Ou seja, não há possibilidade de criar uma estratégia para operar uma correlação entre múltiplos ativos.
Esta limitação do Profit impede, por exemplo, de se criar uma estratégia para gestão de portfolio ou estratégias de arbitragem, entre outras…
Sugestões:
- Alterar funções de Backtesting (IsBought, IsSold, SellPrice, BuyPrice, etc…) para que o usuário informe o código do ativo. Por default, o código seria o ativo no qual a estratégia de execução está rodando;
- Permitir executar em conta real estratégias que não estejam vinculadas a nenhum ativo específico;
USERVOICE: PERMITIR CRIAÇÃO DE ESTRATÉGIAS que envie ordens em DIFERENTES ATIVOS [NeoTraderBot]
Antes da versão beta 5.2.2.121 do Profit Chart, o debug do editor de estratégias não possuía opção de “continuar”. Ou seja, uma vez pausado o código em um breakpoint, o usuário tinha que percorrer linha a linha ou terminar de executar tudo de uma vez. Não era possível executar o código de uma vez até o próximo breakpoint.
Outra limitação era o fato de não haver a possibilidade de criação de breakpoint condicional. A atualização mencionada passou a permitir criar breakpoint baseados em timestamp (horário), o que já representou um avanço na ferramenta.
Sugestões:
- Permitir criação de breakpoints baseados em valor específico de uma variável;
- Permitir inspeção de expressões com base nos valores atuais das variáveis quando o código estiver pausado em um breakpoint;
USERVOICE:MELHORAR poder de Depuração da NTSL – MELHORAR DEBUG [NeoTraderBot]
Segue abaixo uma relação de ítens a serem melhorados no Editor de estratégias. A medida que forem sendo resolvidos pelas atualizações da plataforma, iremos sinalizar com a tag RESOLVIDO (Versão XXX).
- Não é possível alterar o valor dos parâmetros da estratégia no modo de exibição misto;
- Não é possível utilizar funções de indicadores passando como parâmetro o ativo no qual se deseja calcular o indicador;
- No desenvolvimento de indicadores, não é possível via código definir preenchimento e cor de preenchimento entre duas séries de dados. Isto invialibiliza preencher entre séries quando há mais do que 2 séries plotadas;
- Não há uma forma sistematizada de inicializar variáveis globais;
- Na linguagem NTSL, não há comando “break” para os controles de repetição (for e while);
- Não há constantes definidas para valores máximos e mínimos de integer e float;
- Não há função built-in (já implementada) para manipulação básica de arrays, tais como obter valor máximo, valor mínimo, ordenar…etc)
- Ao utilizar o depurador estando o mercado aberto, a medida que chega novos dados, ainda que você esteja parado em um breakpoint, os plots se movimentam, dificultando a depuração
Sugestões:
- Criar função para preenchimento entre séries;
- Refatorar as funções de indicadores para que haja um parâmetro da série do ativo que se deseja calcular o indicador;
- Adicionar aba de “Parâmetros” às “Propriedades da Estratégia” para configurar valores dos parâmetros da estratégia no modo de exibição misto;
- Padronizar função OnInit para o usuário poder inicializar da forma que desejar as variáveis antes da estratégia começar a rodar;
- Incluir comando de break na linguagem NTSL para os controles de repetição;
- Definir constantes de valores máximos e mínimos dos tipos de dados Integer e Float;
- Criar algumas funções embutidas para manipulação de array, tais como: max, min e sort.
USERVOICE:MELHORIAS DIVERSAS em NTSL [NeoTraderBot]
USERVOICE:Criação de Bloco de INICIALIZAÇÃO na linguagem NTSL [NeoTraderBot]
USERVOICE: Criar nova ABA de ORDENS na seção de Estatística do Editor de Estratégias [NeoTraderBot]
Antes da versão beta 5.2.2.121 do Profit Chart, as estratégias de execução (robôs) só podiam ser usados para fins de backtesting, análise de desempenho em dados históricos e visualização nos gráficos de recomendação de operação, cabendo ao trader efetuar as operações sinalizadas pela estratégia.
O novo Módulo de Automação de Estratégias, lançado na versão beta mencionada, passou a permitir a execução de robôs em tempo real nas contas de simulação. Isto foi um grande avanço e que já prepara a plataforma para permitir rodar os robôs em conta real.
Acredito que essa atualização do Profit mais conservadora seja motivada para corrigir eventuais bugs do módulo antes de liberar para contas reais (acho isso bem responsável por parte da Nelógica!).
Sugestões:
- Permitir execução de robôs programados pelo próprio usuário em contas reais.
Caso tenham verificado outras limitações da plataforma Profit Chart, gentileza escrever nos comentários desse artigo, bem como sua sugestão de melhoria. Iremos, sempre que possível, complementar a lista com as observações dos membros da Comunidade.
Boa Noite!
Gostaria de saber se eu consigo cria uma ordem oco no momento que crio uma ordem limite (automação de estratégia). Ou se só é possível após a execução da ordem limite.
Obrigado