FinancialSymbology.jl

Installation

julia> using Pkg

julia> Pkg.add("FinancialSymbology")

Usage

julia> using FinancialSymbology

If you have an OpenFIGI API key it can be set in one of two ways, using either the environment variable X-OPENFIGI-APIKEY or setting the apikey argument when instantiating an OpenFigiAPI.

julia> ENV["X-OPENFIGI-APIKEY"] = "enter-api-key"
"enter-api-key"

julia> api = OpenFigiAPI(apikey="enter-api-key")
OpenFigiAPI: https://api.openfigi.com/v3/mapping

Identifiers

Financial symbols can either be converted to a vector of Identifiers or passed as Strings along with the idType input to the fetchsecuritydata. Identifier types can be created using the makeidentifier function or done manually using the constructors listed in Identifiers (automated detection unavailable for Index identifiers).

julia> ids = makeidentifier.(["B0YQ5W0", "037833100", "US0378331005", "BBG000B9Y5X2", "AAPL US Equity"])
5-element Vector{Identifier}:
 "B0YQ5W0"
 "037833100"
 "US0378331005"
 "BBG000B9Y5X2"
 "AAPL US Equity"

Fetching Data

The fetchsecuritydata function is the primary interface to the OpenFIGI API. The examples in the function documentation detail some of the different ways it can be used.

julia> using FinancialSymbology

julia> ids = makeidentifier.(["B0YQ5W0","037833100","US0378331005","BBG000B9Y5X2","AAPL US Equity"])
5-element Vector{Identifier}:
 "B0YQ5W0"
 "037833100"
 "US0378331005"
 "BBG000B9Y5X2"
 "AAPL US Equity"

julia> data = fetchsecuritydata(ids)
Dict{String, StructArrays.StructArray} with 5 entries:
  "US0378331005"   => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "AAPL US Equity" => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "B0YQ5W0"        => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "037833100"      => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "BBG000B9Y5X2"   => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…

julia> api = OpenFigiAPI()
OpenFigiAPI: https://api.openfigi.com/v3/mapping

julia> data = fetchsecuritydata(ids, api)
Dict{String, StructArrays.StructArray} with 5 entries:
  "US0378331005"   => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "AAPL US Equity" => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "B0YQ5W0"        => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "037833100"      => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "BBG000B9Y5X2"   => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…

The function returns a Dict where the keys are the identifiers and the values are a StructArray of OpenFigiAsset types. The fields can be indexed into or the objects can be passed to other constructors.

julia> aapl = data["AAPL US Equity"]
1-element StructArray(::Vector{Union{Nothing, String}}, ::Vector{Union{Nothing, String}}, ::Vector{Union{Nothing, String}}, ::Vector{Union{Nothing, String}}, ::Vector{Union{Nothing, String}}, ::Vector{Union{Nothing, String}}, ::Vector{Union{Nothing, String}}, ::Vector{Union{Nothing, String}}, ::Vector{Union{Nothing, String}}, ::Vector{Union{Nothing, String}}) with eltype FinancialSymbology.OpenFigiAsset:
 FIGI: BBG000B9XRY4 Common Stock

julia> aapl.figi
1-element Vector{Union{Nothing, String}}:
 "BBG000B9XRY4"

julia> using DataFrames

julia> aapl |> DataFrame
1×10 DataFrame
 Row │ figi          marketSector  securityType  ticker  name       exchCode   ⋯
     │ Union…        Union…        Union…        Union…  Union…     Union…     ⋯
─────┼──────────────────────────────────────────────────────────────────────────
   1 │ BBG000B9XRY4  Equity        Common Stock  AAPL    APPLE INC  US         ⋯
                                                               4 columns omitted

Functions

FinancialSymbology.fetchsecuritydataFunction
fetchsecuritydata(id::Identifier, api::OpenFigiAPI=OpenFigiAPI(); kwargs...)::StructArray
fetchsecuritydata(ids::Vector{<:Identifier}, api::OpenFigiAPI=OpenFigiAPI(); kwargs...)::Dict{String, StructArray}

fetchsecuritydata(id::AbstractString, idType::AbstractString, api::OpenFigiAPI=OpenFigiAPI(); kwargs...)::StructArray
fetchsecuritydata(ids::Vector{<:AbstractString}, idType::AbstractString, api::OpenFigiAPI=OpenFigiAPI(); kwargs...)::Dict{String, StructArray}
fetchsecuritydata(ids::Vector{<:AbstractString}, idType::Vector{<:AbstractString}, api::OpenFigiAPI=OpenFigiAPI(); kwargs...)::Dict{String, StructArray}

