Oryon

Dokumentation

API für Fortgeschrittene

Oryon ist von Grund auf deterministisch. Du kannst Strategien exportieren, Backtests aus anderen Skripten starten, den Dienststatus abfragen oder deinen eigenen Runner anbinden. Hier ist der minimale Vertrag.

MethodikSicherheitStatus

Strategieformat

Die Strategie ist mit Zod validiertes JSON. Du kannst sie aus der Bibliothek oder über einen geteilten Link exportieren. Schlüsselfelder: schemaVersion, name, market, symbol, timeframe, direction, indicators, entry, exit, risk und 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"] }
}

Die Engine lehnt Verweise auf nicht existierende Indikatoren, doppelte IDs und leere Einstiegsgruppen ab. Dasselbe JSON wird in Backtest, Portfolio, Deployment und MQL5-Export verwendet.

Authentifizierung

  • Web: httpOnly-Sitzungscookie `oryon_session`. Mutationen erfordern einen vertrauenswürdigen Origin.
  • Runner/PC: `Authorization: Bearer <token>` oder der Header `x-oryon-runner`. Der Token wird beim Koppeln des PCs ermittelt, und im Web lebt nur sein Hash.
  • Es gibt keine Benutzer-API-Keys. Wenn du per Skript automatisierst, melde dich an und verwende das Cookie erneut oder nutze den Runner-Token für Runner-Routen.
  • Öffentlich ohne Sitzung: Backtest, Walkforward, Optimize, Demo, Status, Shares und Waitlist. Strategien, Konto, Billing und Runner benötigen ihre Zugangsdaten.

Backtest und Demo

POST /api/backtest akzeptiert `strategy`, `bars`, `dataSource` (`real` oder `synthetic`) und `trials`. Es ist öffentlich, hat aber ein Rate Limit pro IP. Mit Sitzung wird das Backtest-Kontingent des Plans abgezogen.

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 liefert einen vorgeladenen, gecachten echten Backtest. Kein Konto erforderlich.

curl "https://tu-dominio/api/demo?preset=ema"

Backtest-Realismus

  • `costs.spreadBySession` multipliziert den Spread je nach UTC-Sitzung. `swapLongPctPerDay` und `swapShortPctPerDay` teilen Swap/Funding anteilig nach Zeit im Markt auf.
  • `timeFilter` blockiert Einstiege außerhalb der gewählten Tage, Stunden oder Sitzungen. Ausstiege per Stop, Ziel, Signal oder Zeit sind immer erlaubt.
  • `higherTimeframe`-Bedingungen verwenden die letzte geschlossene Kerze eines höheren Zeitrahmens; Basis-Kerzen werden aggregiert und es wird nicht in die Zukunft geschaut.
  • `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 und Tagebuch

  • POST /api/monitors erstellt eine tägliche oder wöchentliche Überwachung. POST /api/monitors/[id]/run führt sie jetzt aus. Der Cron ruft /api/monitors/run mit dem Servergeheimnis auf.
  • Jeder Lauf speichert Regime, Kennzahlen und Hinweise. Ändert sich das Regime oder wird ein Schwellenwert überschritten, wird ein `monitor_alert` gesendet.
  • POST /api/journal speichert Notizen, Tags, Screenshot und Lektion. PATCH/DELETE /api/journal/[id] bearbeitet oder löscht. Screenshots werden validiert und nie von der Festplatte ausgeliefert.
  • Der Versionsverlauf berechnet Änderungen gegenüber der vorherigen Version; alte Definitionen werden nicht überschrieben.

Integrationen

  • TradingView: POST /api/integrations/tradingview/[token] akzeptiert JSON oder Text und speichert ein Signal. Der Token wird nur beim Erstellen der Verbindung angezeigt.
  • Binance und Bybit verbinden sich im Nur-Lese-Modus, um Zugangsdaten zu testen und das Konto abzufragen. Die Ausführung bleibt MT5 vorbehalten.
  • cTrader speichert die OAuth-Konfiguration; der vollständige Ablauf steht noch für eine spätere Phase aus.

Portfolio und Optimierung

  • POST /api/portfolio/backtest: `versionIds` (2–12), Limits und `dataSource`. Erfordert eine Sitzung und zieht das Portfolio-Kontingent ab.
  • POST /api/walkforward, /api/optimize und /api/optimize/sensitivity verwenden dasselbe Strategieformat und haben strengere Rate Limits.

Runner und Status

Der PC meldet Heartbeat, Deployments und Ergebnisse des Strategy Testers. Die Website spricht nicht direkt mit 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 ist öffentlich und liefert den Status von Website, Datenbank und Datenanbietern. Ideal für Monitore.

curl https://tu-dominio/api/status

Benachrichtigungs-Webhooks

Ausgehende Benachrichtigungen können an einen Webhook gesendet werden. Wenn du ein Geheimnis konfigurierst, wird der Body mit HMAC-SHA256 in `X-Oryon-Signature: sha256=...` signiert.

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": {}
}

Kontingente und Fehler

  • Wird ein Kontingent überschritten, antwortet die API mit 402 und `{ ok:false, upgrade:true, plan, quota }`.
  • Das Rate Limit pro IP antwortet mit 429 und `Retry-After`. Die genauen Limits stehen unter Preise.
  • Validierungsfehler antworten mit 422 und lesbaren `issues`. Es wird nichts halbfertig gespeichert.

Sicherheit

Im Client gibt es keine Geheimnisse. KI-Schlüssel werden serverseitig verschlüsselt, Sitzungen als Hash gespeichert und der Runner-Token mit seinem Hash verglichen. CSP, HSTS, Origin-Prüfungen und Rate Limits werden im Proxy angewendet.

Um eine Schwachstelle zu melden: oryon.help@outlook.com.

Exportieren und importieren

GET /api/strategies/[id]/export?version=... lädt ein JSON mit `{ format, formatVersion, exportedAt, strategy }` herunter. POST /api/strategies/import akzeptiert dieses JSON oder eine einzelne Strategie und validiert mit demselben Schema.

Die API kann sich vor Version 1.0 ändern. Wenn du sie in der Produktion nutzt, schreib uns und wir halten die Kompatibilität für deinen Fall aufrecht.