Skip to content

Commit 70718f5

Browse files
authored
Added forex API endpoints (#15)
* Added forex API endpoints
1 parent 336b313 commit 70718f5

File tree

6 files changed

+199
-8
lines changed

6 files changed

+199
-8
lines changed

src/PolygonIO.jl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,22 @@ export PolyOpts, tickers, ticker_types, ticker_details, ticker_details_vX,
2424
ticker_news, markets, locales, stock_splits, stock_dividends,
2525
stock_financials, market_holidays, market_status, stock_exchanges,
2626
condition_mappings, crypto_exchanges,
27+
2728
# Stock API
2829
trades, quotes_nbbo, last_trade_symbol, last_quote_symbol, daily_open_close,
2930
grouped_daily_bars, previous_close, aggregates_bars, snapshot_all_tickers,
3031
snapshot_ticker, snapshot_gainers_losers,
32+
3133
# Crypto API
3234
last_trade_crypto_pair, crypto_daily_open_close, historic_crypto_trades,
3335
crypto_grouped_daily_bars, crypto_previous_close, crypto_aggregates_bars,
3436
crypto_snapshot_all_tickers, crypto_snapshot_ticker, crypto_snapshot_ticker_full_book,
35-
crypto_snapshot_gainers_losers
36-
# Forex API
37+
crypto_snapshot_gainers_losers,
3738

39+
# Forex API
40+
historic_forex_ticks, real_time_currency_conversion, last_quote_currency_pair,
41+
forex_grouped_daily_bars, forex_previous_close, forex_aggregates_bars,
42+
forex_snapshot_ticker, forex_snapshot_all_tickers, forex_snapshot_gainers_losers
3843

3944

4045
end

src/custom_structs.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ struct NoSinkYesTickers <: AbstractPolyChoice end
3131
struct NoSinkYesTicker <: AbstractPolyChoice end
3232
struct NoSinkYesLast <: AbstractPolyChoice end
3333
struct NoSinkYesData <: AbstractPolyChoice end
34+
struct NoSinkYesTicks <: AbstractPolyChoice end
3435

3536

3637
# Yes Sink Structs
@@ -40,3 +41,4 @@ struct YesSinkYesTicker <: AbstractPolyChoice end
4041
struct YesSinkNoResults <: AbstractPolyChoice end
4142
struct YesSinkYesResults <: AbstractPolyChoice end
4243
struct YesSinkYesData <: AbstractPolyChoice end
44+
struct YesSinkYesTicks <: AbstractPolyChoice end

src/forex_api.jl

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
############ Historic Forex Ticks ####################
2+
function historic_forex_ticks(opts::PolyOpts, from="AUD", to="USD", date="2020-10-14"; limit=100, kwargs...)
3+
params = Dict(
4+
"apiKey" => opts.api_key,
5+
"limit" => limit
6+
)
7+
8+
merge!(params, Dict(kwargs))
9+
10+
historic_forex_ticks_url = "$historic_forex_ticks_base_url/$from/$to/$date"
11+
return generate_output_from_url(YesSinkYesTicks(), historic_forex_ticks_url, params, opts.sink)
12+
end
13+
14+
15+
############ Real Time Currency Conversion ####################
16+
function real_time_currency_conversion(opts::PolyOpts, from="AUD", to="USD"; amount=100, precision=2)
17+
params = Dict(
18+
"apiKey" => opts.api_key,
19+
"amount" => amount,
20+
"precision" => precision
21+
)
22+
real_time_currency_conversion_url = "$real_time_currency_conversion_base_url/$from/$to"
23+
return generate_output_from_url(YesSinkNoResults(), real_time_currency_conversion_url, params, opts.sink)
24+
end
25+
26+
27+
############ Last Quote Currency Pair ####################
28+
function last_quote_currency_pair(opts::PolyOpts, from="AUD", to="USD")
29+
params = Dict(
30+
"apiKey" => opts.api_key
31+
)
32+
last_quote_currency_pair_url = "$last_quote_currency_pair_base_url/$from/$to"
33+
return generate_output_from_url(YesSinkNoResults(), last_quote_currency_pair_url, params, opts.sink)
34+
end
35+
36+
37+
############ Forex Grouped Daily Bars ####################
38+
function forex_grouped_daily_bars(opts::PolyOpts, date="2020-10-14"; adjusted=true)
39+
params = Dict(
40+
"apiKey" => opts.api_key,
41+
"adjusted" => adjusted
42+
)
43+
forex_grouped_daily_bars_url = "$forex_grouped_daily_bars_base_url/$date"
44+
return generate_output_from_url(YesSinkYesResults(), forex_grouped_daily_bars_url, params, opts.sink)
45+
end
46+
47+
48+
############ Forex Previous Close ####################
49+
function forex_previous_close(opts::PolyOpts, forexTicker="C:EURUSD"; adjusted=true)
50+
params = Dict(
51+
"apiKey" => opts.api_key,
52+
"adjusted" => adjusted
53+
)
54+
forex_previous_close_url = "$forex_previous_close_base_url/$forexTicker/prev"
55+
return generate_output_from_url(YesSinkYesResults(), forex_previous_close_url, params, opts.sink)
56+
end
57+
58+
59+
############ Forex Aggregates Bars ####################
60+
function forex_aggregates_bars(opts::PolyOpts,
61+
forexTicker="C:EURUSD",
62+
multiplier=1,
63+
timespan="day",
64+
from="2020-10-14",
65+
to="2020-10-14";
66+
adjusted=true,
67+
sort="asc",
68+
limit=120)
69+
params = Dict(
70+
"apiKey" => opts.api_key,
71+
"adjusted" => adjusted,
72+
"sort" => sort,
73+
"limit" => limit
74+
)
75+
76+
forex_aggregates_bars_url = "$forex_aggregates_bars_base_url/$forexTicker/range/$multiplier/$timespan/$from/$to"
77+
return generate_output_from_url(YesSinkYesResults(), forex_aggregates_bars_url, params, opts.sink)
78+
end
79+
80+
81+
############ Forex Snapshot Ticker ####################
82+
function forex_snapshot_ticker(opts::PolyOpts, forexTicker="C:EURUSD")
83+
params = Dict(
84+
"apiKey" => opts.api_key
85+
)
86+
forex_snapshot_ticker_url = "$forex_snapshot_ticker_base_url/$forexTicker"
87+
return generate_output_from_url(YesSinkYesTicker(), forex_snapshot_ticker_url, params, opts.sink)
88+
end
89+
90+
91+
############ Forex Snapshot All Tickers ####################
92+
function forex_snapshot_all_tickers(opts::PolyOpts; kwargs...)
93+
params = Dict(
94+
"apiKey" => opts.api_key
95+
)
96+
merge!(params, Dict(kwargs))
97+
forex_snapshot_all_tickers_url = "$forex_snapshot_all_tickers_base_url"
98+
return generate_output_from_url(YesSinkYesTickers(), forex_snapshot_all_tickers_url, params, opts.sink)
99+
end
100+
101+
102+
############ Forex Snapshot Gainers/Losers ####################
103+
function forex_snapshot_gainers_losers(opts::PolyOpts, direction="gainers")
104+
params = Dict(
105+
"apiKey" => opts.api_key
106+
)
107+
forex_snapshot_gainers_losers_url = "$forex_snapshot_gainers_losers_base_url/$direction"
108+
return generate_output_from_url(YesSinkYesTickers(), forex_snapshot_gainers_losers_url, params, opts.sink)
109+
end

src/urls.jl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,22 @@ crypto_snapshot_ticker_full_book_base_url = "https://api.polygon.io/v2/snapshot/
7373

7474
crypto_snapshot_gainers_losers_base_url = "https://api.polygon.io/v2/snapshot/locale/global/markets/crypto"
7575

76+
77+
## Forex API ##
78+
historic_forex_ticks_base_url = "https://api.polygon.io/v1/historic/forex"
79+
80+
real_time_currency_conversion_base_url = "https://api.polygon.io/v1/conversion"
81+
82+
last_quote_currency_pair_base_url = "https://api.polygon.io/v1/last_quote/currencies"
83+
84+
forex_grouped_daily_bars_base_url = "https://api.polygon.io/v2/aggs/grouped/locale/global/market/fx"
85+
86+
forex_previous_close_base_url = "https://api.polygon.io/v2/aggs/ticker"
87+
88+
forex_aggregates_bars_base_url = "https://api.polygon.io/v2/aggs/ticker"
89+
90+
forex_snapshot_ticker_base_url = "https://api.polygon.io/v2/snapshot/locale/global/markets/forex/tickers"
91+
92+
forex_snapshot_all_tickers_base_url = "https://api.polygon.io/v2/snapshot/locale/global/markets/forex/tickers"
93+
94+
forex_snapshot_gainers_losers_base_url = "https://api.polygon.io/v2/snapshot/locale/global/markets/forex"

src/utils.jl

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,7 @@ end
6767
"""
6868
"""
6969
function apply_choice(::YesSinkYesTickers, x, sink)
70-
try
71-
return x.tickers |> jsontable |> sink
72-
catch
73-
return x.tickers |> x -> sink([x])
74-
end
70+
return x.tickers |> jsontable |> sink
7571
end
7672

7773

@@ -150,4 +146,25 @@ end
150146
"""
151147
function apply_choice(::YesSinkYesData, x, sink::Nothing)
152148
return apply_choice(NoSinkYesData(), x, sink)
153-
end
149+
end
150+
151+
152+
"""
153+
"""
154+
function apply_choice(::YesSinkYesTicks, x, sink)
155+
return x.ticks |> jsontable |> sink
156+
end
157+
158+
159+
"""
160+
"""
161+
function apply_choice(::NoSinkYesTicks, x, sink)
162+
return x.ticks
163+
end
164+
165+
166+
"""
167+
"""
168+
function apply_choice(::YesSinkYesTicks, x, sink::Nothing)
169+
return apply_choice(NoSinkYesTicks(), x, sink)
170+
end

test/runtests.jl

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,4 +161,43 @@ end
161161
# crypto_snapshot_gainers_losers test
162162
@test crypto_snapshot_gainers_losers(regular_opts, "gainers") |> length >= 1
163163
@test crypto_snapshot_gainers_losers(tabular_opts, "losers") |> length >= 1
164+
end
165+
166+
167+
@testset "Forex API" begin
168+
# historic_forex_ticks test
169+
@test historic_forex_ticks(regular_opts, "AUD", "USD", "2020-10-14"; limit=100) |> length >= 1
170+
@test historic_forex_ticks(tabular_opts, "AUD", "USD", "2020-10-14"; limit=100) |> length >= 1
171+
172+
# real_time_currency_conversion test
173+
@test real_time_currency_conversion(regular_opts, "AUD", "USD") |> length >= 8
174+
@test real_time_currency_conversion(tabular_opts, "AUD", "USD") |> length >= 1
175+
176+
# last_quote_currency_pair test
177+
@test last_quote_currency_pair(regular_opts, "AUD", "USD") |> length >= 1
178+
@test last_quote_currency_pair(tabular_opts, "AUD", "USD") |> length >= 1
179+
180+
# forex_grouped_daily_bars test
181+
@test forex_grouped_daily_bars(regular_opts, "2020-10-14"; adjusted=true) |> length >= 1
182+
@test forex_grouped_daily_bars(tabular_opts, "2020-10-14"; adjusted=false) |> length >= 1
183+
184+
# forex_previous_close test
185+
@test forex_previous_close(regular_opts, "C:EURUSD"; adjusted=true) |> length >= 1
186+
@test forex_previous_close(tabular_opts, "C:EURUSD"; adjusted=false) |> length >= 1
187+
188+
# forex_aggregates_bars test
189+
@test forex_aggregates_bars(regular_opts, "C:EURUSD", 1, "day", "2020-10-14", "2020-10-14"; adjusted=true) |> length >= 1
190+
@test forex_aggregates_bars(tabular_opts, "C:EURUSD", 1, "day", "2020-10-14", "2020-10-14"; adjusted=false) |> length >= 1
191+
192+
# forex_snapshot_ticker test
193+
@test forex_snapshot_ticker(regular_opts, "C:EURUSD") |> length >= 1
194+
@test forex_snapshot_ticker(tabular_opts, "C:EURUSD") |> length >= 1
195+
196+
# forex_snapshot_all_tickers test
197+
@test forex_snapshot_all_tickers(regular_opts) |> length >= 1
198+
@test forex_snapshot_all_tickers(tabular_opts) |> length >= 1
199+
200+
# forex_snapshot_gainers_losers test
201+
@test forex_snapshot_gainers_losers(regular_opts, "gainers") |> length >= 1
202+
@test forex_snapshot_gainers_losers(tabular_opts, "losers") |> length >= 1
164203
end

0 commit comments

Comments
 (0)