MarekOzana
polars-bloomberg
Python

Python library providing a Polars DataFrame interface for easy and intuitive access to the Bloomberg API

Last updated Jun 21, 2026
23
Stars
3
Forks
0
Issues
0
Stars/day
Attention Score
62
Language breakdown
Python 100.0%
โ–ธ Files click to expand
README

Polars Bloomberg Logo

Polars + Bloomberg Open API

PyPI version Python versions PyPI Downloads Docs
Tests License

polars-bloomberg is a Python library that extracts Bloomberg's financial data directly into Polars DataFrames. If youโ€™re a quant financial analyst, data scientist, or quant developer working in capital markets, this library makes it easy to fetch, transform, and analyze Bloomberg data right in Polarsโ€”offering speed, efficient memory usage, and a lot of fun to use!

Why use polars-bloomberg?

  • User-Friendly Functions: Shortcuts like bdp(), bdh(), and bql() (inspired by Excel-like Bloomberg calls) let you pull data with minimal boilerplate.
  • High-Performance Analytics: Polars is a lightning-fast DataFrame library. Combined with Bloombergโ€™s rich dataset, you get efficient data retrieval and minimal memory footprint
  • No Pandas Dependency: Enjoy a clean integration that relies solely on Polars for speed and simplicity.

Table of Contents

- BDP (Bloomberg Data Point) - BDH (Bloomberg Data History) - BDIB (Bloomberg Data Intraday Bar) - BSRCH (Bloomberg Search) - BQL (Bloomberg Query Language)
BQL Examples - Single Item and Single Security - Multiple Securities with Single Item - Multiple Items - SRCH - Aggregation (AVG) - Axes - Axes with All Columns - Segments - Average Spread per Bucket - Technical Analysis Screening - Bonds Universe from Equity - Bonds Total Return - Maturity Wall for US HY

Introduction

Working with Bloomberg data in Python often feels more complicated than using their well-known Excel interface. Great projects like blp, xbbg, and pdblp have made this easier by pulling data directly into pandas.

With polars-bloomberg, you can enjoy the speed and simplicity of Polars DataFramesโ€”accessing both familiar Excel-style calls (bdp, bdh ,bdip, bsrch) and advanced bql queriesโ€”without extra pandas conversions.

For detailed documentation and function references, visit the documentation site https://marekozana.github.io/polars-bloomberg.

I hope you enjoy using it as much as I had fun building it!

Prerequisites

  • Bloomberg Access: A valid Bloomberg terminal license.
  • Bloomberg Python API: The blpapi library must be installed. See the Bloomberg API Library for guidance.
  • Python Version: Python 3.12+ recommended.

Installation

pip install polars-bloomberg

Quick Start

"Hello World" Example (under 1 minute):
from polars_bloomberg import BQuery

Fetch the latest price for Apple (AAPL US Equity)

with BQuery() as bq: df = bq.bdp(["AAPL US Equity"], ["PX_LAST"]) print(df)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ security โ”† PX_LAST โ”‚ โ”‚ --- โ”† --- โ”‚ โ”‚ str โ”† f64 โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ AAPL US Equity โ”† 248.13 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

What this does:
  • Establishes a Bloomberg connection using the context manager.
  • Retrieves the last price of Apple shares.
  • Returns the result as a Polars DataFrame.
If you see a price in df, your setup is working ๐Ÿคฉ!!!

Core Methods

BQuery is your main interface. Using a context manager ensures the connection opens and closes cleanly. Within this session, you can use:
  • bq.bdp() for Bloomberg Data Points (single-value fields).
  • bq.bdh() for Historical Data (time series).
  • bq.bql() for complex Bloomberg Query Language requests.
  • bq.bsrch() for saved custom SRCH searches and BI templates.
  • bq.bdip() for intraday bars

BDP

Use Case: Fetch the latest single-value data points (like last price, currency, or descriptive fields).

Example: Fetching the Last Price & Currency of Apple and SEB

with BQuery() as bq:
    df = bq.bdp(["AAPL US Equity", "SEBA SS Equity"], ["PX_LAST", "CRNCY"])
    print(df)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ security โ”† PX_LAST โ”† CRNCY โ”‚ โ”‚ --- โ”† --- โ”† --- โ”‚ โ”‚ str โ”† f64 โ”† str โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ AAPL US Equity โ”† 248.13 โ”† USD โ”‚ โ”‚ SEBA SS Equity โ”† 155.2 โ”† SEK โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Expand for more BDP Examples

BDP with different column types

polars-bloomberg correctly infers column type as shown in this example:

with BQuery() as bq:
    df = bq.bdp(["XS2930103580 Corp", "USX60003AC87 Corp"],
                ["SECURITYDES", "YASZSPREAD", "CRNCY", "NXTCALLDT"])

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ security โ”† SECURITYDES โ”† YASZSPREAD โ”† CRNCY โ”† NXTCALLDT โ”‚ โ”‚ --- โ”† --- โ”† --- โ”† --- โ”† --- โ”‚ โ”‚ str โ”† str โ”† f64 โ”† str โ”† date โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ XS2930103580 Corp โ”† SEB 6 3/4 PERP โ”† 304.676112 โ”† USD โ”† 2031-11-04 โ”‚ โ”‚ USX60003AC87 Corp โ”† NDAFH 6.3 PERP โ”† 292.477506 โ”† USD โ”† 2031-09-25 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

