Как построить агента инвестиционного анализа: рынки, фундаментал, SEC и экономические данные в одном API

Агенту инвестиционного анализа нужны пять разных слоёв данных — цены, фундаментал, отчётность, макро и новости — и каждый из них обычно означает отдельного поставщика, ключ и схему. Вот как завязать все пять на один набор эндпоинтов, с рабочим кодом и расчётом стоимости.
Кратко
- •Полезному финансовому агенту нужны пять слоёв данных: рынки в реальном времени (цены), фундаментал компаний (отчётность), отчётность SEC, экономические индикаторы и новости. Если сшивать из разных поставщиков — это 5 контрактов, 5 ключей, 5 схем.
- •API Pick отдаёт все пять как согласованные JSON-эндпоинты поиска — /search/markets, /search/financials, /search/sec, /search/economic, /search/news — плюс /extract для полных документов. Один ключ, заранее подготовлено под tool calling LLM.
- •Паттерн агента: запускайте нужные эндпоинты параллельно как инструменты, объединяйте JSON и давайте модели рассуждать над заземлёнными данными вместо того, чтобы выдумывать числа.
- •Тарификация в кредитах — только за успех: markets 120, financials 200, sec 120, economic 50, news 15 за вызов. Типичный мультиинструментальный исследовательский запрос стоит существенно меньше $0.01–$0.10 в зависимости от глубины.
- •Build-vs-buy: собрать Polygon + поставщика фундаментала + SEC EDGAR + FRED + новостной API самому — это недели интеграции и 5 ежемесячных счетов; маршрут с одним эндпоинтом — день.
Проблема пяти слоёв
Спросите LLM "дорогая ли NVIDIA прямо сейчас?" — и она уверенно придумает P/E. Решение не в более крупной модели, а в заземлении. Исследовательский агент, заслуживающий доверия, должен подтягивать живые данные с цитатами по пяти слоям, а затем рассуждать над ними:
- Рынки — текущая цена, капитализация и как она двигалась. Крипта, форекс, ETF и лидеры дня, когда это уместно.
- Фундаментал — баланс, отчёт о прибылях и убытках, движение денежных средств, дивиденды и сделки инсайдеров. Слой «а бизнес-то реально здоров».
- Отчётность SEC — факторы риска из 10-K, детали 10-Q, события 8-K, формулировки отчётных звонков. Качественное измерение, которое числа упускают.
- Экономические индикаторы — ставки, инфляция, занятость, ВВП из FRED, BLS, World Bank и IMF. Макрофон, внутри которого сидит любая идея.
- Новости — своевременный катализатор: понижение рейтинга, запуск продукта, действие регулятора.
Если сшивать это из разных поставщиков, получается пять контрактов, пять API-ключей, пять режимов rate-limit и пять схем ответа, которые надо нормализовать, прежде чем модель сможет к ним прикоснуться. Именно на интеграции и буксуют проекты финансовых агентов.
Один набор эндпоинтов, пять слоёв
API Pick отдаёт каждый слой как согласованный JSON-эндпоинт поиска, так что агент общается с одним ключом и одним форматом ответа:
- Markets Search — мировые и американские акции, крипта, форекс, ETF, фонды, сырьё и лидеры движения рынка США.
- Financials Search — балансы, отчёты о прибылях и убытках, движение денежных средств, дивиденды, сделки инсайдеров.
- SEC Filings Search — 10-K/10-Q/8-K, транскрипты отчётных звонков, статистика по акциям.
- Economic Data Search — FRED, BLS, World Bank, IMF, USAspending, Destatis.
- News Search — новости с фильтром по дате из крупных изданий.
- Extract — подтянуть полный документ отчётности или статью в чистый markdown, когда фрагмента недостаточно.
Архитектура агента
Зарегистрируйте каждый эндпоинт как инструмент. Когда приходит вопрос, агент решает, какие слои ему нужны, вызывает их параллельно, объединяет JSON и рассуждает над заземлённым результатом. Вопрос про тикер задевает markets + fundamentals + news; вопрос «как позиционирован сектор» задевает economic + news + пару компараблов.
import asyncio, httpx, os
API = "https://api.apipick.com/v1"
HEADERS = {"x-api-key": os.environ["APIPICK_KEY"], "Content-Type": "application/json"}
async def search(client, path, query, **kw):
r = await client.post(f"{API}/{path}", headers=HEADERS,
json={"query": query, **kw})
r.raise_for_status()
return r.json()["results"]
async def research(ticker: str):
async with httpx.AsyncClient(timeout=30) as c:
markets, fundamentals, filings, macro, news = await asyncio.gather(
search(c, "search/markets", f"{ticker} price and market cap"),
search(c, "search/financials", f"{ticker} latest balance sheet and cash flow"),
search(c, "search/sec", f"{ticker} 10-K risk factors", end_date="2026-06-16"),
search(c, "search/economic", "US interest rates and inflation latest"),
search(c, "search/news", f"{ticker} latest news", end_date="2026-06-16"),
)
return {"markets": markets, "fundamentals": fundamentals,
"filings": filings, "macro": macro, "news": news}
# Feed the merged JSON back to your LLM as grounding, with the source URLs,
# and ask it to synthesize — never to recall numbers.
context = asyncio.run(research("NVDA"))Каждый результат несёт URL в поле source. Прокиньте их в финальный ответ, чтобы человек мог проверить каждое утверждение — и чтобы вывод агента был цитируемым, а это и делает его полезным в реальном рабочем процессе.
Build vs. buy
| Собрать самому | API Pick | |
|---|---|---|
| Поставщики / ключи | ~5 (Polygon, фундаментал, EDGAR, FRED, новости) | 1 |
| Форматы ответа | 5 на нормализацию | 1 формат JSON |
| Время до первого агента | Недели интеграции | День |
| Тарификация | 5 ежемесячных подписок | За вызов, только за успех |
| Готовность к LLM | Каждый формируете сами | Готовые фрагменты + URL источников |
Для одного типа данных идти напрямую разумно. Для агента, которому нужны все пять и который ведёт разведку непредсказуемо, маршрут с одним эндпоинтом запускается за день и тарифицируется только когда вызов прошёл успешно.
Что это открывает
Те же пять инструментов питают не только поиск по тикерам: агентов-брифингов на сезон отчётности, отраслевые скрины, заземлённые на фундаментале, макроосознанные комментарии по портфелю и ассистентов due diligence, которые читают сам 10-K через Extract. Паттерн всегда один — заземлённые вызовы инструментов, параллельное извлечение, синтез над реальными данными с приложенными источниками.
Начните с бесплатного ключа (100 кредитов, без карты) и подключите эти пять инструментов в свой любимый фреймворк агентов. Дальше это уже prompt-engineering, а не сантехника.
Часто задаваемые вопросы
Какие данные на самом деле нужны агенту инвестиционного анализа?
Пять слоёв. (1) Рынки в реальном времени — цены, крипта, форекс, ETF, лидеры движения — для вопроса «что с ним происходит прямо сейчас». (2) Фундаментал — баланс, отчёт о прибылях и убытках, движение денежных средств, дивиденды, сделки инсайдеров. (3) Отчётность SEC — текст 10-K/10-Q/8-K и транскрипты отчётных звонков для качественных сигналов. (4) Экономические индикаторы — FRED, BLS, World Bank, IMF для макрофона. (5) Новости — своевременные катализаторы. Большинство агентов проваливаются, потому что у них есть цены, но нет фундаментала, или есть фундаментал, но нет макроконтекста.
Почему просто не дёргать Polygon, FRED и SEC EDGAR напрямую?
Можно — и для одного типа данных это нормально. Боль в том, что агенту нужны все пять: это пять поставщиков, пять схем аутентификации, пять режимов rate-limit, пять форматов ответа, которые надо нормализовать, прежде чем LLM сможет их использовать, и пять счетов. Подход с одним эндпоинтом меняет небольшую наценку за вызов на один ключ, один формат JSON и тарификацию только за успех — а для агента, который делает разведочные мультиинструментальные вызовы, это обычно более дешёвый и куда более быстрый путь к запуску.
Как не дать LLM галлюцинировать финансовые числа?
Никогда не позволяйте модели выдавать цифры по памяти. Сделайте каждый источник данных инструментом, заставьте агента вызвать инструмент и верните полученный JSON обратно как заземление. Задача модели — рассуждать и синтезировать над извлечёнными значениями, а не вспоминать их. Цитируйте URL источника из каждого результата, чтобы вывод был проверяемым — именно это делает ответ заслуживающим доверия для человека-проверяющего.
Подходит ли вывод для реальной торговли или для советов?
Нет. Вывод retrieval-API носит информационный характер. Он заземляет рассуждения аналитика или агента на реальных данных; это не инвестиционный совет, и его нельзя использовать как автоматический торговый сигнал без квалифицированного человека и должного риск-контроля. Считайте агента ускорителем исследования, а не лицом, принимающим решения.
Сколько стоит один исследовательский запрос?
Тарификация — за каждый успешный вызов: markets 120 кредитов, financials 200, sec 120, economic 50, news 15 (1000 кредитов ≈ $1). Сфокусированный запрос, который задевает markets + fundamentals + news — это ~335 кредитов (~$0.34); более лёгкий запрос macro+news — ~65 кредитов. Вы платите только при HTTP 200, поэтому неудачные или пустые вызовы ничего не стоят — а это важно, когда агент ведёт разведку.
API, использованные в статье
Сара Чой — CEO API Pick. Пишет о продакшен-готовых API для AI-агентов и LLM-воркфлоу.