Skip to main content
POST
/
strategies
/
{strategyId}
/
optimize
Construct portfolio using score-tilt weighting with optional risk overlay
curl --request POST \
  --url https://api.noonum.ai/v2/strategies/{strategyId}/optimize \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "companyIds": [
    "<string>"
  ]
}
'
{
  "metadata": {
    "annualizedReturn": 0.18,
    "cvar": 0.2,
    "expectedDailyReturn": 0.001,
    "maxDrawdown": -0.25,
    "numberStocks": 50,
    "signalType": "convictionScore",
    "volatility": 0.09,
    "weightedSignalScore": 0.42,
    "sharpeRatio": 1.5
  },
  "portfolio": [
    {
      "active": true,
      "exchange": "NASDAQ",
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "industry": "<string>",
      "isin": "<string>",
      "linguisticBeta": 123,
      "market": "<string>",
      "marketBuzz": 123,
      "marketCap": 123,
      "name": "Tesla, Inc.",
      "sector": "<string>",
      "symbol": "TSLA",
      "volAvg": 123,
      "weight": 0.035,
      "convictionScore": 123,
      "figi": "<string>",
      "mic": "<string>",
      "reasoning": "<string>"
    }
  ]
}

Authorizations

Authorization
string
header
required

Enter 'Bearer' followed by a space and then your JWT or API Key. Example: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... or Bearer YOUR_API_KEY_HERE

Path Parameters

strategyId
string<uuid>
required

UUID of the strategy

Query Parameters

asOfDate
string<date>

The as-of date (YYYY-MM-DD) selecting a specific run of the version. Omitted -> the latest completed run for the version.

versionId
string<uuid>

Explicit version to read. Omitted -> the strategy's active version.

minMarketCap
number<double>
default:1000000000

Minimum market capitalization for inclusion.

signalType
enum<string>
default:convictionScore

Which signal metric to use for scoring companies.

Available options:
linguisticBeta,
marketBuzz,
convictionScore
tiltExponent
number<double>
default:1

Power exponent controlling how aggressively signal scores affect weights. 0 = equal weight, 1 = proportional to score, higher = top scores get more weight.

Required range: 0 <= x <= 10
maxWeight
number<double>
default:0.2

Maximum weight allowed for any single holding.

Required range: 0 < x <= 1
minWeight
number<double>
default:0.005

Minimum weight for any single holding.

Required range: 0 <= x <= 1
riskAdjustment
number<double>
default:0

Risk diversification level. 0 = pure score-tilt (no risk adjustment), 1 = maximum risk adjustment (reduce concentration in correlated stocks). Requires fetching price data for covariance computation.

Required range: 0 <= x <= 1
riskFreeRate
number<double>
default:0.03

Annual risk-free rate used for Sharpe ratio calculation.

topN
integer

Number of top companies by signal score to include. If omitted, all qualifying companies are included.

Required range: x >= 2

Body

application/json
companyIds
string[]

Optional list of company IDs to include before applying other filters.

Response

Constructed portfolio data

metadata
object
required
portfolio
object[]
required