BDP with overrides

User can submit list of tuples with overrides
with BQuery() as bq:
    df = bq.bdp(
        ["IBM US Equity"],
        ["PXLAST", "CRNCYADJPXLAST"],
        overrides=[("EQYFUNDCRNCY", "SEK")],
    )

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ security โ”† PXLAST โ”† CRNCYADJPXLAST โ”‚ โ”‚ --- โ”† --- โ”† --- โ”‚ โ”‚ str โ”† f64 โ”† f64 โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ IBM US Equity โ”† 230.82 โ”† 2535.174 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

BDP with date overrides

Overrides for dates has to be in format YYYYMMDD
with BQuery() as bq:
    df = bq.bdp(["USX60003AC87 Corp"], ["SETTLE_DT"],
                overrides=[("USERLOCALTRADE_DATE", "20241014")])

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ security โ”† SETTLE_DT โ”‚ โ”‚ --- โ”† --- โ”‚ โ”‚ str โ”† date โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ USX60003AC87 Corp โ”† 2024-10-15 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

with BQuery() as bq:
    df = bq.bdp(['USDSEK Curncy', 'SEKCZK Curncy'],
                ['SETTLEDT', 'PXLAST'],
                overrides=[('REFERENCE_DATE', '20200715')]
               )

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ security โ”† SETTLEDT โ”† PXLAST โ”‚ โ”‚ --- โ”† --- โ”† --- โ”‚ โ”‚ str โ”† date โ”† f64 โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ USDSEK Curncy โ”† 2020-07-17 โ”† 10.9778 โ”‚ โ”‚ SEKCZK Curncy โ”† 2020-07-17 โ”† 2.1698 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

BDH

Use Case: Retrieve historical data over a date range, such as daily closing prices or volumes.
with BQuery() as bq:
    df = bq.bdh(
        ["TLT US Equity"],
        ["PX_LAST"],
        start_date=date(2019, 1, 1),
        end_date=date(2019, 1, 7),
    )
    print(df)

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ security โ”† date โ”† PX_LAST โ”‚ โ”‚ --- โ”† --- โ”† --- โ”‚ โ”‚ str โ”† date โ”† f64 โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ TLT US Equity โ”† 2019-01-02 โ”† 122.15 โ”‚ โ”‚ TLT US Equity โ”† 2019-01-03 โ”† 123.54 โ”‚ โ”‚ TLT US Equity โ”† 2019-01-04 โ”† 122.11 โ”‚ โ”‚ TLT US Equity โ”† 2019-01-07 โ”† 121.75 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Expand for more BDH examples

BDH with multiple securities / fields

with BQuery() as bq:
    df = bq.bdh(
        securities=["SPY US Equity", "TLT US Equity"],
        fields=["PX_LAST", "VOLUME"],
        start_date=date(2019, 1, 1),
        end_date=date(2019, 1, 10),
        options={"adjustmentSplit": True},
    )
    print(df)

shape: (14, 4) โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ security โ”† date โ”† PX_LAST โ”† VOLUME โ”‚ โ”‚ --- โ”† --- โ”† --- โ”† --- โ”‚ โ”‚ str โ”† date โ”† f64 โ”† f64 โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ SPY US Equity โ”† 2019-01-02 โ”† 250.18 โ”† 1.26925199e8 โ”‚ โ”‚ SPY US Equity โ”† 2019-01-03 โ”† 244.21 โ”† 1.44140692e8 โ”‚ โ”‚ SPY US Equity โ”† 2019-01-04 โ”† 252.39 โ”† 1.42628834e8 โ”‚ โ”‚ SPY US Equity โ”† 2019-01-07 โ”† 254.38 โ”† 1.031391e8 โ”‚ โ”‚ SPY US Equity โ”† 2019-01-08 โ”† 256.77 โ”† 1.02512587e8 โ”‚ โ”‚ โ€ฆ โ”† โ€ฆ โ”† โ€ฆ โ”† โ€ฆ โ”‚ โ”‚ TLT US Equity โ”† 2019-01-04 โ”† 122.11 โ”† 1.2970226e7 โ”‚ โ”‚ TLT US Equity โ”† 2019-01-07 โ”† 121.75 โ”† 8.498104e6 โ”‚ โ”‚ TLT US Equity โ”† 2019-01-08 โ”† 121.43 โ”† 7.737103e6 โ”‚ โ”‚ TLT US Equity โ”† 2019-01-09 โ”† 121.24 โ”† 9.349245e6 โ”‚ โ”‚ TLT US Equity โ”† 2019-01-10 โ”† 120.46 โ”† 8.22286e6 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

BDH with options - periodicitySelection: Monthly

with BQuery() as bq:
    df = bq.bdh(['AAPL US Equity'],
                ['PX_LAST'],
                start_date=date(2019, 1, 1),
                end_date=date(2019, 3, 29),
                options={"periodicitySelection": "MONTHLY"})

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ security โ”† date โ”† PX_LAST โ”‚ โ”‚ --- โ”† --- โ”† --- โ”‚ โ”‚ str โ”† date โ”† f64 โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ AAPL US Equity โ”† 2019-01-31 โ”† 41.61 โ”‚ โ”‚ AAPL US Equity โ”† 2019-02-28 โ”† 43.288 โ”‚ โ”‚ AAPL US Equity โ”† 2019-03-29 โ”† 47.488 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

