portfolIQ
Documentation

Cross-asset correlations methodology

How portfolIQ computes rolling Pearson correlations across crypto, equities, ETF, commodities, and forex. What the confidence_score means, multi-currency support, and AI narrative layer.

Cross-asset correlations methodology

Disclaimer: Correlation data provided by portfolIQ is factual and statistical. It does not constitute financial advice, investment recommendations, or guidance on portfolio construction. Correlation is a backward-looking statistical measure — it does not predict future co-movement. Not financial advice. Methodology disclosed.

Overview

portfolIQ computes rolling Pearson correlations across asset classes using its internal derived price series. The /v1/correlations endpoint returns a pairwise correlation matrix — no raw source prices are ever exposed.

The methodology identifier in each API response is data_methodology: "pearson_rolling_v1".

Asset classes supported

Asset classIdentifiersPrice source
Crypto (top 100)CoinGecko ID (bitcoin, ethereum, …)VWAP consensus (Binance, Bybit, OKX — internal derivative)
US equities (S&P 500 + Russell 2000)Ticker (AAPL, MSFT, …)stock_consensus_v1 (Tier 1 fusion — internal derivative)
ETFTicker (IWDA, QQQ, …)stock_consensus_v1 (same engine)
Commodities (11 core)Symbol (XAU, XAG, CL, …)FRED (public domain) + metals.dev
Asia equitiesLocal ticker (7203, 005930, …)EDINET / DART / TWSE — Tier 0
Forex pairsCurrency pair referenceBoJ / HKMA / RBI / BoK / RBA / MAS / ECB (all Tier 0)

All price series are normalised to the requested base_currency using Tier 0 FX rates before correlation is computed. This means a USD/EUR/JPY base currency change can produce meaningfully different correlation values for assets quoted in different native currencies.

Algorithm

1. Price series alignment

For each pair (asset_a, asset_b) in the requested asset list, portfolIQ:

  1. Fetches the internal derived daily close price series for each asset in the base_currency.
  2. Aligns both series to a common calendar of trading days within the requested window (30d, 90d, 180d, 365d).
  3. Excludes days where either asset has no price data (market holiday or coverage gap). The resulting overlap is recorded as observations.

2. Pearson correlation

The correlation coefficient is computed over the aligned log-return series:

r = Σ[(Ra - mean_Ra)(Rb - mean_Rb)] / sqrt[Σ(Ra - mean_Ra)² × Σ(Rb - mean_Rb)²]

Where Ra and Rb are the daily log-returns of assets A and B respectively over the aligned window.

Why log-returns? Log-returns are additive across time, better approximate a normal distribution for short windows, and reduce the influence of price-level differences between assets.

3. Confidence score

Each response includes a confidence_score (range 0.0 to 1.0) reflecting statistical reliability:

ComponentPenalty applied
Fewer observations than 70% of window lengthProportional reduction
observations < 15Hard cap: max 0.40
Missing price data on > 20% of aligned daysAdditional −0.10
Score rangeInterpretationRecommended use
0.71.0High confidenceProduction use
0.50.69ModerateUse with caution — flag in your application
Below 0.5Low observation countNot recommended for automated decisions

The observations field in each matrix entry allows you to apply your own statistical significance test (e.g., Fisher z-transform, t-test for r ≠ 0).

4. Multi-currency support

base_currency is a first-class parameter. Supported values: USD, EUR, JPY, HKD, INR, KRW, AUD, SGD.

FX conversion uses end-of-day rates from Tier 0 central bank sources. All conversions are applied before return computation — meaning the correlation reflects co-movement as experienced by an investor in that base currency.

CurrencyFX sourceTier
EUREuropean Central Bank (ECB SDW)Tier 0
JPYBank of Japan (BoJ)Tier 0
HKDHong Kong Monetary Authority (HKMA)Tier 0
INRReserve Bank of India (RBI)Tier 0
KRWBank of Korea (BoK)Tier 0
AUDReserve Bank of Australia (RBA)Tier 0
SGDMonetary Authority of Singapore (MAS)Tier 0

AI narrative layer — /v1/correlations/ai

The /v1/correlations/ai endpoint adds an interpretive layer on top of the statistical matrix. It does not modify the numerical output — it adds a narrative and an alerts[] array.

Models used:

TaskModelTTL cache
Screening for anomalous pairs (threshold breach)Claude Haiku 4.56h
Macro regime narrative + cross-asset contextClaude Sonnet 4.66h

Regime classification: risk-on / risk-off / structural-decorrelation. Inferred from the pattern of correlations across the matrix — not from external sentiment feeds.

Alerts: Generated when a pair crosses alert_threshold_high (default 0.8) or alert_threshold_low (default −0.3). Thresholds are configurable via query parameters.

Important: The AI narrative contextualises statistical observations. It does not recommend any portfolio action. portfolIQ is not a registered investment advisor. The model does not have authority over investment decisions.

Limitations

LimitationDetail
Max assets per request20. Above limit: HTTP 422 too_many_assets.
Historical window max365 days. Requests beyond this: HTTP 422 window_too_large.
Intraday correlationsNot available. EOD (end-of-day) prices only.
EU stocks OHLCVUCITS ETF and EU equity price consensus: Sprint 32+. Correlations for EU equities may have lower confidence_score until coverage is complete.
China A-sharesExcluded Phase 1. See Asia stocks coverage.
nonPermissibleRevenueNot relevant for correlations. Methodology boundary: correlations-methodology.mdx does not cover halal screening. See Halal screening.

What the API exposes

{
  "data": {
    "matrix": [
      {
        "asset_a": "bitcoin",
        "asset_b": "AAPL",
        "correlation": 0.41,
        "window": "90d",
        "observations": 87
      }
    ],
    "assets_requested": ["bitcoin", "AAPL", "XAU"],
    "assets_resolved": ["bitcoin", "AAPL", "XAU"],
    "base_currency": "USD",
    "as_of_date": "2026-05-21",
    "window": "90d"
  },
  "meta": {
    "data_methodology": "pearson_rolling_v1",
    "confidence_score": 0.91,
    "licensed_for_commercial_use": true,
    "computed_at": "2026-05-21T22:00:00Z",
    "methodology_url": "https://portfoliq.io/docs/methodology/correlations-methodology"
  }
}

licensed_for_commercial_use is true on all /v1/correlations responses. The correlation value is portfolIQ's own computed derivative — no raw Tier 1 price is exposed.


Not financial advice. Methodology disclosed. Correlations are statistical measures computed from historical data — they do not predict future co-movement and do not constitute investment signals. portfolIQ is not a registered investment advisor.