La operación de más es la última: una posición que seguía abierta cuando se acabaron los datos y que TradingView registra como cerrada al cierre de la última barra. Qué es esa fila, por qué mueve tus estadísticas y cómo la registra PineForge.
Tu estrategia muestra en TradingView una operación más que en tu backtester. La que sobra es la última de la lista: su señal de salida dice Open, o está vacía, y su precio de salida es, sin más, el cierre de la última barra.
Ninguna de las dos herramientas falla. Esa fila es la forma en que TradingView informa de una posición que sigue abierta cuando se acaban los datos, y un backtester que la omite no coincide con TradingView ni en el número de operaciones, ni en el beneficio neto, ni en ninguna de las estadísticas que se calculan a partir de ellos.
Qué registra TradingView
Un backtest termina en su última barra, y nada obliga a que la estrategia esté sin posición en ese momento. El informe de TradingView no descarta la posición abierta: la registra como una operación cerrada cuya salida es la última barra del rango, al cierre de esa barra, y la cuenta como cualquier otra operación. PineForge emula esa regla; la cabecera del motor la describe.
Un ejemplo del corpus público. stats-eventrades-zero-pnl-count-01 compra una unidad en la barra de medianoche UTC, con fill en el open de la barra siguiente, y la vende con una orden limitada a ese mismo precio de entrada. Su última posición larga nunca volvió a ese precio. Esta es la lista de operaciones de TradingView (con las horas en la zona Asia/Taipei, así que las 08:00 son la medianoche UTC):
Trade number,Type,Date and time,Signal,Price USDT,...,Net PnL USDT,...
140,Exit long,2026-05-01 08:00,,2261.44,...,-2525.12,...
140,Entry long,2025-08-25 08:15,even-trade entry,4786.56,...,-2525.12,...
Fíjate en la fila de salida: no hay señal, y el precio no es más que el cierre de la última barra. La estrategia nunca vendió. Los −2.525,12 son una pérdida no realizada de una posición mantenida durante ocho meses y, aun así, figuran en la lista de operaciones y en el beneficio neto como si se hubieran realizado.
La fila puede aparecer de dos maneras. La exportación CSV de la lista de operaciones que hace la propia TradingView escribe Open en la columna Signal (así lo hacía la exportación anterior de esta estrategia). El informe de deep backtesting de TradingView la deja vacía, y lo mismo ocurre hoy en la mayoría de los archivos del corpus, como arriba (evaluador).
Por qué importa una sola fila
En una estrategia lenta o en un rango corto, la posición abierta puede ser la mayor parte del resultado. En gráficos diarios suele ser la única operación de la ventana: antes de que PineForge registrara esta fila, en esas estrategias no informaba de ninguna operación, mientras que TradingView informaba de una. Todas las cifras que salen de la lista de operaciones se mueven con ella: el recuento, la tasa de acierto, el beneficio neto, la operación media.
Qué registra PineForge
Antes, el motor solo exportaba operaciones cerradas. Ahora registra la misma fila que TradingView: una por cada lote que sigue abierto después de la última barra, con la fecha de esa barra y su precio de cierre redondeado al tick, con comisión pero sin slippage, porque la fila «es una valoración a mercado, no una orden» (guía del motor). Su lista de operaciones señala la fila en una última columna:
Trade #,Type,Date and time,Price,Qty,Net PnL,...,Engine range-end
140,Exit long,2026-05-01 00:00,2261.440000,1,-2525.120000,...,open
La misma barra, el mismo precio y la misma pérdida que en TradingView, con open para indicar que es una valoración a mercado. El propio script nunca ve esa fila: dentro de la ejecución, la posición sigue abierta, así que strategy.closedtrades de Pine no la cuenta, y la documentación del motor indica que hay que filtrar la fila si quieres que cuadre con esa variable (correspondencias entre Pine y la API nativa).
El precio depende de dónde acaban los datos
La valoración se registra en la última barra del backtester, así que esa barra tiene que ser la última de TradingView. El rango de TradingView termina en la última barra que abre a la medianoche UTC de la fecha de fin o antes (harness). El archivo de precios del corpus sigue más allá, hasta el 4 de mayo. Con el archivo entero, el motor registraría la operación 140 en la última barra de ese día, a 2.365,09: alrededor de un 4,6 % por encima de los 2.261,44 de TradingView (mismo archivo). Por eso el harness corta los datos en la última barra de TradingView antes de la ejecución.
Después, el evaluador del motor empareja las dos filas como las de cualquier otra operación, y califica su precio de salida y su P&L igual que los de cualquier otra. Solo cuando TradingView escribe Open en la fila trata el par como dos valoraciones a mercado: las empareja y las cuenta, comprueba la entrada, deja la salida y el P&L fuera de la calificación e informa de la coincidencia del P&L al centavo (evaluador).
29 estrategias, una operación más
Cuando regeneramos las listas de operaciones del corpus con el motor actual, 29 de sus 312 estrategias cambiaron su número de operaciones. En 26 de ellas, una de las operaciones nuevas es esta fila. Las otras tres ganaron una operación cerrada porque las listas de la propia TradingView se habían actualizado para incluir las operaciones hasta el final del día.
La lista antigua de stats-eventrades-zero-pnl-count-01 había recibido, aun así, la calificación más alta del evaluador. El evaluador recorta las operaciones de los dos extremos de la ventana que cubren ambas listas, para que una operación de más al principio o al final no pueda suspender a una estrategia. Aquí, ese recorte escondió una que faltaba: el informe antiguo calificaba 139 operaciones por lado mientras TradingView listaba 140; el nuevo califica 140 frente a 140.
En 131 de las 312 estrategias del corpus, más de cuatro de cada diez, la lista de operaciones de PineForge termina con una posición todavía abierta (README del corpus).
Qué significa para ti
- Si TradingView muestra una operación más que tu backtester y la que sobra es la última, busca una posición que siguiera abierta al final. Es el comportamiento normal de TradingView.
- El beneficio neto y la tasa de acierto de TradingView incluyen esa posición, valorada al último cierre. Si solo quieres resultados realizados, descarta la última operación cuando su señal de salida sea
Openo esté vacía; en la lista de PineForge es la que lleva la marcaopen. - Antes de comparar dos backtests, haz que los dos terminen en la misma barra: la última que abre como muy tarde a la medianoche UTC de la fecha de fin de TradingView.
Medido el 2026-10-02 con el motor y el codegen de PineForge 1.0.1, las versiones publicadas ese día.
Por dónde seguir
- Leer el formato engine_trades.csv: todas las columnas del archivo citado más arriba y un cargador para pandas.
- Explora la galería: la lista de operaciones de cada estrategia del corpus junto a la de TradingView.
- Cómo medimos la paridad: los resultados actuales y sus fuentes.