BDIB

Use Case: Retrieve intraday bars (1- to 1440-minute intervals) over a precise intraday window without managing tick aggregation yourself.
with BQuery() as bq:  # set debug=False for normal usage
    df = bq.bdib(
        "OMX Index",
        event_type="TRADE",
        interval=60,
        start_datetime=datetime(2025, 11, 5),
        end_datetime=datetime(2025, 11, 5, 12),
    )
    print(df)

Output:

shape: (4, 9) โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ security  โ”† time         โ”† open     โ”† high     โ”† โ€ฆ โ”† close    โ”† volume โ”† numEvents โ”† value โ”‚ โ”‚ ---       โ”† ---          โ”† ---      โ”† ---      โ”†   โ”† ---      โ”† ---    โ”† ---       โ”† ---   โ”‚ โ”‚ str       โ”† datetime[ฮผs] โ”† f64      โ”† f64      โ”†   โ”† f64      โ”† i64    โ”† i64       โ”† f64   โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ OMX Index โ”† 2025-11-05   โ”† 2726.603 โ”† 2742.014 โ”† โ€ฆ โ”† 2739.321 โ”† 0      โ”† 3591      โ”† 0.0   โ”‚ โ”‚           โ”† 08:00:00     โ”†          โ”†          โ”†   โ”†          โ”†        โ”†           โ”†       โ”‚ โ”‚ OMX Index โ”† 2025-11-05   โ”† 2739.466 โ”† 2739.706 โ”† โ€ฆ โ”† 2733.836 โ”† 0      โ”† 3600      โ”† 0.0   โ”‚ โ”‚           โ”† 09:00:00     โ”†          โ”†          โ”†   โ”†          โ”†        โ”†           โ”†       โ”‚ โ”‚ OMX Index โ”† 2025-11-05   โ”† 2733.747 โ”† 2734.827 โ”† โ€ฆ โ”† 2731.724 โ”† 0      โ”† 3600      โ”† 0.0   โ”‚ โ”‚           โ”† 10:00:00     โ”†          โ”†          โ”†   โ”†          โ”†        โ”†           โ”†       โ”‚ โ”‚ OMX Index โ”† 2025-11-05   โ”† 2731.721 โ”† 2742.015 โ”† โ€ฆ โ”† 2741.185 โ”† 0      โ”† 3600      โ”† 0.0   โ”‚ โ”‚           โ”† 11:00:00     โ”†          โ”†          โ”†   โ”†          โ”†        โ”†           โ”†       โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Each row is a 60-minute bar built from TRADE events, and the time column is returned in UTC (matching Bloomberg's wide format).

BSRCH

Use Case: Excel-style searches (SRCH/BI domains). Supports overrides such as LIMIT and custom keys (e.g., BIKEY).

Small example: two COCO bonds (limit = 2)

with BQuery() as bq:
    df = bq.bsrch("FI:SRCHEX.@COCO", overrides={"LIMIT": 2})
    print(df)
Example output:
shape: (2, 1)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id           โ”‚
โ”‚ ---          โ”‚
โ”‚ str          โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ DA785784 Corpโ”‚
โ”‚ DA773901 Corpโ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Larger example: BI template (BI:TPD) with BIKEY and LIMIT

with BQuery() as bq:
    df = bq.bsrch(
        "BI:TPD",
        overrides={
            "BIKEY": "DKOCVGXJVU8II8M90W8JSQEKR",
            "LIMIT": 20000,  # avoid ReachMax warning
        },
    )
    print(df.head())
Example output (truncated):
shape: (16, 6)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ MainCat โ”† Bclass3 โ”† Categoryโ”† 06/30/20 โ”† 03/31/20 โ”† 12/31/20โ”‚
โ”‚ ...      โ”† ...      โ”† ...     โ”† 25       โ”† 25       โ”† 24      โ”‚
โ”‚ str      โ”† str      โ”† str     โ”† f64      โ”† f64      โ”† f64     โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ Leverage โ”† Non-Finโ€ฆ โ”† B       โ”† 3.956051 โ”† 4.118212 โ”† 4.269732โ”‚
โ”‚ โ€ฆ        โ”† โ€ฆ        โ”† โ€ฆ       โ”† โ€ฆ        โ”† โ€ฆ        โ”† โ€ฆ       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

BQL

Use Case: Run more advanced queries to screen securities, calculate analytics (like moving averages), or pull fundamental data with complex conditions.

Returns: The bql() method returns a BqlResult object, which:

  • Acts like a list of Polars DataFrames (one for each item in BQL get statement).
  • Provides a .combine() method to merge DataFrames. With no arguments it preserves
the legacy behavior of joining on common columns. Use .combine(on=...) to join only on explicit keys such as "ID" or ["ID", "DATE"].

1. Basic Example: Single Item and Single Security

# Fetch the last price of IBM stock
with BQuery() as bq:
    results = bq.bql("get(px_last) for(['IBM US Equity'])")
    print(results[0])  # Access the first DataFrame
Output:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ID            โ”† px_last โ”† DATE       โ”† CURRENCY โ”‚
โ”‚ ---           โ”† ---     โ”† ---        โ”† ---      โ”‚
โ”‚ str           โ”† f64     โ”† date       โ”† str      โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ IBM US Equity โ”† 230.82  โ”† 2024-12-14 โ”† USD      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

2. Multiple Securities with a Single Item

# Fetch the last price for IBM and SEB
with BQuery() as bq:
    results = bq.bql("get(px_last) for(['IBM US Equity', 'SEBA SS Equity'])")
    print(results[0])
Output:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ID             โ”† px_last โ”† DATE       โ”† CURRENCY โ”‚
โ”‚ ---            โ”† ---     โ”† ---        โ”† ---      โ”‚
โ”‚ str            โ”† f64     โ”† date       โ”† str      โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ IBM US Equity  โ”† 230.82  โ”† 2024-12-14 โ”† USD      โ”‚
โ”‚ SEBA SS Equity โ”† 155.2   โ”† 2024-12-14 โ”† SEK      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

3. Multiple Items

When querying for multiple items, bql() returns a list of DataFrames
# Fetch name and last price of IBM (two items)
with BQuery() as bq:
    results = bq.bql("get(name, px_last) for(['IBM US Equity'])")
Output:
>>> print(len(results))  # 2 DataFrames
n=2

>>> print(results[0]) # First DataFrame: 'name' โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ID โ”† name โ”‚ โ”‚ --- โ”† --- โ”‚ โ”‚ str โ”† str โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ IBM US Equity โ”† International Business Machine โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

>>> print(results[1]) # Second DataFrame: 'px_last' โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ID โ”† px_last โ”† DATE โ”† CURRENCY โ”‚ โ”‚ --- โ”† --- โ”† --- โ”† --- โ”‚ โ”‚ str โ”† f64 โ”† date โ”† str โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ IBM US Equity โ”† 230.82 โ”† 2024-12-14 โ”† USD โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Combining Results

>>> combined_df = results.combine()
>>> print(combined_df)
Output:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ID            โ”† name                           โ”† px_last โ”† DATE       โ”† CURRENCY โ”‚
โ”‚ ---           โ”† ---                            โ”† ---     โ”† ---        โ”† ---      โ”‚
โ”‚ str           โ”† str                            โ”† f64     โ”† date       โ”† str      โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ IBM US Equity โ”† International Business Machine โ”† 230.82  โ”† 2024-12-14 โ”† USD      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

By default, combine() keeps the historical behavior and joins each result DataFrame on all common column names. This is convenient for simple BQL results, but it can be too broad when several item tables share metadata columns such as DATE, CURRENCY, PERIOD, VALUE, or MULTIPLIER.

For safer joins, pass the intended key columns explicitly:

# Join only by security ID. Other common columns are kept as data columns.
combined_df = results.combine(on="ID")

Join by a compound key when both columns are true row identifiers.

combined_df = results.combine(on=["ID", "DATE"])

Use Polars join names. "full" is the default for explicit joins.

combined_df = results.combine(on="ID", how="inner")

If non-key columns overlap when using on=..., they are preserved with suffixes based on the BQL item name, for example DATE#ret1d. To fail instead of suffixing overlapping non-key columns, use:

combineddf = results.combine(on="ID", allowcommon_columns=False)

4. Advanced Example: Screening Securities

Find list of SEB and Handelsbanken's AT1 bonds and print their names, duration and Z-Spread.
query="""
    let(#dur=duration(duration_type=MODIFIED);
        #zsprd=spread(spread_type=Z);)
    get(name(), #dur, #zsprd)
    for(filter(screenresults(type=SRCH, screen_name='@COCO'),
            ticker in ['SEB', 'SHBASS']))
"""

with BQuery() as bq: results = bq.bql(query) combined_df = results.combine() print(combined_df)

Output:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ID            โ”† name()          โ”† #dur โ”† DATE       โ”† #zsprd โ”‚ โ”‚ ---           โ”† ---             โ”† ---  โ”† ---        โ”† ---    โ”‚ โ”‚ str           โ”† str             โ”† f64  โ”† date       โ”† f64    โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ BW924993 Corp โ”† SEB 6 โ…ž PERP    โ”† 2.23 โ”† 2024-12-16 โ”† 212.0  โ”‚ โ”‚ YV402592 Corp โ”† SEB Float PERP  โ”† 0.21 โ”† 2024-12-16 โ”† 233.0  โ”‚ โ”‚ ZQ349286 Corp โ”† SEB 5 โ…› PERP    โ”† 0.39 โ”† 2024-12-16 โ”† 186.0  โ”‚ โ”‚ ZO703315 Corp โ”† SHBASS 4 โ…œ PERP โ”† 1.95 โ”† 2024-12-16 โ”† 213.0  โ”‚ โ”‚ ZO703956 Corp โ”† SHBASS 4 ยพ PERP โ”† 4.94 โ”† 2024-12-16 โ”† 256.0  โ”‚ โ”‚ YU819930 Corp โ”† SEB 6 ยพ PERP    โ”† 5.37 โ”† 2024-12-16 โ”† 309.0  โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Average PE per Sector

This example shows aggregation (average) per group (sector) for members of an index. The resulting list has only one element since there is only one data-item in get
query = """
    let(#avgpe=avg(group(peratio(), gicssectorname()));)
    get(#avg_pe)
    for(members('OMX Index'))
"""
with BQuery() as bq:
    results = bq.bql(query)
    print(results[0].head(5))
Output:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ID           โ”† #avgpe   โ”† REVISIONDAT โ”† ASOFDATE โ”† PERIODENDD โ”† ORIGIDS     โ”† GICSSECTOR โ”‚
โ”‚ ---          โ”† ---       โ”† E            โ”† ---        โ”† ATE          โ”† ---          โ”† _NAME()     โ”‚
โ”‚ str          โ”† f64       โ”† ---          โ”† date       โ”† ---          โ”† str          โ”† ---         โ”‚
โ”‚              โ”†           โ”† date         โ”†            โ”† date         โ”†              โ”† str         โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ Communicatio โ”† 19.561754 โ”† 2024-10-24   โ”† 2024-12-14 โ”† 2024-09-30   โ”† null         โ”† Communicati โ”‚
โ”‚ n Services   โ”†           โ”†              โ”†            โ”†              โ”†              โ”† on Services โ”‚
โ”‚ Consumer Dis โ”† 19.117295 โ”† 2024-10-24   โ”† 2024-12-14 โ”† 2024-09-30   โ”† null         โ”† Consumer    โ”‚
โ”‚ cretionary   โ”†           โ”†              โ”†            โ”†              โ”†              โ”† Discretiona โ”‚
โ”‚              โ”†           โ”†              โ”†            โ”†              โ”†              โ”† ry          โ”‚
โ”‚ Consumer     โ”† 15.984743 โ”† 2024-10-24   โ”† 2024-12-14 โ”† 2024-09-30   โ”† ESSITYB SS   โ”† Consumer    โ”‚
โ”‚ Staples      โ”†           โ”†              โ”†            โ”†              โ”† Equity       โ”† Staples     โ”‚
โ”‚ Financials   โ”† 6.815895  โ”† 2024-10-24   โ”† 2024-12-14 โ”† 2024-09-30   โ”† null         โ”† Financials  โ”‚
โ”‚ Health Care  โ”† 22.00628  โ”† 2024-11-12   โ”† 2024-12-14 โ”† 2024-09-30   โ”† null         โ”† Health Care โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Axes

Get current axes of all Swedish USD AT1 bonds
# Get current axes for Swedish AT1 bonds in USD
query="""
    let(#ax=axes();)
    get(security_des, #ax)
    for(filter(bondsuniv(ACTIVE),
        crncy()=='USD' and
        baseliiidesignation() == 'Additional Tier 1' and
        country_iso() == 'SE'))
"""

with BQuery() as bq: results = bq.bql(query) print(results.combine())

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ID โ”† securitydes โ”† #ax โ”† ASKDEPTH โ”† BIDDEPTH โ”† ASKTOTALSIZE โ”† BIDTOTAL_SIZE โ”‚ โ”‚ --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”‚ โ”‚ str โ”† str โ”† str โ”† i64 โ”† i64 โ”† f64 โ”† f64 โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ YU819930 Corp โ”† SEB 6 ยพ PERP โ”† Y โ”† 2 โ”† null โ”† 5.6e6 โ”† null โ”‚ โ”‚ ZO703315 Corp โ”† SHBASS 4 โ…œ PERP โ”† Y โ”† 1 โ”† 2 โ”† 5e6 โ”† 6e6 โ”‚ โ”‚ BR069680 Corp โ”† SWEDA 4 PERP โ”† Y โ”† null โ”† 1 โ”† null โ”† 3e6 โ”‚ โ”‚ ZL122341 Corp โ”† SWEDA 7 โ… PERP โ”† Y โ”† null โ”† 6 โ”† null โ”† 2.04e7 โ”‚ โ”‚ ZQ349286 Corp โ”† SEB 5 โ…› PERP โ”† Y โ”† 2 โ”† 4 โ”† 5.5e6 โ”† 3e7 โ”‚ โ”‚ ZF859199 Corp โ”† SWEDA 7 ยพ PERP โ”† Y โ”† 1 โ”† 1 โ”† 2e6 โ”† 2e6 โ”‚ โ”‚ ZO703956 Corp โ”† SHBASS 4 ยพ PERP โ”† Y โ”† 1 โ”† 3 โ”† 1.2e6 โ”† 1.1e7 โ”‚ โ”‚ BW924993 Corp โ”† SEB 6 โ…ž PERP โ”† Y โ”† 1 โ”† 3 โ”† 5e6 โ”† 1.1e7 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Axes with all columns

# RT1 Axes with all columns
query = """
let(#ax=axes();)
get(name, #ax, amt_outstanding)
for(filter(bondsuniv(ACTIVE),
    crncy() in ['USD', 'EUR'] and
    solvencyiidesignation() == 'Restricted Tier 1' and
    amt_outstanding() > 7.5e8 and
    is_axed('Bid') == True))
preferences(addcols=all)
"""

with BQuery() as bq: results = bq.bql(query) print(results.combine())

Output:
shape: (3, 33)
IDname#axASKPRICEBIDPRICEASKDEPTHBIDDEPTHASKDEALERBIDDEALERASKSIZEBIDSIZEASKTOTALSIZEBIDTOTALSIZEASKPRICEISDERIVEDBIDPRICEISDERIVEDASKSPREADBIDSPREADASKSPREADISDERIVEDBIDSPREADISDERIVEDASKYIELDBIDYIELDASKYIELDISDERIVEDBIDYIELDISDERIVEDASKAXESOURCEBIDAXESOURCEASKBROKERBIDBROKERASKHISTAGGSIZEBIDHISTAGGSIZEamtoutstandingCURRENCYOF_ISSUEMULTIPLIERCURRENCY
strstrstrf64f64i64i64strstrf64f64f64f64boolboolf64f64boolboolf64f64boolboolstrstrstrstrf64f64f64strf64str
"BM368057 Corp""ALVGR 2 โ… PERP""Y"88.03487.42751"BARC""IMI"1.2e61e67.2e61e6nullnull287.031300.046truetrue4.8544.976truetrue"ERUN""ERUN""BXOL""IMIC"6.68e68.92e61.2500e9"EUR"1.0"EUR"
"EK588238 Corp""ASSGEN 4.596 PERP""Y"101.0100.1346"MSAX""A2A"500000.0100000.01.556e73.83e7nullnull108.9207.889truetrue3.4664.434nulltrue"ERUN""BBX""MSAX""A2A"1.70424e73.17e71.0004e9"EUR"1.0"EUR"
"BR244025 Corp""ALVGR 3.2 PERP""Y"88.086.87534"UBS""DB"5e61e61.1e71.4e7nullnull49.33414.602truetrue7.342588.553nulltrue"ERUN""ERUN""UBSW""DABC"1.6876e63.6e71.2500e9"USD"1.0"USD"

Segments

The following example shows handling of two data-items with different length. The first dataframe describes the segments (and has length 5 in this case), while the second dataframe contains time series. One can join the dataframes on common columns and pivot the segments into columns as shown below:
# revenue per segment
query = """
    let(#segment=segment_name();
        #revenue=salesRevturn(fpt=q, fpr=range(2023Q3, 2024Q3));
        )
    get(#segment, #revenue)
    for(segments('GTN US Equity',type=reported,hierarchy=PRODUCT, level=1))
"""
with BQuery() as bq:
    results = bq.bql(query)
    df = results.combine().pivot(
        index="PERIODENDDATE", on="#segment", values="#revenue"
    )
    print(df)
Output:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ PERIODENDDATE โ”† Broadcasting โ”† Production Companies โ”† Other  โ”† Adjustment โ”‚
โ”‚ ---             โ”† ---          โ”† ---                  โ”† ---    โ”† ---        โ”‚
โ”‚ date            โ”† f64          โ”† f64                  โ”† f64    โ”† f64        โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ 2023-09-30      โ”† 7.83e8       โ”† 2e7                  โ”† 1.6e7  โ”† null       โ”‚
โ”‚ 2023-12-31      โ”† 8.13e8       โ”† 3.2e7                โ”† 1.9e7  โ”† null       โ”‚
โ”‚ 2024-03-31      โ”† 7.8e8        โ”† 2.4e7                โ”† 1.9e7  โ”† null       โ”‚
โ”‚ 2024-06-30      โ”† 8.08e8       โ”† 1.8e7                โ”† 0.0    โ”† null       โ”‚
โ”‚ 2024-09-30      โ”† 9.24e8       โ”† 2.6e7                โ”† 1.7e7  โ”† null       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Actual and Forward EPS Estimates

with BQuery() as bq:
    results = bq.bql("""
        let(#eps=iseps(faperiod_type='A',
                        faperiodoffset=range(-4,2));)
        get(#eps)
        for(['IBM US Equity'])
    """)
    print(results[0])

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ID โ”† #eps โ”† REVISIONDATE โ”† ASOFDATE โ”† PERIODEND_DATE โ”† CURRENCY โ”‚ โ”‚ --- โ”† --- โ”† --- โ”† --- โ”† --- โ”† --- โ”‚ โ”‚ str โ”† f64 โ”† date โ”† date โ”† date โ”† str โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ IBM US Equity โ”† 10.63 โ”† 2022-02-22 โ”† 2024-12-14 โ”† 2019-12-31 โ”† USD โ”‚ โ”‚ IBM US Equity โ”† 6.28 โ”† 2023-02-28 โ”† 2024-12-14 โ”† 2020-12-31 โ”† USD โ”‚ โ”‚ IBM US Equity โ”† 6.41 โ”† 2023-02-28 โ”† 2024-12-14 โ”† 2021-12-31 โ”† USD โ”‚ โ”‚ IBM US Equity โ”† 1.82 โ”† 2024-03-18 โ”† 2024-12-14 โ”† 2022-12-31 โ”† USD โ”‚ โ”‚ IBM US Equity โ”† 8.23 โ”† 2024-03-18 โ”† 2024-12-14 โ”† 2023-12-31 โ”† USD โ”‚ โ”‚ IBM US Equity โ”† 7.891 โ”† 2024-12-13 โ”† 2024-12-14 โ”† 2024-12-31 โ”† USD โ”‚ โ”‚ IBM US Equity โ”† 9.236 โ”† 2024-12-13 โ”† 2024-12-14 โ”† 2025-12-31 โ”† USD โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Average issuer OAS spread per maturity bucket

# Example: Average OAS-spread per maturity bucket
query = """
let(
    #bins = bins(maturity_years,
                 [3,9,18,30],
                 ['(1) 0-3','(2) 3-9','(3) 9-18','(4) 18-30','(5) 30+']);
    #average_spread = avg(group(spread(st=oas),#bins));
)
get(#average_spread)
for(filter(bonds('NVDA US Equity', issuedby = 'ENTITY'),
           maturity_years != NA))
"""

with BQuery() as bq: results = bq.bql(query) print(results[0])

Output:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ID        โ”† #averagespread โ”† DATE       โ”† ORIGIDS      โ”† #BINS     โ”‚ โ”‚ ---       โ”† ---             โ”† ---        โ”† ---           โ”† ---       โ”‚ โ”‚ str       โ”† f64             โ”† date       โ”† str           โ”† str       โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ (1) 0-3   โ”† 31.195689       โ”† 2024-12-14 โ”† QZ552396 Corp โ”† (1) 0-3   โ”‚ โ”‚ (2) 3-9   โ”† 59.580383       โ”† 2024-12-14 โ”† null          โ”† (2) 3-9   โ”‚ โ”‚ (3) 9-18  โ”† 110.614416      โ”† 2024-12-14 โ”† BH393780 Corp โ”† (3) 9-18  โ”‚ โ”‚ (4) 18-30 โ”† 135.160279      โ”† 2024-12-14 โ”† BH393781 Corp โ”† (4) 18-30 โ”‚ โ”‚ (5) 30+   โ”† 150.713405      โ”† 2024-12-14 โ”† BH393782 Corp โ”† (5) 30+   โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Technical Analysis: stocks with 20d EMA > 200d EMA and RSI > 53

with BQuery() as bq:
    results = bq.bql(
        """
        let(#ema20=emavg(period=20);
            #ema200=emavg(period=200);
            #rsi=rsi(close=px_last());)
        get(name(), #ema20, #ema200, #rsi)
        for(filter(members('OMX Index'),
                    and(#ema20 > #ema200, #rsi > 53)))
        with(fill=PREV)
        """
    )
    print(results.combine())
Output:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ID              โ”† name()           โ”† #ema20     โ”† DATE       โ”† CURRENCY โ”† #ema200    โ”† #rsi      โ”‚
โ”‚ ---             โ”† ---              โ”† ---        โ”† ---        โ”† ---      โ”† ---        โ”† ---       โ”‚
โ”‚ str             โ”† str              โ”† f64        โ”† date       โ”† str      โ”† f64        โ”† f64       โ”‚
โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก
โ”‚ ERICB SS Equity โ”† Telefonaktiebola โ”† 90.152604  โ”† 2024-12-16 โ”† SEK      โ”† 75.072151  โ”† 56.010028 โ”‚
โ”‚                 โ”† get LM Ericsso   โ”†            โ”†            โ”†          โ”†            โ”†           โ”‚
โ”‚ ABB SS Equity   โ”† ABB Ltd          โ”† 630.622469 โ”† 2024-12-16 โ”† SEK      โ”† 566.571183 โ”† 53.763102 โ”‚
โ”‚ SEBA SS Equity  โ”† Skandinaviska    โ”† 153.80595  โ”† 2024-12-16 โ”† SEK      โ”† 150.742394 โ”† 56.460733 โ”‚
โ”‚                 โ”† Enskilda Banken  โ”†            โ”†            โ”†          โ”†            โ”†           โ”‚
โ”‚ ASSAB SS Equity โ”† Assa Abloy AB    โ”† 339.017591 โ”† 2024-12-16 โ”† SEK      โ”† 317.057573 โ”† 53.351619 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Bond Universe from Equity Ticker

# Get Bond Universe from Equity Ticker
query = """
let(#rank=normalizedpaymentrank();
    #oas=spread(st=oas);
    #nxtcall=nxtcall_dt();
    )
get(name(), #rank, #nxt_call, #oas)
for(filter(bonds('GTN US Equity'), series() == '144A'))
"""

with BQuery() as bq: results = bq.bql(query) df = results.combine() print(df)

Output:
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ID            โ”† name()            โ”† #rank            โ”† #nxt_call  โ”† #oas       โ”† DATE       โ”‚ โ”‚ ---           โ”† ---               โ”† ---              โ”† ---        โ”† ---        โ”† ---        โ”‚ โ”‚ str           โ”† str               โ”† str              โ”† date       โ”† f64        โ”† date       โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ YX231113 Corp โ”† GTN 10 ยฝ 07/15/29 โ”† 1st Lien Secured โ”† 2026-07-15 โ”† 598.66491  โ”† 2024-12-17 โ”‚ โ”‚ BS116983 Corp โ”† GTN 5 โ…œ 11/15/31  โ”† Sr Unsecured     โ”† 2026-11-15 โ”† 1193.17529 โ”† 2024-12-17 โ”‚ โ”‚ AV438089 Corp โ”† GTN 7 05/15/27    โ”† Sr Unsecured     โ”† 2024-12-24 โ”† 400.340456 โ”† 2024-12-17 โ”‚ โ”‚ ZO860846 Corp โ”† GTN 4 ยพ 10/15/30  โ”† Sr Unsecured     โ”† 2025-10-15 โ”† 1249.34346 โ”† 2024-12-17 โ”‚ โ”‚ LW375188 Corp โ”† GTN 5 โ…ž 07/15/26  โ”† Sr Unsecured     โ”† 2025-01-13 โ”† 173.761744 โ”† 2024-12-17 โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Bonds Total Returns

This is example of a single-item query returning total return for all GTN bonds in a long dataframe. We can easily pivot it into wide format, as in the example below
# Total Return of GTN Bonds
query = """
let(#rng = range(-1M, 0D);
    #rets = returnseries(calcinterval=#rng,per=W);)
get(#rets)
for(filter(bonds('GTN US Equity'), series() == '144A'))
"""

with BQuery() as bq: results = bq.bql(query) df = results[0].pivot(on="ID", index="DATE", values="#rets") print(df)

Output:
shape: (6, 6) โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ DATE       โ”† YX231113 Corp โ”† BS116983 Corp โ”† AV438089 Corp โ”† ZO860846 Corp โ”† LW375188 Corp โ”‚ โ”‚ ---        โ”† ---           โ”† ---           โ”† ---           โ”† ---           โ”† ---           โ”‚ โ”‚ date       โ”† f64           โ”† f64           โ”† f64           โ”† f64           โ”† f64           โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ 2024-11-17 โ”† null          โ”† null          โ”† null          โ”† null          โ”† null          โ”‚ โ”‚ 2024-11-24 โ”† 0.001653      โ”† 0.051179      โ”† 0.020363      โ”† 0.001371      โ”† -0.002939     โ”‚ โ”‚ 2024-12-01 โ”† 0.002837      โ”† 0.010405      โ”† -0.001466     โ”† 0.007275      โ”† 0.000581      โ”‚ โ”‚ 2024-12-08 โ”† -0.000041     โ”† 0.016145      โ”† 0.000766      โ”† 0.024984      โ”† 0.000936      โ”‚ โ”‚ 2024-12-15 โ”† 0.001495      โ”† -0.047        โ”† -0.000233     โ”† -0.043509     โ”† 0.002241      โ”‚ โ”‚ 2024-12-17 โ”† 0.00008       โ”† -0.000004     โ”† -0.0035       โ”† -0.007937     โ”† 0.000064      โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Maturity Wall for US HY Bonds

query = """
let(#mv=sum(group(amt_outstanding(currency=USD),
                  by=[year(maturity()), industry_sector()]));)
get(#mv)
for(members('LF98TRUU Index'))
"""
with BQuery() as bq:
    results = bq.bql(query)
df = results.combine().rename(
    {"YEAR(MATURITY())": "maturity", "INDUSTRY_SECTOR()": "sector", "#mv": "mv"}
)

print(df.pivot(index="maturity", on="sector", values="mv").head())

Output:
shape: (5, 11) โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ maturity โ”† Basic     โ”† Consumer, โ”† Energy    โ”† โ€ฆ โ”† Financial โ”† Technolog โ”† Utilities โ”† Diversifi โ”‚ โ”‚ ---      โ”† Materials โ”† Non-cycli โ”† ---       โ”†   โ”† ---       โ”† y         โ”† ---       โ”† ed        โ”‚ โ”‚ i64      โ”† ---       โ”† cal       โ”† f64       โ”†   โ”† f64       โ”† ---       โ”† f64       โ”† ---       โ”‚ โ”‚          โ”† f64       โ”† ---       โ”†           โ”†   โ”†           โ”† f64       โ”†           โ”† f64       โ”‚ โ”‚          โ”†           โ”† f64       โ”†           โ”†   โ”†           โ”†           โ”†           โ”†           โ”‚ โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•ก โ”‚ 2025     โ”† 1.5e8     โ”† 5.34916e8 โ”† 5e8       โ”† โ€ฆ โ”† null      โ”† null      โ”† null      โ”† null      โ”‚ โ”‚ 2026     โ”† 4.4013e9  โ”† 9.3293e9  โ”† 8.2931e9  โ”† โ€ฆ โ”† 1.3524e10 โ”† 4.0608e9  โ”† 2.5202e9  โ”† null      โ”‚ โ”‚ 2027     โ”† 8.3921e9  โ”† 2.3409e10 โ”† 1.2427e10 โ”† โ€ฆ โ”† 1.9430e10 โ”† 4.3367e9  โ”† 3.6620e9  โ”† null      โ”‚ โ”‚ 2028     โ”† 1.4701e10 โ”† 3.7457e10 โ”† 2.2442e10 โ”† โ€ฆ โ”† 2.3341e10 โ”† 9.9143e9  โ”† 7.6388e9  โ”† 5e8       โ”‚ โ”‚ 2029     โ”† 1.6512e10 โ”† 5.7381e10 โ”† 3.9286e10 โ”† โ€ฆ โ”† 4.2337e10 โ”† 2.2660e10 โ”† 5.8558e9  โ”† null      โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Additional Documentation & Resources

  • API Documentation: Detailed documentation and function references are available in https://marekozana.github.io/polars-bloomberg
  • Additional Examples: Check out examples/ for hands-on notebooks demonstrating a variety of use cases.
- BQL examples and use cases: examples/Examples-BQL.ipynb
๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท MarekOzana/polars-bloomberg ยท Updated daily from GitHub