Dos backtests del mismo script Pine rara vez cuadran al centavo, así que «coincide con TradingView» no significa nada hasta que dices qué se compara y cuánta diferencia se admite. Qué es un backtest calificado, cómo se emparejan sus operaciones con las de TradingView, qué exige cada una de las cinco calificaciones y cómo se juzga un cambio de código.
Muchos backtesters dicen que coinciden con TradingView. Dos backtests del mismo script Pine casi nunca cuadran al centavo, así que la afirmación significa poco hasta que sabes qué se comparó y cuánta diferencia se admite. Nuestro marcador asigna una de cinco palabras a cada uno de los 7.989 backtests, y en 7.905 de ellos la palabra es «excellent». Este artículo explica qué significa esa palabra y qué significan las otras cuatro.
Un backtest, una lista de operaciones
La unidad es la sonda: «una estrategia exportada de TradingView con su lista de operaciones y reproducida operación por operación sobre las mismas barras» (README del codegen). El script conserva sus propios valores de entrada y por defecto, y la calificación compara dos listas de operaciones: la de TradingView y la que produce PineForge sobre las mismas barras.
Un mismo script puede ser una sonda en varios mercados. Los 7.989 son 309 de las 312 estrategias del corpus público y 7.680 sondas de 741 scripts de TradingView, repartidas en nueve mercados (cripto, futuros y acciones de EE. UU., un índice indio, un par de divisas y el oro), cada uno en barras de 15 minutos y diarias (marcador).
Cómo se emparejan las operaciones
El evaluador es un único script público, verify_corpus.py. Empareja cada operación de TradingView con la operación de PineForge más cercana que aún no se haya usado, en la misma dirección, cuya entrada esté como mucho a una hora de la de TradingView y cuyo precio de entrada no se aleje más de 3,00 del suyo, en las unidades de precio del propio mercado (emparejamiento, límites). Después se miden dos cosas: cuánto de la lista de TradingView se reprodujo y cuánto se parecen las operaciones reproducidas.
Lo primero se llama cobertura, y se cuenta sobre todas las operaciones cerradas de TradingView, no solo sobre el tramo en el que se solapan las dos listas. El código explica por qué: las demás métricas se calculan dentro de una ventana que definen los propios emparejamientos, «así que, sin este requisito, una ejecución que no reproduce casi nada puede obtener la calificación más alta con el pedacito que por casualidad reprodujo (visto en producción: “excellent” con un 0,9 % de cobertura real)» (evaluador). Cuando la cobertura pasó a ser eliminatoria, dos estrategias del corpus bajaron a «moderate»: reproducían 209 de 224 y 228 de 241 operaciones de TradingView, huecos que la ventana anterior había escondido.
Cinco palabras
| Calificación | Operaciones de TradingView reproducidas | Número de operaciones | Precio de entrada / salida (p90) | P&L (p90) |
|---|---|---|---|---|
| excellent | ≥ 99 % | idéntico y, cuando TradingView muestra dos o más Signals de entrada distintos en el mismo instante exacto, al mismo precio y en la misma dirección, el motor muestra allí el mismo número de entradas distintas (identidad de entradas distintas) | hasta 0,01 % | hasta 1 % |
| strong | ≥ 95 % | hasta 6 % | 0,1 % / 0,5 % | hasta 100 % |
| moderate | ≥ 75 %, y ≥ 90 % dentro del solapamiento | |||
| weak | al menos una | |||
| minimal | ninguna |
«p90» significa que nueve de cada diez operaciones están al menos así de cerca (umbrales, escala). Una lista con como mucho una operación de TradingView sin emparejar supera los límites de cobertura de «excellent» y «strong», así que una sola operación en el borde de una exportación corta no puede costar la calificación. Para «excellent» no se admite ninguna diferencia en el número de operaciones. La razón, según el código: «los umbrales porcentuales pueden esconder decenas de operaciones que faltan o sobran en estrategias grandes» (evaluador). Las estrategias cuyas salidas usan un trailing stop se califican con límites más holgados, salidas hasta el 0,05 % y P&L hasta el 100 %, porque el punto de la barra en el que se ejecuta un trailing depende del recorrido intrabarra de TradingView (evaluador).
La peor operación se muestra, pero no se califica
Las calificaciones miran el percentil 90, no la peor operación. Una estrategia pública muestra por qué; esta es la salida del evaluador para order-harbor-stop-limit-01, recortada:
Matched: 471 (100.0% of TV)
Count delta: 0.0000% (OK; abs=0)
PnL p90 delta: 0.0381% (OK)
-- report-only (not gated; MAE/MFE are intrabar-path-limited) --
Entry/Exit/PnL p100: 0.0011% / 0.0084% / 4.9658%
-> excellent
Fíjate en la última cifra antes de la calificación: el P&L de una operación se desvía casi un 5 %. Si se le piden las peores operaciones (--show-diffs 3), el evaluador muestra que TradingView entró en esta a 1.970,36 y PineForge a 1.970,35, en una operación que perdió unos 51 centavos. Un centavo sobre unas 2,5 unidades son 2,5 centavos, y 2,5 centavos son el 5 % de una pérdida de 51 centavos. Una calificación basada en la peor operación le negaría el «excellent» a esta estrategia por un centavo en una sola entrada; el percentil la deja pasar, y el informe sigue mostrando el valor atípico.
Cómo se juzga un cambio
Una calificación describe el código tal como está. Un cambio se juzga por lo que mueve: las mismas sondas se califican antes y después. La regla exige que no haya ninguna regresión en la superficie crítica. En los demás mercados y temporalidades, calcula una puntuación sobre dos bandas, «excellent» y «excellent+strong»: si es mayor que cero, el cambio pasa siempre que ninguna sonda baje más de un nivel al salir de una banda, y si es exactamente cero, pasa cuando no ha empeorado nada (README).
Dos bandas, porque cada una ve movimientos que la otra no ve. Una estrategia que pasa de «strong» a «excellent» solo cambia el primer recuento; una que pasa de «moderate» a «strong», solo el segundo. Un cambio de septiembre llevó 32 sondas a «excellent»; dos de ellas estaban por debajo de «strong», así que contaron en las dos bandas, y el cambio sumó +34 sin que ninguna sonda bajara. La superficie crítica es la batería de ETH en 15 minutos: 1.009 sondas, entre ellas las 309 estrategias del corpus público. Ahí no puede bajar ninguna sonda, gane lo que gane el cambio en otra parte.
Cuando no se mueve nada
Muchos buenos cambios no mueven nada: un refactor, una API nueva, la corrección de un caso al que no llega ninguna estrategia del conjunto. Un cambio que solo toca documentación no necesita barrido (ejemplo). Un cambio de código con el que ninguna sonda entra en una banda ni sale de ella suma cero y, según la regla del README, pasa siempre que no haya empeorado nada: con la marca «no-improve-no-regression» si no ha cambiado ninguna calificación, o «improved» si algo ha mejorado donde las bandas no lo ven, como una estrategia que sube de «weak» a «moderate». Un cero también puede esconder una pérdida, y entonces el cambio no pasa: una sonda que baja de «moderate» a «minimal», por debajo de las dos bandas, o la bajada de una sonda que compensa la subida de otra.
En cambios así, no mover nada es el resultado esperado, pero no demuestra que no haya cambiado nada más, porque cinco palabras dan una resolución muy gruesa. Por eso la CI del motor también fija un hash de cada lista de operaciones que produce el motor sobre el corpus público: un cambio de un tick de slippage en una estrategia «mueve sus operaciones y su hash de referencia mientras verify_corpus.py sigue informando excellent=311, strong=0, anomaly=1» (documentación de la CI).
Qué significa para ti
- En una página de la galería, «excellent» significa el mismo número de operaciones que TradingView, al menos el 99 % de las operaciones de TradingView reproducidas, y precios y P&L dentro de los límites de la tabla en nueve de cada diez operaciones. Para «excellent», cuando TradingView muestra dos o más Signals de entrada distintos en el mismo instante exacto, al mismo precio y en la misma dirección, el motor muestra allí el mismo número de entradas distintas (identidad de entradas distintas). Todas las estrategias de la galería son «excellent» salvo una anomalía declarada del lado de TradingView; «strong» solo aparece en la prueba cerrada.
- Si comparas tu propio backtester con TradingView, hazlo de la misma forma: empareja las operaciones por la entrada, calcula la cobertura sobre todas las operaciones de TradingView y fíjate en los percentiles, no en la peor operación.
- La parte pública se puede volver a ejecutar: los comandos del README compilan, ejecutan y califican las 312 estrategias del corpus. La prueba cerrada es nuestra propia medición sobre scripts que no son públicos, en su mayoría scripts de la comunidad que se mantienen privados según los términos de TradingView.
Calificaciones medidas el 2026-09-29 sobre código del motor y del codegen que incluyen las versiones 1.0.0. El código del motor y del codegen 1.0.1, publicado el 2026-10-02, se calificó sobre las mismas 7.989 sondas sin que ninguna cambiara de calificación.
Por dónde seguir
- Cómo medimos la paridad: los resultados actuales y sus fuentes.
- Explora la galería: la calificación de cada estrategia del corpus, con las dos listas de operaciones.
- Una historia de paridad de margen: cómo es la salida del evaluador cuando una estrategia no es «excellent», y cómo se llegó hasta la causa en uno de esos casos.