Generated banner for Matlab Access Datafeed
Generated logo for Matlab Access Datafeed

Matlab Access Datafeed

MathWorksOfficialCreated by MathWorks

  • Skill
  • Tool integration
  • Data and AI
  • BSD-2-Clause
  • No issues found

From the author

Connect to Bloomberg, FRED, Haver Analytics, LSEG Datastream, NOAA Climate Data Online, or US government agencies (BEA, BLS, Census, EIA) from MATLAB and retrieve data. Covers market data (bloomberg/blp/bloombergHypermedia), economic data (fredrs, haver/haverdirect/haverview), historical financial data (datastreamws), weather/climate data (@noaa from GitHub), and government data (usbea/usbls/uscensus/useia from GitHub).
— the description by MathWorks

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

The Datafeed Toolbox provides a unified interface for MATLAB users to retrieve data from various external providers, including Bloomberg, FRED, Haver Analytics, LSEG Datastream, NOAA, and US government agencies like the BEA, BLS, Census, and EIA. This skill covers the necessary connection patterns, interface selection, and data retrieval methods for these services, enabling seamless integration of external time-series and market data into MATLAB workflows.

What it does

  • Connects to Bloomberg for market and reference data using C++ or REST APIs.
  • Retrieves economic time series from the St. Louis Fed (FRED) via the fredrs interface.
  • Fetches global economic and financial data from Haver Analytics.
  • Accesses historical financial data from LSEG Datastream.
  • Retrieves historical climate and weather data from NOAA Climate Data Online.
  • Provides interfaces for US government agency data including BEA, BLS, Census, and EIA.

When to use it

  • When you need to integrate real-time or historical market data into your MATLAB analysis.
  • When performing economic research requiring time series from FRED or Haver Analytics.
  • When working with historical financial data from LSEG Datastream.
  • When your research requires climate or weather data from NOAA.
  • When you need to pull public economic indicators from US government agencies.

Advantages

  • Unified access to diverse data sources within the MATLAB environment.
  • Supports both local terminal-based connections and platform-independent cloud/REST APIs.
  • Provides specific interfaces optimized for different license types and environments.
  • Enables programmatic data retrieval for automated research and modeling pipelines.

Usage examples

“How do I connect to Bloomberg using the recommended C++ interface?”
Use the bloomberg constructor to initialize the connection, then call getdata to retrieve security information.
“How can I fetch historical data from LSEG Datastream?”
Initialize a datastreamws connection object with your credentials and use the history method to retrieve time series data.
“What is the correct way to get FRED data in MATLAB?”
Use the fredrs interface, which is the current standard for accessing FRED economic data in MATLAB R2026a and later.
“How do I access US government data like BLS employment statistics?”
Use the usbls interface from the GitHub-based collection to query specific employment data series.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/matlab/matlab-access-datafeed/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip matlab-access-datafeed.zip -d .agents/skills

Documentation by MathWorks

Datafeed Toolbox — Bloomberg, FRED, Haver Analytics, LSEG Datastream, NOAA, and US Government Data

Access financial, economic, climate, and government data from multiple providers through the MATLAB Datafeed Toolbox and related GitHub interfaces.

When to Use

  • User wants to connect to Bloomberg, FRED, Haver Analytics, LSEG Datastream, NOAA, or US government agencies (BEA, BLS, Census, EIA) from MATLAB

  • User needs to retrieve market data (prices, history, real-time, reference data) via Bloomberg

  • User needs to retrieve economic time series from the St. Louis Fed (FRED)

  • User needs to fetch economic/financial time series from Haver Analytics databases

  • User needs to retrieve historical financial data from LSEG Datastream

  • User needs help choosing between interfaces within a provider (e.g., bloomberg vs blp vs bloombergHypermedia, haver vs haverview)

  • User needs to retrieve historical climate or weather data from NOAA Climate Data Online

  • User needs to retrieve GDP, employment, population, or energy data from US government agencies

  • User is writing MATLAB code involving securities, economic indicators, climate data, government data, or data provider connectivity

