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.
Files changed (113) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/binance.py +1 -0
  3. ccxt/abstract/binancecoinm.py +1 -0
  4. ccxt/abstract/binanceus.py +1 -0
  5. ccxt/abstract/binanceusdm.py +1 -0
  6. ccxt/abstract/bybit.py +1 -0
  7. ccxt/ace.py +58 -0
  8. ccxt/alpaca.py +80 -0
  9. ccxt/ascendex.py +95 -2
  10. ccxt/async_support/__init__.py +1 -1
  11. ccxt/async_support/ace.py +58 -0
  12. ccxt/async_support/alpaca.py +80 -0
  13. ccxt/async_support/ascendex.py +95 -2
  14. ccxt/async_support/base/exchange.py +1 -1
  15. ccxt/async_support/bigone.py +113 -4
  16. ccxt/async_support/binance.py +3 -4
  17. ccxt/async_support/binanceus.py +10 -0
  18. ccxt/async_support/bingx.py +1 -2
  19. ccxt/async_support/bit2c.py +56 -0
  20. ccxt/async_support/bitbank.py +58 -0
  21. ccxt/async_support/bitbns.py +60 -0
  22. ccxt/async_support/bitfinex.py +2 -3
  23. ccxt/async_support/bitfinex1.py +8 -0
  24. ccxt/async_support/bitflyer.py +71 -0
  25. ccxt/async_support/bitget.py +1 -2
  26. ccxt/async_support/bithumb.py +54 -0
  27. ccxt/async_support/bitmex.py +1 -2
  28. ccxt/async_support/bitopro.py +74 -0
  29. ccxt/async_support/bitrue.py +97 -17
  30. ccxt/async_support/bitso.py +59 -0
  31. ccxt/async_support/bitteam.py +73 -0
  32. ccxt/async_support/bitvavo.py +70 -2
  33. ccxt/async_support/bl3p.py +42 -0
  34. ccxt/async_support/blockchaincom.py +66 -2
  35. ccxt/async_support/blofin.py +87 -1
  36. ccxt/async_support/btcalpha.py +73 -0
  37. ccxt/async_support/btcbox.py +58 -0
  38. ccxt/async_support/btcmarkets.py +73 -0
  39. ccxt/async_support/btcturk.py +61 -0
  40. ccxt/async_support/bybit.py +7 -3
  41. ccxt/async_support/cex.py +57 -0
  42. ccxt/async_support/coinbase.py +1 -1
  43. ccxt/async_support/coinbaseexchange.py +76 -0
  44. ccxt/async_support/coinex.py +1 -2
  45. ccxt/async_support/delta.py +1 -2
  46. ccxt/async_support/gate.py +3 -3
  47. ccxt/async_support/hashkey.py +1 -2
  48. ccxt/async_support/hollaex.py +1 -1
  49. ccxt/async_support/htx.py +2 -4
  50. ccxt/async_support/hyperliquid.py +4 -4
  51. ccxt/async_support/krakenfutures.py +2 -0
  52. ccxt/async_support/lbank.py +1 -2
  53. ccxt/async_support/okx.py +13 -9
  54. ccxt/async_support/oxfun.py +1 -2
  55. ccxt/async_support/whitebit.py +2 -2
  56. ccxt/async_support/woo.py +1 -2
  57. ccxt/async_support/woofipro.py +1 -2
  58. ccxt/base/errors.py +6 -0
  59. ccxt/base/exchange.py +16 -14
  60. ccxt/bigone.py +113 -4
  61. ccxt/binance.py +3 -4
  62. ccxt/binanceus.py +10 -0
  63. ccxt/bingx.py +1 -2
  64. ccxt/bit2c.py +56 -0
  65. ccxt/bitbank.py +58 -0
  66. ccxt/bitbns.py +60 -0
  67. ccxt/bitfinex.py +2 -3
  68. ccxt/bitfinex1.py +8 -0
  69. ccxt/bitflyer.py +71 -0
  70. ccxt/bitget.py +1 -2
  71. ccxt/bithumb.py +54 -0
  72. ccxt/bitmex.py +1 -2
  73. ccxt/bitopro.py +74 -0
  74. ccxt/bitrue.py +97 -17
  75. ccxt/bitso.py +59 -0
  76. ccxt/bitteam.py +73 -0
  77. ccxt/bitvavo.py +70 -2
  78. ccxt/bl3p.py +42 -0
  79. ccxt/blockchaincom.py +66 -2
  80. ccxt/blofin.py +87 -1
  81. ccxt/btcalpha.py +73 -0
  82. ccxt/btcbox.py +58 -0
  83. ccxt/btcmarkets.py +73 -0
  84. ccxt/btcturk.py +61 -0
  85. ccxt/bybit.py +7 -3
  86. ccxt/cex.py +57 -0
  87. ccxt/coinbase.py +1 -1
  88. ccxt/coinbaseexchange.py +76 -0
  89. ccxt/coinex.py +1 -2
  90. ccxt/delta.py +1 -2
  91. ccxt/gate.py +3 -3
  92. ccxt/hashkey.py +1 -2
  93. ccxt/hollaex.py +1 -1
  94. ccxt/htx.py +2 -4
  95. ccxt/hyperliquid.py +4 -4
  96. ccxt/krakenfutures.py +2 -0
  97. ccxt/lbank.py +1 -2
  98. ccxt/okx.py +13 -9
  99. ccxt/oxfun.py +1 -2
  100. ccxt/pro/__init__.py +1 -1
  101. ccxt/pro/bingx.py +3 -5
  102. ccxt/pro/bitget.py +2 -4
  103. ccxt/pro/xt.py +1 -1
  104. ccxt/test/tests_async.py +2 -0
  105. ccxt/test/tests_sync.py +2 -0
  106. ccxt/whitebit.py +2 -2
  107. ccxt/woo.py +1 -2
  108. ccxt/woofipro.py +1 -2
  109. {ccxt-4.4.46.dist-info → ccxt-4.4.47.dist-info}/METADATA +4 -5
  110. {ccxt-4.4.46.dist-info → ccxt-4.4.47.dist-info}/RECORD +113 -113
  111. {ccxt-4.4.46.dist-info → ccxt-4.4.47.dist-info}/LICENSE.txt +0 -0
  112. {ccxt-4.4.46.dist-info → ccxt-4.4.47.dist-info}/WHEEL +0 -0
  113. {ccxt-4.4.46.dist-info → ccxt-4.4.47.dist-info}/top_level.txt +0 -0
