Por qué lo construimos PineForge
421 operaciones con salidas en un grupo OCA. Ni una sola diferencia.
Toca o arrastra sobre el gráfico para ver cualquier punto.
P&L acumulado en USDT, ETHUSDT 15m, corpus abierto d75b4fa. Las dos listas de operaciones
El gráfico en formato de tabla
| Operación | Hora de salida, UTC | TradingView | PineForge |
|---|---|---|---|
| 33 | 2025-04-30 14:30 | 129,88 | 129,88 |
| 57 | 2025-05-31 08:45 | 258,48 | 258,48 |
| 88 | 2025-06-30 11:15 | 188,84 | 188,84 |
| 112 | 2025-07-31 23:30 | 29,97 | 29,97 |
| 144 | 2025-08-30 03:15 | 140,67 | 140,67 |
| 175 | 2025-09-28 13:15 | 85,95 | 85,95 |
| 208 | 2025-10-30 20:45 | −14,07 | −14,07 |
| 249 | 2025-11-29 18:30 | −128,25 | −128,25 |
| 271 | 2025-12-29 14:45 | 162,43 | 162,43 |
| 312 | 2026-01-31 23:15 | 205,72 | 205,72 |
| 353 | 2026-02-28 08:15 | 172,19 | 172,19 |
| 385 | 2026-03-31 12:00 | 368,20 | 368,20 |
| 421 | 2026-04-29 21:45 | 305,73 | 305,73 |
Cómo se mide
oca-exit-bracket-internal-cancel-01 sale mediante un grupo OCA. El registro de operaciones de TradingView es el trazo ancho, y el de PineForge, el hilo que va por dentro: las 421 operaciones de cada registro se cierran a las mismas horas y con el mismo P&L acumulado, al centavo.
Al principio no teníamos paridad estricta. Hoy, el corpus abierto contiene 312 estrategias (311 excelentes y 1 anomalía declarada), y la línea base del 2026‑11‑03 con el motor en main califica como excelentes o sólidos el 100,00 % de 7989 backtests en 9 mercados frente a las propias operaciones de TradingView. La brecha no se cerró ampliando el transpilador, sino persiguiendo divergencias una a una.
Fuente: registros internos, no públicos, de paridad; línea base pineforge-parity-baseline-20261103-release-tag-3d8717c4 (instantánea sha256 3d8717c4…73ad, población cf857209…b062); origen de scripts: pineforge-engine README.md, d1d18867; operaciones: pineforge-release facts.json.
La mayor parte de ese trabajo consistió en alinear con TradingView el significado de términos como «exit», «fill» o «trail»: la documentación de Pine describe la API; la semántica exacta solo aparece al comparar listas de operaciones barra a barra. Eso hicimos: preguntarnos por qué discrepábamos con la referencia y pulir diferencias una a una.
La única excepción que queda en el corpus abierto, anomaly-equity-mirror-strategy-equity-01, está declarada como anomalía, así que el control del corpus la señala como tal y no como un fallo. Las notas del corpus recogen el diagnóstico original: con exactamente 1× el capital, la comprobación de margen de TradingView admitió algunas entradas por encima del capital y rechazó otras por debajo. Ese diagnóstico está en revisión: la línea base de paridad del 2026‑11‑03 calificó esta sonda como excelente.
Por qué reproducibilidad offline
TradingView es donde viven la mayoría de estrategias Pine, con razón: iteración junto al gráfico, comunidad enorme, sharing social. Lo que no trae es runtime offline: no fijas versión del motor, no pasas backtest en CI, no reproduces una lista de trades bit a bit en otra máquina.
Para curiosear ideas en el gráfico, da igual. Para una estrategia con dinero real, todo eso importa. La brecha entre «veo un número en el navegador» y «tengo una pista de auditoría» es lo que vinimos a cerrar, sin abandonar Pine.
Por qué no contribuimos a PyneCore
PyneCore es el motor de PineScript de código abierto más ambicioso, y nosotros mismos lo usamos como segunda opinión. Dos razones por las que PineForge es un motor propio:
- Modelo de runtime
- PyneCore ejecuta el Pine que el compilador de PyneSys convierte a Python. PineForge transpila Pine a C++ y lo compila a un
.so. Distintas velocidades, distintos compromisos de paridad, distintas formas de distribución. Ninguno está mal, pero no puedes acoplar uno al otro sin reescribir ambos. - Distribución
- Un
.socompilado permitiría a los vendedores distribuir estrategias sin exponer su código fuente: la idea del marketplace, prevista pero aún no construida. Es un producto distinto de PyneCore.
Usamos PyneCore como segunda fuente: el benchmark del repositorio del motor, con el motor en main, evalúa PineForge y PyneCore con las mismas 201 estrategias frente a TradingView. Donde los dos motores discrepan, el diff indica dónde mirar.
Fuente: benchmarks/results/summary.md e indicator_comparison.md en pineforge-engine, commit 6b45f510
Por qué no extendimos Backtrader
Backtrader es el caballo de batalla del algo trading en Python. Sólido y muy querido, pero no encaja con este trabajo: es un framework de backtesting nativo de Python que, de paso, admite clases de estrategia personalizadas. Pine es otro lenguaje, con otra semántica. El lookahead de request.security(), el procesamiento intrabarra de órdenes o los grupos de salida oca_name no se pueden simular escribiendo más Python.
Además: una estrategia en Backtrader es código Python distribuible como tal. El marketplace de binarios exige una transpilación que entregue un artefacto. La superficie de Backtrader no lo permite.
Qué sigue
Previsto
- Optimización
- Búsqueda alojada sobre los parámetros de entrada de una estrategia, según el objetivo que elijas.
- Studio
- Un espacio de trabajo en el navegador para hacer backtests, optimizar y comparar, con el mismo motor que hoy puedes ejecutar en local. Quienes estén en la lista de espera se enterarán primero.
- Marketplace
- Los vendedores publican estrategias compiladas con sus propios límites de licencia; los compradores las ejecutan sobre sus propios datos sin ver el código fuente.