When NOT to Use

  • General financial modeling or portfolio optimization that doesn't involve data provider connectivity

  • Bloomberg Terminal keyboard shortcuts or Excel add-in questions (not MATLAB)

  • Datastream Excel add-in (not MATLAB)

  • Real-time streaming from LSEG (datastreamws is historical only)

  • NOAA forecast API (weather.gov) or NOAA CO-OPS tidal data (different services from CDO)

  • Direct REST/HTTP calls to US government agency APIs without MATLAB

  • Agency-specific data interpretation (what BLS series IDs mean, Census variable codes, etc.)

  • Data sources not covered here (e.g., Yahoo Finance)

  • Installing MATLAB, Datafeed Toolbox, or toolbox products → use matlab-install-products

  • Querying relational databases via SQL, JDBC, or ODBC → use matlab-use-database

  • Debugging generic MATLAB runtime errors not specific to a data provider → use matlab-debug-code

Provider Overview

ProviderData TypeInterfacesReference
BloombergMarket data (equities, fixed income, derivatives, indices)bloomberg, blp, bloombergHypermedia, bloombergEMSXreferences/bloomberg.md
FREDU.S. economic data (GDP, unemployment, CPI, interest rates)fredrs (replaces obsolete fred)references/fred.md
Haver AnalyticsGlobal economic & financial data (macro, industry, surveys)haver, haverdirect, haverviewreferences/haver.md
LSEG DatastreamHistorical financial data (equities, indices, economics, expressions)datastreamwsreferences/datastreamws.md
NOAA CDOHistorical climate/weather data (temperature, precipitation, snowfall)noaa (GitHub)references/noaa.md
US Government DataGDP, employment, population, energy (BEA, BLS, Census, EIA)usbea, usbls, uscensus, useia (GitHub)references/us-govt-data.md

Quick Interface Selection

Bloomberg — see references/bloomberg.md for full API patterns
  • Windows Desktop/Terminal user → bloomberg (C++)

  • Need platform independence (Data License) → bloombergHypermedia

  • Server/cloud, no Terminal (BPIPE) → bloombergBPIPE

  • Existing blp users → migrate to bloomberg (same API, no Java needed)

FRED — see references/fred.md for full API patterns
  • Any platform → fredrs (requires R2026a+, API key)

  • fred is obsolete — do NOT use it

Haver Analytics — see references/haver.md for full API patterns
  • Windows with local data files → haver

  • Windows needing remote access → haverdirect

  • Non-Windows / server / cloud → haverview (REST API)

LSEG Datastream — see references/datastreamws.md for full API patterns
  • Any platform → datastreamws (REST API, requires Datastream credentials)

NOAA Climate Data Online — see references/noaa.md for full API patterns
  • Any platform → noaa (GitHub interface, requires free CDO API token)

  • Clone from github.com/mathworks/noaa and addpath — not part of Datafeed Toolbox

US Government Data — see references/us-govt-data.md for full API patterns
  • BEA → usbea (GDP, national/regional/international economic accounts)

  • BLS → usbls (employment, unemployment, CPI, wages)

  • Census Bureau → uscensus (population, ACS, economic census)

  • EIA → useia (electricity, petroleum, natural gas, coal)

  • Clone from github.com/mathworks/Access-Public-US-Government-Data-from-MATLAB and addpath — not part of Datafeed Toolbox

How to Use References

Before generating code for a specific provider, read the corresponding reference file for detailed API patterns, function signatures, gotchas, and examples:

  • Working with Bloomberg data → read references/bloomberg.md

  • Working with FRED economic data → read references/fred.md

  • Working with Haver Analytics data → read references/haver.md

  • Working with LSEG Datastream data → read references/datastreamws.md

  • Working with NOAA climate/weather data → read references/noaa.md

  • Working with BEA, BLS, Census, or EIA data → read references/us-govt-data.md

Common Rules

  • Always use getSecret() for credentials and API keys — never hardcode secrets

  • Bloomberg, FRED, Haver, and Datastream require the Datafeed Toolbox.

  • fredrs additionally requires R2026a or later

  • datastreamws available since R2018b

  • NOAA is a standalone GitHub interface requiring MATLAB only.

  • US government data interfaces (usbea, usbls, uscensus, useia) are available on GitHub only and require MATLAB R2026b+ and Datafeed Toolbox R2026b+

  • Bloomberg and Haver local interfaces (bloomberg, blp, haver, haverdirect) are Windows-only; cloud/REST variants (bloombergHypermedia, bpipe, haverview, fredrs, datastreamws) are platform-independent