ccxt/bitvavo.py CHANGED
@@ -212,6 +212,71 @@ class bitvavo(Exchange, ImplicitAPI):
212
212
  'apiKey': True,
213
213
  'secret': True,
214
214
  },
215
+ 'features': {
216
+ 'spot': {
217
+ 'sandbox': False,
218
+ 'createOrder': {
219
+ 'marginMode': False,
220
+ 'triggerPrice': True,
221
+ 'triggerPriceType': None,
222
+ 'triggerDirection': None,
223
+ 'stopLossPrice': True,
224
+ 'takeProfitPrice': True,
225
+ 'attachedStopLossTakeProfit': None,
226
+ 'timeInForce': {
227
+ 'IOC': True,
228
+ 'FOK': True,
229
+ 'PO': True,
230
+ 'GTD': False,
231
+ },
232
+ 'hedged': False,
233
+ 'trailing': False,
234
+ 'leverage': False,
235
+ 'marketBuyRequiresPrice': False,
236
+ 'marketBuyByCost': True,
237
+ 'selfTradePrevention': True, # todo implement
238
+ 'iceberg': False,
239
+ },
240
+ 'createOrders': None,
241
+ 'fetchMyTrades': {
242
+ 'marginMode': False,
243
+ 'limit': 1000,
244
+ 'daysBack': 100000,
245
+ 'untilDays': 100000,
246
+ },
247
+ 'fetchOrder': {
248
+ 'marginMode': False,
249
+ 'trigger': False,
250
+ 'trailing': False,
251
+ },
252
+ 'fetchOpenOrders': {
253
+ 'marginMode': False,
254
+ 'limit': None,
255
+ 'trigger': False,
256
+ 'trailing': False,
257
+ },
258
+ 'fetchOrders': {
259
+ 'marginMode': True,
260
+ 'limit': 1000,
261
+ 'daysBack': 100000,
262
+ 'untilDays': 100000,
263
+ 'trigger': False,
264
+ 'trailing': False,
265
+ },
266
+ 'fetchClosedOrders': None,
267
+ 'fetchOHLCV': {
268
+ 'limit': 1440,
269
+ },
270
+ },
271
+ 'swap': {
272
+ 'linear': None,
273
+ 'inverse': None,
274
+ },
275
+ 'future': {
276
+ 'linear': None,
277
+ 'inverse': None,
278
+ },
279
+ },
215
280
  'exceptions': {
216
281
  'exact': {
217
282
  '101': ExchangeError, # Unknown error. Operation may or may not have succeeded.
@@ -1103,7 +1168,7 @@ class bitvavo(Exchange, ImplicitAPI):
1103
1168
  """
1104
1169
  create a trade order
1105
1170
 
1106
- https://docs.bitvavo.com/#tag/Orders/paths/~1order/post
1171
+ https://docs.bitvavo.com/#tag/Trading-endpoints/paths/~1order/post
1107
1172
 
1108
1173
  :param str symbol: unified symbol of the market to create an order in
1109
1174
  :param str type: 'market' or 'limit'
@@ -1416,6 +1481,9 @@ class bitvavo(Exchange, ImplicitAPI):
1416
1481
 
1417
1482
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1418
1483
  """
1484
+
1485
+ https://docs.bitvavo.com/#tag/Trading-endpoints/paths/~1ordersOpen/get
1486
+
1419
1487
  fetch all unfilled currently open orders
1420
1488
  :param str symbol: unified market symbol
1421
1489
  :param int [since]: the earliest time in ms to fetch open orders for
@@ -1608,7 +1676,7 @@ class bitvavo(Exchange, ImplicitAPI):
1608
1676
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
1609
1677
  """
1610
1678
 
1611
- https://docs.bitvavo.com/#tag/Trades/paths/~1trades/get
1679
+ https://docs.bitvavo.com/#tag/Trading-endpoints/paths/~1trades/get
1612
1680
 
1613
1681
  fetch all trades made by the user
1614
1682
  :param str symbol: unified market symbol
ccxt/bl3p.py CHANGED
@@ -121,6 +121,48 @@ class bl3p(Exchange, ImplicitAPI):
121
121
  'markets': {
122
122
  'BTC/EUR': self.safe_market_structure({'id': 'BTCEUR', 'symbol': 'BTC/EUR', 'base': 'BTC', 'quote': 'EUR', 'baseId': 'BTC', 'quoteId': 'EUR', 'maker': 0.0025, 'taker': 0.0025, 'type': 'spot', 'spot': True}),
123
123
  },
124
+ 'features': {
125
+ 'spot': {
126
+ 'sandbox': False,
127
+ 'createOrder': {
128
+ 'marginMode': False,
129
+ 'triggerPrice': False,
130
+ 'triggerPriceType': None,
131
+ 'triggerDirection': False,
132
+ 'stopLossPrice': False,
133
+ 'takeProfitPrice': False,
134
+ 'attachedStopLossTakeProfit': None,
135
+ 'timeInForce': {
136
+ 'IOC': False,
137
+ 'FOK': False,
138
+ 'PO': False,
139
+ 'GTD': False,
140
+ },
141
+ 'hedged': False,
142
+ 'leverage': False,
143
+ 'marketBuyRequiresPrice': False,
144
+ 'marketBuyByCost': False,
145
+ 'selfTradePrevention': False,
146
+ 'trailing': False,
147
+ 'iceberg': False,
148
+ },
149
+ 'createOrders': None,
150
+ 'fetchMyTrades': None,
151
+ 'fetchOrder': None,
152
+ 'fetchOpenOrders': None,
153
+ 'fetchOrders': None,
154
+ 'fetchClosedOrders': None,
155
+ 'fetchOHLCV': None,
156
+ },
157
+ 'swap': {
158
+ 'linear': None,
159
+ 'inverse': None,
160
+ },
161
+ 'future': {
162
+ 'linear': None,
163
+ 'inverse': None,
164
+ },
165
+ },
124
166
  'precisionMode': TICK_SIZE,
125
167
  })
126
168
 
ccxt/blockchaincom.py CHANGED
@@ -219,6 +219,70 @@ class blockchaincom(Exchange, ImplicitAPI):
219
219
  # 'DIGITALGOLD': 'DGLD',
220
220
  },
221
221
  },
222
+ 'features': {
223
+ 'spot': {
224
+ 'sandbox': False,
225
+ 'createOrder': {
226
+ 'marginMode': False,
227
+ 'triggerPrice': True,
228
+ 'triggerPriceType': None,
229
+ 'triggerDirection': False,
230
+ 'stopLossPrice': False, # todo
231
+ 'takeProfitPrice': False, # todo
232
+ 'attachedStopLossTakeProfit': None,
233
+ 'timeInForce': {
234
+ 'IOC': True,
235
+ 'FOK': True,
236
+ 'PO': False,
237
+ 'GTD': True, # todo implementation
238
+ },
239
+ 'hedged': False,
240
+ 'leverage': False,
241
+ 'marketBuyRequiresPrice': False,
242
+ 'marketBuyByCost': False,
243
+ 'selfTradePrevention': False,
244
+ 'trailing': False,
245
+ 'iceberg': False,
246
+ },
247
+ 'createOrders': None,
248
+ 'fetchMyTrades': {
249
+ 'marginMode': False,
250
+ 'limit': 1000,
251
+ 'daysBack': 100000, # todo implementation
252
+ 'untilDays': 100000, # todo implementation
253
+ },
254
+ 'fetchOrder': {
255
+ 'marginMode': False,
256
+ 'trigger': False,
257
+ 'trailing': False,
258
+ },
259
+ 'fetchOpenOrders': {
260
+ 'marginMode': False,
261
+ 'limit': 1000,
262
+ 'trigger': False,
263
+ 'trailing': False,
264
+ },
265
+ 'fetchOrders': None, # todo implement
266
+ 'fetchClosedOrders': {
267
+ 'marginMode': False,
268
+ 'limit': 1000,
269
+ 'daysBack': 100000,
270
+ 'daysBackCanceled': 1,
271
+ 'untilDays': 100000,
272
+ 'trigger': False,
273
+ 'trailing': False,
274
+ },
275
+ 'fetchOHLCV': None, # todo webapi
276
+ },
277
+ 'swap': {
278
+ 'linear': None,
279
+ 'inverse': None,
280
+ },
281
+ 'future': {
282
+ 'linear': None,
283
+ 'inverse': None,
284
+ },
285
+ },
222
286
  'precisionMode': TICK_SIZE,
223
287
  'exceptions': {
224
288
  'exact': {
@@ -567,8 +631,8 @@ class blockchaincom(Exchange, ImplicitAPI):
567
631
  'orderQty': self.amount_to_precision(symbol, amount),
568
632
  'clOrdId': clientOrderId,
569
633
  }
570
- triggerPrice = self.safe_value_2(params, 'stopPx', 'stopPrice')
571
- params = self.omit(params, ['stopPx', 'stopPrice'])
634
+ triggerPrice = self.safe_value_n(params, ['triggerPrice', 'stopPx', 'stopPrice'])
635
+ params = self.omit(params, ['triggerPrice', 'stopPx', 'stopPrice'])
572
636
  if uppercaseOrderType == 'STOP' or uppercaseOrderType == 'STOPLIMIT':
573
637
  if triggerPrice is None:
574
638
  raise ArgumentsRequired(self.id + ' createOrder() requires a stopPx or triggerPrice param for a ' + uppercaseOrderType + ' order')
ccxt/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/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/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/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/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/bybit.py CHANGED
@@ -355,6 +355,7 @@ class bybit(Exchange, ImplicitAPI):
355
355
  'v5/account/contract-transaction-log': 1,
356
356
  'v5/account/smp-group': 1,
357
357
  'v5/account/mmp-state': 5,
358
+ 'v5/account/withdrawal': 5,
358
359
  # asset
359
360
  'v5/asset/exchange/query-coin-list': 0.5, # 100/s => cost = 50 / 100 = 0.5
360
361
  'v5/asset/exchange/convert-result-query': 0.5, # 100/s => cost = 50 / 100 = 0.5
@@ -2699,8 +2700,7 @@ class bybit(Exchange, ImplicitAPI):
2699
2700
  timestamp = self.safe_integer(response, 'time')
2700
2701
  for i in range(0, len(tickerList)):
2701
2702
  tickerList[i]['timestamp'] = timestamp # will be removed inside the parser
2702
- result = self.parse_funding_rates(tickerList)
2703
- return self.filter_by_array(result, 'symbol', symbols)
2703
+ return self.parse_funding_rates(tickerList, symbols)
2704
2704
 
2705
2705
  def fetch_funding_rate_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
2706
2706
  """
@@ -3209,7 +3209,11 @@ class bybit(Exchange, ImplicitAPI):
3209
3209
  if (loan is not None) and (interest is not None):
3210
3210
  account['debt'] = Precise.string_add(loan, interest)
3211
3211
  account['total'] = self.safe_string(coinEntry, 'walletBalance')
3212
- account['free'] = self.safe_string_2(coinEntry, 'availableToWithdraw', 'free')
3212
+ free = self.safe_string_2(coinEntry, 'availableToWithdraw', 'free')
3213
+ if free is not None:
3214
+ account['free'] = free
3215
+ else:
3216
+ account['used'] = self.safe_string(coinEntry, 'locked')
3213
3217
  # account['used'] = self.safe_string(coinEntry, 'locked')
3214
3218
  currencyId = self.safe_string(coinEntry, 'coin')
3215
3219
  code = self.safe_currency_code(currencyId)