Welcome. This guide compresses everything you need: concepts, UI navigation, API, analytics patterns, portfolio construction, monitoring and extension. Use the left navigation or just scroll—sections auto-highlight.
1. Onboarding & Account Basics #
1.1 Create Account & Verify Email #
Sign up using email or supported social providers (Google / Microsoft / Facebook). Email verification is mandatory for API access and quota tracking.
1.2 Subscription Tiers #
You need the Optimize entitlement for all programmatic endpoints and advanced analytics modules. Visit Pricing to upgrade.
1.3 Retrieving Your API Key
Every request must include an X-API-Key
header. Base URL for this session: https://intratio.com/api/v1
.
1.4 Core Data Objects
- Company: Fundamental snapshot + trailing numeric metrics.
- Signal: Forecast value per horizon (
3_months, 1_month, 2_weeks, 1_week, 3_days
) and optionally alpha-adjusted variants. - Portfolio Optimization: Mean-variance style solver leveraging forecast-derived expected returns, constraints and objective variants.
- Analytics Metrics: Distributions, correlations, outliers, trends, change detection, percentiles and peers aggregation.
3. Core Forecast & Metric Concepts #
3.1 Forecast Horizons
Horizon keys: 3_months
, 1_month
, 2_weeks
, 1_week
, 3_days
. Alpha versions normalize relative to baseline risk/benchmark behaviour.
3.2 Signal Quality & Change
Change compares successive dates; Trend accumulates over a window (fast SQL variant). Use both to detect emerging acceleration.
3.3 Percentiles
Percentile = percentage of observations strictly below the company value. Provided for All, Sector and Industry contexts.
3.4 Aggregations
Sector & industry endpoints return primarily Median to reduce outlier distortion. Dispersion endpoints show spread (std, IQR) enabling factor crowding detection.
4. API Quick Start #
Base URL: https://intratio.com/api/v1
— Add trailing slash & query parameters as needed.
curl -s -H "X-API-Key: YOUR_API_KEY" https://intratio.com/api/v1/signals/top/?horizon=3_months | jq
import requests
API_KEY='YOUR_API_KEY'; BASE='https://intratio.com/api/v1'
r = requests.get(f"{BASE}/companies/AAPL/", headers={'X-API-Key':API_KEY})
print(r.json()['ticker'], 'loaded')
const API_KEY='YOUR_API_KEY'; const BASE='https://intratio.com/api/v1';
fetch(`${BASE}/metrics/distribution/?metric=Gross_Margin_percentage`,{headers:{'X-API-Key':API_KEY}})
.then(r=>r.json()).then(console.log);
4.1 Essential Endpoints
Endpoint | Purpose | Key Params |
---|---|---|
/usage/ | Quota counters | - |
/signals/top/ | Positive forecasts | horizon, alpha |
/signals/worst/ | Negative forecasts | horizon, alpha |
/signals/change/ | Two-date delta | from, to, horizon |
/signals/trend/ | Window momentum | window, horizon |
/metrics/distribution/ | Histogram & stats | metric, sector, industry |
/metrics/correlation/ | Matrix | metrics, sector, industry |
/metrics/outliers/ | Z / IQR flags | metric, method, threshold |
/companies/<ticker>/snapshot/ | 20-key metrics + peers | - |
/portfolio/optimize/ | Weights solver | tickers, objective |
4.2 Authentication Pattern
Use a thin wrapper to attach headers; rotate keys by regenerating in profile (coming soon) without downtime.
5. Core Analytical Workflows #
Idea Generation
Surface fresh directional edges.
- Check /signals/top/ & /signals/worst/.
- Open selected ticker pages.
- Validate fundamentals percentile outliers.
Factor Discovery
Uncover metrics correlating with forecast dispersion.
- Pull /metrics/correlation/ with profitability & leverage fields.
- Plot matrix heatmap (Analytics dashboard already)
- Rank high absolute correlation pairs.
Peer Relative Value
Assess percentile advantage.
- /companies/TICKER/snapshot/
- Review peer_median gaps.
- Cross-check outliers & sector median rank.
Momentum Validation
Confirm persistence.
- /signals/trend/ (window=10)
- Intersect with /signals/change/ large magnitude moves.
- Filter by predictability threshold.
Risk Control
Detect concentration & anomalies.
- /metrics/distribution/ for leverage metrics.
- /metrics/outliers/ (zscore)
- Exclude extreme exposures in optimizer.
Sector Rotation
Allocate towards improving medians.
- /sectors/rank/?metric=Gross_Margin_percentage
- /signals/change/ for rising sectors' constituents.
- Construct overweight basket.
6. Portfolio Optimization #
The optimizer maps selected tickers to expected returns derived from the latest horizon forecast (raw or alpha). Objectives:
- MaximizeReturnToRisk (maximum Sharpe)
- MinimizeRisk (efficient risk given target return)
- MaximizeReturn (efficient return given target risk)
Optional constraints: weight bounds, total cash out (capital deployment), target portfolio beta.
import requests, json
payload={
"tickers":["AAPL","MSFT","GOOGL"],
"horizon":"3_months",
"alpha":false,
"objective":"MaximizeReturnToRisk",
"weight_bounds":[0,1],
"target_risk":10,
"target_return":10
}
res=requests.post("https://intratio.com/api/v1/portfolio/optimize/",headers={'X-API-Key':'YOUR_API_KEY'},json=payload)
print(res.json()['performance'])
6.1 Interpreting Output
Field | Description |
---|---|
expected_return_90d | Scaled forecast based aggregate expected return for horizon |
volatility_90d | Modelled portfolio variance translated to horizon |
sharpe_90d | Return to risk ratio (no risk-free adjustment) |
portfolio_beta | Optional computed beta vs benchmark (if available) |
6.2 Best Practices
- Exclude tickers missing forecasts (endpoint returns errors for missing).
- Apply metric filters for quality (e.g. Debt_per_Equity upper bound).
- Rebalance when /signals/change/ indicates drift beyond threshold.
7. Advanced Analytics Modules #
The Analytics Dashboard renders interactive Plotly visuals powered by the same endpoints:
- Sectors & Industries Ranking: Median aggregation by selected metric.
- Signals Distribution: Central tendency & tail profile for horizon.
- Metric Distribution & Outliers: Robust trimming & hist fences.
- Correlation Matrix: Multi-metric relationship map.
- Scatter & Regression: Quick factor scatter with linear fit & correlation.
- Percentile Compare: Multi-ticker relative positioning across metrics.
- Signals Change & Trend: Short term shock vs multi-bar momentum.
- Company Snapshot: 20-key metrics vs peer median.
7.1 Extending Analytics
Copy network calls from browser DevTools (all /api/v1/...
)—compose bespoke research notebooks using identical JSON contracts.
8. Monitoring, Watchlists & Risk Flags #
Design a lightweight monitoring loop:
import requests, time
API='YOUR_API_KEY'; BASE='https://intratio.com/api/v1'
WATCH=['AAPL','MSFT','NVDA']
while True:
ch=requests.get(f"{BASE}/signals/change/?horizon=3_months",headers={'X-API-Key':API}).json()['results']
flagged=[r for r in ch if r['ticker'] in WATCH and abs(r['change'])>0.05]
if flagged: print('Rebalance candidates:', flagged)
time.sleep(3600)
Combine with /metrics/outliers/
to dynamically exclude deteriorating quality names.
9. Data Integrity & Limitations #
- Daily forecast refresh—intraday calls may not shift values until next batch.
- Median aggregation over raw averages to damp outlier skew.
- Percentiles strict-below methodology (ties cluster at same rank threshold).
- Missing metrics return
null
; propagate carefully in custom analytics.
10. Roadmap & Extensibility #
11. FAQ #
How often should I re-run optimization?
Common cadence: daily after forecast refresh, plus on significant /signals/change/
divergences.
Raw vs Alpha forecast?
Alpha attempts to isolate stock-specific return component; use in diversified baskets to reduce systematic drift.
Why medians everywhere?
Robust central tendency—less sensitivity to single distortive outlier values, improving comparative stability.
Percentile vs Rank?
Percentile gives continuous 0–100 scale; you can derive rank by ordering on value if discrete ordering required.
12. System Architecture & Data Flow #
This section clarifies how raw inputs become actionable forecasts and portfolio outputs so you can reason about latency, consistency, and extensibility.
alpha
variant. Quality gating discards horizons where confidence score under threshold.13. Forecast Methodology & Interpretation #
13.1 Signal Scale
Signals represent an expected relative directional magnitude. They are not guaranteed percentage returns; instead they rank order opportunities. Empirically the top decile historically outperforms median baskets after transaction cost adjustments (internal research; forthcoming whitepaper).
13.2 Confidence & Reliability
Not all horizons have equal predictive stability. Longer horizons incorporate more noise; use convergence across at least two adjacent horizons for higher conviction. Future release: explicit confidence field beta.
13.3 Alpha Variant
The alpha=true
variant neutralizes broad market and sector factor exposures using rolling factor betas. Residual emphasis reduces systematic drift but slightly lowers raw magnitude. Use when constructing diversified multi-sector portfolios.
13.4 Limitations & Risks
- Regime Shifts: Structural breaks (macro shocks, policy changes) can reduce model fit until adaptation cycle completes.
- Data Gaps: Newly listed tickers with sparse historical fundamentals yield lower quality signals.
- Survivorship: Downstream backtests must incorporate delisted names to avoid bias (future extended dataset export).
14. API Deep Dive (Auth, Pagination, Filtering) #
14.1 Authentication
Supply X-API-Key
with every request. Unauthorized responses: 401
. Invalid or missing key: 403
. Rotate keys (coming soon) with zero downtime by creating overlapping validity windows.
14.2 Pagination
List endpoints (e.g. /companies/
, /signals/top/
) implement standard limit/offset parameters: ?limit=100&offset=200
. Default limit often 50. Always code defensively against truncated result sets.
import requests
API='YOUR_API_KEY'; BASE='https://intratio.com/api/v1'
all_rows=[]; offset=0
while True:
r=requests.get(f"{BASE}/signals/top/?horizon=3_months&limit=100&offset={offset}",headers={'X-API-Key':API}).json()
all_rows.extend(r['results'])
if not r.get('next'): break
offset+=100
print('Loaded', len(all_rows))
14.3 Filtering Patterns
- Range:
Gross_Margin_percentage__gte=40
- In-list:
ticker__in=AAPL,MSFT,NVDA
- Case-insensitive contains:
name__icontains=pharma
14.4 Rate Limiting
Response headers expose X-RateLimit-Remaining
, X-RateLimit-Reset
. On 429, backoff until reset epoch. Avoid burst loops; batch tickers or use vector endpoints.
14.5 Error Codes
Status | Description | Resolution |
---|---|---|
400 | Validation error | Check parameter names & types |
401 | Missing auth | Add header or renew session |
403 | Invalid key / insufficient tier | Upgrade plan or regenerate key |
404 | Resource missing | Verify ticker or endpoint path |
429 | Rate limit exceeded | Respect reset header; implement sleep |
500 | Internal error | Retry with exponential backoff; contact support if persistent |
15. Data Dictionary (Selected Metrics) #
Key standardized fields. (Extended downloadable dictionary forthcoming.)
Field | Definition | Unit | Notes |
---|---|---|---|
Gross_Margin_percentage | (Revenue - COGS)/Revenue * 100 | % | TTM basis |
Operating_Margin_percentage | Operating Income / Revenue * 100 | % | TTM |
Net_Income_margin_percentage | Net Income / Revenue * 100 | % | TTM |
Debt_per_Equity | Total Debt / Shareholder Equity | ratio | Balance sheet date-aligned |
Revenue_growth_yoy_percentage | ((Rev_t - Rev_{t-4})/Rev_{t-4}) * 100 | % | Quarter over same quarter prior year |
EPS_diluted_ttm | Trailing twelve month diluted EPS | currency | Adjusted for splits |
Shares_float | Public float shares | count | May lag filings |
Beta_1y | Regression beta vs benchmark over ~252 trading days | ratio | Rolling update |
EV_to_EBITDA | Enterprise Value / EBITDA | ratio | Forward-looking if guidance available else TTM |
16. Backtesting & Performance Evaluation #
16.1 Principles
- Use point-in-time forecasts only (historical snapshot endpoints forthcoming).
- Incorporate realistic slippage & transaction costs.
- Beware look-ahead leakage (delay trade execution until next session open).
import pandas as pd, requests, time
API='YOUR_API_KEY'; BASE='https://intratio.com/api/v1'
# 1. Fetch daily top decile forecasts (simplified)
raw=requests.get(f"{BASE}/signals/top/?horizon=3_months&limit=100",headers={'X-API-Key':API}).json()['results']
df=pd.DataFrame(raw)
# 2. Hypothetical next-day price change (placeholder; replace with market data join)
df['fwd_return']=0.01 # mock
# 3. Evaluate mean realized return of top basket
print('Mean fwd return', df['fwd_return'].mean())
16.2 Key Metrics
- Hit Rate: % of positions with positive realized return.
- Information Coefficient: Rank correlation between forecast and realized horizon return.
- Turnover: (Sum of absolute weight changes)/2; controls transaction costs.
- Capacity: Liquidity constraints (shares traded vs ADV) if scaling strategy.
17. Advanced Portfolio Techniques #
17.1 Constraints
- Per-asset bounds
weight_bounds
- Group / sector exposure caps (coming)
- Target portfolio beta ranges
- Minimum forecast quality score (future)
17.2 Scenario Stress (Manual)
Adjust expected returns downward for vulnerable sectors under hypothetical macro shocks; rerun optimizer to produce defensive allocation.
# Example manual scenario tweak
for t in payload['tickers']:
if t in CYCLICALS: scenario_expected_returns[t]*=0.7
17.3 Rebalancing Triggers
- Signal Drift: Forecast percentile change > 20 pts.
- Risk Drift: Portfolio volatility estimate +15% vs baseline.
- Correlation Regime: Mean pairwise correlation shift > threshold.
18. Integration Recipes (Python, JS, Excel, Airflow) #
18.1 Python Session Wrapper
class IntratioClient:
def __init__(self, key, base='https://intratio.com/api/v1'):
self.key=key; self.base=base
def _get(self, path, **params):
import requests; r=requests.get(f"{self.base}{path}",params=params,headers={'X-API-Key':self.key}); r.raise_for_status(); return r.json()
def top_signals(self,horizon='3_months',limit=50):
return self._get('/signals/top/', horizon=horizon, limit=limit)
client=IntratioClient('YOUR_API_KEY')
print(client.top_signals()[:2])
18.2 Node.js Fetch
import fetch from 'node-fetch';
const KEY='YOUR_API_KEY', BASE='https://intratio.com/api/v1';
const res=await fetch(`${BASE}/signals/worst/?horizon=1_month`,{headers:{'X-API-Key':KEY}});
console.log(await res.json());
18.3 Excel / Power Query
let
Source = Json.Document(Web.Contents("https://intratio.com/api/v1/signals/top/?horizon=3_months", [Headers=[X-API-Key="YOUR_API_KEY"]])),
Results = Source[results]
in Results
18.4 Airflow DAG Snippet
from airflow import DAG
from airflow.operators.python import PythonOperator
import requests, pendulum
API='YOUR_API_KEY'; BASE='https://intratio.com/api/v1'
def pull_signals():
r=requests.get(f"{BASE}/signals/top/?horizon=3_months",headers={'X-API-Key':API}).json()
# store to warehouse...
with DAG('intratio_daily_signals', start_date=pendulum.today('UTC').add(days=-1), schedule='0 5 * * *', catchup=False) as dag:
PythonOperator(task_id='fetch', python_callable=pull_signals)
19. Automation & Alerting #
While native webhooks are on the roadmap, interim automation can poll endpoints and dispatch notifications.
import requests, smtplib, time
API='YOUR_API_KEY'; BASE='https://intratio.com/api/v1'
THRESH=0.07
while True:
ch=requests.get(f"{BASE}/signals/change/?horizon=3_months",headers={'X-API-Key':API}).json()['results']
movers=[c for c in ch if abs(c['change'])>THRESH]
if movers:
body='\n'.join(f"{m['ticker']} {m['change']:.2%}" for m in movers)
# send email (pseudo)
print('ALERT:\n'+body)
time.sleep(3600)
20. Security, Compliance & Governance #
- Transport: All endpoints over HTTPS; enforce SSL redirect in production.
- Key Storage: Store API key in environment variables or secret manager (never commit to version control).
- Least Privilege: Separate keys for staging vs production workloads.
- Audit: Keep internal logs of programmatic calls & derived signals used in investment decisions.
- Compliance: Combine with internal restricted lists to pre-filter tickers before optimization.
21. Troubleshooting & Diagnostics #
Symptom | Likely Cause | Action |
---|---|---|
Empty results array | Filters too restrictive | Relax params; test base endpoint |
Intermittent 429s | Burst polling | Introduce jittered exponential backoff |
Null metrics | Recent listing / missing filing | Fallback to peers or exclude |
Optimizer error | Invalid objective / insufficient tickers | Verify payload schema & min 2 assets |
Latency spike | Cold cache / large parameter set | Batch requests, reuse HTTP session |
22. Glossary #
Alpha
Residual return component after removing systematic factors.
Horizon
Forward-looking time bucket a forecast targets.
Percentile
Proportion of cohort observations below value.
Sharpe
Return per unit volatility (risk-free omitted here).
Turnover
Portfolio trading intensity; high turnover elevates costs.
Winsorization
Clipping extreme values to reduce outlier influence.
23. Extension & Contribution Guide #
Architectural extensibility points (roadmap aligns with these hooks):
- Custom Factor Uploads: Compose weighted blends (e.g. quality composite) for percentile ranking (planned).
- User Webhooks: Push-based event stream for signal change triggers.
- Scenario Engine: Inject stress vectors into optimizer expected return and covariance inputs.
- Client SDKs: Official Python / JS wrappers to reduce boilerplate.
24. Quick Start Pathways #
- Create account & copy key
- Load /signals/top/ in browser
- Open 2 ticker forecast pages
- Run first optimization with 3 tech tickers
- Batch fetch top & worst lists
- Build watchlist poller
- Generate correlation heatmap
- Implement simple rebalance script
- Compute rolling IC time series
- Integrate optimizer into strategy engine
- Backtest multi-horizon ensemble weighting
- Deploy Airflow daily pipeline
25. Summary Checklist #
- Confirm API key & test authentication.
- Fetch initial forecasts & identify candidate tickers.
- Validate fundamentals (margin, leverage percentile).
- Run baseline portfolio optimization.
- Set monitoring loop & alert thresholds.
- Iterate performance evaluation (hit rate, IC, Sharpe).
- Refine constraints & integrate scenario adjustments.
- Document process & compliance considerations.
Next: Explore Live Data
1. Open Analytics Dashboard and replicate API flows visually.
2. Dive into API Docs for live request experimentation.
3. Construct an initial optimized allocation.