ccxt 4.4.46__py2.py3-none-any.whl → 4.4.47__py2.py3-none-any.whl
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.
- ccxt/__init__.py +1 -1
- ccxt/abstract/binance.py +1 -0
- ccxt/abstract/binancecoinm.py +1 -0
- ccxt/abstract/binanceus.py +1 -0
- ccxt/abstract/binanceusdm.py +1 -0
- ccxt/abstract/bybit.py +1 -0
- ccxt/ace.py +58 -0
- ccxt/alpaca.py +80 -0
- ccxt/ascendex.py +95 -2
- ccxt/async_support/__init__.py +1 -1
- ccxt/async_support/ace.py +58 -0
- ccxt/async_support/alpaca.py +80 -0
- ccxt/async_support/ascendex.py +95 -2
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/bigone.py +113 -4
- ccxt/async_support/binance.py +3 -4
- ccxt/async_support/binanceus.py +10 -0
- ccxt/async_support/bingx.py +1 -2
- ccxt/async_support/bit2c.py +56 -0
- ccxt/async_support/bitbank.py +58 -0
- ccxt/async_support/bitbns.py +60 -0
- ccxt/async_support/bitfinex.py +2 -3
- ccxt/async_support/bitfinex1.py +8 -0
- ccxt/async_support/bitflyer.py +71 -0
- ccxt/async_support/bitget.py +1 -2
- ccxt/async_support/bithumb.py +54 -0
- ccxt/async_support/bitmex.py +1 -2
- ccxt/async_support/bitopro.py +74 -0
- ccxt/async_support/bitrue.py +97 -17
- ccxt/async_support/bitso.py +59 -0
- ccxt/async_support/bitteam.py +73 -0
- ccxt/async_support/bitvavo.py +70 -2
- ccxt/async_support/bl3p.py +42 -0
- ccxt/async_support/blockchaincom.py +66 -2
- ccxt/async_support/blofin.py +87 -1
- ccxt/async_support/btcalpha.py +73 -0
- ccxt/async_support/btcbox.py +58 -0
- ccxt/async_support/btcmarkets.py +73 -0
- ccxt/async_support/btcturk.py +61 -0
- ccxt/async_support/bybit.py +7 -3
- ccxt/async_support/cex.py +57 -0
- ccxt/async_support/coinbase.py +1 -1
- ccxt/async_support/coinbaseexchange.py +76 -0
- ccxt/async_support/coinex.py +1 -2
- ccxt/async_support/delta.py +1 -2
- ccxt/async_support/gate.py +3 -3
- ccxt/async_support/hashkey.py +1 -2
- ccxt/async_support/hollaex.py +1 -1
- ccxt/async_support/htx.py +2 -4
- ccxt/async_support/hyperliquid.py +4 -4
- ccxt/async_support/krakenfutures.py +2 -0
- ccxt/async_support/lbank.py +1 -2
- ccxt/async_support/okx.py +13 -9
- ccxt/async_support/oxfun.py +1 -2
- ccxt/async_support/whitebit.py +2 -2
- ccxt/async_support/woo.py +1 -2
- ccxt/async_support/woofipro.py +1 -2
- ccxt/base/errors.py +6 -0
- ccxt/base/exchange.py +16 -14
- ccxt/bigone.py +113 -4
- ccxt/binance.py +3 -4
- ccxt/binanceus.py +10 -0
- ccxt/bingx.py +1 -2
- ccxt/bit2c.py +56 -0
- ccxt/bitbank.py +58 -0
- ccxt/bitbns.py +60 -0
- ccxt/bitfinex.py +2 -3
- ccxt/bitfinex1.py +8 -0
- ccxt/bitflyer.py +71 -0
- ccxt/bitget.py +1 -2
- ccxt/bithumb.py +54 -0
- ccxt/bitmex.py +1 -2
- ccxt/bitopro.py +74 -0
- ccxt/bitrue.py +97 -17
- ccxt/bitso.py +59 -0
- ccxt/bitteam.py +73 -0
- ccxt/bitvavo.py +70 -2
- ccxt/bl3p.py +42 -0
- ccxt/blockchaincom.py +66 -2
- ccxt/blofin.py +87 -1
- ccxt/btcalpha.py +73 -0
- ccxt/btcbox.py +58 -0
- ccxt/btcmarkets.py +73 -0
- ccxt/btcturk.py +61 -0
- ccxt/bybit.py +7 -3
- ccxt/cex.py +57 -0
- ccxt/coinbase.py +1 -1
- ccxt/coinbaseexchange.py +76 -0
- ccxt/coinex.py +1 -2
- ccxt/delta.py +1 -2
- ccxt/gate.py +3 -3
- ccxt/hashkey.py +1 -2
- ccxt/hollaex.py +1 -1
- ccxt/htx.py +2 -4
- ccxt/hyperliquid.py +4 -4
- ccxt/krakenfutures.py +2 -0
- ccxt/lbank.py +1 -2
- ccxt/okx.py +13 -9
- ccxt/oxfun.py +1 -2
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/bingx.py +3 -5
- ccxt/pro/bitget.py +2 -4
- ccxt/pro/xt.py +1 -1
- ccxt/test/tests_async.py +2 -0
- ccxt/test/tests_sync.py +2 -0
- ccxt/whitebit.py +2 -2
- ccxt/woo.py +1 -2
- ccxt/woofipro.py +1 -2
- {ccxt-4.4.46.dist-info → ccxt-4.4.47.dist-info}/METADATA +4 -5
- {ccxt-4.4.46.dist-info → ccxt-4.4.47.dist-info}/RECORD +113 -113
- {ccxt-4.4.46.dist-info → ccxt-4.4.47.dist-info}/LICENSE.txt +0 -0
- {ccxt-4.4.46.dist-info → ccxt-4.4.47.dist-info}/WHEEL +0 -0
- {ccxt-4.4.46.dist-info → ccxt-4.4.47.dist-info}/top_level.txt +0 -0
ccxt/async_support/blofin.py
CHANGED
@@ -251,6 +251,93 @@ class blofin(Exchange, ImplicitAPI):
|
|
251
251
|
'secret': True,
|
252
252
|
'password': True,
|
253
253
|
},
|
254
|
+
'features': {
|
255
|
+
'default': {
|
256
|
+
'sandbox': False,
|
257
|
+
'createOrder': {
|
258
|
+
'timeInForce': {
|
259
|
+
'IOC': True,
|
260
|
+
'FOK': True,
|
261
|
+
'PO': True,
|
262
|
+
'GTD': False,
|
263
|
+
},
|
264
|
+
'leverage': False,
|
265
|
+
'marketBuyRequiresPrice': False,
|
266
|
+
'marketBuyByCost': False,
|
267
|
+
'selfTradePrevention': False,
|
268
|
+
'trailing': False,
|
269
|
+
'iceberg': False,
|
270
|
+
},
|
271
|
+
'createOrders': {
|
272
|
+
'max': 10,
|
273
|
+
},
|
274
|
+
'fetchMyTrades': {
|
275
|
+
'marginMode': False,
|
276
|
+
'limit': 100,
|
277
|
+
'daysBack': 100000,
|
278
|
+
'untilDays': 100000,
|
279
|
+
},
|
280
|
+
'fetchOrder': None,
|
281
|
+
'fetchOpenOrders': {
|
282
|
+
'marginMode': False,
|
283
|
+
'limit': 100,
|
284
|
+
'trigger': True,
|
285
|
+
'trailing': False,
|
286
|
+
},
|
287
|
+
'fetchOrders': None,
|
288
|
+
'fetchClosedOrders': {
|
289
|
+
'marginMode': False,
|
290
|
+
'limit': 1000,
|
291
|
+
'daysBack': 100000,
|
292
|
+
'daysBackCanceled': 1,
|
293
|
+
'untilDays': 100000,
|
294
|
+
'trigger': True,
|
295
|
+
'trailing': False,
|
296
|
+
},
|
297
|
+
'fetchOHLCV': {
|
298
|
+
'max': 1440,
|
299
|
+
},
|
300
|
+
},
|
301
|
+
'spot': {
|
302
|
+
'extends': 'default',
|
303
|
+
'createOrder': {
|
304
|
+
'marginMode': False,
|
305
|
+
'triggerPrice': False,
|
306
|
+
'triggerPriceType': None,
|
307
|
+
'triggerDirection': False,
|
308
|
+
'stopLossPrice': False,
|
309
|
+
'takeProfitPrice': False,
|
310
|
+
'attachedStopLossTakeProfit': None,
|
311
|
+
'hedged': False,
|
312
|
+
},
|
313
|
+
},
|
314
|
+
'forDerivatives': {
|
315
|
+
'extends': 'default',
|
316
|
+
'createOrder': {
|
317
|
+
'marginMode': True,
|
318
|
+
'triggerPrice': False, # todo
|
319
|
+
'triggerPriceType': None,
|
320
|
+
'triggerDirection': False,
|
321
|
+
'stopLossPrice': True,
|
322
|
+
'takeProfitPrice': True,
|
323
|
+
'attachedStopLossTakeProfit': {
|
324
|
+
'triggerPriceType': None,
|
325
|
+
'limit': True,
|
326
|
+
},
|
327
|
+
'hedged': True,
|
328
|
+
},
|
329
|
+
},
|
330
|
+
'swap': {
|
331
|
+
'linear': {
|
332
|
+
'extends': 'forDerivatives',
|
333
|
+
},
|
334
|
+
'inverse': None,
|
335
|
+
},
|
336
|
+
'future': {
|
337
|
+
'linear': None,
|
338
|
+
'inverse': None,
|
339
|
+
},
|
340
|
+
},
|
254
341
|
'exceptions': {
|
255
342
|
'exact': {
|
256
343
|
'400': BadRequest, # Body can not be empty
|
@@ -322,7 +409,6 @@ class blofin(Exchange, ImplicitAPI):
|
|
322
409
|
'earn': 'earn',
|
323
410
|
'spot': 'spot',
|
324
411
|
},
|
325
|
-
'sandboxMode': False,
|
326
412
|
'defaultNetwork': 'ERC20',
|
327
413
|
'defaultNetworks': {
|
328
414
|
'ETH': 'ERC20',
|
ccxt/async_support/btcalpha.py
CHANGED
@@ -150,6 +150,79 @@ class btcalpha(Exchange, ImplicitAPI):
|
|
150
150
|
'commonCurrencies': {
|
151
151
|
'CBC': 'Cashbery',
|
152
152
|
},
|
153
|
+
'features': {
|
154
|
+
'spot': {
|
155
|
+
'sandbox': False,
|
156
|
+
'createOrder': {
|
157
|
+
'marginMode': False,
|
158
|
+
'triggerPrice': False,
|
159
|
+
'triggerPriceType': None,
|
160
|
+
'triggerDirection': False,
|
161
|
+
'stopLossPrice': False,
|
162
|
+
'takeProfitPrice': False,
|
163
|
+
'attachedStopLossTakeProfit': None,
|
164
|
+
'timeInForce': {
|
165
|
+
'IOC': False,
|
166
|
+
'FOK': False,
|
167
|
+
'PO': False,
|
168
|
+
'GTD': False,
|
169
|
+
},
|
170
|
+
'hedged': False,
|
171
|
+
'leverage': False,
|
172
|
+
'marketBuyRequiresPrice': False,
|
173
|
+
'marketBuyByCost': False,
|
174
|
+
'selfTradePrevention': False,
|
175
|
+
'trailing': False,
|
176
|
+
'iceberg': False,
|
177
|
+
},
|
178
|
+
'createOrders': None,
|
179
|
+
'fetchMyTrades': {
|
180
|
+
'marginMode': False,
|
181
|
+
'limit': 100,
|
182
|
+
'daysBack': None,
|
183
|
+
'untilDays': None,
|
184
|
+
},
|
185
|
+
'fetchOrder': {
|
186
|
+
'marginMode': False,
|
187
|
+
'trigger': False,
|
188
|
+
'trailing': False,
|
189
|
+
},
|
190
|
+
'fetchOpenOrders': {
|
191
|
+
'marginMode': False,
|
192
|
+
'limit': 2000,
|
193
|
+
'trigger': False,
|
194
|
+
'trailing': False,
|
195
|
+
},
|
196
|
+
'fetchOrders': {
|
197
|
+
'marginMode': False,
|
198
|
+
'limit': 2000,
|
199
|
+
'daysBack': None,
|
200
|
+
'untilDays': None,
|
201
|
+
'trigger': False,
|
202
|
+
'trailing': False,
|
203
|
+
},
|
204
|
+
'fetchClosedOrders': {
|
205
|
+
'marginMode': False,
|
206
|
+
'limit': 2000,
|
207
|
+
'daysBack': None,
|
208
|
+
'daysBackCanceled': None,
|
209
|
+
'untilDays': None,
|
210
|
+
'trigger': False,
|
211
|
+
'trailing': False,
|
212
|
+
},
|
213
|
+
'fetchOHLCV': {
|
214
|
+
'max': 720,
|
215
|
+
},
|
216
|
+
},
|
217
|
+
'swap': {
|
218
|
+
'linear': None,
|
219
|
+
'inverse': None,
|
220
|
+
},
|
221
|
+
'future': {
|
222
|
+
'linear': None,
|
223
|
+
'inverse': None,
|
224
|
+
},
|
225
|
+
},
|
153
226
|
'precisionMode': TICK_SIZE,
|
154
227
|
'exceptions': {
|
155
228
|
'exact': {},
|
ccxt/async_support/btcbox.py
CHANGED
@@ -116,6 +116,64 @@ class btcbox(Exchange, ImplicitAPI):
|
|
116
116
|
],
|
117
117
|
},
|
118
118
|
},
|
119
|
+
'features': {
|
120
|
+
'spot': {
|
121
|
+
'sandbox': False,
|
122
|
+
'createOrder': {
|
123
|
+
'marginMode': False,
|
124
|
+
'triggerPrice': False,
|
125
|
+
'triggerPriceType': None,
|
126
|
+
'triggerDirection': False,
|
127
|
+
'stopLossPrice': False,
|
128
|
+
'takeProfitPrice': False,
|
129
|
+
'attachedStopLossTakeProfit': None,
|
130
|
+
'timeInForce': {
|
131
|
+
'IOC': False,
|
132
|
+
'FOK': False,
|
133
|
+
'PO': False,
|
134
|
+
'GTD': False,
|
135
|
+
},
|
136
|
+
'hedged': False,
|
137
|
+
'leverage': False,
|
138
|
+
'marketBuyRequiresPrice': False,
|
139
|
+
'marketBuyByCost': False,
|
140
|
+
'selfTradePrevention': False,
|
141
|
+
'trailing': False,
|
142
|
+
'iceberg': False,
|
143
|
+
},
|
144
|
+
'createOrders': None,
|
145
|
+
'fetchMyTrades': None,
|
146
|
+
'fetchOrder': {
|
147
|
+
'marginMode': False,
|
148
|
+
'trigger': False,
|
149
|
+
'trailing': False,
|
150
|
+
},
|
151
|
+
'fetchOpenOrders': {
|
152
|
+
'marginMode': False,
|
153
|
+
'limit': 100,
|
154
|
+
'trigger': False,
|
155
|
+
'trailing': False,
|
156
|
+
},
|
157
|
+
'fetchOrders': {
|
158
|
+
'marginMode': False,
|
159
|
+
'limit': 100,
|
160
|
+
'daysBack': None,
|
161
|
+
'untilDays': None,
|
162
|
+
'trigger': False,
|
163
|
+
'trailing': False,
|
164
|
+
},
|
165
|
+
'fetchClosedOrders': None,
|
166
|
+
'fetchOHLCV': None,
|
167
|
+
},
|
168
|
+
'swap': {
|
169
|
+
'linear': None,
|
170
|
+
'inverse': None,
|
171
|
+
},
|
172
|
+
'future': {
|
173
|
+
'linear': None,
|
174
|
+
'inverse': None,
|
175
|
+
},
|
176
|
+
},
|
119
177
|
'precisionMode': TICK_SIZE,
|
120
178
|
'exceptions': {
|
121
179
|
'104': AuthenticationError,
|
ccxt/async_support/btcmarkets.py
CHANGED
@@ -159,6 +159,79 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
159
159
|
'1h': '1h',
|
160
160
|
'1d': '1d',
|
161
161
|
},
|
162
|
+
'features': {
|
163
|
+
'spot': {
|
164
|
+
'sandbox': False,
|
165
|
+
'createOrder': {
|
166
|
+
'marginMode': False,
|
167
|
+
'triggerPrice': True, # todo: check
|
168
|
+
'triggerPriceType': None,
|
169
|
+
'triggerDirection': False,
|
170
|
+
'stopLossPrice': False,
|
171
|
+
'takeProfitPrice': False,
|
172
|
+
'attachedStopLossTakeProfit': None,
|
173
|
+
'timeInForce': {
|
174
|
+
'IOC': True,
|
175
|
+
'FOK': True,
|
176
|
+
'PO': True,
|
177
|
+
'GTD': False,
|
178
|
+
},
|
179
|
+
'hedged': False,
|
180
|
+
'leverage': False,
|
181
|
+
'marketBuyRequiresPrice': False,
|
182
|
+
'marketBuyByCost': False,
|
183
|
+
'selfTradePrevention': True, # todo: check
|
184
|
+
'trailing': False,
|
185
|
+
'iceberg': False,
|
186
|
+
},
|
187
|
+
'createOrders': None,
|
188
|
+
'fetchMyTrades': {
|
189
|
+
'marginMode': False,
|
190
|
+
'limit': 100,
|
191
|
+
'daysBack': 100000,
|
192
|
+
'untilDays': 100000,
|
193
|
+
},
|
194
|
+
'fetchOrder': {
|
195
|
+
'marginMode': False,
|
196
|
+
'trigger': False,
|
197
|
+
'trailing': False,
|
198
|
+
},
|
199
|
+
'fetchOpenOrders': {
|
200
|
+
'marginMode': False,
|
201
|
+
'limit': 100,
|
202
|
+
'trigger': False,
|
203
|
+
'trailing': False,
|
204
|
+
},
|
205
|
+
'fetchOrders': {
|
206
|
+
'marginMode': False,
|
207
|
+
'limit': 100,
|
208
|
+
'daysBack': 100000,
|
209
|
+
'untilDays': 100000,
|
210
|
+
'trigger': False,
|
211
|
+
'trailing': False,
|
212
|
+
},
|
213
|
+
'fetchClosedOrders': {
|
214
|
+
'marginMode': False,
|
215
|
+
'limit': 100,
|
216
|
+
'daysBack': 100000,
|
217
|
+
'daysBackCanceled': 1,
|
218
|
+
'untilDays': 100000,
|
219
|
+
'trigger': False,
|
220
|
+
'trailing': False,
|
221
|
+
},
|
222
|
+
'fetchOHLCV': {
|
223
|
+
'limit': 1000,
|
224
|
+
},
|
225
|
+
},
|
226
|
+
'swap': {
|
227
|
+
'linear': None,
|
228
|
+
'inverse': None,
|
229
|
+
},
|
230
|
+
'future': {
|
231
|
+
'linear': None,
|
232
|
+
'inverse': None,
|
233
|
+
},
|
234
|
+
},
|
162
235
|
'precisionMode': TICK_SIZE,
|
163
236
|
'exceptions': {
|
164
237
|
'exact': {
|
ccxt/async_support/btcturk.py
CHANGED
@@ -136,6 +136,67 @@ class btcturk(Exchange, ImplicitAPI):
|
|
136
136
|
},
|
137
137
|
},
|
138
138
|
},
|
139
|
+
'features': {
|
140
|
+
'spot': {
|
141
|
+
'sandbox': False,
|
142
|
+
'createOrder': {
|
143
|
+
'marginMode': False,
|
144
|
+
'triggerPrice': True,
|
145
|
+
'triggerPriceType': None,
|
146
|
+
'triggerDirection': False,
|
147
|
+
'stopLossPrice': False,
|
148
|
+
'takeProfitPrice': False,
|
149
|
+
'attachedStopLossTakeProfit': None,
|
150
|
+
'timeInForce': {
|
151
|
+
'IOC': False,
|
152
|
+
'FOK': False,
|
153
|
+
'PO': False,
|
154
|
+
'GTD': False,
|
155
|
+
},
|
156
|
+
'hedged': False,
|
157
|
+
'leverage': False,
|
158
|
+
'marketBuyRequiresPrice': False,
|
159
|
+
'marketBuyByCost': False,
|
160
|
+
'selfTradePrevention': False,
|
161
|
+
'trailing': False,
|
162
|
+
'iceberg': False,
|
163
|
+
},
|
164
|
+
'createOrders': None,
|
165
|
+
'fetchMyTrades': {
|
166
|
+
'marginMode': False,
|
167
|
+
'limit': 100,
|
168
|
+
'daysBack': 100000,
|
169
|
+
'untilDays': 30,
|
170
|
+
},
|
171
|
+
'fetchOrder': None,
|
172
|
+
'fetchOpenOrders': {
|
173
|
+
'marginMode': False,
|
174
|
+
'limit': None,
|
175
|
+
'trigger': False,
|
176
|
+
'trailing': False,
|
177
|
+
},
|
178
|
+
'fetchOrders': {
|
179
|
+
'marginMode': False,
|
180
|
+
'limit': 1000,
|
181
|
+
'daysBack': 100000,
|
182
|
+
'untilDays': 30,
|
183
|
+
'trigger': False,
|
184
|
+
'trailing': False,
|
185
|
+
},
|
186
|
+
'fetchClosedOrders': None,
|
187
|
+
'fetchOHLCV': {
|
188
|
+
'limit': None,
|
189
|
+
},
|
190
|
+
},
|
191
|
+
'swap': {
|
192
|
+
'linear': None,
|
193
|
+
'inverse': None,
|
194
|
+
},
|
195
|
+
'future': {
|
196
|
+
'linear': None,
|
197
|
+
'inverse': None,
|
198
|
+
},
|
199
|
+
},
|
139
200
|
'fees': {
|
140
201
|
'trading': {
|
141
202
|
'maker': self.parse_number('0.0005'),
|
ccxt/async_support/bybit.py
CHANGED
@@ -356,6 +356,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
356
356
|
'v5/account/contract-transaction-log': 1,
|
357
357
|
'v5/account/smp-group': 1,
|
358
358
|
'v5/account/mmp-state': 5,
|
359
|
+
'v5/account/withdrawal': 5,
|
359
360
|
# asset
|
360
361
|
'v5/asset/exchange/query-coin-list': 0.5, # 100/s => cost = 50 / 100 = 0.5
|
361
362
|
'v5/asset/exchange/convert-result-query': 0.5, # 100/s => cost = 50 / 100 = 0.5
|
@@ -2700,8 +2701,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
2700
2701
|
timestamp = self.safe_integer(response, 'time')
|
2701
2702
|
for i in range(0, len(tickerList)):
|
2702
2703
|
tickerList[i]['timestamp'] = timestamp # will be removed inside the parser
|
2703
|
-
|
2704
|
-
return self.filter_by_array(result, 'symbol', symbols)
|
2704
|
+
return self.parse_funding_rates(tickerList, symbols)
|
2705
2705
|
|
2706
2706
|
async def fetch_funding_rate_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
2707
2707
|
"""
|
@@ -3210,7 +3210,11 @@ class bybit(Exchange, ImplicitAPI):
|
|
3210
3210
|
if (loan is not None) and (interest is not None):
|
3211
3211
|
account['debt'] = Precise.string_add(loan, interest)
|
3212
3212
|
account['total'] = self.safe_string(coinEntry, 'walletBalance')
|
3213
|
-
|
3213
|
+
free = self.safe_string_2(coinEntry, 'availableToWithdraw', 'free')
|
3214
|
+
if free is not None:
|
3215
|
+
account['free'] = free
|
3216
|
+
else:
|
3217
|
+
account['used'] = self.safe_string(coinEntry, 'locked')
|
3214
3218
|
# account['used'] = self.safe_string(coinEntry, 'locked')
|
3215
3219
|
currencyId = self.safe_string(coinEntry, 'coin')
|
3216
3220
|
code = self.safe_currency_code(currencyId)
|
ccxt/async_support/cex.py
CHANGED
@@ -119,6 +119,63 @@ class cex(Exchange, ImplicitAPI):
|
|
119
119
|
},
|
120
120
|
},
|
121
121
|
},
|
122
|
+
'features': {
|
123
|
+
'spot': {
|
124
|
+
'sandbox': False,
|
125
|
+
'createOrder': {
|
126
|
+
'marginMode': False,
|
127
|
+
'triggerPrice': True,
|
128
|
+
'triggerPriceType': None,
|
129
|
+
'triggerDirection': False,
|
130
|
+
'stopLossPrice': False, # todo
|
131
|
+
'takeProfitPrice': False, # todo
|
132
|
+
'attachedStopLossTakeProfit': None,
|
133
|
+
'timeInForce': {
|
134
|
+
'IOC': True,
|
135
|
+
'FOK': True,
|
136
|
+
'PO': False, # todo check
|
137
|
+
'GTD': True,
|
138
|
+
},
|
139
|
+
'hedged': False,
|
140
|
+
'leverage': False,
|
141
|
+
'marketBuyRequiresPrice': False,
|
142
|
+
'marketBuyByCost': True, # todo check
|
143
|
+
'selfTradePrevention': False,
|
144
|
+
'trailing': False,
|
145
|
+
'iceberg': False,
|
146
|
+
},
|
147
|
+
'createOrders': None,
|
148
|
+
'fetchMyTrades': None,
|
149
|
+
'fetchOrder': None,
|
150
|
+
'fetchOpenOrders': {
|
151
|
+
'marginMode': False,
|
152
|
+
'limit': 1000,
|
153
|
+
'trigger': False,
|
154
|
+
'trailing': False,
|
155
|
+
},
|
156
|
+
'fetchOrders': None,
|
157
|
+
'fetchClosedOrders': {
|
158
|
+
'marginMode': False,
|
159
|
+
'limit': 1000,
|
160
|
+
'daysBack': 100000,
|
161
|
+
'daysBackCanceled': 1,
|
162
|
+
'untilDays': 100000,
|
163
|
+
'trigger': False,
|
164
|
+
'trailing': False,
|
165
|
+
},
|
166
|
+
'fetchOHLCV': {
|
167
|
+
'limit': 1000,
|
168
|
+
},
|
169
|
+
},
|
170
|
+
'swap': {
|
171
|
+
'linear': None,
|
172
|
+
'inverse': None,
|
173
|
+
},
|
174
|
+
'future': {
|
175
|
+
'linear': None,
|
176
|
+
'inverse': None,
|
177
|
+
},
|
178
|
+
},
|
122
179
|
'precisionMode': TICK_SIZE,
|
123
180
|
'exceptions': {
|
124
181
|
'exact': {},
|
ccxt/async_support/coinbase.py
CHANGED
@@ -2383,7 +2383,7 @@ class coinbase(Exchange, ImplicitAPI):
|
|
2383
2383
|
request, params = await self.prepare_account_request_with_currency_code(code, limit, params)
|
2384
2384
|
# for pagination use parameter 'starting_after'
|
2385
2385
|
# the value for the next page can be obtained from the result of the previous call in the 'pagination' field
|
2386
|
-
# eg: instance.
|
2386
|
+
# eg: instance.last_http_response -> pagination.next_starting_after
|
2387
2387
|
response = await self.v2PrivateGetAccountsAccountIdTransactions(self.extend(request, params))
|
2388
2388
|
ledger = self.parse_ledger(response['data'], currency, since, limit)
|
2389
2389
|
length = len(ledger)
|
@@ -225,6 +225,82 @@ class coinbaseexchange(Exchange, ImplicitAPI):
|
|
225
225
|
},
|
226
226
|
},
|
227
227
|
},
|
228
|
+
'features': {
|
229
|
+
'default': {
|
230
|
+
'sandbox': True,
|
231
|
+
'createOrder': {
|
232
|
+
'marginMode': True,
|
233
|
+
'triggerPrice': True,
|
234
|
+
'triggerPriceType': None,
|
235
|
+
'triggerDirection': False,
|
236
|
+
'stopLossPrice': False, # todo
|
237
|
+
'takeProfitPrice': False, # todo
|
238
|
+
'attachedStopLossTakeProfit': None,
|
239
|
+
'timeInForce': {
|
240
|
+
'IOC': True,
|
241
|
+
'FOK': True,
|
242
|
+
'PO': True,
|
243
|
+
'GTD': True,
|
244
|
+
},
|
245
|
+
'hedged': False,
|
246
|
+
'trailing': False,
|
247
|
+
'leverage': False,
|
248
|
+
'marketBuyByCost': False,
|
249
|
+
'marketBuyRequiresPrice': False,
|
250
|
+
'selfTradePrevention': False,
|
251
|
+
'iceberg': True, # todo: implement
|
252
|
+
},
|
253
|
+
'createOrders': None,
|
254
|
+
'fetchMyTrades': {
|
255
|
+
'marginMode': False,
|
256
|
+
'limit': 100,
|
257
|
+
'daysBack': 100000,
|
258
|
+
'untilDays': 100000,
|
259
|
+
},
|
260
|
+
'fetchOrder': {
|
261
|
+
'marginMode': False,
|
262
|
+
'trigger': False,
|
263
|
+
'trailing': False,
|
264
|
+
},
|
265
|
+
'fetchOpenOrders': {
|
266
|
+
'marginMode': False,
|
267
|
+
'limit': 100,
|
268
|
+
'trigger': False,
|
269
|
+
'trailing': False,
|
270
|
+
},
|
271
|
+
'fetchOrders': {
|
272
|
+
'marginMode': False,
|
273
|
+
'limit': 100,
|
274
|
+
'daysBack': 100000,
|
275
|
+
'untilDays': 100000,
|
276
|
+
'trigger': False,
|
277
|
+
'trailing': False,
|
278
|
+
},
|
279
|
+
'fetchClosedOrders': {
|
280
|
+
'marginMode': False,
|
281
|
+
'limit': 100,
|
282
|
+
'daysBack': 100000,
|
283
|
+
'daysBackCanceled': 1,
|
284
|
+
'untilDays': 100000,
|
285
|
+
'trigger': False,
|
286
|
+
'trailing': False,
|
287
|
+
},
|
288
|
+
'fetchOHLCV': {
|
289
|
+
'limit': 300,
|
290
|
+
},
|
291
|
+
},
|
292
|
+
'spot': {
|
293
|
+
'extends': 'default',
|
294
|
+
},
|
295
|
+
'swap': {
|
296
|
+
'linear': None,
|
297
|
+
'inverse': None,
|
298
|
+
},
|
299
|
+
'future': {
|
300
|
+
'linear': None,
|
301
|
+
'inverse': None,
|
302
|
+
},
|
303
|
+
},
|
228
304
|
'exceptions': {
|
229
305
|
'exact': {
|
230
306
|
'Insufficient funds': InsufficientFunds,
|
ccxt/async_support/coinex.py
CHANGED
@@ -4589,8 +4589,7 @@ class coinex(Exchange, ImplicitAPI):
|
|
4589
4589
|
# }
|
4590
4590
|
#
|
4591
4591
|
data = self.safe_list(response, 'data', [])
|
4592
|
-
|
4593
|
-
return self.filter_by_array(result, 'symbol', symbols)
|
4592
|
+
return self.parse_funding_rates(data, symbols)
|
4594
4593
|
|
4595
4594
|
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
4596
4595
|
"""
|
ccxt/async_support/delta.py
CHANGED
@@ -2463,8 +2463,7 @@ class delta(Exchange, ImplicitAPI):
|
|
2463
2463
|
# }
|
2464
2464
|
#
|
2465
2465
|
rates = self.safe_list(response, 'result', [])
|
2466
|
-
|
2467
|
-
return self.filter_by_array(result, 'symbol', symbols)
|
2466
|
+
return self.parse_funding_rates(rates, symbols)
|
2468
2467
|
|
2469
2468
|
def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
|
2470
2469
|
#
|
ccxt/async_support/gate.py
CHANGED
@@ -1962,8 +1962,7 @@ class gate(Exchange, ImplicitAPI):
|
|
1962
1962
|
# }
|
1963
1963
|
# ]
|
1964
1964
|
#
|
1965
|
-
|
1966
|
-
return self.filter_by_array(result, 'symbol', symbols)
|
1965
|
+
return self.parse_funding_rates(response, symbols)
|
1967
1966
|
|
1968
1967
|
def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
|
1969
1968
|
#
|
@@ -2377,7 +2376,8 @@ class gate(Exchange, ImplicitAPI):
|
|
2377
2376
|
chainKeys = list(withdrawFixOnChains.keys())
|
2378
2377
|
for i in range(0, len(chainKeys)):
|
2379
2378
|
chainKey = chainKeys[i]
|
2380
|
-
|
2379
|
+
networkCode = self.network_id_to_code(chainKey, self.safe_string(fee, 'currency'))
|
2380
|
+
result['networks'][networkCode] = {
|
2381
2381
|
'withdraw': {
|
2382
2382
|
'fee': self.parse_number(withdrawFixOnChains[chainKey]),
|
2383
2383
|
'percentage': False,
|
ccxt/async_support/hashkey.py
CHANGED
@@ -3623,8 +3623,7 @@ class hashkey(Exchange, ImplicitAPI):
|
|
3623
3623
|
# {"symbol": "ETHUSDT-PERPETUAL", "rate": "0.0001", "nextSettleTime": "1722297600000"}
|
3624
3624
|
# ]
|
3625
3625
|
#
|
3626
|
-
|
3627
|
-
return self.filter_by_array(fundingRates, 'symbol', symbols)
|
3626
|
+
return self.parse_funding_rates(response, symbols)
|
3628
3627
|
|
3629
3628
|
def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
|
3630
3629
|
#
|
ccxt/async_support/hollaex.py
CHANGED
ccxt/async_support/htx.py
CHANGED
@@ -6780,8 +6780,7 @@ class htx(Exchange, ImplicitAPI):
|
|
6780
6780
|
# }
|
6781
6781
|
#
|
6782
6782
|
data = self.safe_value(response, 'data', [])
|
6783
|
-
|
6784
|
-
return self.filter_by_array(result, 'symbol', symbols)
|
6783
|
+
return self.parse_funding_rates(data, symbols)
|
6785
6784
|
|
6786
6785
|
async def fetch_borrow_interest(self, code: Str = None, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[BorrowInterest]:
|
6787
6786
|
"""
|
@@ -8098,8 +8097,7 @@ class htx(Exchange, ImplicitAPI):
|
|
8098
8097
|
# }
|
8099
8098
|
#
|
8100
8099
|
data = self.safe_list(response, 'data', [])
|
8101
|
-
|
8102
|
-
return self.filter_by_array(result, 'symbol', symbols)
|
8100
|
+
return self.parse_open_interests(data, symbols)
|
8103
8101
|
|
8104
8102
|
async def fetch_open_interest(self, symbol: str, params={}):
|
8105
8103
|
"""
|