Depuração no PyneIDE
Pause o programa em um ponto de interrupção e confira suas variáveis candle a candle.
Um código pode seguir as regras da linguagem e ainda calcular um resultado diferente do desejado. Com o depurador, você pode pausar a execução, examinar as variáveis e acompanhar as instruções uma a uma.
Neste capítulo, você vai examinar a distância entre o fechamento e a média móvel de cinco. Primeiro, fará uma previsão; depois, verá o que o programa calculou.
Três tipos de erro
Um erro de sintaxe viola uma regra de escrita do código. Pode ser a falta de dois-pontos ou uma indentação incorreta. O editor costuma apontá-lo enquanto você digita.
Um erro de execução acontece enquanto o programa é executado. Por exemplo, você tenta ler um índice do array para o qual não existe elemento. Nesse caso, a execução pode parar com uma mensagem de erro.
Com um erro de lógica, o programa pode continuar funcionando. Se o código usar average - close em vez de close - average, o sinal do resultado será invertido. As regras da linguagem não proíbem isso; cabe a você comparar o resultado com o objetivo.
O painel View → Problems do Visual Studio Code reúne os problemas indicados pelo editor. Clique em uma linha para ir ao local do erro. Leia a mensagem detalhada antes de começar a alterar várias linhas.
Um programa para examinar
Crie o arquivo debug_average.py:
"""
@pyne edge
"""
from pynecore import Series
from pynecore.lib import bar_index, close, color, log, plot, script, ta
@script.indicator("Average Distance", overlay=False)
def main():
average: Series[float] = ta.sma(close, 5)
gap = close - average
if bar_index == 10:
log.info("close={0}, average={1}, gap={2}", close, average, gap)
plot(gap, "Distance", color=color.blue)bar_index é o índice do candle em processamento e começa em zero. O índice 10 corresponde ao décimo primeiro candle. Por isso, a chamada de log escreve apenas uma vez nesta execução histórica.
log.info cria uma mensagem formatada. {0}, {1} e {2} são substituídos pelos três valores fornecidos em seguida, nessa ordem. O sistema de log processa o texto com esses espaços numerados.
Execute o programa uma vez com Run Pyne code. A linha deve ser positiva quando o fechamento estiver acima da média. Nos quatro primeiros candles, tanto a média quanto a distância estão ausentes.
Pause antes de uma linha específica
- Clique à esquerda do número da linha de
plot(gap, ...). Aparece a marca do ponto de interrupção. - Acima do código, clique em Debug.
- Se aparecer a seleção de dados, escolha a linha
demo. - O programa para no ponto de interrupção. Abra o painel Run and Debug.
Um ponto de interrupção é um local em que o depurador pausa o programa. A linha destacada ainda não foi executada. Você já pode examinar os resultados das atribuições anteriores a ela.
A primeira pausa pode acontecer no primeiro candle. Nele, gap está ausente, pois não há uma janela completa de cinco candles. O depurador mostra essa situação; a ausência, por si só, não é um erro do programa.
Vá até um candle depois do aquecimento
Na barra flutuante exibida durante a depuração, o botão Next Bar do PyneIDE avança para o próximo candle. Passe o ponteiro sobre os ícones para ler seus nomes. Encontre Run to Bar…, clique nele, digite 10 no campo que aparece e pressione Enter.
No décimo primeiro candle, já há uma janela completa de média de cinco. Na lista Variables, procure average e gap. No grupo Pyne, confira os dados do candle processado, incluindo bar_index e close.

average é uma variável Series, por isso você também pode usar seu valor anterior no código com average[1]. A média do candle anterior não precisa ser igual à atual, pois a janela avançou um candle.
Expressões monitoradas
Na seção Watch, você pode acrescentar uma expressão para examinar a cada pausa. Experimente:
close
close[1]
average
close - averageclose[1] é o fechamento anterior ao candle em que a execução está pausada. average é sua própria variável. O resultado de close - average deve coincidir com o valor de gap já calculado.
Monitore variáveis e cálculos simples. Não coloque em Watch chamadas de ta.sma, operações que enviam ordens ou chamadas que modificam arrays. A conferência no depurador não deve alterar o estado do programa.
Linha a linha e candle a candle
Step Over avança até a próxima instrução sem entrar nos detalhes de uma função chamada. Step Into pode entrar em uma função sua. Continue retoma a execução até a próxima pausa; Disconnect encerra a conexão com o depurador e termina a depuração.
Next Bar trabalha em outra escala: leva ao próximo candle. O avanço linha a linha mostra em detalhes o cálculo de um único candle; o avanço candle a candle mostra como o resultado muda no tempo.
O processamento do candle pausado ainda não terminou, por isso o gráfico pode mostrar o estado concluído anteriormente. Confira o índice e os dados do candle atual no grupo Pyne.
Antes de ler uma variável, observe a linha destacada. Se a atribuição ainda estiver adiante, a variável não contém o resultado que você espera agora.
Encontre um erro de sinal
Pare o depurador. Modifique esta linha:
gap = average - closeInicie a depuração novamente e vá até o mesmo candle. Se o preço estiver acima da média, gap será negativo, embora o exercício peça uma distância positiva.
Em Watch, close - average continua mostrando a direção original, desejada. Comparar os valores revela a diferença imediatamente. Restaure a subtração correta e confira novamente no mesmo candle.
Tente por conta própria
Acrescente a variável previous_close = close[1] ao programa e examine-a no depurador. No candle de índice 10, o fechamento de qual índice ela deve conter? Qual é seu valor no primeiro candle?
Solução do exercício
previous_close = close[1]No candle 10, ela fornece o fechamento do candle 9. No primeiro candle, de índice 0, o valor está ausente porque não há um candle anterior no arquivo de dados.
Escreva a linha antes do ponto de interrupção para que ela já tenha sido executada na pausa. Depois da conferência, você pode remover a variável auxiliar e a linha de log usada apenas para verificar o programa.
Uma boa descrição de erro
Ao pedir ajuda, informe o arquivo, os dados usados, os inputs efetivos e o instante do candle examinado. Descreva tanto o valor esperado quanto o obtido. Em vez de “a linha está errada”, por exemplo: “neste candle, o fechamento é 101 e a média é 100, mas a distância ficou em −1”. Isso permite conferir o cálculo.