ccxt 4.2.85 → 4.2.87
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.
- package/README.md +5 -5
- package/dist/ccxt.browser.js +1132 -432
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ascendex.js +11 -1
- package/dist/cjs/src/binance.js +14 -1
- package/dist/cjs/src/bingx.js +71 -20
- package/dist/cjs/src/bitbank.js +19 -23
- package/dist/cjs/src/bitfinex.js +3 -0
- package/dist/cjs/src/bitfinex2.js +16 -1
- package/dist/cjs/src/bitflyer.js +19 -0
- package/dist/cjs/src/bitget.js +15 -1
- package/dist/cjs/src/bitopro.js +3 -0
- package/dist/cjs/src/bitrue.js +13 -7
- package/dist/cjs/src/bitvavo.js +3 -0
- package/dist/cjs/src/btcmarkets.js +1 -1
- package/dist/cjs/src/btcturk.js +2 -1
- package/dist/cjs/src/coinex.js +576 -302
- package/dist/cjs/src/currencycom.js +1 -1
- package/dist/cjs/src/delta.js +3 -1
- package/dist/cjs/src/digifinex.js +4 -2
- package/dist/cjs/src/exmo.js +11 -12
- package/dist/cjs/src/gate.js +5 -2
- package/dist/cjs/src/hitbtc.js +26 -2
- package/dist/cjs/src/htx.js +2 -2
- package/dist/cjs/src/huobijp.js +1 -1
- package/dist/cjs/src/hyperliquid.js +249 -12
- package/dist/cjs/src/idex.js +11 -12
- package/dist/cjs/src/krakenfutures.js +2 -6
- package/dist/cjs/src/lbank.js +3 -0
- package/dist/cjs/src/oceanex.js +1 -1
- package/dist/cjs/src/okcoin.js +3 -1
- package/dist/cjs/src/okx.js +24 -10
- package/dist/cjs/src/phemex.js +3 -1
- package/dist/cjs/src/pro/bitget.js +1 -0
- package/dist/cjs/src/pro/kucoin.js +11 -6
- package/dist/cjs/src/wazirx.js +1 -1
- package/dist/cjs/src/zonda.js +3 -0
- package/examples/js/benchmark.js +104 -0
- package/examples/ts/benchmark.ts +134 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/coinex.d.ts +232 -123
- package/js/src/ascendex.d.ts +5 -12
- package/js/src/ascendex.js +11 -1
- package/js/src/base/Exchange.d.ts +13 -13
- package/js/src/base/types.d.ts +11 -0
- package/js/src/binance.d.ts +4 -11
- package/js/src/binance.js +14 -1
- package/js/src/bingx.d.ts +5 -2
- package/js/src/bingx.js +71 -20
- package/js/src/bitbank.js +19 -23
- package/js/src/bitfinex.js +3 -0
- package/js/src/bitfinex2.d.ts +3 -17
- package/js/src/bitfinex2.js +16 -1
- package/js/src/bitflyer.d.ts +1 -0
- package/js/src/bitflyer.js +20 -1
- package/js/src/bitget.d.ts +5 -12
- package/js/src/bitget.js +15 -1
- package/js/src/bitopro.js +3 -0
- package/js/src/bitrue.d.ts +3 -17
- package/js/src/bitrue.js +13 -7
- package/js/src/bitvavo.js +3 -0
- package/js/src/btcmarkets.js +1 -1
- package/js/src/btcturk.js +2 -1
- package/js/src/coinex.d.ts +5 -12
- package/js/src/coinex.js +576 -302
- package/js/src/currencycom.js +1 -1
- package/js/src/delta.d.ts +5 -37
- package/js/src/delta.js +3 -1
- package/js/src/digifinex.d.ts +5 -13
- package/js/src/digifinex.js +4 -2
- package/js/src/exmo.d.ts +5 -37
- package/js/src/exmo.js +11 -12
- package/js/src/gate.d.ts +5 -33
- package/js/src/gate.js +5 -2
- package/js/src/hitbtc.d.ts +5 -12
- package/js/src/hitbtc.js +26 -2
- package/js/src/htx.js +2 -2
- package/js/src/huobijp.js +1 -1
- package/js/src/hyperliquid.d.ts +7 -4
- package/js/src/hyperliquid.js +249 -12
- package/js/src/idex.js +11 -12
- package/js/src/krakenfutures.js +2 -6
- package/js/src/kucoinfutures.d.ts +2 -2
- package/js/src/lbank.js +3 -0
- package/js/src/mexc.d.ts +3 -3
- package/js/src/oceanex.js +1 -1
- package/js/src/okcoin.js +3 -1
- package/js/src/okx.d.ts +5 -33
- package/js/src/okx.js +24 -10
- package/js/src/phemex.d.ts +3 -11
- package/js/src/phemex.js +3 -1
- package/js/src/pro/bitget.js +1 -0
- package/js/src/pro/kucoin.js +11 -6
- package/js/src/wazirx.js +1 -1
- package/js/src/zonda.js +3 -0
- package/package.json +3 -2
- package/skip-tests.json +7 -3
package/js/src/coinex.js
CHANGED
|
@@ -31,6 +31,7 @@ export default class coinex extends Exchange {
|
|
|
31
31
|
// 60 per 2 seconds => 30 per second => weight = 13.334
|
|
32
32
|
// 40 per 2 seconds => 20 per second => weight = 20
|
|
33
33
|
// 20 per 2 seconds => 10 per second => weight = 40
|
|
34
|
+
// v1 is per 2 seconds and v2 is per 1 second
|
|
34
35
|
'rateLimit': 2.5,
|
|
35
36
|
'pro': true,
|
|
36
37
|
'certified': true,
|
|
@@ -137,156 +138,279 @@ export default class coinex extends Exchange {
|
|
|
137
138
|
'perpetualPrivate': 'https://api.coinex.com/perpetual',
|
|
138
139
|
},
|
|
139
140
|
'www': 'https://www.coinex.com',
|
|
140
|
-
'doc': 'https://
|
|
141
|
+
'doc': 'https://docs.coinex.com/api/v2',
|
|
141
142
|
'fees': 'https://www.coinex.com/fees',
|
|
142
143
|
'referral': 'https://www.coinex.com/register?refer_code=yw5fz',
|
|
143
144
|
},
|
|
144
145
|
'api': {
|
|
145
|
-
'
|
|
146
|
-
'
|
|
147
|
-
'
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
'private': {
|
|
164
|
-
'get': {
|
|
165
|
-
'account/amm/balance': 40,
|
|
166
|
-
'account/investment/balance': 40,
|
|
167
|
-
'account/balance/history': 40,
|
|
168
|
-
'account/market/fee': 40,
|
|
169
|
-
'balance/coin/deposit': 40,
|
|
170
|
-
'balance/coin/withdraw': 40,
|
|
171
|
-
'balance/info': 40,
|
|
172
|
-
'balance/deposit/address/{coin_type}': 40,
|
|
173
|
-
'contract/transfer/history': 40,
|
|
174
|
-
'credit/info': 40,
|
|
175
|
-
'credit/balance': 40,
|
|
176
|
-
'investment/transfer/history': 40,
|
|
177
|
-
'margin/account': 1,
|
|
178
|
-
'margin/config': 1,
|
|
179
|
-
'margin/loan/history': 40,
|
|
180
|
-
'margin/transfer/history': 40,
|
|
181
|
-
'order/deals': 40,
|
|
182
|
-
'order/finished': 40,
|
|
183
|
-
'order/pending': 8,
|
|
184
|
-
'order/status': 8,
|
|
185
|
-
'order/status/batch': 8,
|
|
186
|
-
'order/user/deals': 40,
|
|
187
|
-
'order/stop/finished': 40,
|
|
188
|
-
'order/stop/pending': 8,
|
|
189
|
-
'order/user/trade/fee': 1,
|
|
190
|
-
'order/market/trade/info': 1,
|
|
191
|
-
'sub_account/balance': 1,
|
|
192
|
-
'sub_account/transfer/history': 40,
|
|
193
|
-
'sub_account/auth/api': 40,
|
|
194
|
-
'sub_account/auth/api/{user_auth_id}': 40,
|
|
195
|
-
},
|
|
196
|
-
'post': {
|
|
197
|
-
'balance/coin/withdraw': 40,
|
|
198
|
-
'contract/balance/transfer': 40,
|
|
199
|
-
'margin/flat': 40,
|
|
200
|
-
'margin/loan': 40,
|
|
201
|
-
'margin/transfer': 40,
|
|
202
|
-
'order/limit/batch': 40,
|
|
203
|
-
'order/ioc': 13.334,
|
|
204
|
-
'order/limit': 13.334,
|
|
205
|
-
'order/market': 13.334,
|
|
206
|
-
'order/modify': 13.334,
|
|
207
|
-
'order/stop/limit': 13.334,
|
|
208
|
-
'order/stop/market': 13.334,
|
|
209
|
-
'order/stop/modify': 13.334,
|
|
210
|
-
'sub_account/transfer': 40,
|
|
211
|
-
'sub_account/register': 1,
|
|
212
|
-
'sub_account/unfrozen': 40,
|
|
213
|
-
'sub_account/frozen': 40,
|
|
214
|
-
'sub_account/auth/api': 40,
|
|
146
|
+
'v1': {
|
|
147
|
+
'public': {
|
|
148
|
+
'get': {
|
|
149
|
+
'amm/market': 1,
|
|
150
|
+
'common/currency/rate': 1,
|
|
151
|
+
'common/asset/config': 1,
|
|
152
|
+
'common/maintain/info': 1,
|
|
153
|
+
'common/temp-maintain/info': 1,
|
|
154
|
+
'margin/market': 1,
|
|
155
|
+
'market/info': 1,
|
|
156
|
+
'market/list': 1,
|
|
157
|
+
'market/ticker': 1,
|
|
158
|
+
'market/ticker/all': 1,
|
|
159
|
+
'market/depth': 1,
|
|
160
|
+
'market/deals': 1,
|
|
161
|
+
'market/kline': 1,
|
|
162
|
+
'market/detail': 1,
|
|
163
|
+
},
|
|
215
164
|
},
|
|
216
|
-
'
|
|
217
|
-
'
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
165
|
+
'private': {
|
|
166
|
+
'get': {
|
|
167
|
+
'account/amm/balance': 40,
|
|
168
|
+
'account/investment/balance': 40,
|
|
169
|
+
'account/balance/history': 40,
|
|
170
|
+
'account/market/fee': 40,
|
|
171
|
+
'balance/coin/deposit': 40,
|
|
172
|
+
'balance/coin/withdraw': 40,
|
|
173
|
+
'balance/info': 40,
|
|
174
|
+
'balance/deposit/address/{coin_type}': 40,
|
|
175
|
+
'contract/transfer/history': 40,
|
|
176
|
+
'credit/info': 40,
|
|
177
|
+
'credit/balance': 40,
|
|
178
|
+
'investment/transfer/history': 40,
|
|
179
|
+
'margin/account': 1,
|
|
180
|
+
'margin/config': 1,
|
|
181
|
+
'margin/loan/history': 40,
|
|
182
|
+
'margin/transfer/history': 40,
|
|
183
|
+
'order/deals': 40,
|
|
184
|
+
'order/finished': 40,
|
|
185
|
+
'order/pending': 8,
|
|
186
|
+
'order/status': 8,
|
|
187
|
+
'order/status/batch': 8,
|
|
188
|
+
'order/user/deals': 40,
|
|
189
|
+
'order/stop/finished': 40,
|
|
190
|
+
'order/stop/pending': 8,
|
|
191
|
+
'order/user/trade/fee': 1,
|
|
192
|
+
'order/market/trade/info': 1,
|
|
193
|
+
'sub_account/balance': 1,
|
|
194
|
+
'sub_account/transfer/history': 40,
|
|
195
|
+
'sub_account/auth/api': 40,
|
|
196
|
+
'sub_account/auth/api/{user_auth_id}': 40,
|
|
197
|
+
},
|
|
198
|
+
'post': {
|
|
199
|
+
'balance/coin/withdraw': 40,
|
|
200
|
+
'contract/balance/transfer': 40,
|
|
201
|
+
'margin/flat': 40,
|
|
202
|
+
'margin/loan': 40,
|
|
203
|
+
'margin/transfer': 40,
|
|
204
|
+
'order/limit/batch': 40,
|
|
205
|
+
'order/ioc': 13.334,
|
|
206
|
+
'order/limit': 13.334,
|
|
207
|
+
'order/market': 13.334,
|
|
208
|
+
'order/modify': 13.334,
|
|
209
|
+
'order/stop/limit': 13.334,
|
|
210
|
+
'order/stop/market': 13.334,
|
|
211
|
+
'order/stop/modify': 13.334,
|
|
212
|
+
'sub_account/transfer': 40,
|
|
213
|
+
'sub_account/register': 1,
|
|
214
|
+
'sub_account/unfrozen': 40,
|
|
215
|
+
'sub_account/frozen': 40,
|
|
216
|
+
'sub_account/auth/api': 40,
|
|
217
|
+
},
|
|
218
|
+
'put': {
|
|
219
|
+
'balance/deposit/address/{coin_type}': 40,
|
|
220
|
+
'sub_account/unfrozen': 40,
|
|
221
|
+
'sub_account/frozen': 40,
|
|
222
|
+
'sub_account/auth/api/{user_auth_id}': 40,
|
|
223
|
+
'v1/account/settings': 40,
|
|
224
|
+
},
|
|
225
|
+
'delete': {
|
|
226
|
+
'balance/coin/withdraw': 40,
|
|
227
|
+
'order/pending/batch': 40,
|
|
228
|
+
'order/pending': 13.334,
|
|
229
|
+
'order/stop/pending': 40,
|
|
230
|
+
'order/stop/pending/{id}': 13.334,
|
|
231
|
+
'order/pending/by_client_id': 40,
|
|
232
|
+
'order/stop/pending/by_client_id': 40,
|
|
233
|
+
'sub_account/auth/api/{user_auth_id}': 40,
|
|
234
|
+
'sub_account/authorize/{id}': 40,
|
|
235
|
+
},
|
|
222
236
|
},
|
|
223
|
-
'
|
|
224
|
-
'
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
237
|
+
'perpetualPublic': {
|
|
238
|
+
'get': {
|
|
239
|
+
'ping': 1,
|
|
240
|
+
'time': 1,
|
|
241
|
+
'market/list': 1,
|
|
242
|
+
'market/limit_config': 1,
|
|
243
|
+
'market/ticker': 1,
|
|
244
|
+
'market/ticker/all': 1,
|
|
245
|
+
'market/depth': 1,
|
|
246
|
+
'market/deals': 1,
|
|
247
|
+
'market/funding_history': 1,
|
|
248
|
+
'market/kline': 1,
|
|
249
|
+
},
|
|
233
250
|
},
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
251
|
+
'perpetualPrivate': {
|
|
252
|
+
'get': {
|
|
253
|
+
'market/user_deals': 1,
|
|
254
|
+
'asset/query': 40,
|
|
255
|
+
'order/pending': 8,
|
|
256
|
+
'order/finished': 40,
|
|
257
|
+
'order/stop_finished': 40,
|
|
258
|
+
'order/stop_pending': 8,
|
|
259
|
+
'order/status': 8,
|
|
260
|
+
'order/stop_status': 8,
|
|
261
|
+
'position/finished': 40,
|
|
262
|
+
'position/pending': 40,
|
|
263
|
+
'position/funding': 40,
|
|
264
|
+
'position/adl_history': 40,
|
|
265
|
+
'market/preference': 40,
|
|
266
|
+
'position/margin_history': 40,
|
|
267
|
+
'position/settle_history': 40,
|
|
268
|
+
},
|
|
269
|
+
'post': {
|
|
270
|
+
'market/adjust_leverage': 1,
|
|
271
|
+
'market/position_expect': 1,
|
|
272
|
+
'order/put_limit': 20,
|
|
273
|
+
'order/put_market': 20,
|
|
274
|
+
'order/put_stop_limit': 20,
|
|
275
|
+
'order/put_stop_market': 20,
|
|
276
|
+
'order/modify': 20,
|
|
277
|
+
'order/modify_stop': 20,
|
|
278
|
+
'order/cancel': 20,
|
|
279
|
+
'order/cancel_all': 40,
|
|
280
|
+
'order/cancel_batch': 40,
|
|
281
|
+
'order/cancel_stop': 20,
|
|
282
|
+
'order/cancel_stop_all': 40,
|
|
283
|
+
'order/close_limit': 20,
|
|
284
|
+
'order/close_market': 20,
|
|
285
|
+
'position/adjust_margin': 20,
|
|
286
|
+
'position/stop_loss': 20,
|
|
287
|
+
'position/take_profit': 20,
|
|
288
|
+
'position/market_close': 20,
|
|
289
|
+
'order/cancel/by_client_id': 20,
|
|
290
|
+
'order/cancel_stop/by_client_id': 20,
|
|
291
|
+
'market/preference': 20,
|
|
292
|
+
},
|
|
247
293
|
},
|
|
248
294
|
},
|
|
249
|
-
'
|
|
250
|
-
'
|
|
251
|
-
'
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
295
|
+
'v2': {
|
|
296
|
+
'public': {
|
|
297
|
+
'get': {
|
|
298
|
+
'maintain-info': 1,
|
|
299
|
+
'ping': 1,
|
|
300
|
+
'time': 1,
|
|
301
|
+
'spot/market': 1,
|
|
302
|
+
'spot/ticker': 1,
|
|
303
|
+
'spot/depth': 1,
|
|
304
|
+
'spot/deals': 1,
|
|
305
|
+
'spot/kline': 1,
|
|
306
|
+
'spot/index': 1,
|
|
307
|
+
'futures/market': 1,
|
|
308
|
+
'futures/ticker': 1,
|
|
309
|
+
'futures/depth': 1,
|
|
310
|
+
'futures/deals': 1,
|
|
311
|
+
'futures/kline': 1,
|
|
312
|
+
'futures/index': 1,
|
|
313
|
+
'futures/funding-rate': 1,
|
|
314
|
+
'futures/funding-rate-history': 1,
|
|
315
|
+
'futures/position-level': 1,
|
|
316
|
+
'futures/liquidation-history': 1,
|
|
317
|
+
'futures/basis-history': 1,
|
|
318
|
+
},
|
|
266
319
|
},
|
|
267
|
-
'
|
|
268
|
-
'
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
320
|
+
'private': {
|
|
321
|
+
'get': {
|
|
322
|
+
'account/subs': 1,
|
|
323
|
+
'account/subs/api-detail': 40,
|
|
324
|
+
'account/subs/info': 1,
|
|
325
|
+
'account/subs/api': 40,
|
|
326
|
+
'account/subs/transfer-history': 40,
|
|
327
|
+
'account/subs/spot-balance': 1,
|
|
328
|
+
'account/trade-fee-rate': 40,
|
|
329
|
+
'assets/spot/balance': 40,
|
|
330
|
+
'assets/futures/balance': 40,
|
|
331
|
+
'assets/margin/balance': 1,
|
|
332
|
+
'assets/financial/balance': 40,
|
|
333
|
+
'assets/amm/liquidity': 40,
|
|
334
|
+
'assets/credit/info': 40,
|
|
335
|
+
'assets/margin/borrow-history': 40,
|
|
336
|
+
'assets/margin/interest-limit': 1,
|
|
337
|
+
'assets/deposit-address': 40,
|
|
338
|
+
'assets/deposit-history': 40,
|
|
339
|
+
'assets/withdraw': 40,
|
|
340
|
+
'assets/deposit-withdraw-config': 1,
|
|
341
|
+
'assets/transfer-history': 40,
|
|
342
|
+
'spot/order-status': 8,
|
|
343
|
+
'spot/batch-order-status': 8,
|
|
344
|
+
'spot/pending-order': 8,
|
|
345
|
+
'spot/finished-order': 40,
|
|
346
|
+
'spot/pending-stop-order': 8,
|
|
347
|
+
'spot/finished-stop-order': 40,
|
|
348
|
+
'spot/user-deals': 40,
|
|
349
|
+
'spot/order-deals': 40,
|
|
350
|
+
'futures/order-status': 8,
|
|
351
|
+
'futures/batch-order-status': 1,
|
|
352
|
+
'futures/pending-order': 8,
|
|
353
|
+
'futures/finished-order': 40,
|
|
354
|
+
'futures/pending-stop-order': 8,
|
|
355
|
+
'futures/finished-stop-order': 40,
|
|
356
|
+
'futures/user-deals': 1,
|
|
357
|
+
'futures/order-deals': 1,
|
|
358
|
+
'futures/pending-position': 40,
|
|
359
|
+
'futures/finished-position': 1,
|
|
360
|
+
'futures/position-margin-history': 1,
|
|
361
|
+
'futures/position-funding-history': 40,
|
|
362
|
+
'futures/position-adl-history': 1,
|
|
363
|
+
'futures/position-settle-history': 1,
|
|
364
|
+
},
|
|
365
|
+
'post': {
|
|
366
|
+
'account/subs': 40,
|
|
367
|
+
'account/subs/frozen': 40,
|
|
368
|
+
'account/subs/unfrozen': 40,
|
|
369
|
+
'account/subs/api': 40,
|
|
370
|
+
'account/subs/edit-api': 40,
|
|
371
|
+
'account/subs/delete-api': 40,
|
|
372
|
+
'account/subs/transfer': 40,
|
|
373
|
+
'account/settings': 40,
|
|
374
|
+
'assets/margin/borrow': 40,
|
|
375
|
+
'assets/margin/repay': 40,
|
|
376
|
+
'assets/renewal-deposit-address': 40,
|
|
377
|
+
'assets/withdraw': 40,
|
|
378
|
+
'assets/cancel-withdraw': 40,
|
|
379
|
+
'assets/transfer': 40,
|
|
380
|
+
'assets/amm/add-liquidity': 1,
|
|
381
|
+
'assets/amm/remove-liquidity': 1,
|
|
382
|
+
'spot/order': 13.334,
|
|
383
|
+
'spot/stop-order': 13.334,
|
|
384
|
+
'spot/batch-order': 40,
|
|
385
|
+
'spot/batch-stop-order': 1,
|
|
386
|
+
'spot/modify-order': 13.334,
|
|
387
|
+
'spot/modify-stop-order': 13.334,
|
|
388
|
+
'spot/cancel-all-order': 1,
|
|
389
|
+
'spot/cancel-order': 6.667,
|
|
390
|
+
'spot/cancel-stop-order': 6.667,
|
|
391
|
+
'spot/cancel-batch-order': 10,
|
|
392
|
+
'spot/cancel-batch-stop-order': 10,
|
|
393
|
+
'spot/cancel-order-by-client-id': 1,
|
|
394
|
+
'spot/cancel-stop-order-by-client-id': 1,
|
|
395
|
+
'futures/order': 20,
|
|
396
|
+
'futures/stop-order': 20,
|
|
397
|
+
'futures/batch-order': 1,
|
|
398
|
+
'futures/batch-stop-order': 1,
|
|
399
|
+
'futures/modify-order': 20,
|
|
400
|
+
'futures/modify-stop-order': 20,
|
|
401
|
+
'futures/cancel-all-order': 1,
|
|
402
|
+
'futures/cancel-order': 10,
|
|
403
|
+
'futures/cancel-stop-order': 10,
|
|
404
|
+
'futures/cancel-batch-order': 20,
|
|
405
|
+
'futures/cancel-batch-stop-order': 20,
|
|
406
|
+
'futures/cancel-order-by-client-id': 1,
|
|
407
|
+
'futures/cancel-stop-order-by-client-id': 1,
|
|
408
|
+
'futures/close-position': 20,
|
|
409
|
+
'futures/adjust-position-margin': 20,
|
|
410
|
+
'futures/adjust-position-leverage': 20,
|
|
411
|
+
'futures/set-position-stop-loss': 20,
|
|
412
|
+
'futures/set-position-take-profit': 20,
|
|
413
|
+
},
|
|
290
414
|
},
|
|
291
415
|
},
|
|
292
416
|
},
|
|
@@ -357,7 +481,7 @@ export default class coinex extends Exchange {
|
|
|
357
481
|
});
|
|
358
482
|
}
|
|
359
483
|
async fetchCurrencies(params = {}) {
|
|
360
|
-
const response = await this.
|
|
484
|
+
const response = await this.v1PublicGetCommonAssetConfig(params);
|
|
361
485
|
// {
|
|
362
486
|
// "code": 0,
|
|
363
487
|
// "data": {
|
|
@@ -505,7 +629,7 @@ export default class coinex extends Exchange {
|
|
|
505
629
|
return this.arrayConcat(spotMarkets, swapMarkets);
|
|
506
630
|
}
|
|
507
631
|
async fetchSpotMarkets(params) {
|
|
508
|
-
const response = await this.
|
|
632
|
+
const response = await this.v1PublicGetMarketInfo(params);
|
|
509
633
|
//
|
|
510
634
|
// {
|
|
511
635
|
// "code": 0,
|
|
@@ -594,7 +718,7 @@ export default class coinex extends Exchange {
|
|
|
594
718
|
return result;
|
|
595
719
|
}
|
|
596
720
|
async fetchContractMarkets(params) {
|
|
597
|
-
const response = await this.
|
|
721
|
+
const response = await this.v1PerpetualPublicGetMarketList(params);
|
|
598
722
|
//
|
|
599
723
|
// {
|
|
600
724
|
// "code": 0,
|
|
@@ -776,10 +900,10 @@ export default class coinex extends Exchange {
|
|
|
776
900
|
};
|
|
777
901
|
let response = undefined;
|
|
778
902
|
if (market['swap']) {
|
|
779
|
-
response = await this.
|
|
903
|
+
response = await this.v1PerpetualPublicGetMarketTicker(this.extend(request, params));
|
|
780
904
|
}
|
|
781
905
|
else {
|
|
782
|
-
response = await this.
|
|
906
|
+
response = await this.v1PublicGetMarketTicker(this.extend(request, params));
|
|
783
907
|
}
|
|
784
908
|
//
|
|
785
909
|
// Spot
|
|
@@ -858,10 +982,10 @@ export default class coinex extends Exchange {
|
|
|
858
982
|
const [marketType, query] = this.handleMarketTypeAndParams('fetchTickers', market, params);
|
|
859
983
|
let response = undefined;
|
|
860
984
|
if (marketType === 'swap') {
|
|
861
|
-
response = await this.
|
|
985
|
+
response = await this.v1PerpetualPublicGetMarketTickerAll(query);
|
|
862
986
|
}
|
|
863
987
|
else {
|
|
864
|
-
response = await this.
|
|
988
|
+
response = await this.v1PublicGetMarketTickerAll();
|
|
865
989
|
}
|
|
866
990
|
//
|
|
867
991
|
// Spot
|
|
@@ -944,19 +1068,22 @@ export default class coinex extends Exchange {
|
|
|
944
1068
|
* @method
|
|
945
1069
|
* @name coinex#fetchTime
|
|
946
1070
|
* @description fetches the current integer timestamp in milliseconds from the exchange server
|
|
947
|
-
* @see https://
|
|
1071
|
+
* @see https://docs.coinex.com/api/v2/common/http/time
|
|
948
1072
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
949
1073
|
* @returns {int} the current integer timestamp in milliseconds from the exchange server
|
|
950
1074
|
*/
|
|
951
|
-
const response = await this.
|
|
1075
|
+
const response = await this.v2PublicGetTime(params);
|
|
952
1076
|
//
|
|
953
1077
|
// {
|
|
954
|
-
// "code":
|
|
955
|
-
// "data":
|
|
1078
|
+
// "code": 0,
|
|
1079
|
+
// "data": {
|
|
1080
|
+
// "timestamp": 1711699867777
|
|
1081
|
+
// },
|
|
956
1082
|
// "message": "OK"
|
|
957
1083
|
// }
|
|
958
1084
|
//
|
|
959
|
-
|
|
1085
|
+
const data = this.safeDict(response, 'data', {});
|
|
1086
|
+
return this.safeInteger(data, 'timestamp');
|
|
960
1087
|
}
|
|
961
1088
|
async fetchOrderBook(symbol, limit = 20, params = {}) {
|
|
962
1089
|
/**
|
|
@@ -982,10 +1109,10 @@ export default class coinex extends Exchange {
|
|
|
982
1109
|
};
|
|
983
1110
|
let response = undefined;
|
|
984
1111
|
if (market['swap']) {
|
|
985
|
-
response = await this.
|
|
1112
|
+
response = await this.v1PerpetualPublicGetMarketDepth(this.extend(request, params));
|
|
986
1113
|
}
|
|
987
1114
|
else {
|
|
988
|
-
response = await this.
|
|
1115
|
+
response = await this.v1PublicGetMarketDepth(this.extend(request, params));
|
|
989
1116
|
}
|
|
990
1117
|
//
|
|
991
1118
|
// Spot
|
|
@@ -1186,10 +1313,10 @@ export default class coinex extends Exchange {
|
|
|
1186
1313
|
}
|
|
1187
1314
|
let response = undefined;
|
|
1188
1315
|
if (market['swap']) {
|
|
1189
|
-
response = await this.
|
|
1316
|
+
response = await this.v1PerpetualPublicGetMarketDeals(this.extend(request, params));
|
|
1190
1317
|
}
|
|
1191
1318
|
else {
|
|
1192
|
-
response = await this.
|
|
1319
|
+
response = await this.v1PublicGetMarketDeals(this.extend(request, params));
|
|
1193
1320
|
}
|
|
1194
1321
|
//
|
|
1195
1322
|
// Spot and Swap
|
|
@@ -1216,7 +1343,8 @@ export default class coinex extends Exchange {
|
|
|
1216
1343
|
* @method
|
|
1217
1344
|
* @name coinex#fetchTradingFee
|
|
1218
1345
|
* @description fetch the trading fees for a market
|
|
1219
|
-
* @see https://
|
|
1346
|
+
* @see https://docs.coinex.com/api/v2/spot/market/http/list-market
|
|
1347
|
+
* @see https://docs.coinex.com/api/v2/futures/market/http/list-market
|
|
1220
1348
|
* @param {string} symbol unified market symbol
|
|
1221
1349
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1222
1350
|
* @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
@@ -1226,67 +1354,132 @@ export default class coinex extends Exchange {
|
|
|
1226
1354
|
const request = {
|
|
1227
1355
|
'market': market['id'],
|
|
1228
1356
|
};
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1357
|
+
let response = undefined;
|
|
1358
|
+
if (market['spot']) {
|
|
1359
|
+
response = await this.v2PublicGetSpotMarket(this.extend(request, params));
|
|
1360
|
+
//
|
|
1361
|
+
// {
|
|
1362
|
+
// "code": 0,
|
|
1363
|
+
// "data": [
|
|
1364
|
+
// {
|
|
1365
|
+
// "base_ccy": "BTC",
|
|
1366
|
+
// "base_ccy_precision": 8,
|
|
1367
|
+
// "is_amm_available": false,
|
|
1368
|
+
// "is_margin_available": true,
|
|
1369
|
+
// "maker_fee_rate": "0.002",
|
|
1370
|
+
// "market": "BTCUSDT",
|
|
1371
|
+
// "min_amount": "0.0001",
|
|
1372
|
+
// "quote_ccy": "USDT",
|
|
1373
|
+
// "quote_ccy_precision": 2,
|
|
1374
|
+
// "taker_fee_rate": "0.002"
|
|
1375
|
+
// }
|
|
1376
|
+
// ],
|
|
1377
|
+
// "message": "OK"
|
|
1378
|
+
// }
|
|
1379
|
+
//
|
|
1380
|
+
}
|
|
1381
|
+
else {
|
|
1382
|
+
response = await this.v2PublicGetFuturesMarket(this.extend(request, params));
|
|
1383
|
+
//
|
|
1384
|
+
// {
|
|
1385
|
+
// "code": 0,
|
|
1386
|
+
// "data": [
|
|
1387
|
+
// {
|
|
1388
|
+
// "base_ccy": "BTC",
|
|
1389
|
+
// "base_ccy_precision": 8,
|
|
1390
|
+
// "contract_type": "linear",
|
|
1391
|
+
// "leverage": ["1","2","3","5","8","10","15","20","30","50","100"],
|
|
1392
|
+
// "maker_fee_rate": "0",
|
|
1393
|
+
// "market": "BTCUSDT",
|
|
1394
|
+
// "min_amount": "0.0001",
|
|
1395
|
+
// "open_interest_volume": "185.7498",
|
|
1396
|
+
// "quote_ccy": "USDT",
|
|
1397
|
+
// "quote_ccy_precision": 2,
|
|
1398
|
+
// "taker_fee_rate": "0"
|
|
1399
|
+
// }
|
|
1400
|
+
// ],
|
|
1401
|
+
// "message": "OK"
|
|
1402
|
+
// }
|
|
1403
|
+
//
|
|
1404
|
+
}
|
|
1405
|
+
const data = this.safeList(response, 'data', []);
|
|
1406
|
+
const result = this.safeDict(data, 0, {});
|
|
1407
|
+
return this.parseTradingFee(result, market);
|
|
1248
1408
|
}
|
|
1249
1409
|
async fetchTradingFees(params = {}) {
|
|
1250
1410
|
/**
|
|
1251
1411
|
* @method
|
|
1252
1412
|
* @name coinex#fetchTradingFees
|
|
1253
1413
|
* @description fetch the trading fees for multiple markets
|
|
1254
|
-
* @see https://
|
|
1414
|
+
* @see https://docs.coinex.com/api/v2/spot/market/http/list-market
|
|
1415
|
+
* @see https://docs.coinex.com/api/v2/futures/market/http/list-market
|
|
1255
1416
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1256
1417
|
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
|
1257
1418
|
*/
|
|
1258
1419
|
await this.loadMarkets();
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1420
|
+
let type = undefined;
|
|
1421
|
+
[type, params] = this.handleMarketTypeAndParams('fetchTradingFees', undefined, params);
|
|
1422
|
+
let response = undefined;
|
|
1423
|
+
if (type === 'swap') {
|
|
1424
|
+
response = await this.v2PublicGetFuturesMarket(params);
|
|
1425
|
+
//
|
|
1426
|
+
// {
|
|
1427
|
+
// "code": 0,
|
|
1428
|
+
// "data": [
|
|
1429
|
+
// {
|
|
1430
|
+
// "base_ccy": "BTC",
|
|
1431
|
+
// "base_ccy_precision": 8,
|
|
1432
|
+
// "contract_type": "linear",
|
|
1433
|
+
// "leverage": ["1","2","3","5","8","10","15","20","30","50","100"],
|
|
1434
|
+
// "maker_fee_rate": "0",
|
|
1435
|
+
// "market": "BTCUSDT",
|
|
1436
|
+
// "min_amount": "0.0001",
|
|
1437
|
+
// "open_interest_volume": "185.7498",
|
|
1438
|
+
// "quote_ccy": "USDT",
|
|
1439
|
+
// "quote_ccy_precision": 2,
|
|
1440
|
+
// "taker_fee_rate": "0"
|
|
1441
|
+
// }
|
|
1442
|
+
// ],
|
|
1443
|
+
// "message": "OK"
|
|
1444
|
+
// }
|
|
1445
|
+
//
|
|
1446
|
+
}
|
|
1447
|
+
else {
|
|
1448
|
+
response = await this.v2PublicGetSpotMarket(params);
|
|
1449
|
+
//
|
|
1450
|
+
// {
|
|
1451
|
+
// "code": 0,
|
|
1452
|
+
// "data": [
|
|
1453
|
+
// {
|
|
1454
|
+
// "base_ccy": "BTC",
|
|
1455
|
+
// "base_ccy_precision": 8,
|
|
1456
|
+
// "is_amm_available": false,
|
|
1457
|
+
// "is_margin_available": true,
|
|
1458
|
+
// "maker_fee_rate": "0.002",
|
|
1459
|
+
// "market": "BTCUSDT",
|
|
1460
|
+
// "min_amount": "0.0001",
|
|
1461
|
+
// "quote_ccy": "USDT",
|
|
1462
|
+
// "quote_ccy_precision": 2,
|
|
1463
|
+
// "taker_fee_rate": "0.002"
|
|
1464
|
+
// },
|
|
1465
|
+
// ],
|
|
1466
|
+
// "message": "OK"
|
|
1467
|
+
// }
|
|
1468
|
+
//
|
|
1469
|
+
}
|
|
1470
|
+
const data = this.safeList(response, 'data', []);
|
|
1279
1471
|
const result = {};
|
|
1280
|
-
for (let i = 0; i <
|
|
1281
|
-
const
|
|
1282
|
-
const
|
|
1283
|
-
const
|
|
1284
|
-
|
|
1472
|
+
for (let i = 0; i < data.length; i++) {
|
|
1473
|
+
const entry = data[i];
|
|
1474
|
+
const marketId = this.safeString(entry, 'market');
|
|
1475
|
+
const market = this.safeMarket(marketId, undefined, undefined, type);
|
|
1476
|
+
const symbol = market['symbol'];
|
|
1477
|
+
result[symbol] = this.parseTradingFee(entry, market);
|
|
1285
1478
|
}
|
|
1286
1479
|
return result;
|
|
1287
1480
|
}
|
|
1288
1481
|
parseTradingFee(fee, market = undefined) {
|
|
1289
|
-
const marketId = this.safeValue(fee, '
|
|
1482
|
+
const marketId = this.safeValue(fee, 'market');
|
|
1290
1483
|
const symbol = this.safeSymbol(marketId, market);
|
|
1291
1484
|
return {
|
|
1292
1485
|
'info': fee,
|
|
@@ -1344,10 +1537,10 @@ export default class coinex extends Exchange {
|
|
|
1344
1537
|
}
|
|
1345
1538
|
let response = undefined;
|
|
1346
1539
|
if (market['swap']) {
|
|
1347
|
-
response = await this.
|
|
1540
|
+
response = await this.v1PerpetualPublicGetMarketKline(this.extend(request, params));
|
|
1348
1541
|
}
|
|
1349
1542
|
else {
|
|
1350
|
-
response = await this.
|
|
1543
|
+
response = await this.v1PublicGetMarketKline(this.extend(request, params));
|
|
1351
1544
|
}
|
|
1352
1545
|
//
|
|
1353
1546
|
// Spot
|
|
@@ -1393,7 +1586,7 @@ export default class coinex extends Exchange {
|
|
|
1393
1586
|
const request = {
|
|
1394
1587
|
'market': marketId,
|
|
1395
1588
|
};
|
|
1396
|
-
const response = await this.
|
|
1589
|
+
const response = await this.v1PrivateGetMarginAccount(this.extend(request, params));
|
|
1397
1590
|
//
|
|
1398
1591
|
// {
|
|
1399
1592
|
// "code": 0,
|
|
@@ -1460,7 +1653,7 @@ export default class coinex extends Exchange {
|
|
|
1460
1653
|
}
|
|
1461
1654
|
async fetchSpotBalance(params = {}) {
|
|
1462
1655
|
await this.loadMarkets();
|
|
1463
|
-
const response = await this.
|
|
1656
|
+
const response = await this.v1PrivateGetBalanceInfo(params);
|
|
1464
1657
|
//
|
|
1465
1658
|
// {
|
|
1466
1659
|
// "code": 0,
|
|
@@ -1497,7 +1690,7 @@ export default class coinex extends Exchange {
|
|
|
1497
1690
|
}
|
|
1498
1691
|
async fetchSwapBalance(params = {}) {
|
|
1499
1692
|
await this.loadMarkets();
|
|
1500
|
-
const response = await this.
|
|
1693
|
+
const response = await this.v1PerpetualPrivateGetAssetQuery(params);
|
|
1501
1694
|
//
|
|
1502
1695
|
// {
|
|
1503
1696
|
// "code": 0,
|
|
@@ -1531,7 +1724,7 @@ export default class coinex extends Exchange {
|
|
|
1531
1724
|
}
|
|
1532
1725
|
async fetchFinancialBalance(params = {}) {
|
|
1533
1726
|
await this.loadMarkets();
|
|
1534
|
-
const response = await this.
|
|
1727
|
+
const response = await this.v1PrivateGetAccountInvestmentBalance(params);
|
|
1535
1728
|
//
|
|
1536
1729
|
// {
|
|
1537
1730
|
// "code": 0,
|
|
@@ -2171,53 +2364,53 @@ export default class coinex extends Exchange {
|
|
|
2171
2364
|
if (market['spot']) {
|
|
2172
2365
|
if (isTriggerOrder) {
|
|
2173
2366
|
if (type === 'limit') {
|
|
2174
|
-
response = await this.
|
|
2367
|
+
response = await this.v1PrivatePostOrderStopLimit(request);
|
|
2175
2368
|
}
|
|
2176
2369
|
else {
|
|
2177
|
-
response = await this.
|
|
2370
|
+
response = await this.v1PrivatePostOrderStopMarket(request);
|
|
2178
2371
|
}
|
|
2179
2372
|
}
|
|
2180
2373
|
else {
|
|
2181
2374
|
if (type === 'limit') {
|
|
2182
|
-
response = await this.
|
|
2375
|
+
response = await this.v1PrivatePostOrderLimit(request);
|
|
2183
2376
|
}
|
|
2184
2377
|
else {
|
|
2185
|
-
response = await this.
|
|
2378
|
+
response = await this.v1PrivatePostOrderMarket(request);
|
|
2186
2379
|
}
|
|
2187
2380
|
}
|
|
2188
2381
|
}
|
|
2189
2382
|
else {
|
|
2190
2383
|
if (isTriggerOrder) {
|
|
2191
2384
|
if (type === 'limit') {
|
|
2192
|
-
response = await this.
|
|
2385
|
+
response = await this.v1PerpetualPrivatePostOrderPutStopLimit(request);
|
|
2193
2386
|
}
|
|
2194
2387
|
else {
|
|
2195
|
-
response = await this.
|
|
2388
|
+
response = await this.v1PerpetualPrivatePostOrderPutStopMarket(request);
|
|
2196
2389
|
}
|
|
2197
2390
|
}
|
|
2198
2391
|
else if (isStopLossOrTakeProfitTrigger) {
|
|
2199
2392
|
if (isStopLossTriggerOrder) {
|
|
2200
|
-
response = await this.
|
|
2393
|
+
response = await this.v1PerpetualPrivatePostPositionStopLoss(request);
|
|
2201
2394
|
}
|
|
2202
2395
|
else if (isTakeProfitTriggerOrder) {
|
|
2203
|
-
response = await this.
|
|
2396
|
+
response = await this.v1PerpetualPrivatePostPositionTakeProfit(request);
|
|
2204
2397
|
}
|
|
2205
2398
|
}
|
|
2206
2399
|
else {
|
|
2207
2400
|
if (reduceOnly) {
|
|
2208
2401
|
if (type === 'limit') {
|
|
2209
|
-
response = await this.
|
|
2402
|
+
response = await this.v1PerpetualPrivatePostOrderCloseLimit(request);
|
|
2210
2403
|
}
|
|
2211
2404
|
else {
|
|
2212
|
-
response = await this.
|
|
2405
|
+
response = await this.v1PerpetualPrivatePostOrderCloseMarket(request);
|
|
2213
2406
|
}
|
|
2214
2407
|
}
|
|
2215
2408
|
else {
|
|
2216
2409
|
if (type === 'limit') {
|
|
2217
|
-
response = await this.
|
|
2410
|
+
response = await this.v1PerpetualPrivatePostOrderPutLimit(request);
|
|
2218
2411
|
}
|
|
2219
2412
|
else {
|
|
2220
|
-
response = await this.
|
|
2413
|
+
response = await this.v1PerpetualPrivatePostOrderPutMarket(request);
|
|
2221
2414
|
}
|
|
2222
2415
|
}
|
|
2223
2416
|
}
|
|
@@ -2345,7 +2538,7 @@ export default class coinex extends Exchange {
|
|
|
2345
2538
|
'market': market['id'],
|
|
2346
2539
|
'batch_orders': this.json(ordersRequests),
|
|
2347
2540
|
};
|
|
2348
|
-
const response = await this.
|
|
2541
|
+
const response = await this.v1PrivatePostOrderLimitBatch(request);
|
|
2349
2542
|
//
|
|
2350
2543
|
// {
|
|
2351
2544
|
// "code": 0,
|
|
@@ -2428,11 +2621,11 @@ export default class coinex extends Exchange {
|
|
|
2428
2621
|
let response = undefined;
|
|
2429
2622
|
if (market['spot']) {
|
|
2430
2623
|
request['batch_ids'] = idsString;
|
|
2431
|
-
response = await this.
|
|
2624
|
+
response = await this.v1PrivateDeleteOrderPendingBatch(this.extend(request, params));
|
|
2432
2625
|
}
|
|
2433
2626
|
else {
|
|
2434
2627
|
request['order_ids'] = idsString;
|
|
2435
|
-
response = await this.
|
|
2628
|
+
response = await this.v1PerpetualPrivatePostOrderCancelBatch(this.extend(request, params));
|
|
2436
2629
|
}
|
|
2437
2630
|
//
|
|
2438
2631
|
// spot
|
|
@@ -2569,7 +2762,7 @@ export default class coinex extends Exchange {
|
|
|
2569
2762
|
if (price !== undefined) {
|
|
2570
2763
|
request['price'] = this.priceToPrecision(symbol, price);
|
|
2571
2764
|
}
|
|
2572
|
-
const response = await this.
|
|
2765
|
+
const response = await this.v1PrivatePostOrderModify(this.extend(request, params));
|
|
2573
2766
|
//
|
|
2574
2767
|
// {
|
|
2575
2768
|
// "code": 0,
|
|
@@ -2650,18 +2843,18 @@ export default class coinex extends Exchange {
|
|
|
2650
2843
|
request['client_id'] = clientOrderId;
|
|
2651
2844
|
if (stop) {
|
|
2652
2845
|
if (swap) {
|
|
2653
|
-
response = await this.
|
|
2846
|
+
response = await this.v1PerpetualPrivatePostOrderCancelStopByClientId(this.extend(request, query));
|
|
2654
2847
|
}
|
|
2655
2848
|
else {
|
|
2656
|
-
response = await this.
|
|
2849
|
+
response = await this.v1PrivateDeleteOrderStopPendingByClientId(this.extend(request, query));
|
|
2657
2850
|
}
|
|
2658
2851
|
}
|
|
2659
2852
|
else {
|
|
2660
2853
|
if (swap) {
|
|
2661
|
-
response = await this.
|
|
2854
|
+
response = await this.v1PerpetualPrivatePostOrderCancelByClientId(this.extend(request, query));
|
|
2662
2855
|
}
|
|
2663
2856
|
else {
|
|
2664
|
-
response = await this.
|
|
2857
|
+
response = await this.v1PrivateDeleteOrderPendingByClientId(this.extend(request, query));
|
|
2665
2858
|
}
|
|
2666
2859
|
}
|
|
2667
2860
|
}
|
|
@@ -2670,18 +2863,18 @@ export default class coinex extends Exchange {
|
|
|
2670
2863
|
request[idRequest] = id;
|
|
2671
2864
|
if (stop) {
|
|
2672
2865
|
if (swap) {
|
|
2673
|
-
response = await this.
|
|
2866
|
+
response = await this.v1PerpetualPrivatePostOrderCancelStop(this.extend(request, query));
|
|
2674
2867
|
}
|
|
2675
2868
|
else {
|
|
2676
|
-
response = await this.
|
|
2869
|
+
response = await this.v1PrivateDeleteOrderStopPendingId(this.extend(request, query));
|
|
2677
2870
|
}
|
|
2678
2871
|
}
|
|
2679
2872
|
else {
|
|
2680
2873
|
if (swap) {
|
|
2681
|
-
response = await this.
|
|
2874
|
+
response = await this.v1PerpetualPrivatePostOrderCancel(this.extend(request, query));
|
|
2682
2875
|
}
|
|
2683
2876
|
else {
|
|
2684
|
-
response = await this.
|
|
2877
|
+
response = await this.v1PrivateDeleteOrderPending(this.extend(request, query));
|
|
2685
2878
|
}
|
|
2686
2879
|
}
|
|
2687
2880
|
}
|
|
@@ -2825,19 +3018,19 @@ export default class coinex extends Exchange {
|
|
|
2825
3018
|
let response = undefined;
|
|
2826
3019
|
if (swap) {
|
|
2827
3020
|
if (stop) {
|
|
2828
|
-
response = await this.
|
|
3021
|
+
response = await this.v1PerpetualPrivatePostOrderCancelStopAll(this.extend(request, params));
|
|
2829
3022
|
}
|
|
2830
3023
|
else {
|
|
2831
|
-
response = await this.
|
|
3024
|
+
response = await this.v1PerpetualPrivatePostOrderCancelAll(this.extend(request, params));
|
|
2832
3025
|
}
|
|
2833
3026
|
}
|
|
2834
3027
|
else {
|
|
2835
3028
|
request['account_id'] = accountId;
|
|
2836
3029
|
if (stop) {
|
|
2837
|
-
response = await this.
|
|
3030
|
+
response = await this.v1PrivateDeleteOrderStopPending(this.extend(request, params));
|
|
2838
3031
|
}
|
|
2839
3032
|
else {
|
|
2840
|
-
response = await this.
|
|
3033
|
+
response = await this.v1PrivateDeleteOrderPending(this.extend(request, params));
|
|
2841
3034
|
}
|
|
2842
3035
|
}
|
|
2843
3036
|
//
|
|
@@ -2881,14 +3074,14 @@ export default class coinex extends Exchange {
|
|
|
2881
3074
|
let response = undefined;
|
|
2882
3075
|
if (swap) {
|
|
2883
3076
|
if (stop) {
|
|
2884
|
-
response = await this.
|
|
3077
|
+
response = await this.v1PerpetualPrivateGetOrderStopStatus(this.extend(request, params));
|
|
2885
3078
|
}
|
|
2886
3079
|
else {
|
|
2887
|
-
response = await this.
|
|
3080
|
+
response = await this.v1PerpetualPrivateGetOrderStatus(this.extend(request, params));
|
|
2888
3081
|
}
|
|
2889
3082
|
}
|
|
2890
3083
|
else {
|
|
2891
|
-
response = await this.
|
|
3084
|
+
response = await this.v1PrivateGetOrderStatus(this.extend(request, params));
|
|
2892
3085
|
}
|
|
2893
3086
|
//
|
|
2894
3087
|
// Spot
|
|
@@ -3032,14 +3225,14 @@ export default class coinex extends Exchange {
|
|
|
3032
3225
|
}
|
|
3033
3226
|
request['offset'] = 0;
|
|
3034
3227
|
if (stop) {
|
|
3035
|
-
response = await this.
|
|
3228
|
+
response = await this.v1PerpetualPrivateGetOrderStopPending(this.extend(request, params));
|
|
3036
3229
|
}
|
|
3037
3230
|
else {
|
|
3038
3231
|
if (status === 'finished') {
|
|
3039
|
-
response = await this.
|
|
3232
|
+
response = await this.v1PerpetualPrivateGetOrderFinished(this.extend(request, params));
|
|
3040
3233
|
}
|
|
3041
3234
|
else if (status === 'pending') {
|
|
3042
|
-
response = await this.
|
|
3235
|
+
response = await this.v1PerpetualPrivateGetOrderPending(this.extend(request, params));
|
|
3043
3236
|
}
|
|
3044
3237
|
}
|
|
3045
3238
|
}
|
|
@@ -3047,18 +3240,18 @@ export default class coinex extends Exchange {
|
|
|
3047
3240
|
request['page'] = 1;
|
|
3048
3241
|
if (status === 'finished') {
|
|
3049
3242
|
if (stop) {
|
|
3050
|
-
response = await this.
|
|
3243
|
+
response = await this.v1PrivateGetOrderStopFinished(this.extend(request, params));
|
|
3051
3244
|
}
|
|
3052
3245
|
else {
|
|
3053
|
-
response = await this.
|
|
3246
|
+
response = await this.v1PrivateGetOrderFinished(this.extend(request, params));
|
|
3054
3247
|
}
|
|
3055
3248
|
}
|
|
3056
3249
|
else if (status === 'pending') {
|
|
3057
3250
|
if (stop) {
|
|
3058
|
-
response = await this.
|
|
3251
|
+
response = await this.v1PrivateGetOrderStopPending(this.extend(request, params));
|
|
3059
3252
|
}
|
|
3060
3253
|
else {
|
|
3061
|
-
response = await this.
|
|
3254
|
+
response = await this.v1PrivateGetOrderPending(this.extend(request, params));
|
|
3062
3255
|
}
|
|
3063
3256
|
}
|
|
3064
3257
|
}
|
|
@@ -3270,7 +3463,7 @@ export default class coinex extends Exchange {
|
|
|
3270
3463
|
params = this.omit(params, 'network');
|
|
3271
3464
|
request['smart_contract_name'] = network;
|
|
3272
3465
|
}
|
|
3273
|
-
const response = await this.
|
|
3466
|
+
const response = await this.v1PrivatePutBalanceDepositAddressCoinType(this.extend(request, params));
|
|
3274
3467
|
//
|
|
3275
3468
|
// {
|
|
3276
3469
|
// "code": 0,
|
|
@@ -3314,7 +3507,7 @@ export default class coinex extends Exchange {
|
|
|
3314
3507
|
if (network !== undefined) {
|
|
3315
3508
|
request['smart_contract_name'] = network;
|
|
3316
3509
|
}
|
|
3317
|
-
const response = await this.
|
|
3510
|
+
const response = await this.v1PrivateGetBalanceDepositAddressCoinType(this.extend(request, params));
|
|
3318
3511
|
//
|
|
3319
3512
|
// {
|
|
3320
3513
|
// "code": 0,
|
|
@@ -3430,11 +3623,11 @@ export default class coinex extends Exchange {
|
|
|
3430
3623
|
request['start_time'] = since;
|
|
3431
3624
|
}
|
|
3432
3625
|
request['side'] = 0;
|
|
3433
|
-
response = await this.
|
|
3626
|
+
response = await this.v1PerpetualPrivateGetMarketUserDeals(this.extend(request, params));
|
|
3434
3627
|
}
|
|
3435
3628
|
else {
|
|
3436
3629
|
request['page'] = 1;
|
|
3437
|
-
response = await this.
|
|
3630
|
+
response = await this.v1PrivateGetOrderUserDeals(this.extend(request, params));
|
|
3438
3631
|
}
|
|
3439
3632
|
//
|
|
3440
3633
|
// Spot and Margin
|
|
@@ -3528,8 +3721,8 @@ export default class coinex extends Exchange {
|
|
|
3528
3721
|
*/
|
|
3529
3722
|
await this.loadMarkets();
|
|
3530
3723
|
let defaultMethod = undefined;
|
|
3531
|
-
[defaultMethod, params] = this.handleOptionAndParams(params, 'fetchPositions', 'method', '
|
|
3532
|
-
const isHistory = (defaultMethod === '
|
|
3724
|
+
[defaultMethod, params] = this.handleOptionAndParams(params, 'fetchPositions', 'method', 'v1PerpetualPrivateGetPositionPending');
|
|
3725
|
+
const isHistory = (defaultMethod === 'v1PerpetualPrivateGetPositionFinished');
|
|
3533
3726
|
symbols = this.marketSymbols(symbols);
|
|
3534
3727
|
const request = {};
|
|
3535
3728
|
let market = undefined;
|
|
@@ -3558,11 +3751,11 @@ export default class coinex extends Exchange {
|
|
|
3558
3751
|
request['side'] = this.safeInteger(params, 'side', 0); // 0: All, 1: Sell, 2: Buy
|
|
3559
3752
|
}
|
|
3560
3753
|
let response = undefined;
|
|
3561
|
-
if (defaultMethod === '
|
|
3562
|
-
response = await this.
|
|
3754
|
+
if (defaultMethod === 'v1PerpetualPrivateGetPositionPending') {
|
|
3755
|
+
response = await this.v1PerpetualPrivateGetPositionPending(this.extend(request, params));
|
|
3563
3756
|
}
|
|
3564
3757
|
else {
|
|
3565
|
-
response = await this.
|
|
3758
|
+
response = await this.v1PerpetualPrivateGetPositionFinished(this.extend(request, params));
|
|
3566
3759
|
}
|
|
3567
3760
|
//
|
|
3568
3761
|
// {
|
|
@@ -3645,7 +3838,7 @@ export default class coinex extends Exchange {
|
|
|
3645
3838
|
const request = {
|
|
3646
3839
|
'market': market['id'],
|
|
3647
3840
|
};
|
|
3648
|
-
const response = await this.
|
|
3841
|
+
const response = await this.v1PerpetualPrivateGetPositionPending(this.extend(request, params));
|
|
3649
3842
|
//
|
|
3650
3843
|
// {
|
|
3651
3844
|
// "code": 0,
|
|
@@ -3859,7 +4052,7 @@ export default class coinex extends Exchange {
|
|
|
3859
4052
|
'leverage': leverage.toString(),
|
|
3860
4053
|
'position_type': positionType, // 1: isolated, 2: cross
|
|
3861
4054
|
};
|
|
3862
|
-
return await this.
|
|
4055
|
+
return await this.v1PerpetualPrivatePostMarketAdjustLeverage(this.extend(request, params));
|
|
3863
4056
|
}
|
|
3864
4057
|
async setLeverage(leverage, symbol = undefined, params = {}) {
|
|
3865
4058
|
/**
|
|
@@ -3900,7 +4093,7 @@ export default class coinex extends Exchange {
|
|
|
3900
4093
|
'leverage': leverage.toString(),
|
|
3901
4094
|
'position_type': positionType, // 1: isolated, 2: cross
|
|
3902
4095
|
};
|
|
3903
|
-
return await this.
|
|
4096
|
+
return await this.v1PerpetualPrivatePostMarketAdjustLeverage(this.extend(request, params));
|
|
3904
4097
|
}
|
|
3905
4098
|
async fetchLeverageTiers(symbols = undefined, params = {}) {
|
|
3906
4099
|
/**
|
|
@@ -3913,7 +4106,7 @@ export default class coinex extends Exchange {
|
|
|
3913
4106
|
* @returns {object} a dictionary of [leverage tiers structures]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}, indexed by market symbols
|
|
3914
4107
|
*/
|
|
3915
4108
|
await this.loadMarkets();
|
|
3916
|
-
const response = await this.
|
|
4109
|
+
const response = await this.v1PerpetualPublicGetMarketLimitConfig(params);
|
|
3917
4110
|
//
|
|
3918
4111
|
// {
|
|
3919
4112
|
// "code": 0,
|
|
@@ -3991,7 +4184,7 @@ export default class coinex extends Exchange {
|
|
|
3991
4184
|
'amount': this.amountToPrecision(symbol, amount),
|
|
3992
4185
|
'type': addOrReduce,
|
|
3993
4186
|
};
|
|
3994
|
-
const response = await this.
|
|
4187
|
+
const response = await this.v1PerpetualPrivatePostPositionAdjustMargin(this.extend(request, params));
|
|
3995
4188
|
//
|
|
3996
4189
|
// {
|
|
3997
4190
|
// "code": 0,
|
|
@@ -4058,13 +4251,72 @@ export default class coinex extends Exchange {
|
|
|
4058
4251
|
});
|
|
4059
4252
|
}
|
|
4060
4253
|
parseMarginModification(data, market = undefined) {
|
|
4254
|
+
//
|
|
4255
|
+
// addMargin/reduceMargin
|
|
4256
|
+
//
|
|
4257
|
+
// {
|
|
4258
|
+
// "adl_sort": 1,
|
|
4259
|
+
// "adl_sort_val": "0.00004320",
|
|
4260
|
+
// "amount": "0.0005",
|
|
4261
|
+
// "amount_max": "0.0005",
|
|
4262
|
+
// "amount_max_margin": "6.57352000000000000000",
|
|
4263
|
+
// "bkr_price": "16294.08000000000000011090",
|
|
4264
|
+
// "bkr_price_imply": "0.00000000000000000000",
|
|
4265
|
+
// "close_left": "0.0005",
|
|
4266
|
+
// "create_time": 1651202571.320778,
|
|
4267
|
+
// "deal_all": "19.72000000000000000000",
|
|
4268
|
+
// "deal_asset_fee": "0.00000000000000000000",
|
|
4269
|
+
// "fee_asset": "",
|
|
4270
|
+
// "finish_type": 1,
|
|
4271
|
+
// "first_price": "39441.12",
|
|
4272
|
+
// "insurance": "0.00000000000000000000",
|
|
4273
|
+
// "latest_price": "39441.12",
|
|
4274
|
+
// "leverage": "3",
|
|
4275
|
+
// "liq_amount": "0.00000000000000000000",
|
|
4276
|
+
// "liq_order_price": "0",
|
|
4277
|
+
// "liq_order_time": 0,
|
|
4278
|
+
// "liq_price": "16491.28560000000000011090",
|
|
4279
|
+
// "liq_price_imply": "0.00000000000000000000",
|
|
4280
|
+
// "liq_profit": "0.00000000000000000000",
|
|
4281
|
+
// "liq_time": 0,
|
|
4282
|
+
// "mainten_margin": "0.005",
|
|
4283
|
+
// "mainten_margin_amount": "0.09860280000000000000",
|
|
4284
|
+
// "maker_fee": "0.00000000000000000000",
|
|
4285
|
+
// "margin_amount": "11.57352000000000000000",
|
|
4286
|
+
// "market": "BTCUSDT",
|
|
4287
|
+
// "open_margin": "0.58687582908396110455",
|
|
4288
|
+
// "open_margin_imply": "0.00000000000000000000",
|
|
4289
|
+
// "open_price": "39441.12000000000000000000",
|
|
4290
|
+
// "open_val": "19.72056000000000000000",
|
|
4291
|
+
// "open_val_max": "19.72056000000000000000",
|
|
4292
|
+
// "position_id": 65171206,
|
|
4293
|
+
// "profit_clearing": "-0.00986028000000000000",
|
|
4294
|
+
// "profit_real": "-0.00986028000000000000",
|
|
4295
|
+
// "profit_unreal": "0.00",
|
|
4296
|
+
// "side": 2,
|
|
4297
|
+
// "stop_loss_price": "0.00000000000000000000",
|
|
4298
|
+
// "stop_loss_type": 0,
|
|
4299
|
+
// "sys": 0,
|
|
4300
|
+
// "take_profit_price": "0.00000000000000000000",
|
|
4301
|
+
// "take_profit_type": 0,
|
|
4302
|
+
// "taker_fee": "0.00000000000000000000",
|
|
4303
|
+
// "total": 3464,
|
|
4304
|
+
// "type": 1,
|
|
4305
|
+
// "update_time": 1651202638.911212,
|
|
4306
|
+
// "user_id": 3620173
|
|
4307
|
+
// }
|
|
4308
|
+
//
|
|
4309
|
+
const timestamp = this.safeIntegerProduct(data, 'update_time', 1000);
|
|
4061
4310
|
return {
|
|
4062
4311
|
'info': data,
|
|
4312
|
+
'symbol': this.safeSymbol(undefined, market),
|
|
4063
4313
|
'type': undefined,
|
|
4064
|
-
'amount':
|
|
4314
|
+
'amount': this.safeNumber(data, 'margin_amount'),
|
|
4315
|
+
'total': undefined,
|
|
4065
4316
|
'code': market['quote'],
|
|
4066
|
-
'symbol': this.safeSymbol(undefined, market),
|
|
4067
4317
|
'status': undefined,
|
|
4318
|
+
'timestamp': timestamp,
|
|
4319
|
+
'datetime': this.iso8601(timestamp),
|
|
4068
4320
|
};
|
|
4069
4321
|
}
|
|
4070
4322
|
async addMargin(symbol, amount, params = {}) {
|
|
@@ -4121,7 +4373,7 @@ export default class coinex extends Exchange {
|
|
|
4121
4373
|
if (since !== undefined) {
|
|
4122
4374
|
request['start_time'] = since;
|
|
4123
4375
|
}
|
|
4124
|
-
const response = await this.
|
|
4376
|
+
const response = await this.v1PerpetualPrivateGetPositionFunding(this.extend(request, params));
|
|
4125
4377
|
//
|
|
4126
4378
|
// {
|
|
4127
4379
|
// "code": 0,
|
|
@@ -4187,7 +4439,7 @@ export default class coinex extends Exchange {
|
|
|
4187
4439
|
const request = {
|
|
4188
4440
|
'market': market['id'],
|
|
4189
4441
|
};
|
|
4190
|
-
const response = await this.
|
|
4442
|
+
const response = await this.v1PerpetualPublicGetMarketTicker(this.extend(request, params));
|
|
4191
4443
|
//
|
|
4192
4444
|
// {
|
|
4193
4445
|
// "code": 0,
|
|
@@ -4298,7 +4550,7 @@ export default class coinex extends Exchange {
|
|
|
4298
4550
|
throw new BadSymbol(this.id + ' fetchFundingRates() supports swap contracts only');
|
|
4299
4551
|
}
|
|
4300
4552
|
}
|
|
4301
|
-
const response = await this.
|
|
4553
|
+
const response = await this.v1PerpetualPublicGetMarketTickerAll(params);
|
|
4302
4554
|
//
|
|
4303
4555
|
// {
|
|
4304
4556
|
// "code": 0,
|
|
@@ -4380,7 +4632,7 @@ export default class coinex extends Exchange {
|
|
|
4380
4632
|
if (networkCode !== undefined) {
|
|
4381
4633
|
request['smart_contract_name'] = this.networkCodeToId(networkCode);
|
|
4382
4634
|
}
|
|
4383
|
-
const response = await this.
|
|
4635
|
+
const response = await this.v1PrivatePostBalanceCoinWithdraw(this.extend(request, params));
|
|
4384
4636
|
//
|
|
4385
4637
|
// {
|
|
4386
4638
|
// "code": 0,
|
|
@@ -4452,7 +4704,7 @@ export default class coinex extends Exchange {
|
|
|
4452
4704
|
request['start_time'] = since;
|
|
4453
4705
|
}
|
|
4454
4706
|
[request, params] = this.handleUntilOption('end_time', request, params);
|
|
4455
|
-
const response = await this.
|
|
4707
|
+
const response = await this.v1PerpetualPublicGetMarketFundingHistory(this.extend(request, params));
|
|
4456
4708
|
//
|
|
4457
4709
|
// {
|
|
4458
4710
|
// "code": 0,
|
|
@@ -4629,11 +4881,11 @@ export default class coinex extends Exchange {
|
|
|
4629
4881
|
let response = undefined;
|
|
4630
4882
|
if ((fromAccount === 'spot') && (toAccount === 'swap')) {
|
|
4631
4883
|
request['transfer_side'] = 'in'; // 'in' spot to swap, 'out' swap to spot
|
|
4632
|
-
response = await this.
|
|
4884
|
+
response = await this.v1PrivatePostContractBalanceTransfer(this.extend(request, params));
|
|
4633
4885
|
}
|
|
4634
4886
|
else if ((fromAccount === 'swap') && (toAccount === 'spot')) {
|
|
4635
4887
|
request['transfer_side'] = 'out'; // 'in' spot to swap, 'out' swap to spot
|
|
4636
|
-
response = await this.
|
|
4888
|
+
response = await this.v1PrivatePostContractBalanceTransfer(this.extend(request, params));
|
|
4637
4889
|
}
|
|
4638
4890
|
else {
|
|
4639
4891
|
const accountsById = this.safeValue(this.options, 'accountsById', {});
|
|
@@ -4643,7 +4895,7 @@ export default class coinex extends Exchange {
|
|
|
4643
4895
|
// spot is 0, use fetchBalance() to find the margin account id
|
|
4644
4896
|
request['from_account'] = parseInt(fromId);
|
|
4645
4897
|
request['to_account'] = parseInt(toId);
|
|
4646
|
-
response = await this.
|
|
4898
|
+
response = await this.v1PrivatePostMarginTransfer(this.extend(request, params));
|
|
4647
4899
|
}
|
|
4648
4900
|
//
|
|
4649
4901
|
// {"code": 0, "data": null, "message": "Success"}
|
|
@@ -4766,10 +5018,10 @@ export default class coinex extends Exchange {
|
|
|
4766
5018
|
[marginMode, params] = this.handleMarginModeAndParams('fetchTransfers', params);
|
|
4767
5019
|
let response = undefined;
|
|
4768
5020
|
if (marginMode !== undefined) {
|
|
4769
|
-
response = await this.
|
|
5021
|
+
response = await this.v1PrivateGetMarginTransferHistory(this.extend(request, params));
|
|
4770
5022
|
}
|
|
4771
5023
|
else {
|
|
4772
|
-
response = await this.
|
|
5024
|
+
response = await this.v1PrivateGetContractTransferHistory(this.extend(request, params));
|
|
4773
5025
|
}
|
|
4774
5026
|
//
|
|
4775
5027
|
// Swap
|
|
@@ -4841,7 +5093,7 @@ export default class coinex extends Exchange {
|
|
|
4841
5093
|
if (limit !== undefined) {
|
|
4842
5094
|
request['Limit'] = limit;
|
|
4843
5095
|
}
|
|
4844
|
-
const response = await this.
|
|
5096
|
+
const response = await this.v1PrivateGetBalanceCoinWithdraw(this.extend(request, params));
|
|
4845
5097
|
//
|
|
4846
5098
|
// {
|
|
4847
5099
|
// "code": 0,
|
|
@@ -4908,7 +5160,7 @@ export default class coinex extends Exchange {
|
|
|
4908
5160
|
if (limit !== undefined) {
|
|
4909
5161
|
request['Limit'] = limit;
|
|
4910
5162
|
}
|
|
4911
|
-
const response = await this.
|
|
5163
|
+
const response = await this.v1PrivateGetBalanceCoinDeposit(this.extend(request, params));
|
|
4912
5164
|
//
|
|
4913
5165
|
// {
|
|
4914
5166
|
// "code": 0,
|
|
@@ -5001,7 +5253,7 @@ export default class coinex extends Exchange {
|
|
|
5001
5253
|
const request = {
|
|
5002
5254
|
'market': market['id'],
|
|
5003
5255
|
};
|
|
5004
|
-
const response = await this.
|
|
5256
|
+
const response = await this.v1PrivateGetMarginConfig(this.extend(request, params));
|
|
5005
5257
|
//
|
|
5006
5258
|
// {
|
|
5007
5259
|
// "code": 0,
|
|
@@ -5035,7 +5287,7 @@ export default class coinex extends Exchange {
|
|
|
5035
5287
|
* @returns {object} a list of [isolated borrow rate structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#isolated-borrow-rate-structure}
|
|
5036
5288
|
*/
|
|
5037
5289
|
await this.loadMarkets();
|
|
5038
|
-
const response = await this.
|
|
5290
|
+
const response = await this.v1PrivateGetMarginConfig(params);
|
|
5039
5291
|
//
|
|
5040
5292
|
// {
|
|
5041
5293
|
// "code": 0,
|
|
@@ -5076,7 +5328,7 @@ export default class coinex extends Exchange {
|
|
|
5076
5328
|
if (limit !== undefined) {
|
|
5077
5329
|
request['limit'] = limit;
|
|
5078
5330
|
}
|
|
5079
|
-
const response = await this.
|
|
5331
|
+
const response = await this.v1PrivateGetMarginLoanHistory(this.extend(request, params));
|
|
5080
5332
|
//
|
|
5081
5333
|
// {
|
|
5082
5334
|
// "code": 0,
|
|
@@ -5172,7 +5424,7 @@ export default class coinex extends Exchange {
|
|
|
5172
5424
|
'coin_type': currency['id'],
|
|
5173
5425
|
'amount': this.currencyToPrecision(code, amount),
|
|
5174
5426
|
};
|
|
5175
|
-
const response = await this.
|
|
5427
|
+
const response = await this.v1PrivatePostMarginLoan(this.extend(request, params));
|
|
5176
5428
|
//
|
|
5177
5429
|
// {
|
|
5178
5430
|
// "code": 0,
|
|
@@ -5210,7 +5462,7 @@ export default class coinex extends Exchange {
|
|
|
5210
5462
|
'coin_type': currency['id'],
|
|
5211
5463
|
'amount': this.currencyToPrecision(code, amount),
|
|
5212
5464
|
};
|
|
5213
|
-
const response = await this.
|
|
5465
|
+
const response = await this.v1PrivatePostMarginFlat(this.extend(request, params));
|
|
5214
5466
|
//
|
|
5215
5467
|
// {
|
|
5216
5468
|
// "code": 0,
|
|
@@ -5268,7 +5520,7 @@ export default class coinex extends Exchange {
|
|
|
5268
5520
|
request['coin_type'] = this.safeValue(codes, 0);
|
|
5269
5521
|
}
|
|
5270
5522
|
}
|
|
5271
|
-
const response = await this.
|
|
5523
|
+
const response = await this.v1PublicGetCommonAssetConfig(this.extend(request, params));
|
|
5272
5524
|
//
|
|
5273
5525
|
// {
|
|
5274
5526
|
// "code": 0,
|
|
@@ -5368,7 +5620,7 @@ export default class coinex extends Exchange {
|
|
|
5368
5620
|
if (marketType !== 'spot') {
|
|
5369
5621
|
throw new NotSupported(this.id + ' fetchLeverages() supports spot margin markets only');
|
|
5370
5622
|
}
|
|
5371
|
-
const response = await this.
|
|
5623
|
+
const response = await this.v1PrivateGetMarginConfig(params);
|
|
5372
5624
|
//
|
|
5373
5625
|
// {
|
|
5374
5626
|
// "code": 0,
|
|
@@ -5427,9 +5679,11 @@ export default class coinex extends Exchange {
|
|
|
5427
5679
|
nonce() {
|
|
5428
5680
|
return this.milliseconds();
|
|
5429
5681
|
}
|
|
5430
|
-
sign(path, api =
|
|
5682
|
+
sign(path, api = [], method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
5431
5683
|
path = this.implodeParams(path, params);
|
|
5432
|
-
|
|
5684
|
+
const version = api[0];
|
|
5685
|
+
const requestUrl = api[1];
|
|
5686
|
+
let url = this.urls['api'][requestUrl] + '/' + version + '/' + path;
|
|
5433
5687
|
let query = this.omit(params, this.extractParams(path));
|
|
5434
5688
|
const nonce = this.nonce().toString();
|
|
5435
5689
|
if (method === 'POST') {
|
|
@@ -5458,7 +5712,7 @@ export default class coinex extends Exchange {
|
|
|
5458
5712
|
}
|
|
5459
5713
|
}
|
|
5460
5714
|
}
|
|
5461
|
-
if (
|
|
5715
|
+
if (requestUrl === 'perpetualPrivate') {
|
|
5462
5716
|
this.checkRequiredCredentials();
|
|
5463
5717
|
query = this.extend({
|
|
5464
5718
|
'access_id': this.apiKey,
|
|
@@ -5479,29 +5733,49 @@ export default class coinex extends Exchange {
|
|
|
5479
5733
|
body = urlencoded;
|
|
5480
5734
|
}
|
|
5481
5735
|
}
|
|
5482
|
-
else if (
|
|
5736
|
+
else if (requestUrl === 'public' || requestUrl === 'perpetualPublic') {
|
|
5483
5737
|
if (Object.keys(query).length) {
|
|
5484
5738
|
url += '?' + this.urlencode(query);
|
|
5485
5739
|
}
|
|
5486
5740
|
}
|
|
5487
5741
|
else {
|
|
5488
|
-
|
|
5489
|
-
|
|
5490
|
-
|
|
5491
|
-
|
|
5492
|
-
|
|
5493
|
-
|
|
5494
|
-
|
|
5495
|
-
|
|
5496
|
-
|
|
5497
|
-
|
|
5498
|
-
|
|
5499
|
-
|
|
5500
|
-
|
|
5501
|
-
|
|
5742
|
+
if (version === 'v1') {
|
|
5743
|
+
this.checkRequiredCredentials();
|
|
5744
|
+
query = this.extend({
|
|
5745
|
+
'access_id': this.apiKey,
|
|
5746
|
+
'tonce': nonce,
|
|
5747
|
+
}, query);
|
|
5748
|
+
query = this.keysort(query);
|
|
5749
|
+
const urlencoded = this.rawencode(query);
|
|
5750
|
+
const signature = this.hash(this.encode(urlencoded + '&secret_key=' + this.secret), md5);
|
|
5751
|
+
headers = {
|
|
5752
|
+
'Authorization': signature.toUpperCase(),
|
|
5753
|
+
'Content-Type': 'application/json',
|
|
5754
|
+
};
|
|
5755
|
+
if ((method === 'GET') || (method === 'DELETE') || (method === 'PUT')) {
|
|
5756
|
+
url += '?' + urlencoded;
|
|
5757
|
+
}
|
|
5758
|
+
else {
|
|
5759
|
+
body = this.json(query);
|
|
5760
|
+
}
|
|
5502
5761
|
}
|
|
5503
|
-
else {
|
|
5504
|
-
|
|
5762
|
+
else if (version === 'v2') {
|
|
5763
|
+
this.checkRequiredCredentials();
|
|
5764
|
+
query = this.keysort(query);
|
|
5765
|
+
const urlencoded = this.rawencode(query);
|
|
5766
|
+
const preparedString = method + '/' + version + '/' + path + '?' + urlencoded + nonce + this.secret;
|
|
5767
|
+
const signature = this.hash(this.encode(preparedString), sha256);
|
|
5768
|
+
headers = {
|
|
5769
|
+
'X-COINEX-KEY': this.apiKey,
|
|
5770
|
+
'X-COINEX-SIGN': signature,
|
|
5771
|
+
'X-COINEX-TIMESTAMP': nonce,
|
|
5772
|
+
};
|
|
5773
|
+
if ((method === 'GET') || (method === 'DELETE') || (method === 'PUT')) {
|
|
5774
|
+
url += '?' + urlencoded;
|
|
5775
|
+
}
|
|
5776
|
+
else {
|
|
5777
|
+
body = this.json(query);
|
|
5778
|
+
}
|
|
5505
5779
|
}
|
|
5506
5780
|
}
|
|
5507
5781
|
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|