Fetch Identifier data from API. The function accepts either Strings or Identifiers.

See also: makeidentifier, Identifiers

If using a String for the identifier you must also pass the identifier type(s). If all identifiers are of the same type then you can pass a String, alternatively a Vector the same length as the Vector of identifiers.

Do not broadcast this function over a Vector of identifiers. Pass the Vector as the ids argument. Returns a Dict with Identifier strings as keys.

Keyword arguments are passed to the API query and must be one or more of:

  • micCode
  • currency
  • securityType2
  • securityType
  • stateCode
  • exchCode
  • marketSecDes

More information is available on the OpenFIGI API website.

If passing a Vector to ids then each kwarg should be either a String or a Vector of the same length.

See also: OpenFigiAPI, OpenFigiAsset

Examples

julia> identifiers = makeidentifier.(["AAPL US Equity", "BDDXSM4"])
2-element Vector{Identifier}:
 "AAPL US Equity"
 "BDDXSM4"


julia> fetchsecuritydata(identifiers)
Dict{String, StructArrays.StructArray} with 2 entries:
  "AAPL US Equity" => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "BDDXSM4"        => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
julia> identifiers = [Ticker("AAPL US Equity"), Sedol("BDDXSM4")]
2-element Vector{Identifier}:
 "AAPL US Equity"
 "BDDXSM4"


julia> fetchsecuritydata(identifiers)
Dict{String, StructArrays.StructArray} with 2 entries:
  "AAPL US Equity" => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "BDDXSM4"        => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
julia> tickers = ["AAPL", "VOD", "TSLA"]
3-element Vector{String}:
 "AAPL"
 "VOD"
 "TSLA"

julia> fetchsecuritydata(tickers, "TICKER"; marketSecDes="Equity", exchCode=["US", "LN", "US"])
Dict{String, StructArrays.StructArray} with 3 entries:
  "AAPL" => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "VOD"  => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "TSLA" => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
julia> idstrings = ["BBG000B9XRY4", "037833100", "US0378331005"]
3-element Vector{String}:
 "BBG000B9XRY4"
 "037833100"
 "US0378331005"

julia> idtypes = ["ID_BB_GLOBAL", "ID_CUSIP", "ID_ISIN"]
3-element Vector{String}:
 "ID_BB_GLOBAL"
 "ID_CUSIP"
 "ID_ISIN"

julia> fetchsecuritydata(idstrings, idtypes; exchCode="US")
Dict{String, StructArrays.StructArray} with 3 entries:
  "US0378331005" => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "037833100"    => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
  "BBG000B9XRY4" => FinancialSymbology.OpenFigiAsset[OpenFigiAsset…
FinancialSymbology.makeidentifierMethod
makeidentifier(x::String)

Automatically detect Identifier and create appropriate Type.

See also: fetchsecuritydata

Example

julia> ids = makeidentifier.(["AAPL US Equity", "BDDXSM4"])
2-element Vector{Identifier}:
 "AAPL US Equity"
 "BDDXSM4"

julia> typeof.(ids)
2-element Vector{DataType}:
 Ticker
 Sedol

Identifier Types

API and Responses

FinancialSymbology.OpenFigiAPIType
OpenFigiAPI(protocol::AbstractString="https",
            base::AbstractString="api.openfigi.com",
            version::AbstractString="v3",
            path::AbstractString="mapping";
            headers::Vector{Pair{String, String}}=["Content-Type"=>"application/json"],
            apikey::String="")::OpenFigiAPI

Create OpenFigiAPI.

See also: fetchsecuritydata

Example

julia> OpenFigiAPI()
OpenFigiAPI: https://api.openfigi.com/v3/mapping
FinancialSymbology.OpenFigiAssetMethod
OpenFigiAsset(; figi::Union{String, Nothing}=nothing,
              marketSector::Union{String, Nothing}=nothing,
              securityType::Union{String, Nothing}=nothing,
              ticker::Union{String, Nothing}=nothing,
              name::Union{String, Nothing}=nothing,
              exchCode::Union{String, Nothing}=nothing,
              securityDescription::Union{String, Nothing}=nothing,
              securityType2::Union{String, Nothing}=nothing,
              compositeFIGI::Union{String, Nothing}=nothing,
              shareClassFIGI::Union{String, Nothing}=nothing)::OpenFigiAsset

Each element of the StructArray returned by fetchsecuritydata for an individual Identifier is an OpenFigiAsset.

Example

julia> aapl = fetchsecuritydata(Ticker("AAPL US Equity"));

julia> aapl[1]
FIGI: BBG000B9XRY4 Common Stock

julia> aapl[1].shareClassFIGI
"BBG001S5N8V8"

Index