bybit-connector-ruby 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +259 -0
- data/LICENSE +21 -0
- data/README.md +173 -0
- data/examples/quickstart.rb +35 -0
- data/lib/bybit/authentication.rb +16 -0
- data/lib/bybit/client.rb +71 -0
- data/lib/bybit/configuration.rb +74 -0
- data/lib/bybit/error.rb +67 -0
- data/lib/bybit/rest_api/account_service.rb +332 -0
- data/lib/bybit/rest_api/affiliate_service.rb +42 -0
- data/lib/bybit/rest_api/asset_service.rb +638 -0
- data/lib/bybit/rest_api/base_service.rb +11 -0
- data/lib/bybit/rest_api/bot_service.rb +386 -0
- data/lib/bybit/rest_api/broker_service.rb +109 -0
- data/lib/bybit/rest_api/crypto_loan_service.rb +375 -0
- data/lib/bybit/rest_api/earn_service.rb +1047 -0
- data/lib/bybit/rest_api/market_service.rb +359 -0
- data/lib/bybit/rest_api/p2p_service.rb +256 -0
- data/lib/bybit/rest_api/position_service.rb +202 -0
- data/lib/bybit/rest_api/rfq_service.rb +221 -0
- data/lib/bybit/rest_api/spot_margin_service.rb +62 -0
- data/lib/bybit/rest_api/trade_service.rb +289 -0
- data/lib/bybit/rest_api/user_service.rb +254 -0
- data/lib/bybit/session.rb +199 -0
- data/lib/bybit/utils/wire_keys.rb +66 -0
- data/lib/bybit/version.rb +5 -0
- data/lib/bybit.rb +10 -0
- metadata +158 -0
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bybit
|
|
4
|
+
module RestApi
|
|
5
|
+
class MarketService < BaseService
|
|
6
|
+
# Get ADL alert information for the specified symbol.
|
|
7
|
+
#
|
|
8
|
+
# GET /v5/market/adlalert
|
|
9
|
+
#
|
|
10
|
+
# @option kwargs [String] :symbol Symbol name
|
|
11
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
12
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/adl-alert
|
|
13
|
+
def get_adl_alert(**kwargs)
|
|
14
|
+
params = kwargs.dup
|
|
15
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
16
|
+
@session.public_request(path: '/v5/market/adlAlert', params: params)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Get the delivery price for delivery contracts.
|
|
20
|
+
#
|
|
21
|
+
# GET /v5/market/delivery-price
|
|
22
|
+
#
|
|
23
|
+
# @param category [String] Product type
|
|
24
|
+
# @option kwargs [String] :symbol Symbol name
|
|
25
|
+
# @option kwargs [String] :base_coin Base coin
|
|
26
|
+
# @option kwargs [String] :settle_coin Settle coin
|
|
27
|
+
# @option kwargs [Integer] :limit Limit for data size per page
|
|
28
|
+
# @option kwargs [String] :cursor Cursor for pagination
|
|
29
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
30
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/delivery-price
|
|
31
|
+
def get_delivery_price(category:, **kwargs)
|
|
32
|
+
params = kwargs.merge(category: category)
|
|
33
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
34
|
+
@session.public_request(path: '/v5/market/delivery-price', params: params)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Get the fee group structure information.
|
|
38
|
+
#
|
|
39
|
+
# GET /v5/market/fee-group-info
|
|
40
|
+
#
|
|
41
|
+
# @param product_type [String] Product type
|
|
42
|
+
# @option kwargs [String] :group_id Fee group id
|
|
43
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
44
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/fee-group-info
|
|
45
|
+
def get_fee_group_info(product_type:, **kwargs)
|
|
46
|
+
params = kwargs.merge(product_type: product_type)
|
|
47
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
48
|
+
@session.public_request(path: '/v5/market/fee-group-info', params: params)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Get the historical funding rate for a symbol.
|
|
52
|
+
#
|
|
53
|
+
# GET /v5/market/funding/history
|
|
54
|
+
#
|
|
55
|
+
# @param category [String] Product type
|
|
56
|
+
# @param symbol [String] Symbol name
|
|
57
|
+
# @option kwargs [Integer] :start_time Start timestamp (ms)
|
|
58
|
+
# @option kwargs [Integer] :end_time End timestamp (ms)
|
|
59
|
+
# @option kwargs [Integer] :limit Limit for data size per page
|
|
60
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
61
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/history-fund-rate
|
|
62
|
+
def get_funding_rate_history(category:, symbol:, **kwargs)
|
|
63
|
+
params = kwargs.merge(category: category, symbol: symbol)
|
|
64
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
65
|
+
@session.public_request(path: '/v5/market/funding/history', params: params)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Get the historical volatility for options.
|
|
69
|
+
#
|
|
70
|
+
# GET /v5/market/historical-volatility
|
|
71
|
+
#
|
|
72
|
+
# @param category [String] Product type
|
|
73
|
+
# @option kwargs [String] :base_coin Base coin
|
|
74
|
+
# @option kwargs [String] :quote_coin Quote coin
|
|
75
|
+
# @option kwargs [Integer] :period Period
|
|
76
|
+
# @option kwargs [Integer] :start_time Start timestamp (ms)
|
|
77
|
+
# @option kwargs [Integer] :end_time End timestamp (ms)
|
|
78
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
79
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/iv
|
|
80
|
+
def get_historical_volatility(category:, **kwargs)
|
|
81
|
+
params = kwargs.merge(category: category)
|
|
82
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
83
|
+
@session.public_request(path: '/v5/market/historical-volatility', params: params)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Get the components of the index price.
|
|
87
|
+
#
|
|
88
|
+
# GET /v5/market/index-price-components
|
|
89
|
+
#
|
|
90
|
+
# @param index_name [String] Index name
|
|
91
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
92
|
+
def get_index_price_components(index_name:, **kwargs)
|
|
93
|
+
params = kwargs.merge(index_name: index_name)
|
|
94
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
95
|
+
@session.public_request(path: '/v5/market/index-price-components', params: params)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Get index price kline data for a symbol.
|
|
99
|
+
#
|
|
100
|
+
# GET /v5/market/index-price-kline
|
|
101
|
+
#
|
|
102
|
+
# @param symbol [String] Symbol name
|
|
103
|
+
# @param interval [String] Kline interval
|
|
104
|
+
# @option kwargs [String] :category Product type
|
|
105
|
+
# @option kwargs [Integer] :start Start timestamp (ms)
|
|
106
|
+
# @option kwargs [Integer] :end_ End timestamp (ms)
|
|
107
|
+
# @option kwargs [Integer] :limit Limit for data size per page
|
|
108
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
109
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/index-kline
|
|
110
|
+
def get_index_price_kline(symbol:, interval:, **kwargs)
|
|
111
|
+
params = kwargs.merge(symbol: symbol, interval: interval)
|
|
112
|
+
params[:end] = params.delete(:end_) if params.key?(:end_)
|
|
113
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
114
|
+
@session.public_request(path: '/v5/market/index-price-kline', params: params)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Get the specification of instruments.
|
|
118
|
+
#
|
|
119
|
+
# GET /v5/market/instruments-info
|
|
120
|
+
#
|
|
121
|
+
# @param category [String] Product type
|
|
122
|
+
# @option kwargs [String] :symbol Symbol name
|
|
123
|
+
# @option kwargs [String] :status Symbol status filter
|
|
124
|
+
# @option kwargs [String] :base_coin Base coin
|
|
125
|
+
# @option kwargs [Integer] :limit Limit for data size per page
|
|
126
|
+
# @option kwargs [String] :cursor Cursor for pagination
|
|
127
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
128
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/instrument
|
|
129
|
+
def get_instruments_info(category:, **kwargs)
|
|
130
|
+
params = kwargs.merge(category: category)
|
|
131
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
132
|
+
@session.public_request(path: '/v5/market/instruments-info', params: params)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Get the insurance pool balance data.
|
|
136
|
+
#
|
|
137
|
+
# GET /v5/market/insurance
|
|
138
|
+
#
|
|
139
|
+
# @option kwargs [String] :coin Coin name
|
|
140
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
141
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/insurance
|
|
142
|
+
def get_insurance_pool(**kwargs)
|
|
143
|
+
params = kwargs.dup
|
|
144
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
145
|
+
@session.public_request(path: '/v5/market/insurance', params: params)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Get the long/short account ratio for a symbol.
|
|
149
|
+
#
|
|
150
|
+
# GET /v5/market/account-ratio
|
|
151
|
+
#
|
|
152
|
+
# @param category [String] Product type
|
|
153
|
+
# @param symbol [String] Symbol name
|
|
154
|
+
# @param period [String] Data recording period
|
|
155
|
+
# @option kwargs [String] :start_time Start timestamp (ms)
|
|
156
|
+
# @option kwargs [String] :end_time End timestamp (ms)
|
|
157
|
+
# @option kwargs [Integer] :limit Limit for data size per page
|
|
158
|
+
# @option kwargs [String] :cursor Cursor for pagination
|
|
159
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
160
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/long-short-ratio
|
|
161
|
+
def get_long_short_ratio(category:, symbol:, period:, **kwargs)
|
|
162
|
+
params = kwargs.merge(category: category, symbol: symbol, period: period)
|
|
163
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
164
|
+
@session.public_request(path: '/v5/market/account-ratio', params: params)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# Get mark price kline data for a symbol.
|
|
168
|
+
#
|
|
169
|
+
# GET /v5/market/mark-price-kline
|
|
170
|
+
#
|
|
171
|
+
# @param symbol [String] Symbol name
|
|
172
|
+
# @param interval [String] Kline interval
|
|
173
|
+
# @option kwargs [String] :category Product type
|
|
174
|
+
# @option kwargs [Integer] :start Start timestamp (ms)
|
|
175
|
+
# @option kwargs [Integer] :end_ End timestamp (ms)
|
|
176
|
+
# @option kwargs [Integer] :limit Limit for data size per page
|
|
177
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
178
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/mark-kline
|
|
179
|
+
def get_mark_price_kline(symbol:, interval:, **kwargs)
|
|
180
|
+
params = kwargs.merge(symbol: symbol, interval: interval)
|
|
181
|
+
params[:end] = params.delete(:end_) if params.key?(:end_)
|
|
182
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
183
|
+
@session.public_request(path: '/v5/market/mark-price-kline', params: params)
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Get kline (candlestick) data for a symbol.
|
|
187
|
+
#
|
|
188
|
+
# GET /v5/market/kline
|
|
189
|
+
#
|
|
190
|
+
# @param symbol [String] Symbol name
|
|
191
|
+
# @param interval [String] Kline interval
|
|
192
|
+
# @option kwargs [String] :category Product type
|
|
193
|
+
# @option kwargs [Integer] :start Start timestamp (ms)
|
|
194
|
+
# @option kwargs [Integer] :end_ End timestamp (ms)
|
|
195
|
+
# @option kwargs [Integer] :limit Limit for data size per page
|
|
196
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
197
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/kline
|
|
198
|
+
def get_kline(symbol:, interval:, **kwargs)
|
|
199
|
+
params = kwargs.merge(symbol: symbol, interval: interval)
|
|
200
|
+
params[:end] = params.delete(:end_) if params.key?(:end_)
|
|
201
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
202
|
+
@session.public_request(path: '/v5/market/kline', params: params)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# Get the new delivery price for delivery contracts.
|
|
206
|
+
#
|
|
207
|
+
# GET /v5/market/new-delivery-price
|
|
208
|
+
#
|
|
209
|
+
# @param category [String] Product type
|
|
210
|
+
# @param base_coin [String] Base coin
|
|
211
|
+
# @option kwargs [String] :settle_coin Settle coin
|
|
212
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
213
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/new-delivery-price
|
|
214
|
+
def get_new_delivery_price(category:, base_coin:, **kwargs)
|
|
215
|
+
params = kwargs.merge(category: category, base_coin: base_coin)
|
|
216
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
217
|
+
@session.public_request(path: '/v5/market/new-delivery-price', params: params)
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
# Get the open interest data for a symbol.
|
|
221
|
+
#
|
|
222
|
+
# GET /v5/market/open-interest
|
|
223
|
+
#
|
|
224
|
+
# @param category [String] Product type
|
|
225
|
+
# @param symbol [String] Symbol name
|
|
226
|
+
# @param interval_time [String] Interval time
|
|
227
|
+
# @option kwargs [Integer] :start_time Start timestamp (ms)
|
|
228
|
+
# @option kwargs [Integer] :end_time End timestamp (ms)
|
|
229
|
+
# @option kwargs [Integer] :limit Limit for data size per page
|
|
230
|
+
# @option kwargs [String] :cursor Cursor for pagination
|
|
231
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
232
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/open-interest
|
|
233
|
+
def get_open_interest(category:, symbol:, interval_time:, **kwargs)
|
|
234
|
+
params = kwargs.merge(category: category, symbol: symbol, interval_time: interval_time)
|
|
235
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
236
|
+
@session.public_request(path: '/v5/market/open-interest', params: params)
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# Get the order price limit for a symbol.
|
|
240
|
+
#
|
|
241
|
+
# GET /v5/market/price-limit
|
|
242
|
+
#
|
|
243
|
+
# @param symbol [String] Symbol name
|
|
244
|
+
# @option kwargs [String] :category Product type
|
|
245
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
246
|
+
def get_order_price_limit(symbol:, **kwargs)
|
|
247
|
+
params = kwargs.merge(symbol: symbol)
|
|
248
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
249
|
+
@session.public_request(path: '/v5/market/price-limit', params: params)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# Get orderbook data for a specified symbol and category.
|
|
253
|
+
#
|
|
254
|
+
# GET /v5/market/orderbook
|
|
255
|
+
#
|
|
256
|
+
# @param category [String] Product type: spot, linear, inverse, option
|
|
257
|
+
# @param symbol [String] Symbol name
|
|
258
|
+
# @option kwargs [Integer] :limit Limit size for each bid/ask
|
|
259
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
260
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/orderbook
|
|
261
|
+
def get_orderbook(category:, symbol:, **kwargs)
|
|
262
|
+
params = kwargs.merge(category: category, symbol: symbol)
|
|
263
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
264
|
+
@session.public_request(path: '/v5/market/orderbook', params: params)
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
# Get premium index price kline data.
|
|
268
|
+
#
|
|
269
|
+
# GET /v5/market/premium-index-price-kline
|
|
270
|
+
#
|
|
271
|
+
# @param symbol [String] Symbol name
|
|
272
|
+
# @param interval [String] Kline interval
|
|
273
|
+
# @option kwargs [String] :category Product type: linear
|
|
274
|
+
# @option kwargs [Integer] :start The start timestamp (ms)
|
|
275
|
+
# @option kwargs [Integer] :end_ The end timestamp (ms)
|
|
276
|
+
# @option kwargs [Integer] :limit Limit for data size per page. [1, 1000]. Default: 200
|
|
277
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
278
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/premium-index-kline
|
|
279
|
+
def get_premium_index_price_kline(symbol:, interval:, **kwargs)
|
|
280
|
+
params = kwargs.merge(symbol: symbol, interval: interval)
|
|
281
|
+
params[:end] = params.delete(:end_) if params.key?(:end_)
|
|
282
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
283
|
+
@session.public_request(path: '/v5/market/premium-index-price-kline', params: params)
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
# Get recent public trades.
|
|
287
|
+
#
|
|
288
|
+
# GET /v5/market/recent-trade
|
|
289
|
+
#
|
|
290
|
+
# @param category [String] Product type: spot, linear, inverse, option
|
|
291
|
+
# @option kwargs [String] :symbol Symbol name
|
|
292
|
+
# @option kwargs [String] :base_coin Base coin, for option only
|
|
293
|
+
# @option kwargs [String] :option_type Option type: Call or Put, for option only
|
|
294
|
+
# @option kwargs [Integer] :limit Limit for data size per page
|
|
295
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
296
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/recent-trade
|
|
297
|
+
def get_recent_public_trades(category:, **kwargs)
|
|
298
|
+
params = kwargs.merge(category: category)
|
|
299
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
300
|
+
@session.public_request(path: '/v5/market/recent-trade', params: params)
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
# Get risk limit information.
|
|
304
|
+
#
|
|
305
|
+
# GET /v5/market/risk-limit
|
|
306
|
+
#
|
|
307
|
+
# @param category [String] Product type: linear, inverse
|
|
308
|
+
# @option kwargs [String] :symbol Symbol name
|
|
309
|
+
# @option kwargs [String] :cursor Cursor for pagination
|
|
310
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
311
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/risk-limit
|
|
312
|
+
def get_risk_limit(category:, **kwargs)
|
|
313
|
+
params = kwargs.merge(category: category)
|
|
314
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
315
|
+
@session.public_request(path: '/v5/market/risk-limit', params: params)
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
# Get RPI (Retail Price Improvement) orderbook data.
|
|
319
|
+
#
|
|
320
|
+
# GET /v5/market/rpi_orderbook
|
|
321
|
+
#
|
|
322
|
+
# @param symbol [String] Symbol name
|
|
323
|
+
# @param limit [Integer] Limit size for each bid/ask
|
|
324
|
+
# @option kwargs [String] :category Product type: spot
|
|
325
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
326
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/rpi-orderbook
|
|
327
|
+
def get_rpi_orderbook(symbol:, limit:, **kwargs)
|
|
328
|
+
params = kwargs.merge(symbol: symbol, limit: limit)
|
|
329
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
330
|
+
@session.public_request(path: '/v5/market/rpi_orderbook', params: params)
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
# Get Bybit server time.
|
|
334
|
+
#
|
|
335
|
+
# GET /v5/market/time
|
|
336
|
+
#
|
|
337
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/time
|
|
338
|
+
def get_server_time
|
|
339
|
+
@session.public_request(path: '/v5/market/time')
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
# Get tickers information for a specified category.
|
|
343
|
+
#
|
|
344
|
+
# GET /v5/market/tickers
|
|
345
|
+
#
|
|
346
|
+
# @param category [String] Product type: spot, linear, inverse, option
|
|
347
|
+
# @option kwargs [String] :symbol Symbol name
|
|
348
|
+
# @option kwargs [String] :base_coin Base coin, for option only
|
|
349
|
+
# @option kwargs [String] :exp_date Expiry date, for option only
|
|
350
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
351
|
+
# @see https://bybit-exchange.github.io/docs/v5/market/tickers
|
|
352
|
+
def get_tickers(category:, **kwargs)
|
|
353
|
+
params = kwargs.merge(category: category)
|
|
354
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
355
|
+
@session.public_request(path: '/v5/market/tickers', params: params)
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
end
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Bybit
|
|
4
|
+
module RestApi
|
|
5
|
+
class P2pService < BaseService
|
|
6
|
+
# Get the P2P user account information for the caller.
|
|
7
|
+
#
|
|
8
|
+
# POST /v5/p2p/user/personal/info
|
|
9
|
+
def get_account_info
|
|
10
|
+
@session.sign_request(method: :post, path: '/v5/p2p/user/personal/info', body: {})
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Get online P2P advertisement list filtered by token, currency and side.
|
|
14
|
+
#
|
|
15
|
+
# POST /v5/p2p/item/online
|
|
16
|
+
#
|
|
17
|
+
# @param token_id [String] Token ID
|
|
18
|
+
# @param currency_id [String] Currency ID
|
|
19
|
+
# @param side [String] Side: 0 buy, 1 sell
|
|
20
|
+
# @option kwargs [String] :page Page number
|
|
21
|
+
# @option kwargs [String] :size Page size
|
|
22
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
23
|
+
def get_ads(token_id:, currency_id:, side:, **kwargs)
|
|
24
|
+
params = kwargs.merge(token_id: token_id, currency_id: currency_id, side: side)
|
|
25
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
26
|
+
@session.sign_request(method: :post, path: '/v5/p2p/item/online', body: params)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Get simplified list of all P2P orders with optional filters.
|
|
30
|
+
#
|
|
31
|
+
# POST /v5/p2p/order/simplifylist
|
|
32
|
+
#
|
|
33
|
+
# @param page [Integer] Page number
|
|
34
|
+
# @param size [Integer] Page size
|
|
35
|
+
# @option kwargs [Integer] :status Order status filter
|
|
36
|
+
# @option kwargs [String] :begin_time Begin time in milliseconds
|
|
37
|
+
# @option kwargs [String] :end_time End time in milliseconds
|
|
38
|
+
# @option kwargs [String] :token_id Token ID
|
|
39
|
+
# @option kwargs [Integer] :side Side: 0 buy, 1 sell
|
|
40
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
41
|
+
def get_all_orders(page:, size:, **kwargs)
|
|
42
|
+
params = kwargs.merge(page: page, size: size)
|
|
43
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
44
|
+
@session.sign_request(method: :post, path: '/v5/p2p/order/simplifyList', body: params)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Get the paginated chat message list for a P2P order.
|
|
48
|
+
#
|
|
49
|
+
# POST /v5/p2p/order/message/listpage
|
|
50
|
+
#
|
|
51
|
+
# @param order_id [String] Order ID
|
|
52
|
+
# @param size [String] Page size
|
|
53
|
+
# @option kwargs [String] :current_page Current page number
|
|
54
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
55
|
+
def get_chat_messages(order_id:, size:, **kwargs)
|
|
56
|
+
params = kwargs.merge(order_id: order_id, size: size)
|
|
57
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
58
|
+
@session.sign_request(method: :post, path: '/v5/p2p/order/message/listpage', body: params)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Get counterparty user info for a P2P order.
|
|
62
|
+
#
|
|
63
|
+
# POST /v5/p2p/user/order/personal/info
|
|
64
|
+
#
|
|
65
|
+
# @option kwargs [String] :original_uid Original user ID of the counterparty.
|
|
66
|
+
# @option kwargs [String] :order_id P2P order ID.
|
|
67
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
68
|
+
def get_counterparty_user_info(**kwargs)
|
|
69
|
+
params = kwargs.dup
|
|
70
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
71
|
+
@session.sign_request(method: :post, path: '/v5/p2p/user/order/personal/info', body: params)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Get details of a specific P2P advertisement owned by the caller.
|
|
75
|
+
#
|
|
76
|
+
# POST /v5/p2p/item/info
|
|
77
|
+
#
|
|
78
|
+
# @param item_id [String] Advertisement ID
|
|
79
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
80
|
+
def get_my_ad_details(item_id:, **kwargs)
|
|
81
|
+
params = kwargs.merge(item_id: item_id)
|
|
82
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
83
|
+
@session.sign_request(method: :post, path: '/v5/p2p/item/info', body: params)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Get the list of the caller's own P2P advertisements.
|
|
87
|
+
#
|
|
88
|
+
# POST /v5/p2p/item/personal/list
|
|
89
|
+
#
|
|
90
|
+
# @option kwargs [String] :item_id Advertisement ID
|
|
91
|
+
# @option kwargs [String] :status Ad status filter
|
|
92
|
+
# @option kwargs [String] :side Side: 0 buy, 1 sell
|
|
93
|
+
# @option kwargs [String] :token_id Token ID
|
|
94
|
+
# @option kwargs [String] :page Page number
|
|
95
|
+
# @option kwargs [String] :size Page size
|
|
96
|
+
# @option kwargs [String] :currency_id Currency ID
|
|
97
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
98
|
+
def get_my_ads(**kwargs)
|
|
99
|
+
params = kwargs.dup
|
|
100
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
101
|
+
@session.sign_request(method: :post, path: '/v5/p2p/item/personal/list', body: params)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Get the details of a specific P2P order.
|
|
105
|
+
#
|
|
106
|
+
# POST /v5/p2p/order/info
|
|
107
|
+
#
|
|
108
|
+
# @param order_id [String] Order ID
|
|
109
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
110
|
+
def get_order_detail(order_id:, **kwargs)
|
|
111
|
+
params = kwargs.merge(order_id: order_id)
|
|
112
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
113
|
+
@session.sign_request(method: :post, path: '/v5/p2p/order/info', body: params)
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Get simplified list of pending P2P orders with optional filters.
|
|
117
|
+
#
|
|
118
|
+
# POST /v5/p2p/order/pending/simplifylist
|
|
119
|
+
#
|
|
120
|
+
# @param page [Integer] Page number
|
|
121
|
+
# @param size [Integer] Page size
|
|
122
|
+
# @option kwargs [Integer] :status Order status filter
|
|
123
|
+
# @option kwargs [String] :begin_time Begin time in milliseconds
|
|
124
|
+
# @option kwargs [String] :end_time End time in milliseconds
|
|
125
|
+
# @option kwargs [String] :token_id Token ID
|
|
126
|
+
# @option kwargs [Integer] :side Side: 0 buy, 1 sell
|
|
127
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
128
|
+
def get_pending_orders(page:, size:, **kwargs)
|
|
129
|
+
params = kwargs.merge(page: page, size: size)
|
|
130
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
131
|
+
@session.sign_request(method: :post, path: '/v5/p2p/order/pending/simplifyList', body: params)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Get the current user's P2P payment method list.
|
|
135
|
+
#
|
|
136
|
+
# POST /v5/p2p/user/payment/list
|
|
137
|
+
def get_user_payment
|
|
138
|
+
@session.sign_request(method: :post, path: '/v5/p2p/user/payment/list', body: {})
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Mark a P2P order as paid by the buyer.
|
|
142
|
+
#
|
|
143
|
+
# POST /v5/p2p/order/pay
|
|
144
|
+
#
|
|
145
|
+
# @param order_id [String] Order ID
|
|
146
|
+
# @param payment_type [String] Payment method type
|
|
147
|
+
# @param payment_id [String] Payment method ID
|
|
148
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
149
|
+
def mark_order_as_paid(order_id:, payment_type:, payment_id:, **kwargs)
|
|
150
|
+
params = kwargs.merge(order_id: order_id, payment_type: payment_type, payment_id: payment_id)
|
|
151
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
152
|
+
@session.sign_request(method: :post, path: '/v5/p2p/order/pay', body: params)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Create a new P2P advertisement.
|
|
156
|
+
#
|
|
157
|
+
# POST /v5/p2p/item/create
|
|
158
|
+
#
|
|
159
|
+
# @param token_id [String] Token ID
|
|
160
|
+
# @param currency_id [String] Currency ID
|
|
161
|
+
# @param side [String] Side: 0 buy, 1 sell
|
|
162
|
+
# @param price_type [String] Price type: 0 fixed, 1 floating
|
|
163
|
+
# @param premium [String] Premium value
|
|
164
|
+
# @param price [String] Ad price
|
|
165
|
+
# @param min_amount [String] Minimum order amount
|
|
166
|
+
# @param max_amount [String] Maximum order amount
|
|
167
|
+
# @param remark [String] Ad remark
|
|
168
|
+
# @param trading_preference_set [Hash] Trading preference settings
|
|
169
|
+
# @param payment_ids [Array] Payment method IDs
|
|
170
|
+
# @param quantity [String] Ad quantity
|
|
171
|
+
# @param payment_period [String] Payment period in minutes
|
|
172
|
+
# @param item_type [String] Item type
|
|
173
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
174
|
+
def create_ad(token_id:, currency_id:, side:, price_type:, premium:, price:, min_amount:, max_amount:, remark:, trading_preference_set:, payment_ids:, quantity:, payment_period:, item_type:, **kwargs)
|
|
175
|
+
params = kwargs.merge(token_id: token_id, currency_id: currency_id, side: side, price_type: price_type, premium: premium, price: price, min_amount: min_amount, max_amount: max_amount, remark: remark, trading_preference_set: trading_preference_set, payment_ids: payment_ids, quantity: quantity, payment_period: payment_period, item_type: item_type)
|
|
176
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
177
|
+
@session.sign_request(method: :post, path: '/v5/p2p/item/create', body: params)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Release the assets held for a P2P order after payment is confirmed.
|
|
181
|
+
#
|
|
182
|
+
# POST /v5/p2p/order/finish
|
|
183
|
+
#
|
|
184
|
+
# @param order_id [String] Order ID
|
|
185
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
186
|
+
def release_assets(order_id:, **kwargs)
|
|
187
|
+
params = kwargs.merge(order_id: order_id)
|
|
188
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
189
|
+
@session.sign_request(method: :post, path: '/v5/p2p/order/finish', body: params)
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Cancel/remove an existing P2P advertisement.
|
|
193
|
+
#
|
|
194
|
+
# POST /v5/p2p/item/cancel
|
|
195
|
+
#
|
|
196
|
+
# @param item_id [String] Advertisement ID
|
|
197
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
198
|
+
def remove_ad(item_id:, **kwargs)
|
|
199
|
+
params = kwargs.merge(item_id: item_id)
|
|
200
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
201
|
+
@session.sign_request(method: :post, path: '/v5/p2p/item/cancel', body: params)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# Send a chat message in a P2P order conversation.
|
|
205
|
+
#
|
|
206
|
+
# POST /v5/p2p/order/message/send
|
|
207
|
+
#
|
|
208
|
+
# @param message [String] Message content
|
|
209
|
+
# @param content_type [String] Message content type
|
|
210
|
+
# @param order_id [String] Order ID
|
|
211
|
+
# @param msg_uuid [String] Message UUID
|
|
212
|
+
# @option kwargs [String] :file_name File name when sending a file
|
|
213
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
214
|
+
def send_chat_message(message:, content_type:, order_id:, msg_uuid:, **kwargs)
|
|
215
|
+
params = kwargs.merge(message: message, content_type: content_type, order_id: order_id, msg_uuid: msg_uuid)
|
|
216
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
217
|
+
@session.sign_request(method: :post, path: '/v5/p2p/order/message/send', body: params)
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
# Update or relist an existing P2P advertisement.
|
|
221
|
+
#
|
|
222
|
+
# POST /v5/p2p/item/update
|
|
223
|
+
#
|
|
224
|
+
# @param id [String] Advertisement ID
|
|
225
|
+
# @param price_type [String] Price type: 0 fixed, 1 floating
|
|
226
|
+
# @param premium [String] Premium value
|
|
227
|
+
# @param price [String] Ad price
|
|
228
|
+
# @param min_amount [String] Minimum order amount
|
|
229
|
+
# @param max_amount [String] Maximum order amount
|
|
230
|
+
# @param remark [String] Ad remark
|
|
231
|
+
# @param trading_preference_set [Hash] Trading preference settings
|
|
232
|
+
# @param payment_ids [Array] Payment method IDs
|
|
233
|
+
# @param action_type [String] Action type: MODIFY or ACTIVE
|
|
234
|
+
# @param quantity [String] Ad quantity
|
|
235
|
+
# @param payment_period [String] Payment period in minutes
|
|
236
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
237
|
+
def update_ad(id:, price_type:, premium:, price:, min_amount:, max_amount:, remark:, trading_preference_set:, payment_ids:, action_type:, quantity:, payment_period:, **kwargs)
|
|
238
|
+
params = kwargs.merge(id: id, price_type: price_type, premium: premium, price: price, min_amount: min_amount, max_amount: max_amount, remark: remark, trading_preference_set: trading_preference_set, payment_ids: payment_ids, action_type: action_type, quantity: quantity, payment_period: payment_period)
|
|
239
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
240
|
+
@session.sign_request(method: :post, path: '/v5/p2p/item/update', body: params)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
# Upload a file for use in a P2P order chat.
|
|
244
|
+
#
|
|
245
|
+
# POST /v5/p2p/oss/upload_file
|
|
246
|
+
#
|
|
247
|
+
# @param upload_file [String] File to upload
|
|
248
|
+
# @return [Hash] Bybit V5 ApiResponse envelope (retCode / retMsg / result / retExtInfo / time).
|
|
249
|
+
def upload_chat_file(upload_file:, **kwargs)
|
|
250
|
+
params = kwargs.merge(upload_file: upload_file)
|
|
251
|
+
params = Bybit::Utils::WireKeys.camelize(params)
|
|
252
|
+
@session.sign_request(method: :post, path: '/v5/p2p/oss/upload_file', body: params)
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
end
|