Copyright 2026 The MathWorks, Inc.


Files

references/bloomberg.md

Bloomberg Interfaces in Datafeed Toolbox

Three Bloomberg interfaces providing market data access through different underlying APIs.

Interface Selection

Decision 1: Which license type?
LicenseInterface (Recommended)Interface (Java — Bring Your Own)
Bloomberg Desktop/Terminalbloombergblp
Bloomberg ServerbloombergServerblpsrv
Bloomberg BPIPEbloombergBPIPEbpipe
Bloomberg Data License (Hypermedia)bloombergHypermedia—
Bloomberg EMSX (order execution)bloombergEMSXemsx
Decision 2: C++ vs Java?
  • Use C++ interfaces (bloomberg, bloombergServer, bloombergBPIPE) — no additional third-party library setup required

  • Use Java interfaces (blp, blpsrv, bpipe) only if you specifically need Java. Users must supply their own Java runtime and add blpapi3.jar to the MATLAB Java classpath

  • If a user cannot bring their own Java, they should NOT use the Java interfaces

  • EMSX interfaces (bloombergEMSX, emsx) are for order execution workflows, not data retrieval

Decision 3: Data License (Hypermedia)?

bloombergHypermedia is a separate decision path — use it when:

  • Licensed for Bloomberg Data License (also known as Hypermedia)

  • Need platform-independent access (no local Bloomberg software)

  • Running in server/cloud/headless environments

  • Performing bulk data retrieval

Interfaces

  • Uses the Bloomberg C++ API

  • Windows only (Desktop/Terminal); BPIPE child class is platform independent

  • Marginally faster than blp

  • Has child classes for Server/BPIPE licenses

  • Recommended over blp on Windows

blp (Java API) — Bring Your Own Java
  • Uses the Bloomberg Java API

  • Windows only (Desktop/Terminal); BPIPE child class is platform independent

  • Has child classes for Server/BPIPE licenses

  • No plan to remove; users must supply their own Java runtime as MATLAB stops bundling it

  • Behavior identical to bloomberg (other than different entry point constructors)

bloombergHypermedia (Data License REST API)
  • Uses the Bloomberg Data License REST API (also known as Hypermedia)

  • Platform independent

  • No local Bloomberg software installation required

  • Suitable for server/cloud/headless deployments and bulk data retrieval

Recommendations

Use CaseRecommendation
Windows Desktop/Terminal userbloomberg (C++)
Non-Windows with BPIPE licensebpipe BPIPE child class
Server/cloud, no TerminalbloombergHypermedia
Existing blp usersMigrate to bloomberg if possible (same API)

Key Functions and Patterns

Connecting
% Bloomberg Desktop (C++ — recommended)
b = bloomberg;

% Bloomberg Desktop (Java — requires blpapi3.jar on javaclasspath)
b = blp;

% Bloomberg Server (C++ — recommended)
b = bloombergServer(serverIP);

% Bloomberg BPIPE (C++ — recommended)
b = bloombergBPIPE(serverIP, port, authID);

% Bloomberg Hypermedia (Data License REST)
b = bloombergHypermedia(credentials);

% Always close when done
close(b);
Reference Data (getdata)

Retrieve current/static data and bulk fields for securities:

% Single security, single field
[d, sec] = getdata(b, "IBM US Equity", "PX_LAST");

% Multiple securities and fields — use string arrays
[d, sec] = getdata(b, ["IBM US Equity", "MSFT US Equity"], ["PX_LAST", "PX_VOLUME"]);

% With overrides — trailing positional key-value pairs (not a struct or options arg)
[d, sec] = getdata(b, "IBM US Equity", "BEST_EPS", "BEST_FPERIOD_OVERRIDE", "1BF");
%                                       ↑field      ↑override name             ↑override value

% Multiple overrides — just append more key-value pairs
[d, sec] = getdata(b, "IBM US Equity", "BEST_EPS", ...
    "BEST_FPERIOD_OVERRIDE", "1BF", "CRNCY", "USD");

% Historical dividend data (bulk field — use getdata, not history)
[d, sec] = getdata(b, "AAPL US Equity", "DVD_HIST_ALL");

Overrides are trailing positional string arguments to getdata — they are NOT a struct, NOT a name-value pair with an 'Override' keyword, and NOT a separate overrides argument.

