Saltar al contenido

Por qué lo construimos PineForge

421 operaciones con salidas en un grupo OCA. Ni una sola diferencia.

−2000200
jul 2025oct 2025ene 2026abr 2026
USDT

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
P&L acumulado en la última operación de cada mes, USDT
OperaciónHora de salida, UTCTradingViewPineForge
332025-04-30 14:30129,88129,88
572025-05-31 08:45258,48258,48
882025-06-30 11:15188,84188,84
1122025-07-31 23:3029,9729,97
1442025-08-30 03:15140,67140,67
1752025-09-28 13:1585,9585,95
2082025-10-30 20:45−14,07−14,07
2492025-11-29 18:30−128,25−128,25
2712025-12-29 14:45162,43162,43
3122026-01-31 23:15205,72205,72
3532026-02-28 08:15172,19172,19
3852026-03-31 12:00368,20368,20
4212026-04-29 21:45305,73305,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: scripts/check_corpus_parity.sh en pineforge-engine, commit 35db01c8, línea 86; pineforge-corpus, commit d75b4fa

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 .so compilado 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.

El motor