rocRevyAreGoals15's picture
Initial HF Space deployment
9e89154
Raw
History Blame Contribute Delete
12.7 kB
openapi: 3.0.3
info:
title: Quantum Portfolio API
version: 1.0.0
description: Quantum-inspired portfolio optimization and backtesting API.
servers:
- url: http://localhost:5000
security:
- ApiKeyAuth: []
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
schemas:
OptimizeRequest:
type: object
properties:
tickers:
type: array
items:
type: string
description: List of ticker symbols (e.g. ["AAPL","MSFT"])
example: ["AAPL", "MSFT", "GOOGL", "AMZN", "META"]
start_date:
type: string
format: date
description: Start date for market data (YYYY-MM-DD)
example: "2022-01-01"
end_date:
type: string
format: date
description: End date for market data (YYYY-MM-DD)
example: "2024-01-01"
returns:
type: array
items:
type: number
description: "Expected returns vector (production mode: send this instead of tickers)"
covariance:
type: array
items:
type: array
items:
type: number
description: "Covariance matrix (production mode: send this instead of tickers)"
objective:
type: string
enum: [max_sharpe, min_variance, target_return, risk_parity, hrp]
default: max_sharpe
description: Optimization objective
targetReturn:
type: number
description: "Annual target return as decimal (e.g. 0.10 for 10%). Required when objective is target_return."
example: 0.10
regime:
type: string
enum: [normal, bull, bear, volatile]
default: normal
omega:
type: number
default: 0.3
description: QSW mixing parameter (0.05 - 0.60)
evolutionTime:
type: integer
default: 10
description: QSW evolution time (1 - 50)
maxWeight:
type: number
default: 0.10
description: Maximum weight per asset (0.03 - 0.30)
turnoverLimit:
type: number
default: 0.20
description: Maximum portfolio turnover (0.05 - 0.50)
strategyPreset:
type: string
default: balanced
description: Strategy preset name
constraints:
type: object
description: Optional portfolio constraints (see /api/config/constraints)
BacktestRequest:
type: object
required: [tickers, start_date, end_date]
properties:
tickers:
type: array
items:
type: string
description: List of ticker symbols
example: ["AAPL", "MSFT", "GOOGL"]
start_date:
type: string
format: date
description: Backtest start date (YYYY-MM-DD)
example: "2022-01-01"
end_date:
type: string
format: date
description: Backtest end date (YYYY-MM-DD)
example: "2024-01-01"
rebalance_frequency:
type: string
enum: [weekly, monthly, quarterly, yearly]
default: monthly
objective:
type: string
enum: [max_sharpe, min_variance, target_return, risk_parity, hrp]
default: max_sharpe
target_return:
type: number
description: "Annual target return as decimal. Required when objective is target_return."
example: 0.10
strategy_preset:
type: string
default: balanced
constraints:
type: object
description: Optional portfolio constraints
ApiEnvelope:
type: object
properties:
data:
type: object
description: Response payload
meta:
type: object
properties:
request_id:
type: string
duration_ms:
type: number
OptimizeResponse:
type: object
properties:
qsw_result:
type: object
description: Primary optimization result (weights, sharpe_ratio, expected_return, volatility, n_active)
benchmarks:
type: object
description: "Benchmark strategies: equal_weight, min_variance, risk_parity, max_sharpe, hrp"
holdings:
type: array
items:
type: object
description: Sorted holdings with weight > 0.5%
assets:
type: array
items:
type: object
description: Asset metadata (name, sector, annReturn, annVol, sharpe)
risk_metrics:
type: object
description: VaR and CVaR estimates
BacktestResponse:
type: object
properties:
total_return:
type: number
annual_return:
type: number
sharpe_ratio:
type: number
max_drawdown:
type: number
equity_curve:
type: array
items:
type: object
properties:
date:
type: string
portfolio_value:
type: number
paths:
/api/health:
get:
summary: Health check
security: []
responses:
"200":
description: Service status
/api/portfolio/optimize:
post:
summary: Run portfolio optimization
description: >
Run quantum-inspired portfolio optimization. Provide either tickers + dates
(research mode, uses yfinance) or returns + covariance vectors directly (production mode).
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OptimizeRequest'
responses:
"200":
description: Optimization result wrapped in standard API envelope
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/ApiEnvelope'
- type: object
properties:
data:
$ref: '#/components/schemas/OptimizeResponse'
"400":
description: Validation error
"401":
description: Unauthorized (missing or invalid API key)
"429":
description: Rate limited
/api/portfolio/optimize/batch:
post:
summary: Run batch optimization (up to 100)
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/OptimizeRequest'
maxItems: 100
responses:
"200":
description: Batch result list
/api/portfolio/backtest/batch:
post:
summary: Run batch backtest (up to 50 scenarios)
description: >
Run multiple backtests in a single request. Each item in the requests array
is a standard BacktestRequest payload (tickers, start_date, end_date, etc.).
Results are returned in order, each tagged with index and status.
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [requests]
properties:
requests:
type: array
items:
$ref: '#/components/schemas/BacktestRequest'
maxItems: 50
description: Array of backtest request payloads
stop_on_error:
type: boolean
default: false
description: If true, stop processing after the first error
responses:
"200":
description: Batch backtest results wrapped in standard API envelope
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/ApiEnvelope'
- type: object
properties:
data:
type: object
properties:
count:
type: integer
description: Number of results returned
results:
type: array
items:
type: object
properties:
index:
type: integer
status:
type: string
enum: [ok, error]
result:
$ref: '#/components/schemas/BacktestResponse'
error:
type: string
"400":
description: Validation error
"401":
description: Unauthorized
"429":
description: Rate limited
/api/portfolio/backtest:
post:
summary: Run historical backtest
description: >
Run a historical backtest with periodic rebalancing using the specified objective.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BacktestRequest'
responses:
"200":
description: Backtest results wrapped in standard API envelope
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/ApiEnvelope'
- type: object
properties:
data:
$ref: '#/components/schemas/BacktestResponse'
"400":
description: Validation error
"401":
description: Unauthorized
/api/portfolio/efficient-frontier:
post:
summary: Compute efficient frontier
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
tickers:
type: array
items:
type: string
start_date:
type: string
format: date
end_date:
type: string
format: date
n_points:
type: integer
default: 15
responses:
"200":
description: Frontier points
/api/jobs/optimize:
post:
summary: Submit async optimization job
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
payload:
$ref: '#/components/schemas/OptimizeRequest'
webhook_url:
type: string
format: uri
responses:
"202":
description: Job accepted
/api/jobs/backtest:
post:
summary: Submit async backtest job
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
payload:
$ref: '#/components/schemas/BacktestRequest'
webhook_url:
type: string
format: uri
responses:
"202":
description: Job accepted
/api/jobs/{job_id}:
get:
summary: Get async job status
parameters:
- in: path
name: job_id
required: true
schema:
type: string
responses:
"200":
description: Job status
/api/config/objectives:
get:
summary: List optimization objectives
responses:
"200":
description: Objectives
/api/config/presets:
get:
summary: List strategy presets
responses:
"200":
description: Presets
/api/config/constraints:
get:
summary: Get constraints schema
responses:
"200":
description: Constraint schema
/metrics:
get:
summary: Prometheus metrics
security: []
responses:
"200":
description: Metrics text