documentation
API pour utilisateurs avancés
Oryon est déterministe par conception. Tu peux exporter des stratégies, lancer des backtests depuis d'autres scripts, consulter l'état du service ou connecter ton propre runner. Voici le contrat minimal.
Format de stratégie
La stratégie est un JSON validé avec Zod. Tu peux l'exporter depuis la bibliothèque ou depuis un lien partagé. Champs clés : schemaVersion, name, market, symbol, timeframe, direction, indicators, entry, exit, risk et 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"] }
}Le moteur rejette les références à des indicateurs inexistants, les ids dupliqués et les groupes d'entrée vides. Le même JSON est utilisé dans le backtest, le portefeuille, le déploiement et l'export MQL5.
Authentification
- Web : cookie de session httpOnly `oryon_session`. Les mutations nécessitent une Origin de confiance.
- Runner/PC : `Authorization: Bearer <token>` ou l'en-tête `x-oryon-runner`. Le token s'obtient en appairant le PC, et seul son hash vit sur le web.
- Il n'y a pas de clés API utilisateur. Si tu automatises depuis un script, connecte-toi et réutilise le cookie, ou utilise le token du runner pour les routes du runner.
- Publiques sans session : backtest, walkforward, optimize, demo, status, shares et waitlist. Stratégies, compte, billing et runner nécessitent leur identifiant.
Backtest et démo
POST /api/backtest accepte `strategy`, `bars`, `dataSource` (`real` ou `synthetic`) et `trials`. C'est public, mais avec une limite de débit par IP. Avec une session, cela déduit le quota de backtests du 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 renvoie un backtest réel préchargé et mis en cache. Aucun compte requis.
curl "https://tu-dominio/api/demo?preset=ema"Réalisme du backtest
- `costs.spreadBySession` multiplie le spread selon la session UTC. `swapLongPctPerDay` et `swapShortPctPerDay` proratisent le swap/funding selon le temps passé sur le marché.
- `timeFilter` bloque les entrées hors des jours, heures ou sessions. Les sorties par stop, objectif, signal ou temps sont toujours autorisées.
- Les conditions `higherTimeframe` utilisent la dernière bougie clôturée d'une unité de temps supérieure ; les bougies de base sont agrégées et l'avenir n'est pas utilisé.
- `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.
Moniteur et journal
- POST /api/monitors crée une surveillance quotidienne ou hebdomadaire. POST /api/monitors/[id]/run l'exécute maintenant. Le cron appelle /api/monitors/run avec le secret du serveur.
- Chaque exécution enregistre le régime, les métriques et les alertes. Si le régime change ou qu'un seuil est franchi, une alerte `monitor_alert` est envoyée.
- POST /api/journal enregistre notes, étiquettes, capture et leçon. PATCH/DELETE /api/journal/[id] modifie ou supprime. Les captures sont validées et ne sont jamais servies depuis le disque.
- L'historique des versions calcule les changements par rapport à la version précédente ; il n'écrase pas les anciennes définitions.
Intégrations
- TradingView : POST /api/integrations/tradingview/[token] accepte JSON ou texte et enregistre un signal. Le token n'est affiché qu'à la création de la connexion.
- Binance et Bybit se connectent en lecture seule pour tester les identifiants et interroger le compte. L'exécution reste réservée à MT5.
- cTrader enregistre la configuration OAuth ; le flux complet reste prévu pour une phase ultérieure.
Portefeuille et optimisation
- POST /api/portfolio/backtest : `versionIds` (2–12), limites et `dataSource`. Nécessite une session et déduit le quota de portefeuilles.
- POST /api/walkforward, /api/optimize et /api/optimize/sensitivity utilisent le même format de stratégie et ont des limites de débit plus strictes.
Runner et état
Le PC rapporte le heartbeat, les déploiements et les résultats du Strategy Tester. Le site ne parle pas directement à 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 est public et renvoie l'état du site, de la base de données et des fournisseurs de données. Idéal pour les moniteurs.
curl https://tu-dominio/api/statusWebhooks d'alertes
Les alertes sortantes peuvent être envoyées à un webhook. Si tu configures un secret, le corps est signé avec HMAC-SHA256 dans `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": {}
}Quotas et erreurs
- Lorsqu'un quota est dépassé, l'API répond 402 avec `{ ok:false, upgrade:true, plan, quota }`.
- La limite de débit par IP répond 429 avec `Retry-After`. Les limites exactes sont sur la page Tarifs.
- Les erreurs de validation répondent 422 avec des `issues` lisibles. Rien n'est enregistré à moitié.
Sécurité
Il n'y a pas de secrets côté client. Les clés d'IA sont chiffrées sur le serveur, les sessions sont stockées sous forme de hash et le token du runner est comparé à son hash. CSP, HSTS, contrôles d'Origine et rate limit sont appliqués dans le proxy.
Pour signaler une vulnérabilité : oryon.help@outlook.com.
Exporter et importer
GET /api/strategies/[id]/export?version=... télécharge un JSON avec `{ format, formatVersion, exportedAt, strategy }`. POST /api/strategies/import accepte ce JSON ou une stratégie seule et valide avec le même schéma.
L'API peut changer avant la version 1.0. Si tu en dépends en production, écris-nous et nous maintiendrons la compatibilité pour ton cas.