documentación
API para usuarios avanzados
Oryon es determinista por diseño. Puedes exportar estrategias, lanzar backtests desde otros scripts, consultar el estado del servicio o conectar tu propio runner. Aquí está el contrato mínimo.
Formato de estrategia
La estrategia es un JSON validado con Zod. Puedes exportarla desde la biblioteca o desde un enlace compartido. Campos clave: schemaVersion, name, market, symbol, timeframe, direction, indicators, entry, exit, risk y costs.
{
"schemaVersion": 1,
"name": "Cruce EMA 20/50",
"description": "Tendencia clásica",
"market": "crypto",
"symbol": "BTCUSD",
"timeframe": "1h",
"direction": "both",
"reverseOnOpposite": true,
"indicators": [
{ "id": "ema_fast", "kind": "ema", "period": 20, "source": "close" },
{ "id": "ema_slow", "kind": "ema", "period": 50, "source": "close" }
],
"entry": {
"long": { "mode": "all", "conditions": [
{ "left": { "type": "indicator", "indicatorId": "ema_fast" },
"op": "crossAbove",
"right": { "type": "indicator", "indicatorId": "ema_slow" } }
] },
"short": null
},
"exit": { "long": null, "short": null },
"risk": { "positionSizePct": 10, "sizingMode": "riskPct",
"riskPerTradePct": 1, "maxLeverage": 1,
"stopLossMode": "atr", "stopLossAtrMultiple": 2.5,
"takeProfitMode": "atr", "takeProfitAtrMultiple": 4 },
"costs": { "spreadPct": 0.01, "commissionPct": 0.02, "slippagePct": 0.01,
"swapLongPctPerDay": 0.005, "swapShortPctPerDay": 0.005,
"spreadBySession": { "asia": 1.4, "london": 1,
"overlap": 0.9, "newYork": 1.1,
"offHours": 1.6 } },
"timeFilter": { "enabled": true, "days": [1,2,3,4,5],
"startHourUtc": 7, "endHourUtc": 20,
"sessions": ["london", "overlap", "newYork"] }
}El motor rechaza referencias a indicadores inexistentes, ids duplicados y grupos de entrada vacíos. El mismo JSON se usa en backtest, cartera, despliegue y exportación MQL5.
Autenticación
- Web: cookie de sesión httpOnly `oryon_session`. Las mutaciones requieren Origin de confianza.
- Runner/PC: `Authorization: Bearer <token>` o cabecera `x-oryon-runner`. El token se obtiene al emparejar el PC y en la web solo vive su hash.
- No hay API keys de usuario. Si automatizas desde un script, inicia sesión y reutiliza la cookie o usa el token del runner para las rutas de runner.
- Públicas sin sesión: backtest, walkforward, optimize, demo, status, shares y waitlist. Estrategias, cuenta, billing y runner requieren su credencial.
Backtest y demo
POST /api/backtest acepta `strategy`, `bars`, `dataSource` (`real` o `synthetic`) y `trials`. Es público, pero tiene rate limit por IP. Si hay sesión, descuenta cuota de backtests del plan.
curl -X POST https://tu-dominio/api/backtest \
-H "Content-Type: application/json" \
-d '{"strategy": { ... }, "bars": 1500, "dataSource": "real"}'GET /api/demo?preset=ema|rsi|breakout devuelve un backtest real precargado y cacheado. No requiere cuenta.
curl "https://tu-dominio/api/demo?preset=ema"Realismo del backtest
- `costs.spreadBySession` multiplica el spread según la sesión UTC. `swapLongPctPerDay` y `swapShortPctPerDay` prorratean swap/funding por el tiempo en mercado.
- `timeFilter` bloquea entradas fuera de días, horas o sesiones. Las salidas por stop, objetivo, señal o tiempo siempre se permiten.
- Las condiciones `higherTimeframe` usan la última vela cerrada de una temporalidad superior; se agregan las velas base y no se mira el futuro.
- `risk.sizingMode: "riskPct"` calcula el notional desde la distancia real al stop. `maxLeverage` limita el tamaño; si no hay stop, se usa el % fijo como respaldo.
Monitor y diario
- POST /api/monitors crea una vigilancia diaria o semanal. POST /api/monitors/[id]/run la ejecuta ahora. El cron llama a /api/monitors/run con el secreto del servidor.
- Cada ejecución guarda régimen, métricas y avisos. Si cambia el régimen o se cruza un umbral, se envía un aviso `monitor_alert`.
- POST /api/journal guarda notas, etiquetas, captura y lección. PATCH/DELETE /api/journal/[id] edita o borra. Las capturas se validan y nunca se sirven desde disco.
- El historial de versiones calcula los cambios frente a la versión anterior; no sobrescribe definiciones antiguas.
Integraciones
- TradingView: POST /api/integrations/tradingview/[token] acepta JSON o texto y guarda una señal. El token solo se muestra al crear la conexión.
- Binance y Bybit se conectan en modo de solo lectura para probar credenciales y consultar la cuenta. La ejecución sigue reservada a MT5.
- cTrader guarda la configuración OAuth; el flujo completo queda pendiente de una fase posterior.
Cartera y optimización
- POST /api/portfolio/backtest: `versionIds` (2–12), límites y `dataSource`. Requiere sesión y descuenta cuota de carteras.
- POST /api/walkforward, /api/optimize y /api/optimize/sensitivity usan el mismo formato de estrategia y tienen rate limits más estrictos.
Runner y estado
El PC reporta latido, despliegues y resultados del Strategy Tester. La web no habla directamente con MetaTrader.
curl -X POST https://tu-dominio/api/runner/report \
-H "Authorization: Bearer $ORYON_RUNNER_TOKEN" \
-H "Content-Type: application/json" \
-d '{"host":"mi-pc","account":"demo","equity":10000,"running":[]}'GET /api/status es público y devuelve el estado de la web, la base de datos y los proveedores de datos. Ideal para monitores.
curl https://tu-dominio/api/statusWebhooks de avisos
Los avisos salientes pueden enviarse a un webhook. Si configuras un secreto, se firma el cuerpo con HMAC-SHA256 en `X-Oryon-Signature: sha256=...`.
POST https://tu-servidor/hook
Content-Type: application/json
X-Oryon-Event: order_rejected
X-Oryon-Signature: sha256=<hmac>
{
"event": "order_rejected",
"title": "Orden rechazada",
"body": "EURUSD · ...",
"severity": "warning",
"url": "https://tu-dominio/operar/...",
"timestamp": "2026-11-09T12:00:00.000Z",
"data": {}
}Cuotas y errores
- Cuando se supera una cuota, la API responde 402 con `{ ok:false, upgrade:true, plan, quota }`.
- El rate limit por IP responde 429 con `Retry-After`. Los límites exactos están en Precios.
- Los errores de validación responden 422 con `issues` legibles. No se guarda nada a medias.
Seguridad
No hay secretos en el cliente. Las claves de IA se cifran en servidor, las sesiones se guardan como hash y el token del runner se compara contra su hash. CSP, HSTS, Origin checks y rate limit se aplican en el proxy.
Para reportar una vulnerabilidad: oryon.help@outlook.com.
Exportar e importar
GET /api/strategies/[id]/export?version=... descarga un JSON con `{ format, formatVersion, exportedAt, strategy }`. POST /api/strategies/import acepta ese JSON o una estrategia suelta y valida con el mismo esquema.
La API puede cambiar antes de la versión 1.0. Si dependes de ella en producción, escríbenos y mantenemos compatibilidad para tu caso.