Oryon

documentazione

API per utenti avanzati

Oryon è deterministico per design. Puoi esportare strategie, avviare backtest da altri script, consultare lo stato del servizio o collegare il tuo runner. Ecco il contratto minimo.

MetodologiaSicurezzaStato

Formato della strategia

La strategia è JSON validato con Zod. Puoi esportarla dalla libreria o da un link condiviso. Campi chiave: schemaVersion, name, market, symbol, timeframe, direction, indicators, entry, exit, risk e 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"] }
}

Il motore rifiuta riferimenti a indicatori inesistenti, id duplicati e gruppi di ingresso vuoti. Lo stesso JSON viene usato in backtest, portafoglio, deployment ed esportazione MQL5.

Autenticazione

  • Web: cookie di sessione httpOnly `oryon_session`. Le mutazioni richiedono un Origin attendibile.
  • Runner/PC: `Authorization: Bearer <token>` o l'header `x-oryon-runner`. Il token si ottiene accoppiando il PC e sul web vive solo il suo hash.
  • Non ci sono API key utente. Se automatizzi da uno script, accedi e riutilizza il cookie oppure usa il token del runner per le rotte del runner.
  • Pubbliche senza sessione: backtest, walkforward, optimize, demo, status, shares e waitlist. Strategie, account, billing e runner richiedono la loro credenziale.

Backtest e demo

POST /api/backtest accetta `strategy`, `bars`, `dataSource` (`real` o `synthetic`) e `trials`. È pubblico ma ha un rate limit per IP. Con una sessione, scala la quota di backtest del piano.

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 restituisce un backtest reale precaricato e in cache. Non richiede un account.

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

Realismo del backtest

  • `costs.spreadBySession` moltiplica lo spread in base alla sessione UTC. `swapLongPctPerDay` e `swapShortPctPerDay` ripartiscono swap/funding in base al tempo sul mercato.
  • `timeFilter` blocca gli ingressi fuori dai giorni, orari o sessioni. Le uscite per stop, obiettivo, segnale o tempo sono sempre consentite.
  • Le condizioni `higherTimeframe` usano l'ultima candela chiusa di un timeframe superiore; le candele base vengono aggregate e non si guarda al 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 e diario

  • POST /api/monitors crea una vigilanza giornaliera o settimanale. POST /api/monitors/[id]/run la esegue ora. Il cron chiama /api/monitors/run con il segreto del server.
  • Ogni esecuzione salva regime, metriche e avvisi. Se il regime cambia o una soglia viene superata, viene inviato un avviso `monitor_alert`.
  • POST /api/journal salva note, tag, screenshot e lezione. PATCH/DELETE /api/journal/[id] modifica o elimina. Gli screenshot vengono validati e mai serviti dal disco.
  • La cronologia delle versioni calcola le modifiche rispetto alla versione precedente; non sovrascrive le vecchie definizioni.

Integrazioni

  • TradingView: POST /api/integrations/tradingview/[token] accetta JSON o testo e salva un segnale. Il token viene mostrato solo alla creazione della connessione.
  • Binance e Bybit si collegano in sola lettura per testare le credenziali e consultare l'account. L'esecuzione resta riservata a MT5.
  • cTrader salva la configurazione OAuth; il flusso completo resta in attesa di una fase successiva.

Portafoglio e ottimizzazione

  • POST /api/portfolio/backtest: `versionIds` (2–12), limiti e `dataSource`. Richiede una sessione e scala la quota di portafogli.
  • POST /api/walkforward, /api/optimize e /api/optimize/sensitivity usano lo stesso formato di strategia e hanno rate limit più severi.

Runner e stato

Il PC riporta heartbeat, deployment e risultati dello Strategy Tester. Il sito non parla direttamente 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 è pubblico e restituisce lo stato del sito, del database e dei fornitori di dati. Ideale per i monitor.

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

Webhook degli avvisi

Gli avvisi in uscita possono essere inviati a un webhook. Se configuri un segreto, il corpo viene firmato con HMAC-SHA256 in `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": {}
}

Quote ed errori

  • Quando una quota viene superata, l'API risponde 402 con `{ ok:false, upgrade:true, plan, quota }`.
  • Il rate limit per IP risponde 429 con `Retry-After`. I limiti esatti sono nella pagina Prezzi.
  • Gli errori di validazione rispondono 422 con `issues` leggibili. Non viene salvato nulla a metà.

Sicurezza

Non ci sono segreti nel client. Le chiavi AI vengono cifrate sul server, le sessioni salvate come hash e il token del runner confrontato con il suo hash. CSP, HSTS, controlli Origin e rate limit vengono applicati nel proxy.

Per segnalare una vulnerabilità: oryon.help@outlook.com.

Esporta e importa

GET /api/strategies/[id]/export?version=... scarica un JSON con `{ format, formatVersion, exportedAt, strategy }`. POST /api/strategies/import accetta quel JSON o una strategia singola e valida con lo stesso schema.

L'API può cambiare prima della versione 1.0. Se ne dipendi in produzione, scrivici e manterremo la compatibilità per il tuo caso.