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 Identifier
s or passed as String
s 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.fetchsecuritydata
— Functionfetchsecuritydata(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 String
s or Identifier
s.
See also: makeidentifier
, Identifier
s
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.makeidentifier
— Methodmakeidentifier(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
FinancialSymbology.Identifiers.Cusip
— TypeCusip(x::String)
Create a Cusip Identifier.
Example
julia> cusip_id = Cusip("037833100")
"037833100"
FinancialSymbology.Identifiers.Figi
— TypeFigi(x::String)
Create a FIGI Identifier.
Example
julia> figi_id = Figi("BBG001S5N8V8")
"BBG001S5N8V8"
FinancialSymbology.Identifiers.Index
— TypeIndex(x::String)
Create a Index Identifier.
Example
julia> index_id = Index("990100")
"990100"
FinancialSymbology.Identifiers.Isin
— TypeIsin(x::String)
Create a ISIN Identifier.
Example
julia> isin_id = Isin("US0378331005")
"US0378331005"
FinancialSymbology.Identifiers.Sedol
— TypeSedol(x::String)
Create a Sedol Identifier.
Example
julia> sedol_id = Sedol("B0YQ5W0")
"B0YQ5W0"
FinancialSymbology.Identifiers.Ticker
— TypeTicker(x::String)
Create a Ticker Identifier.
Example
julia> ticker_id = Ticker("AAPL US Equity")
"AAPL US Equity"
API and Responses
FinancialSymbology.OpenFigiAPI
— TypeOpenFigiAPI(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.OpenFigiAsset
— MethodOpenFigiAsset(; 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
FinancialSymbology.Identifiers.Cusip
FinancialSymbology.Identifiers.Figi
FinancialSymbology.Identifiers.Index
FinancialSymbology.Identifiers.Isin
FinancialSymbology.Identifiers.Sedol
FinancialSymbology.Identifiers.Ticker
FinancialSymbology.OpenFigiAPI
FinancialSymbology.OpenFigiAsset
FinancialSymbology.fetchsecuritydata
FinancialSymbology.makeidentifier