Skip to content

Commit 346489c

Browse files
Add Mexc and other new methods (#88)
1 parent ee87c6b commit 346489c

File tree

36 files changed

+1465
-9
lines changed

36 files changed

+1465
-9
lines changed

Project.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ JSONWebTokens = "9b8beb19-0777-58c6-920b-28f749fee4d3"
1111
NanoDates = "46f1a544-deae-4307-8689-c12aa3c955c6"
1212
Nettle = "49dea1ee-f6fa-5aa6-9a11-8816cee7d4b9"
1313
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
14+
SHA = "ea8e919c-243c-51af-8825-aaa63cd721ce"
1415
Serde = "db9b398d-9517-45f8-9a95-92af99003e0e"
1516
TimeZones = "f269a46b-ccf7-5d73-abea-4c690281aa53"
1617
UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
@@ -21,6 +22,7 @@ EnumX = "1.0.5"
2122
JSONWebTokens = "1.1.1"
2223
NanoDates = "1.0"
2324
Nettle = "1.0.0"
25+
SHA = "0.7.0"
2426
Serde = "3.0.0"
2527
TimeZones = "1.13.0"
2628
julia = "1.8"

examples/Bitget.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,20 @@ Bitget.API.V2.Spot.Public.symbols(; symbol = "BTCUSDT")
1414

1515
Bitget.API.V2.Spot.Market.tickers()
1616
Bitget.API.V2.Spot.Market.tickers(; symbol = "BTCUSDT")
17+
18+
Bitget.API.V2.Mix.Market.contracts(
19+
productType = Bitget.API.V2.Mix.Market.Contracts.SettleType.USDT_FUTURES,
20+
)
21+
Bitget.API.V2.Mix.Market.contracts(
22+
productType = Bitget.API.V2.Mix.Market.Contracts.SettleType.USDT_FUTURES,
23+
symbol = "BTCUSDT",
24+
)
25+
26+
Bitget.API.V2.Mix.Market.tickers(
27+
productType = Bitget.API.V2.Mix.Market.Tickers.SettleType.USDT_FUTURES,
28+
)
29+
30+
Bitget.API.V2.Mix.Market.open_interest(
31+
productType = Bitget.API.V2.Mix.Market.OpenInterest.SettleType.USDT_FUTURES,
32+
symbol = "BTCUSDT",
33+
)

examples/Mexc.jl

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Mexc Examples
2+
# https://www.mexc.com/api-docs/spot-v3/introduction
3+
4+
using Dates
5+
using CryptoExchangeAPIs
6+
using CryptoExchangeAPIs.Mexc
7+
8+
# --- Spot --------------------------------------------------------------------
9+
10+
Mexc.API.V3.exchange_info()
11+
Mexc.API.V3.exchange_info(; symbol = "ADAUSDT")
12+
Mexc.API.V3.exchange_info(; symbols = ["ADAUSDT", "ETHUSDT", "BTCUSDT"])
13+
14+
Mexc.API.V3.ticker24hr()
15+
Mexc.API.V3.ticker24hr(; symbol = "ADAUSDT")
16+
17+
spot_client = Mexc.MexcSpotClient(
18+
base_url = "https://api.mexc.com",
19+
public_key = ENV["MEXC_PUBLIC_KEY"],
20+
secret_key = ENV["MEXC_SECRET_KEY"],
21+
)
22+
23+
Mexc.API.V3.Capital.Config.getall(spot_client)
24+
25+
# --- Futures -----------------------------------------------------------------
26+
27+
Mexc.API.V1.Contract.detail()
28+
Mexc.API.V1.Contract.detail(; symbol = "ADA_USDT")
29+
30+
Mexc.API.V1.Contract.ticker()
31+
Mexc.API.V1.Contract.ticker(; symbol = "ADA_USDT")
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
module Contracts
2+
3+
export ContractsQuery,
4+
ContractsData,
5+
contracts
6+
7+
using Serde
8+
using Dates, NanoDates, TimeZones
9+
using EnumX
10+
11+
using CryptoExchangeAPIs.Bitget
12+
using CryptoExchangeAPIs.Bitget: Data
13+
using CryptoExchangeAPIs: Maybe, APIsRequest
14+
15+
@enumx SettleType begin
16+
USDT_FUTURES
17+
USDC_FUTURES
18+
COIN_FUTURES
19+
end
20+
21+
@enumx Status begin
22+
listed
23+
normal
24+
maintain
25+
limit_open
26+
restrictedAPI
27+
off
28+
end
29+
30+
@enumx DeliveryPeriod this_quarter next_quarter
31+
32+
@enumx ExpiryType perpetual delivery
33+
34+
Base.@kwdef struct ContractsQuery <: BitgetPublicQuery
35+
symbol::Maybe{String} = nothing
36+
productType::SettleType.T
37+
end
38+
39+
function Serde.SerQuery.ser_type(::Type{ContractsQuery}, x::SettleType.T)
40+
x == SettleType.USDT_FUTURES && return "USDT-FUTURES"
41+
x == SettleType.USDC_FUTURES && return "USDC-FUTURES"
42+
x == SettleType.COIN_FUTURES && return "COIN-FUTURES"
43+
end
44+
45+
struct ContractsData <: BitgetData
46+
symbol::String
47+
baseCoin::String
48+
quoteCoin::String
49+
buyLimitPriceRatio::Float64
50+
sellLimitPriceRatio::Float64
51+
feeRateUpRatio::Float64
52+
makerFeeRate::Float64
53+
takerFeeRate::Float64
54+
openCostUpRatio::Float64
55+
supportMarginCoins::Vector{String}
56+
minTradeNum::Float64
57+
priceEndStep::Float64
58+
volumePlace::Int
59+
pricePlace::Int
60+
sizeMultiplier::Float64
61+
symbolType::ExpiryType.T
62+
minTradeUSDT::Float64
63+
maxSymbolOrderNum::Int
64+
maxProductOrderNum::Int
65+
maxPositionNum::Int
66+
symbolStatus::Status.T
67+
offTime::Maybe{NanoDate}
68+
limitOpenTime::Maybe{NanoDate}
69+
deliveryTime::Maybe{NanoDate}
70+
deliveryStartTime::Maybe{NanoDate}
71+
deliveryPeriod::Maybe{DeliveryPeriod.T}
72+
launchTime::Maybe{NanoDate}
73+
fundInterval::Maybe{Int}
74+
minLever::Int
75+
maxLever::Int
76+
posLimit::Maybe{Float64}
77+
maintainTime::Maybe{NanoDate}
78+
maxMarketOrderQty::Maybe{Float64}
79+
maxOrderQty::Maybe{Float64}
80+
isRwa::Bool
81+
end
82+
83+
function Serde.deser(::Type{ContractsData}, ::Type{Bool}, s::String)
84+
uppercase(s) == "YES" && return true
85+
uppercase(s) == "NO" && return false
86+
throw(ArgumentError("invalid boolean string: $(s)"))
87+
end
88+
89+
"""
90+
contracts(client::BitgetClient, query::ContractsQuery)
91+
contracts(client::BitgetClient = Bitget.BitgetClient(Bitget.public_config); kw...)
92+
93+
Interface is used to get future contract details.
94+
95+
[`GET api/v2/mix/market/contracts`](https://www.bitget.com/api-doc/contract/market/Get-All-Symbols-Contracts)
96+
97+
## Parameters:
98+
99+
| Parameter | Type | Required | Description |
100+
|:------------|:-----------|:---------|:---------------------------------------------|
101+
| symbol | String | false | |
102+
| productType | SettleType | true | USDT\\_FUTURES USDC\\_FUTURES COIN\\_FUTURES |
103+
104+
## Code samples:
105+
106+
```julia
107+
using CryptoExchangeAPIs.Bitget
108+
109+
result = Bitget.API.V2.Mix.Market.contracts(
110+
productType = Bitget.API.V2.Mix.Market.Contracts.SettleType.USDT_FUTURES
111+
)
112+
113+
result = Bitget.API.V2.Mix.Market.contracts(
114+
productType = Bitget.API.V2.Mix.Market.Contracts.SettleType.USDT_FUTURES,
115+
symbol = "BTCUSDT",
116+
)
117+
```
118+
"""
119+
function contracts(client::BitgetClient, query::ContractsQuery)
120+
return APIsRequest{Data{Vector{ContractsData}}}("GET", "api/v2/mix/market/contracts", query)(client)
121+
end
122+
123+
function contracts(
124+
client::BitgetClient = Bitget.BitgetClient(Bitget.public_config);
125+
kw...,
126+
)
127+
return contracts(client, ContractsQuery(; kw...))
128+
end
129+
130+
end
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module Market
2+
3+
include("Contracts.jl")
4+
using .Contracts
5+
6+
include("Tickers.jl")
7+
using .Tickers
8+
9+
include("OpenInterest.jl")
10+
using .OpenInterest
11+
12+
end
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
module OpenInterest
2+
3+
export OpenInterestQuery,
4+
OpenInterestData,
5+
open_interest
6+
7+
using Serde
8+
using Dates, NanoDates, TimeZones
9+
using EnumX
10+
11+
using CryptoExchangeAPIs.Bitget
12+
using CryptoExchangeAPIs.Bitget: Data
13+
using CryptoExchangeAPIs: Maybe, APIsRequest
14+
15+
@enumx SettleType begin
16+
USDT_FUTURES
17+
USDC_FUTURES
18+
COIN_FUTURES
19+
end
20+
21+
Base.@kwdef struct OpenInterestQuery <: BitgetPublicQuery
22+
productType::SettleType.T
23+
symbol::String
24+
end
25+
26+
function Serde.SerQuery.ser_type(::Type{OpenInterestQuery}, x::SettleType.T)
27+
x == SettleType.USDT_FUTURES && return "USDT-FUTURES"
28+
x == SettleType.USDC_FUTURES && return "USDC-FUTURES"
29+
x == SettleType.COIN_FUTURES && return "COIN-FUTURES"
30+
end
31+
32+
struct OpenInterestEntry <: BitgetData
33+
symbol::String
34+
size::Float64
35+
end
36+
37+
struct OpenInterestData <: BitgetData
38+
openInterestList::Vector{OpenInterestEntry}
39+
ts::NanoDate
40+
end
41+
42+
"""
43+
open_interest(client::BitgetClient, query::OpenInterestQuery)
44+
open_interest(client::BitgetClient = Bitget.BitgetClient(Bitget.public_config); kw...)
45+
46+
Get the total positions of a certain trading pair on the platform.
47+
48+
[`GET api/v2/mix/market/open-interest`](https://www.bitget.com/api-doc/contract/market/Get-Open-Interest)
49+
50+
## Parameters:
51+
52+
| Parameter | Type | Required | Description |
53+
|:------------|:-----------|:---------|:---------------------------------------------|
54+
| productType | SettleType | true | USDT\\_FUTURES USDC\\_FUTURES COIN\\_FUTURES |
55+
| symbol | String | true | |
56+
57+
## Code samples:
58+
59+
```julia
60+
using CryptoExchangeAPIs.Bitget
61+
62+
result = Bitget.API.V2.Mix.Market.open_interest(
63+
productType = Bitget.API.V2.Mix.Market.OpenInterest.SettleType.USDT_FUTURES,
64+
symbol = "BTCUSDT",
65+
)
66+
```
67+
"""
68+
function open_interest(client::BitgetClient, query::OpenInterestQuery)
69+
return APIsRequest{Data{OpenInterestData}}("GET", "api/v2/mix/market/open-interest", query)(client)
70+
end
71+
72+
function open_interest(
73+
client::BitgetClient = Bitget.BitgetClient(Bitget.public_config);
74+
kw...,
75+
)
76+
return open_interest(client, OpenInterestQuery(; kw...))
77+
end
78+
79+
end
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
module Tickers
2+
3+
export TickersQuery,
4+
TickersData,
5+
tickers
6+
7+
using Serde
8+
using Dates, NanoDates, TimeZones
9+
using EnumX
10+
11+
using CryptoExchangeAPIs.Bitget
12+
using CryptoExchangeAPIs.Bitget: Data
13+
using CryptoExchangeAPIs: Maybe, APIsRequest
14+
15+
@enumx SettleType begin
16+
USDT_FUTURES
17+
USDC_FUTURES
18+
COIN_FUTURES
19+
end
20+
21+
@enumx DeliveryStatus begin
22+
delivery_config_period
23+
delivery_normal
24+
delivery_before
25+
delivery_period
26+
end
27+
28+
Base.@kwdef struct TickersQuery <: BitgetPublicQuery
29+
productType::SettleType.T
30+
end
31+
32+
function Serde.SerQuery.ser_type(::Type{TickersQuery}, x::SettleType.T)
33+
x == SettleType.USDT_FUTURES && return "USDT-FUTURES"
34+
x == SettleType.USDC_FUTURES && return "USDC-FUTURES"
35+
x == SettleType.COIN_FUTURES && return "COIN-FUTURES"
36+
end
37+
38+
struct TickersData <: BitgetData
39+
symbol::String
40+
lastPr::Float64
41+
askPr::Float64
42+
bidPr::Float64
43+
bidSz::Float64
44+
askSz::Float64
45+
high24h::Float64
46+
low24h::Float64
47+
ts::NanoDate
48+
change24h::Float64
49+
baseVolume::Float64
50+
quoteVolume::Float64
51+
usdtVolume::Float64
52+
openUtc::Float64
53+
changeUtc24h::Float64
54+
indexPrice::Maybe{Float64}
55+
fundingRate::Float64
56+
holdingAmount::Float64
57+
deliveryStartTime::Maybe{NanoDate}
58+
deliveryTime::Maybe{NanoDate}
59+
deliveryStatus::Maybe{DeliveryStatus.T}
60+
open24h::Float64
61+
markPrice::Float64
62+
end
63+
64+
"""
65+
tickers(client::BitgetClient, query::TickersQuery)
66+
tickers(client::BitgetClient = Bitget.BitgetClient(Bitget.public_config); kw...)
67+
68+
Get ticker information, supporting both single and batch queries.
69+
70+
[`GET api/v2/mix/market/tickers`](https://www.bitget.com/api-doc/contract/market/Get-All-Symbol-Ticker)
71+
72+
## Parameters:
73+
74+
| Parameter | Type | Required | Description |
75+
|:------------|:-----------|:---------|:---------------------------------------------|
76+
| productType | SettleType | true | USDT\\_FUTURES USDC\\_FUTURES COIN\\_FUTURES |
77+
78+
## Code samples:
79+
80+
```julia
81+
using CryptoExchangeAPIs.Bitget
82+
83+
result = Bitget.API.V2.Mix.Market.tickers(
84+
productType = Bitget.API.V2.Mix.Market.Tickers.SettleType.USDT_FUTURES,
85+
)
86+
```
87+
"""
88+
function tickers(client::BitgetClient, query::TickersQuery)
89+
return APIsRequest{Data{Vector{TickersData}}}("GET", "api/v2/mix/market/tickers", query)(client)
90+
end
91+
92+
function tickers(
93+
client::BitgetClient = Bitget.BitgetClient(Bitget.public_config);
94+
kw...,
95+
)
96+
return tickers(client, TickersQuery(; kw...))
97+
end
98+
99+
end

0 commit comments

Comments
 (0)