Examples

Construct an Exchange

The defaults are usually fine.

julia> using CryptoMarketData

julia> bitget = Bitget()
Bitget("https://api.bitget.com", "https://www.bitget.com", Dict{Any, Any}(), "dmcbl")

julia> bitmex = Bitmex()
Bitmex("https://www.bitmex.com", Dict{Any, Any}())

julia> bitstamp = Bitstamp()
Bitstamp("https://www.bitstamp.net")

julia> bybit = Bybit()
Bybit("https://api.bybit.com", Dict{Any, Any}(), "inverse")

julia> pancakeswap = PancakeSwap()
PancakeSwap("https://perp.pancakeswap.finance", Dict{Any, Any}())

Some exchanges categorize their markets in a way that affects the API calls that must be used to access them. This is expressed during exchange construction.

julia> bitget_u = Bitget(;type="umcbl")
Bitget("https://api.bitget.com", "https://www.bitget.com", Dict{Any, Any}(), "umcbl")

julia> bitget_d = Bitget(;type="dmcbl") # default
Bitget("https://api.bitget.com", "https://www.bitget.com", Dict{Any, Any}(), "dmcbl")

julia> markets_u = get_markets(bitget_u);

julia> markets_d = get_markets(bitget_d);

julia> size(markets_u)
(195,)

julia> size(markets_d)
(12,)

Proxies

Some of you who live in forbidden countries will need to use a proxy that's outside of your home country to get around IP bans. Setting up a proxy is beyond the scope of this document, but I recommend Squid.

julia> bybit = Bybit(Dict(:proxy => "http://user:pass@proxyhost:3128"))
Bybit("https://api.bybit.com", Dict(:proxy => "http://user:pass@proxyhost:3128"), "inverse")

Get a List of Available Markets

julia> markets = get_markets(bitstamp); markets[1:5]
5-element Vector{String}:
 "BTC/USD"
 "BTC/EUR"
 "BTC/GBP"
 "BTC/PAX"
 "GBP/USD"

Save Candles

This is the most basic thing you can do with this library.

julia> save!(bitstamp, "BTC/USD"; endday=Date("2011-08-25"))
┌ Info: 2011-08-18
└   length(cs) = 683
┌ Info: 2011-08-19
└   length(cs) = 1440
┌ Info: 2011-08-20
└   length(cs) = 1440
┌ Info: 2011-08-21
└   length(cs) = 1440
┌ Info: 2011-08-22
└   length(cs) = 1440
┌ Info: 2011-08-23
└   length(cs) = 1440
┌ Info: 2011-08-24
└   length(cs) = 1440
┌ Info: 2011-08-25
└   length(cs) = 1440

Find Out When Candle Data for a Market Begins

julia> ec = earliest_candle(bitstamp, "BTC/USD")
BitstampCandle(0x000000004e4d076c, 10.9, 10.9, 10.9, 10.9, 0.48990826)

julia> candle_datetime(ec)
2011-08-18T12:37:00

Load Candles

Everything

julia> btcusd = load(bitstamp, "BTC/USD")

Within a Certain Date Range

julia> btcusd = load(bitstamp, "BTC/USD";
  span=Date("2024-01-01"):Date("2024-01-15"))

In a Certain Time Frame

julia> btcusd4h = load(bitstamp, "BTC/USD";
  tf=Hour(4), span=Date("2024-01-01"):Date("2024-01-15"))