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/v1/strategies/{strategyId}/optimize \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "companyIds": [
    "<string>"
  ]
}
'
{
  "metadata": {
    "numberStocks": 50,
    "signalType": "convictionScore",
    "weightedSignalScore": 0.42,
    "annualizedReturn": 0.18,
    "volatility": 0.09,
    "cvar": 0.2,
    "expectedDailyReturn": 0.001,
    "maxDrawdown": -0.25,
    "sharpeRatio": 1.5
  },
  "portfolio": [
    {
      "id": "b544d95b-43a6-4a50-a326-90552b05c551",
      "symbol": "TSLA",
      "name": "Tesla, Inc.",
      "isin": "US88160R1014",
      "exchange": "NASDAQ",
      "market": "us",
      "sector": "Consumer Cyclical",
      "industry": "Auto - Manufacturers",
      "marketCap": 902298200000,
      "volAvg": 1250000,
      "linguisticBeta": 0.12002,
      "marketBuzz": 0.406,
      "active": true,
      "weight": 0.035,
      "figi": "BBG000N9MNX3",
      "mic": "XNAS",
      "reasoning": "<string>",
      "convictionScore": 0.75
    }
  ]
}

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
required

UUID of the user strategy

Query Parameters

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