scripting
Límites del sandbox
Presupuestos de CPU y memoria, qué prohíbe la VM bytecode, y cómo optar a ventanas más largas.
Cada script corre dentro de una VM bytecode con presupuestos duros de CPU y memoria, aplicados por evaluación. Un loop desbocado no tira la app.
Presupuestos por defecto
| Superficie | CPU por barra | Techo de memoria | |---|---|---| | Indicator (vista previa) | 50 ms | 16 MB | | Alert (por evaluación) | 50 ms | 16 MB | | Screener (por símbolo) | 200 ms | 32 MB | | Drawing | 50 ms | 16 MB | | Strategy (por barra) | 100 ms | 32 MB | | Backtester (corrida completa) | 60 s | 256 MB | | Worker VPS (por evaluación) | 200 ms | 64 MB |
Si se excede un presupuesto, la VM mata la evaluación e informa de un error de violación de sandbox en el editor de scripts. Las evaluaciones posteriores continúan.
Capacidades prohibidas
La VM no tiene acceso a:
- El sistema de archivos host.
- Sockets de red arbitrarios. Solo built-ins auditadas (p. ej.
notifysobre una lista conocida de webhooks) llegan a la red. - Código nativo. Sin FFI.
- El reloj del host — los scripts leen timestamps de barra vía
bar(N), noDate.now(). - Estado de otros scripts. Cada script está aislado.
Cancelación
Un script puede cancelarse a media evaluación:
- El usuario cierra el gráfico, edita el script o pulsa el kill switch.
- El presupuesto de CPU se agota.
- Para el cloud worker: dispara un tope de pérdida diaria o pausa administrativa.
La cancelación es cooperativa — la VM inyecta checkpoints entre operaciones de bytecode, así que un loop infinito apretado termina en ~1 ms desde la señal de cancelación.
Optar a presupuestos más largos
Las cuentas Pro pueden solicitar presupuestos extendidos para scripts específicos vía metadata en el archivo:
// budget: cpu=500ms mem=128mb
La aprobación se revisa automáticamente — el abuso degrada la solicitud.