Note: DVD_HIST_ALL is a bulk reference data field that returns the full dividend history including all corporate actions (special dividends, stock splits, etc.). Always retrieve it with getdata, not history.

Historical Data (history)

Retrieve end-of-day historical data:

% Basic history with date range
[d, sec] = history(b, "IBM US Equity", "PX_LAST", datetime(2024,1,1), datetime(2024,12,31));

% Multiple fields with periodicity
[d, sec] = history(b, "IBM US Equity", ["PX_LAST", "PX_VOLUME"], ...
    datetime(2024,1,1), datetime(2024,12,31), ...
    ["CALENDAR", "DAILY", "ALL_CALENDAR_DAYS", "PREVIOUS_VALUE"]);

% With currency conversion (currency is the argument after periodicity)
[d, sec] = history(b, "AAPL US Equity", "PX_LAST", datetime(2024,1,1), datetime(2024,12,31), ...
    ["CALENDAR", "DAILY", "ALL_CALENDAR_DAYS", "PREVIOUS_VALUE"], "JPY");

Default periodicity is ["ACTUAL", "DAILY", "ACTIVE_DAYS_ONLY", "NIL_VALUE"].

The currency argument is a positional input after periodicity — not a name-value pair or override.

Intraday Data (timeseries)

Retrieve intraday tick data:

% Tick data for today
d = timeseries(b, "IBM US Equity", datetime("today"));

% Tick data for a date range
d = timeseries(b, "IBM US Equity", {datetime(2024,6,1), datetime(2024,6,2)});

% Intraday bars for a specific time window across multiple days
% 3-element daterange: {dates, startTime, endTime} — requires bar interval
dates = (datetime(2024,6,3):datetime(2024,6,7))';
d = timeseries(b, "IBM US Equity", {dates, duration(9,30,0), duration(16,0,0)}, 5, "TRADE");

% Bar data (aggregated) — 5-minute intervals
d = timeseries(b, "IBM US Equity", {datetime(2024,6,1), datetime(2024,6,2)}, 5, "TRADE");

% Tick data with Bloomberg API flags (condition codes, exchange codes, broker codes)
% API flags are passed as two cell arrays of char vectors: flag names and flag values
d = timeseries(b, "F US Equity", {datetime(2024,6,1), datetime(2024,6,2)}, ...
    [], "Trade", ...
    {'includeConditionCodes', 'includeExchangeCodes', 'includeBrokerCodes'}, ...
    {'true', 'true', 'true'});

Bloomberg API flags for timeseries are passed as two trailing cell arrays of char vectors (single-quoted) — one for flag names, one for flag values. Do NOT use string scalars (double-quoted) inside the cell arrays — {"flagName"} fails the internal ischar validation; use {'flagName'} instead. The bar interval argument (empty [] for tick data) and event type must precede the flag arguments.

Bloomberg Hypermedia Workflow (Data License)

The bloombergHypermedia interface uses a multi-step workflow: create resources (universe, field list, trigger), assemble them into a request, then retrieve data.

% Connect with JSON credentials (contains client_id and client_secret), secret is user defined
b = bloombergHypermedia(getSecret("bhapicredentials"));

% Your account catalog ID
catalog = "myAccountId";

% Step 1: Create a Universe (securities)
uPayload.type = "Universe";
uPayload.identifier = "u" + bloombergHypermedia.generateResourcePostfix;
uPayload.title = "My Universe";
uPayload.description = "Equity universe";
uPayload.contains{1}.type = "Identifier";
uPayload.contains{1}.identifierType = "TICKER";
uPayload.contains{1}.identifierValue = "IBM US Equity";
uPayload.contains{2}.type = "Identifier";
uPayload.contains{2}.identifierType = "TICKER";
uPayload.contains{2}.identifierValue = "AAPL US Equity";
universeID = createUniverse(b, catalog, uPayload);

% Step 2: Create a Field List
fPayload.type = "DataFieldList";
fPayload.identifier = "f" + bloombergHypermedia.generateResourcePostfix;
fPayload.title = "My Fields";
fPayload.description = "EOD price fields";
fPayload.contains(1).mnemonic = "PX_LAST";
fPayload.contains(2).mnemonic = "PX_OPEN";
fPayload.contains(3).mnemonic = "PX_HIGH";
fPayload.contains(4).mnemonic = "PX_LOW";
fieldListID = createFieldList(b, catalog, fPayload);

