Por qué lo construimos PineForge.
Tres bifurcaciones no tomadas. Dos años persiguiendo dos casos de nivel fuerte. Una tesis: PineScript merece un runtime a la altura.
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 PineScript de código abierto más ambicioso. Lo usamos como segunda opinión de referencia. Valoramos subir todo lo construido como contribución upstream. Dos razones para no hacerlo:
- Modelo de runtime. PyneCore interpreta Pine en Python. PineForge transpila Pine a C++ y compila a `.so`. Distinta velocidad, distintos tradeoffs de paridad, distinta historia de distribución. Ninguno está mal — pero no acoplas uno al otro sin reescribir ambos.
- Distribución. Un `.so` compilado deja vender sin mostrar código. Es la tesis del marketplace (diseñado para 2027). No está en el roadmap de PyneCore ni debe estarlo — otro producto.
Tratamos PyneCore como segunda fuente. Cada versión de PineForge ejecuta el barrido de paridad frente a PyneCore y TradingView. Su ratio de resultados excelentes es tan alto que, cuando los motores discrepan, casi siempre hay un error en uno de los dos — suele ser el nuestro.
Por qué no extendimos Backtrader
Backtrader es la mula del algo trading en Python. Sólido, querido, y forma equivocada para esto: framework Python que soporta clases de estrategia. Pine es otro lenguaje y otra semántica — no simulas lookahead de `request.security()`, procesamiento intrabar ni grupos `oca_name` con 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.
La caza del 245/246
Empezamos con 9 estrategias y 76% de paridad estricta. Dos años después: 246 estrategias, 245 estrictas. Pasar del 76% al 99.6% no fue escribir más codegen — fue perseguir divergencias al cuarto decimal, una a una, durante semanas cada una.
La mayoría del tiempo se dedicó a 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 1 restante es una anomalía documentada del lado de TV — analizada a fondo, trazada a TradingView, reproducible desde el propio estado de TV. Dos de las tres anomalías originales (overshoot en el límite de margen del bróker; <code>time()</code> devolviendo na en el límite de sesión) se resolvieron con la reescritura desde cero. La que queda es no determinismo del estado del chart en una ventana concreta del 5–14 de abril (Supertrend <code>var direction</code>). Cero bugs reales del motor.
Qué sigue
Q3 2026: Llega la integración con Optuna. Optimiza cualquier estrategia con una función objetivo de una sola línea: Sharpe, drawdown, profit factor o tu lambda en Python. Walk-forward incluido; validación fuera de muestra por defecto, no como ripiego.
Q4 2026: Studio alojado. Espacio de proyecto con backtest, optimización, comparación y paper trading: todo en el navegador sobre el mismo `.so` que hoy ejecutas con la CLI. La primera oleada irá a la lista de acceso anticipado.
2027: Abre el marketplace. Los vendedores publican `.so` con límites de licencia propios: tiempo, máquina, bróker, símbolo, rangos de inputs. Los compradores ejecutan sobre sus datos sin ver el código. Mismo modelo que demostró MQL5 — pero estrategias en Pine, runtime auditable y licencias revocables.
El 1% que no se escribe a mano
Todo motor de paridad que leímos lo abandonó alguien aburrido al 90%. El último 10% es trabajo repetitivo, duro y poco glamuroso — hay que hacerlo quien disfrute explicar por qué dos trade lists difieren en 0.0001%.
Ese es el equipo. Esa es la disciplina. Por eso el runtime vale para operar dinero real.