Eu adicionei com sucesso a estratégia no meu gráfico, mas isso não gera nenhuma ordem

Se a aba "Lista de Trades" e "Visão Geral" do Testador de Estratégia exibir a informação "Sem Dados" após você adicionar uma estratégia ao gráfico, é provável que ela não simule nenhuma ordem, o que resulta na ausência de dados para popular as tabelas. Se o seu script não está gerando orders, pode ser que seja devido a uma das seguintes razões:

O script não está classificado como uma estratégia ou não usa comandos para criar ordens

O Backtesting com o Testador de Estratégia só funciona com as estratégias do Pine Script™, as quais usam a função `strategy()` para suas declarações. Os scritps declarados com indicator()` ou `library()` não podem interagir com o módulo do Testador de Estratégia.

Os scripts declarados com estratégias deve usar os comandos de colocação de orden 'strategy.*' (ex.:
`strategy.order()` ou `strategy.entry()`) para simular ordens e exibir dados no Testador de Estratégias, independente de quaisquer outros sinais de compra/venda que o autor do script possa ter incluído no código.

A estratégia não tem fundos suficiente para abrir uma posição

Para que uma estratégia entre em uma posição, ela deve ter dinheiro suficiente para comprar um número específico de contratos/lots/ações/unidades. Ela não entrará em uma negociação se ela não possuir fundos suficientes para cobrir os custos. Por exemplo, se o capital inicial de uma estratégia é de 1000 dólares americanos e o tamanho da ordem é de um contrato, ela não poderá entrar na posição a menos que o preço do ativo seja menor que os 1000 dólares americanos disponíveis, uma vez que, ela não pode pagar pela negociação. As estratégias sempre tentarão comprar o número específico de contratos/ações/lots/unidades e nada a mais.

Algumas observações importantes sobre o backtesting de futuros:

Símbolos de futuros normalmente possuem o que é conhecido como uma Unidade de Contrato (representada como o Valor do Ponto no TradingView e que é acessível por meio da variável `syminfo.pointvalue`). Assim como outros símbolos, o preço bruto no gráfico representa o preço de uma unidade da comodity negociada. Entretanto, contratos futuros possuem uma quantidade definida que cada um representa, logo comprar uma única unidade não é normalmente possível. Para calcular o capital necessário para um contrato, multiplique o preço no gráfico pelo Valor do Ponto.

Para demonstrar os efeitos do Valor do Ponto nas estratégias que operam símbolos de futuros, vamos olhar o símbolo CME_MINI:ES1!, que representa o contrato futuro de ES com a melhor liquidez e que tem um Valor de Ponto de 50:


No exemplo abaixo, a estratégia que adicionamos no gráfico entrou na posição a US$ 4000 e saiu em US$ 4500. A quantidade real de dinheiro gasto no contrato no preço de entrada foi de US$ 4000 vezes o Valor de Ponto de 50, que é US$ 200.000. Quando a estratégia fechou a posição no preço de saída, o valor recebido foi de US$ 4500 * 50 = US$ 225.000, o que resultou em um lucro de US$ 25.000, que pode ser confirmado ao ver a coluna "Lucro" da tabela "Lista de Trades" no Testador de Estratégia:

Se a estratégia inicial tinha um Capital Inicial menor que US$ 200.000 nesse caso, ela não teria sido capaz de colocar uma ordem, já que ela não conseguiria pagar pelo preço de entrada, que era 50 vezes o preço mostrado no gráfico. Para simular a posição, nós devemos aumentar o valor de Capital Inicial ou baixar os valores de Margem Comprada/Vendida para permitir a estratégia pagar pela operação.

A estratégia retorna um erro runtime

Se a estratégia encontrar um problema durante seus cálculos, ela irá sinalizar um erro runtime e exibirá um marcador de exclamação vermelha no canto superior esquerdo do painel do gráfico que contêm a estratégia. Os erros Runtime pausam os cálculos do script, logo ele não pode simular as ordens. Os diferentes erros de runtime no Pine tem diversas causas e correções em potencial. Clicando na marca de exclamação, ela irá exibir uma mensagem de erro do script.

As condições necessárias para colocar uma ordem da estratégia não foram satisfeitas.

Uma das causas possíveis para uma estratégia não está mostrando nenhuma dado é que nenhuma condição acionou uma ordem ao longo do range do teste. Nesse caso, não haveria no gráfico porque não há ordens para serem executadas. Os usuários podem corrigir isso mudando as condições no código-fonte da estratégia. Pode ser útil inspecionar visualmente o histórico de condições das ordens da estratégia por meio da plotagem deles no gráfico.

O script abaixo usa a função `plotshape()` do Pine para plotar cruzes azuis e vermelhas acima das barras sobre as ocorrências de condições de compra e de venda, o que nos permite inspecionar seu histórico no gráfico:

//@version=5strategy('My Strategy', overlay = true)longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))if longCondition    strategy.entry('Long', strategy.long)plotshape(longCondition, color=color.new(color.blue, 0))shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))if shortCondition    strategy.entry('Short', strategy.short)plotshape(shortCondition, color=color.new(color.red, 0))
Java

Para mais informações sobre esse assunto, veja nossa página sobre Debugging no Manual do Usuário.

As Propriedades da estratégia estão incorretas

Cada estratégia possui vários parâmetros que governam as regras de abertura de ordens. Os autores podem definir esses parâmetros no código-fonte da estratégia, e os usuários podem sobrescrever eles com inputs na aba "Propriedades" das configurações da estratégia.

NOTA: Há vários lugares no código-fonte da estratégia onde os usuários podem definir o número de contratos/ações/lots/unidades para suas ordens:

  • Os parâmetros da função `strategy()` permitem que o usuário defina a quantidade e tipo padrão da negociação, ela define os valores padrão na aba "Propriedades". Usuários podem sobrescrever esses valores ao ajustar os inputs de "tamanho da Ordem".
  • Os comandos de colocação de ordens que geram ordens de entrada, como `strategy.entry()`, podem definir a quantidade negociada em uma base de ordem por ordem. Nesse caso, as mudanças no input da aba "Propriedades" não vão afetar o tamanho da ordem da estratégia.

Os Usuários devem garantir que eles especificaram o tamanho das ordens da estratégia corretamente. Para acrescentar ao que foi dito na sessão acima "A estratégia não tem fundos suficiente para abrir uma posição", você deve observar que:

  • Se o "Tipo de Ordem" da estratégia estiver definido como "Contratos" (o equivalente para `strategy.fixed` como o default_qty_type no código-fonte), o tamanho da ordem deve ser maior que 1 para a maioria dos símbolos. Algumas criptomoedas permitem tamanhos fracionados. Por exemplo, um tamanho de ordem de 0.1 é possível para BTCUSD, mas não para AAPL ou EURUSD.
  • O tamanho da ordem deve ser positivo; números negativos vão causar errors de runtime, e um valor de 0 não terá efeito algum.
  • O tamanho total da posição (número de contratos) não pode exceder 1e12. As estratégias não vão simular novas ordens se o tamanho da oposição exceder esse número.