Skip to content

Commit 3d76f5c

Browse files
authored
stock_api (#12)
* Draft API & Stock API
1 parent 4ba62a4 commit 3d76f5c

File tree

9 files changed

+364
-56
lines changed

9 files changed

+364
-56
lines changed

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ version = "0.1.0"
66
[deps]
77
HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
88
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
9+
JSONTables = "b9914132-a727-11e9-1322-f18e41205b0b"
910

1011
[compat]
1112
HTTP = "0.9"

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44
[![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://PyDataBlog.github.io/PolygonIO.jl/dev)
55
[![Build Status](https://github.com/PyDataBlog/PolygonIO.jl/workflows/CI/badge.svg)](https://github.com/PyDataBlog/PolygonIO.jl/actions)
66
[![Coverage](https://codecov.io/gh/PyDataBlog/PolygonIO.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/PyDataBlog/PolygonIO.jl)
7+
[![Open in Visual Studio Code](https://open.vscode.dev/badges/open-in-vscode.svg)](https://open.vscode.dev/PyDataBlog/PolygonIO.jl)

src/PolygonIO.jl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ module PolygonIO
22

33
# Gloabl Imports
44
using JSON3
5+
using JSONTables
56
using HTTP
67

78

89
######### Import modules & utils ################
10+
include("custom_structs.jl")
911
include("utils.jl")
12+
include("urls.jl")
1013
include("crypto_api.jl")
11-
include("custom_structs.jl")
1214
include("forex_api.jl")
1315
include("reference_api.jl")
1416
include("stock_api.jl")
@@ -20,7 +22,11 @@ include("streaming_socket.jl")
2022
export PolyOpts, tickers, ticker_types, ticker_details, ticker_details_vX,
2123
ticker_news, markets, locales, stock_splits, stock_dividends,
2224
stock_financials, market_holidays, market_status, stock_exchanges,
23-
condition_mappings, crypto_exchanges
25+
condition_mappings, crypto_exchanges,
26+
27+
trades, quotes_nbbo, last_trade_symbol, last_quote_symbol, daily_open_close,
28+
grouped_daily_bars, previous_close, aggregates_bars, snapshot_all_tickers,
29+
snapshot_ticker, snapshot_gainers_losers
2430

2531

2632
end

src/custom_structs.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ Abstract base type for all generic options.
55
"""
66
abstract type AbstractPolyOptions end
77

8+
"""
9+
AbstractPolyChoice
10+
11+
Abstract base type for dispatching extracted JSONs.
12+
"""
13+
abstract type AbstractPolyChoice end
14+
815

916
"""
1017
PolyOpts <: AbstractPolyOptions
@@ -17,3 +24,10 @@ struct PolyOpts <: AbstractPolyOptions
1724
sink::Any
1825
end
1926

27+
28+
struct NoSinkNoResults <: AbstractPolyChoice end
29+
struct NoSinkYesResults <: AbstractPolyChoice end
30+
struct YesSinkNoResults <: AbstractPolyChoice end
31+
struct YesSinkYesResults <: AbstractPolyChoice end
32+
struct NoSinkYesTickers <: AbstractPolyChoice end
33+
struct NoSinkYesTicker <: AbstractPolyChoice end

src/reference_api.jl

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ function tickers(opts::PolyOpts,
2020
# Extract kwargs and add to params
2121
merge!(params, Dict(kwargs))
2222

23-
return generate_output_from_url(tickers_base_url, params, opts.sink; results=true, json_to_array=false)
23+
return generate_output_from_url(YesSinkYesResults(), tickers_base_url, params, opts.sink)
24+
2425

2526
end
2627

@@ -29,7 +30,7 @@ end
2930
"""
3031
function ticker_types(opts::PolyOpts)
3132
params = Dict("apiKey" => opts.api_key)
32-
return generate_output_from_url(ticker_types_base_url, params, nothing; results=true, json_to_array=false)
33+
return generate_output_from_url(NoSinkYesResults(), ticker_types_base_url, params, opts.sink)
3334
end
3435

3536
############ Tickers Details ####################
@@ -39,7 +40,7 @@ function ticker_details(opts::PolyOpts, stocksTicker::String)
3940
params = Dict("apiKey" => opts.api_key)
4041
ticker_details_url = "$ticker_details_base_url/$stocksTicker/company"
4142

42-
return generate_output_from_url(ticker_details_url, params, opts.sink; results=false, json_to_array=true)
43+
return generate_output_from_url(YesSinkNoResults(), ticker_details_url, params, opts.sink)
4344
end
4445

4546
############ Ticker Details vX ####################
@@ -54,7 +55,7 @@ function ticker_details_vX(opts::PolyOpts, ticker::String, date::String)
5455
"date" => date
5556
)
5657

57-
return generate_output_from_url(ticker_details_vX_url, params, opts.sink; results=true, json_to_array=true)
58+
return generate_output_from_url(YesSinkYesResults(), ticker_details_vX_url, params, opts.sink)
5859
end
5960

6061
############ Ticker News #######################
@@ -79,7 +80,7 @@ function ticker_news(opts::PolyOpts,
7980
# Extract kwargs and add to params
8081
merge!(params, Dict(kwargs))
8182

82-
return generate_output_from_url(ticker_news_base_url, params, nothing; results=true, json_to_array=false)
83+
return generate_output_from_url(YesSinkYesResults(), ticker_news_base_url, params, opts.sink)
8384

8485
end
8586

@@ -88,7 +89,7 @@ end
8889
"""
8990
function markets(opts::PolyOpts)
9091
params = Dict("apiKey" => opts.api_key)
91-
return generate_output_from_url(markets_base_url, params, opts.sink; results=true, json_to_array=false)
92+
return generate_output_from_url(YesSinkYesResults(), markets_base_url, params, opts.sink)
9293
end
9394

9495

@@ -97,7 +98,7 @@ end
9798
"""
9899
function locales(opts::PolyOpts)
99100
params = Dict("apiKey" => opts.api_key)
100-
return generate_output_from_url(locales_base_url, params, opts.sink; results=true, json_to_array=false)
101+
return generate_output_from_url(YesSinkYesResults(), locales_base_url, params, opts.sink)
101102
end
102103

103104
############ Stock Splits ####################
@@ -107,7 +108,7 @@ function stock_splits(opts::PolyOpts, stocksTicker::String)
107108
stock_splits_url = "$stock_splits_base_url/$stocksTicker"
108109
params = Dict("apiKey" => opts.api_key)
109110

110-
return generate_output_from_url(stock_splits_url, params, nothing; results=true, json_to_array=false)
111+
return generate_output_from_url(YesSinkYesResults(), stock_splits_url, params, opts.sink)
111112
end
112113

113114
############ Stock Dividends ####################
@@ -117,7 +118,7 @@ function stock_dividends(opts::PolyOpts, stocksTicker::String)
117118
stock_dividends_url = "$stock_dividends_base_url/$stocksTicker"
118119
params = Dict("apiKey" => opts.api_key)
119120

120-
return generate_output_from_url(stock_dividends_url, params, opts.sink; results=true, json_to_array=false)
121+
return generate_output_from_url(YesSinkYesResults(), stock_dividends_url, params, opts.sink)
121122
end
122123

123124
############ Stock Financials ####################
@@ -132,31 +133,31 @@ function stock_financials(opts::PolyOpts, stocksTicker::String; limit=5, kwargs.
132133
# Extract kwargs and add to params
133134
merge!(params, Dict(kwargs))
134135

135-
return generate_output_from_url(stock_financials_url, params, opts.sink; results=true, json_to_array=false)
136+
return generate_output_from_url(YesSinkYesResults(), stock_financials_url, params, opts.sink)
136137
end
137138

138139
############ Market Holidays ####################
139140
"""
140141
"""
141142
function market_holidays(opts::PolyOpts)
142143
params = Dict("apiKey" => opts.api_key)
143-
return generate_output_from_url(market_holidays_base_url, params, opts.sink; results=false, json_to_array=false)
144+
return generate_output_from_url(YesSinkNoResults(), market_holidays_base_url, params, opts.sink)
144145
end
145146

146147
############ Market Status ####################
147148
"""
148149
"""
149150
function market_status(opts::PolyOpts)
150151
params = Dict("apiKey" => opts.api_key)
151-
return generate_output_from_url(market_status_base_url, params, nothing; results=false, json_to_array=false)
152+
return generate_output_from_url(YesSinkNoResults(), market_status_base_url, params, opts.sink)
152153
end
153154

154155
############ Stock Exchanges ####################
155156
"""
156157
"""
157158
function stock_exchanges(opts::PolyOpts)
158159
params = Dict("apiKey" => opts.api_key)
159-
return generate_output_from_url(stock_exchanges_base_url, params, nothing; results=false, json_to_array=false)
160+
return generate_output_from_url(YesSinkNoResults(), stock_exchanges_base_url, params, opts.sink)
160161
end
161162

162163
############ Condition Mappings ####################
@@ -166,13 +167,13 @@ function condition_mappings(opts::PolyOpts, tickertype="trades")
166167
condition_mappings_base_url = "https://api.polygon.io/v1/meta/conditions/$tickertype"
167168
params = Dict("apiKey" => opts.api_key)
168169

169-
return generate_output_from_url(condition_mappings_base_url, params, nothing; results=false, json_to_array=false)
170+
return generate_output_from_url(YesSinkNoResults(), condition_mappings_base_url, params, opts.sink)
170171
end
171172

172173
############ Crypto Exchanges ####################
173174
"""
174175
"""
175176
function crypto_exchanges(opts::PolyOpts)
176177
params = Dict("apiKey" => opts.api_key)
177-
return generate_output_from_url(crypto_exchanges_base_url, params, opts.sink; results=false, json_to_array=false)
178+
return generate_output_from_url(YesSinkNoResults(), crypto_exchanges_base_url, params, opts.sink)
178179
end

src/stock_api.jl

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
############ Trades ####################
2+
"""
3+
"""
4+
function trades(opts::PolyOpts, ticker::String, date::String; limit=10, reverse=true, kwargs...)
5+
trades_url = "$trades_base_url/$ticker/$date"
6+
params = Dict(
7+
"apiKey" => opts.api_key,
8+
"limit" => limit,
9+
"reverse" => reverse
10+
)
11+
12+
merge!(params, Dict(kwargs))
13+
14+
return generate_output_from_url(YesSinkYesResults(), trades_url, params, opts.sink)
15+
end
16+
17+
18+
############ Quotes ####################
19+
"""
20+
"""
21+
function quotes_nbbo(opts::PolyOpts, ticker::String, date::String; limit=10, reverse=true, kwargs...)
22+
quotes_url = "$quotes_base_url/$ticker/$date"
23+
params = Dict(
24+
"apiKey" => opts.api_key,
25+
"limit" => limit,
26+
"reverse" => reverse
27+
)
28+
29+
merge!(params, Dict(kwargs))
30+
31+
return generate_output_from_url(YesSinkYesResults(), quotes_url, params, opts.sink)
32+
end
33+
34+
35+
# ############ Last Trade For A Symbol v2 ####################
36+
"""
37+
"""
38+
function last_trade_symbol(opts::PolyOpts, stocksTicker::String)
39+
last_trade_url = "$last_trade_base_url/$stocksTicker"
40+
params = Dict("apiKey" => opts.api_key)
41+
42+
return generate_output_from_url(YesSinkYesResults(), last_trade_url, params, opts.sink)
43+
end
44+
45+
46+
# ############ Last Quote For A Symbol v2 ####################
47+
"""
48+
"""
49+
function last_quote_symbol(opts::PolyOpts, stocksTicker::String)
50+
last_quote_url = "$last_quote_base_url/$stocksTicker"
51+
params = Dict("apiKey" => opts.api_key)
52+
53+
return generate_output_from_url(YesSinkYesResults(), last_quote_url, params, opts.sink)
54+
end
55+
56+
57+
# ############ Daily Open/Close ####################
58+
"""
59+
"""
60+
function daily_open_close(opts::PolyOpts, stocksTicker::String, date::String; adjusted=true)
61+
daily_open_close_url = "$daily_open_close_base_url/$stocksTicker/$date"
62+
params = Dict(
63+
"apiKey" => opts.api_key,
64+
"adjusted" => adjusted
65+
)
66+
67+
return generate_output_from_url(YesSinkNoResults(), daily_open_close_url, params, opts.sink)
68+
end
69+
70+
71+
# ############ Grouped Daily (Bars) ####################
72+
"""
73+
"""
74+
function grouped_daily_bars(opts::PolyOpts, date::String; adjusted=true)
75+
grouped_daily_bars_url = "$grouped_daily_bars_base_url/$date"
76+
params = Dict(
77+
"apiKey" => opts.api_key,
78+
"adjusted" => adjusted
79+
)
80+
81+
return generate_output_from_url(YesSinkYesResults(), grouped_daily_bars_url, params, opts.sink)
82+
end
83+
84+
85+
# ############ Previous Close ####################
86+
"""
87+
"""
88+
function previous_close(opts::PolyOpts, stocksTicker::String; adjusted=true)
89+
previous_close_url = "$previous_close_base_url/$stocksTicker/prev"
90+
params = Dict(
91+
"apiKey" => opts.api_key,
92+
"adjusted" => adjusted
93+
)
94+
95+
return generate_output_from_url(YesSinkYesResults(), previous_close_url, params, opts.sink)
96+
end
97+
98+
99+
# ############ Aggregates (Bars) ####################
100+
"""
101+
"""
102+
function aggregates_bars(opts::PolyOpts,
103+
stocksTicker::String;
104+
multiplier=1,
105+
timespan="day",
106+
from="2020-10-14",
107+
to="2020-10-14",
108+
adjusted=true,
109+
sort="asc",
110+
limit=120,
111+
kwargs...)
112+
113+
aggregates_bars_url = "$aggregates_bars_base_url/$stocksTicker/range/$multiplier/$timespan/$from/$to"
114+
115+
params = Dict(
116+
"apiKey" => opts.api_key,
117+
"multiplier" => multiplier,
118+
"timespan" => timespan,
119+
"from" => from,
120+
"to" => to,
121+
"adjusted" => adjusted,
122+
"sort" => sort,
123+
"limit" => limit
124+
)
125+
126+
merge!(params, Dict(kwargs))
127+
128+
return generate_output_from_url(YesSinkYesResults(), aggregates_bars_url, params, opts.sink)
129+
130+
end
131+
132+
133+
# ############ Snapshot - All Tickers ####################
134+
"""
135+
"""
136+
function snapshot_all_tickers(opts::PolyOpts, tickers::String)
137+
snapshot_all_tickers_url = "$snapshot_all_tickers_base_url"
138+
139+
params = Dict(
140+
"apiKey" => opts.api_key,
141+
"tickers" => tickers
142+
)
143+
144+
return generate_output_from_url(NoSinkYesTickers(), snapshot_all_tickers_url, params, opts.sink)
145+
end
146+
147+
148+
# ############ Snapshot - Ticker ####################
149+
"""
150+
"""
151+
function snapshot_ticker(opts::PolyOpts, stocksTicker::String)
152+
snapshot_ticker_url = "$snapshot_ticker_base_url/$stocksTicker"
153+
params = Dict("apiKey" => opts.api_key)
154+
155+
return generate_output_from_url(NoSinkYesTicker(), snapshot_ticker_url, params, opts.sink)
156+
end
157+
158+
159+
# ############ Snapshot - Gainers/Losers ####################
160+
"""
161+
"""
162+
function snapshot_gainers_losers(opts::PolyOpts, direction="losers")
163+
snapshot_gainers_losers_url = "$snapshot_gainers_losers_base_url/$direction"
164+
params = Dict(
165+
"apiKey" => opts.api_key,
166+
"direction" => direction
167+
)
168+
169+
return generate_output_from_url(NoSinkYesTickers(), snapshot_gainers_losers_url, params, opts.sink)
170+
end

0 commit comments

Comments
 (0)