I'm releasing Quandlex, a new Elixir/Erlang library for Quandl API. Quandl provides unified access to multiple sources for financial, economic, and alternative datasets .
Links
Installation
The package can be installed by adding quandlex
to your list of dependencies in mix.exs
:
def deps do
[
{:quandlex, "~> 0.1.0"}
]
end
Quandlex.Timeseries
Quandlex.Timeseries includes several functions that match API endpoints:
get_data
: returns both data and dataset metadataget_dataset_metadata
: returns only dataset metadataget_database_metadata
: returns database metadata
iex> {:ok, %{data: data, type: type}} = Quandlex.Timeseries.get_data("CHRIS", "MGEX_IH1")
iex> is_list(hd(data)) and is_list(data) and type == "Time Series"
true
iex> {:ok, %{name: name, id: id}} = Quandlex.Timeseries.get_database_metadata("CHRIS")
iex> name == "Wiki Continuous Futures" and id == 596
true
Response example
{:ok,
%{
collapse: nil,
column_index: nil,
column_names: ["Date", "Open", "High", "Low", "Last", "Volume",
"Open Interest"],
data: [
[~D[2019-04-30], nil, 486.0, 486.0, 486.0, 0.0, 0.0],
[~D[2018-04-30], nil, 486.0, 486.0, 486.0, 0.0, 0.0],
[~D[2018-04-27], nil, 474.0, 474.0, 474.0, 0.0, 0.0],
[...],
...
],
database_code: "CHRIS",
database_id: 596,
dataset_code: "MGEX_IH1",
description: "Historical Futures Prices: Minneapolis HRWI Hard Red Wheat Futures, Continuous Contract #1. Non-adjusted price based on spot-month continuous contract calculations. Raw data from MGEX.",
end_date: "2019-04-30",
frequency: "daily",
id: 9774107,
limit: nil,
name: "Minneapolis HRWI Hard Red Wheat Futures, Continuous Contract #1 (IH1) (Front Month)",
newest_available_date: "2019-04-30",
oldest_available_date: "2005-01-03",
order: nil,
premium: false,
refreshed_at: "2018-05-08T18:27:06.846Z",
start_date: "2005-01-03",
transform: nil,
type: "Time Series"
}}
Quandlex.Forex
Quandlex.Forex is a utility module that makes fetching historical data of foreign exchange rates simpler and easier.
Quandl provides free (albeit limited for non-registered users) data of forex rates sourced from Bank of England, Federal Reserve and European Central Bank.
You can use get_rates/2 or get_rates/3 function without wasting time on searching for special currency codes for every bank database.
For example, instead of using Quandlex.Timeseries.get_data("BOE", "XUDLJYD")
you can call Quandlex.Forex.get_rates("USD", "JPY", source: "BOE")
Examples
iex> {:ok, %{data: data, type: type, database_code: database_code}} = Quandlex.Forex.get_rates("HKD", "USD")
iex> database_code === "FRED" and is_list(data) and type == "Time Series"
true
iex> {:ok, %{data: data, type: type, database_code: database_code}} = Quandlex.Forex.get_rates("HKD", "USD", source: "BOE")
iex> database_code === "BOE" and is_list(data) and type == "Time Series"
true
iex> {:ok, %{data: data, type: type, database_code: database_code}} = Quandlex.Forex.get_rates("THB", "EUR", source: "ECB")
iex> database_code === "ECB" and is_list(data) and type == "Time Series"
true
Response example
{:ok,
%{
collapse: nil,
column_index: nil,
column_names: ["Date", "Value"],
data: [
[~D[2018-05-18], 7.8498],
[~D[2018-05-17], 7.8496],
[~D[2018-05-16], 7.8499],
[...],
...
],
database_code: "FRED",
database_id: 118,
dataset_code: "DEXHKUS",
description: "Hong Kong Dollars to One U.S. Dollar Not Seasonally Adjusted, Noon buying rates in New York City for cable transfers payable in foreign currencies. ",
end_date: "2018-05-18",
frequency: "daily",
id: 121063,
limit: nil,
name: "Hong Kong / U.S. Foreign Exchange Rate",
newest_available_date: "2018-05-18",
oldest_available_date: "1981-01-02",
order: nil,
premium: false,
refreshed_at: "2018-05-27T03:10:46.002Z",
start_date: "1981-01-02",
transform: nil,
type: "Time Series"
}}
"""
Roadmap
- [ ] Add datatables module
- [ ] Add structs for return values
- [ ] Investigate developer experience improvements using rate limiting utilities and caching