Depuración en PyneIDE
Detén el programa en un punto de interrupción y comprueba sus variables vela a vela.
El código puede ser correcto en su forma y aun así calcular algo distinto de lo que quieres. El depurador permite detener la ejecución, examinar variables y seguir las instrucciones una a una.
En este capítulo estudiarás la distancia entre el cierre y la media móvil de cinco. Primero predecirás el resultado y después verás lo que calculó el programa.
Tres clases de errores
Un error de sintaxis incumple las reglas de escritura: por ejemplo, faltan dos puntos o la sangría es incorrecta. El editor suele señalarlo mientras escribes.
Un error de ejecución aparece al ejecutar el programa. Por ejemplo, lees un índice de array que no contiene un elemento. La ejecución puede detenerse con un mensaje.
Con un error lógico el programa puede terminar. Si escribes average - close en lugar de close - average, se invierte el signo. Las reglas del lenguaje no lo prohíben; debes comparar el resultado con la tarea.
En View → Problems de Visual Studio Code encontrarás los problemas señalados por el editor. Haz clic en una fila para ir al lugar del error. Lee el mensaje completo antes de modificar varias líneas.
Un programa para examinar
Crea 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 es el índice de la vela actual y empieza en cero. El índice 10 corresponde a la undécima. Por eso el registro solo escribe una vez en esta ejecución histórica.
log.info crea un mensaje con formato. Los valores siguientes sustituyen a {0}, {1} y {2} en ese orden. El sistema de registro procesa el texto con esos marcadores numerados.
Ejecuta una vez con Run Pyne code. La línea debe ser positiva cuando el cierre está sobre la media. En las primeras cuatro velas faltan tanto la media como la distancia.
Detente antes de una línea
- Haz clic a la izquierda del número de línea junto a
plot(gap, ...). Aparece el punto de interrupción. - Haz clic en Debug encima del código.
- Si aparece el selector, elige
demo. - El programa se detiene. Abre Run and Debug.
Un punto de interrupción es un lugar donde el depurador detiene el programa. La línea resaltada aún no se ha ejecutado. Ya puedes examinar las asignaciones anteriores.
La primera parada puede ocurrir en la primera vela. Ahí gap está ausente porque no hay una ventana completa de cinco. El depurador muestra esa situación; la ausencia por sí sola no es un error.
Llega a una vela con el calentamiento completo
En la barra flotante de depuración, Next Bar de PyneIDE avanza a la siguiente vela. Pasa el puntero sobre los iconos para leer sus nombres. Busca Run to Bar…, haz clic, escribe 10 en el campo y pulsa Enter.
La undécima vela ya tiene una ventana completa de cinco. Busca average y gap en Variables. En el grupo Pyne puedes comprobar los datos de la vela, incluidos bar_index y close.

average es Series, así que en el código puedes utilizar el valor anterior con average[1]. La media anterior no tiene por qué ser igual a la actual: la ventana ha avanzado una vela.
Expresiones vigiladas
En Watch puedes añadir expresiones que quieras ver en cada parada. Prueba:
close
close[1]
average
close - averageclose[1] es el cierre anterior a la vela detenida. average es tu variable. close - average debe coincidir con el gap ya calculado.
Vigila variables y cálculos sencillos. No introduzcas en Watch llamadas a ta.sma, operaciones que envían órdenes o llamadas que modifican arrays. La comprobación de depuración no debe alterar el estado del programa.
Avanza por líneas y por velas
Step Over avanza a la siguiente instrucción sin entrar en los detalles de una función llamada. Step Into puede entrar en tu función. Continue continúa hasta la siguiente parada. Disconnect termina la conexión y la sesión de depuración.
Next Bar actúa a otra escala: te lleva a una vela siguiente. El avance por líneas muestra el cálculo detallado de una vela; el avance por velas muestra cómo cambia el resultado con el tiempo.
La vela detenida aún no ha terminado de procesarse, por lo que el gráfico puede mostrar el estado completado anterior. Comprueba su índice y sus datos en Pyne.
Antes de leer una variable, observa la línea resaltada. Si aún falta ejecutar la asignación, la variable no contiene todavía el resultado que esperas.
Encuentra un error de signo
Detén el depurador y cambia esta línea:
gap = average - closeReinicia la depuración y vuelve a la misma vela. Si el precio está sobre la media, gap será negativo, aunque la tarea pedía una distancia positiva.
En Watch, close - average sigue mostrando la dirección original deseada. Comparar los valores revela enseguida la diferencia. Restaura la resta correcta y vuelve a comprobar esa vela.
Pruébalo por tu cuenta
Añade previous_close = close[1] y examínala en el depurador. En el índice 10, ¿el cierre de qué índice debe contener? ¿Qué valor tiene en la primera vela?
Solución del ejercicio
previous_close = close[1]En la vela 10 devuelve el cierre de la 9. En la primera, índice 0, está ausente porque no hay una vela anterior en el archivo.
Pon la línea antes del punto de interrupción para que ya se haya ejecutado al detenerse. Después puedes eliminar la variable auxiliar y la línea de registro utilizada solo para comprobar.
Un buen informe de error
Al pedir ayuda, indica el archivo, los datos, los inputs efectivos y el momento de la vela examinada. Describe el valor esperado y el obtenido. En vez de «la línea está mal», por ejemplo: «en esta vela el cierre es 101 y la media 100, pero la distancia salió −1». Así se puede comprobar el cálculo.