% Step 3: Create a Trigger (optional — defaults to immediate submit)
tPayload.type = "SubmitTrigger";
tPayload.identifier = "t" + bloombergHypermedia.generateResourcePostfix;
tPayload.title = "Submit Now";
tPayload.description = "Immediate submission";
triggerID = createTrigger(b, catalog, tPayload);

% Step 4a: Create a Reference Data Request (ties universe + field list + trigger)
requestID = createRequest(b, catalog, universeID, fieldListID, triggerID);
% or use default trigger
requestID = createRequest(b, catalog, universeID, fieldListID);

% Step 4b: Create a Historical Data Request (requires full payload with runtime options)
reqPayload.identifier = "r" + bloombergHypermedia.generateResourcePostfix;
reqPayload.title = "My History Request";
reqPayload.description = "Daily historical prices";
reqPayload.universe = strcat(b.URL, "/eap/catalogs/", catalog, "/universes/", universeID);
reqPayload.fieldList = strcat(b.URL, "/eap/catalogs/", catalog, "/fieldLists/", fieldListID);
reqPayload.trigger = strcat(b.URL, "/eap/catalogs/bbg/triggers/oneshot/");
reqPayload.formatting.type = "HistoryFormat";
reqPayload.formatting.dateFormat = "yyyymmdd";
reqPayload.formatting.fileType = "unixFileType";
reqPayload.formatting.displayPricingSource = true;
reqPayload.runtimeOptions.type = "HistoryRuntimeOptions";
reqPayload.runtimeOptions.historyPriceCurrency = "USD";
reqPayload.runtimeOptions.period = "daily";
reqPayload.runtimeOptions.dateRange.type = "IntervalDateRange";
reqPayload.runtimeOptions.dateRange.startDate = string(datetime("today") - calyears(1), "yyyy-MM-dd");
reqPayload.runtimeOptions.dateRange.endDate = string(datetime("today"), "yyyy-MM-dd");
reqPayload.pricingSourceOptions.type = "HistoryPricingSourceOptions";
reqPayload.pricingSourceOptions.exclusive = true;
requestID = createRequest(b, catalog, reqPayload);

% Step 5: Retrieve data
requestDate = string(datetime("today", "Format", "yyyyMMdd"));
data = getData(b, catalog, requestID, requestDate);

close(b);

Reference vs. Historical requests: For reference/bulk data (e.g., DVD_HIST_ALL), use the simple createRequest(b, catalog, universeID, fieldListID). For historical time series data (e.g., daily PX_LAST over a date range), build a full request payload with HistoryRuntimeOptions specifying period, date range, and currency. The oneshot trigger at "/eap/catalogs/bbg/triggers/oneshot/" submits immediately.

Output Format Properties
b = bloomberg;
b.DataReturnFormat = "timetable";   % 'table', 'timetable', or default (struct/cell)
b.DatetimeType = "datetime";       % use datetime instead of datenum

Code Generation: Input Types

When generating code for bloomberg/blp methods, do not use cell arrays of strings for list inputs:

% OK — string arrays
securities = ["IBM US Equity", "MSFT US Equity"];

% OK — char vectors and cellstr
securities = {'IBM US Equity', 'MSFT US Equity'};

% WRONG — cell arrays of strings (fails internal validation)
securities = {"IBM US Equity", "MSFT US Equity"};

The methods accept char, string, or cellstr — but cell arrays of strings ({"a","b"}) fail the internal ~ischar(s{1}) check.

Notes

  • blp and bloomberg provide identical functionality and methods — migration is a drop-in replacement

  • blp remains available; users must provide their own Java runtime once MATLAB stops bundling it

  • Only BPIPE child classes and bloombergHypermedia are platform independent


Copyright 2026 The MathWorks, Inc.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs an API key

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
MathWorks
Publisher
MathWorks (Official)
Source
matlab/matlab-agentic-toolkit · skills-catalog/computational-finance/matlab-access-datafeed · commit 2a7f215
Licence
BSD 2-Clause License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE.md)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by MathWorks.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download matlab-access-datafeed.zip