ccxt 4.3.6__py2.py3-none-any.whl → 4.3.8__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.

Potentially problematic release.


This version of ccxt might be problematic. Click here for more details.

Files changed (178) hide show
  1. ccxt/__init__.py +1 -1
  2. ccxt/abstract/coinbase.py +5 -0
  3. ccxt/ace.py +5 -0
  4. ccxt/alpaca.py +6 -0
  5. ccxt/ascendex.py +2 -2
  6. ccxt/async_support/__init__.py +1 -1
  7. ccxt/async_support/ace.py +5 -0
  8. ccxt/async_support/alpaca.py +6 -0
  9. ccxt/async_support/ascendex.py +2 -2
  10. ccxt/async_support/base/exchange.py +27 -1
  11. ccxt/async_support/bigone.py +1 -1
  12. ccxt/async_support/binance.py +6 -4
  13. ccxt/async_support/bingx.py +4 -2
  14. ccxt/async_support/bitbank.py +4 -1
  15. ccxt/async_support/bitfinex.py +1 -1
  16. ccxt/async_support/bitfinex2.py +1 -1
  17. ccxt/async_support/bitflyer.py +1 -1
  18. ccxt/async_support/bitget.py +71 -5
  19. ccxt/async_support/bithumb.py +5 -1
  20. ccxt/async_support/bitmart.py +1 -1
  21. ccxt/async_support/bitmex.py +3 -1
  22. ccxt/async_support/bitopro.py +6 -1
  23. ccxt/async_support/bitrue.py +1 -1
  24. ccxt/async_support/bitso.py +4 -1
  25. ccxt/async_support/bitstamp.py +4 -1
  26. ccxt/async_support/bitteam.py +4 -0
  27. ccxt/async_support/bitvavo.py +4 -1
  28. ccxt/async_support/bl3p.py +3 -0
  29. ccxt/async_support/blockchaincom.py +1 -1
  30. ccxt/async_support/btcalpha.py +3 -0
  31. ccxt/async_support/btcbox.py +3 -0
  32. ccxt/async_support/btcmarkets.py +4 -1
  33. ccxt/async_support/btcturk.py +3 -0
  34. ccxt/async_support/bybit.py +116 -14
  35. ccxt/async_support/cex.py +6 -0
  36. ccxt/async_support/coinbase.py +94 -18
  37. ccxt/async_support/coinbaseinternational.py +3 -1
  38. ccxt/async_support/coinbasepro.py +7 -1
  39. ccxt/async_support/coincheck.py +3 -0
  40. ccxt/async_support/coinex.py +255 -192
  41. ccxt/async_support/coinlist.py +5 -1
  42. ccxt/async_support/coinmate.py +4 -1
  43. ccxt/async_support/coinone.py +3 -0
  44. ccxt/async_support/coinsph.py +5 -1
  45. ccxt/async_support/coinspot.py +3 -0
  46. ccxt/async_support/cryptocom.py +3 -1
  47. ccxt/async_support/delta.py +2 -2
  48. ccxt/async_support/deribit.py +1 -1
  49. ccxt/async_support/digifinex.py +3 -3
  50. ccxt/async_support/exmo.py +8 -3
  51. ccxt/async_support/gate.py +112 -24
  52. ccxt/async_support/gemini.py +1 -1
  53. ccxt/async_support/hitbtc.py +7 -6
  54. ccxt/async_support/hollaex.py +1 -1
  55. ccxt/async_support/htx.py +3 -1
  56. ccxt/async_support/huobijp.py +1 -1
  57. ccxt/async_support/hyperliquid.py +2 -2
  58. ccxt/async_support/idex.py +4 -1
  59. ccxt/async_support/independentreserve.py +3 -0
  60. ccxt/async_support/indodax.py +4 -1
  61. ccxt/async_support/kraken.py +1 -1
  62. ccxt/async_support/kucoin.py +3 -1
  63. ccxt/async_support/kucoinfutures.py +3 -1
  64. ccxt/async_support/kuna.py +1 -1
  65. ccxt/async_support/latoken.py +6 -0
  66. ccxt/async_support/lbank.py +1 -1
  67. ccxt/async_support/luno.py +3 -0
  68. ccxt/async_support/lykke.py +6 -1
  69. ccxt/async_support/mercado.py +4 -1
  70. ccxt/async_support/mexc.py +110 -4
  71. ccxt/async_support/ndax.py +5 -1
  72. ccxt/async_support/novadax.py +5 -1
  73. ccxt/async_support/okcoin.py +1 -1
  74. ccxt/async_support/okx.py +81 -5
  75. ccxt/async_support/onetrading.py +4 -1
  76. ccxt/async_support/p2b.py +3 -0
  77. ccxt/async_support/phemex.py +1 -1
  78. ccxt/async_support/poloniex.py +1 -1
  79. ccxt/async_support/probit.py +4 -1
  80. ccxt/async_support/timex.py +3 -0
  81. ccxt/async_support/tokocrypto.py +1 -1
  82. ccxt/async_support/tradeogre.py +3 -0
  83. ccxt/async_support/upbit.py +1 -1
  84. ccxt/async_support/wavesexchange.py +4 -1
  85. ccxt/async_support/wazirx.py +3 -0
  86. ccxt/async_support/whitebit.py +1 -1
  87. ccxt/async_support/woo.py +4 -2
  88. ccxt/async_support/yobit.py +4 -1
  89. ccxt/async_support/zaif.py +1 -1
  90. ccxt/async_support/zonda.py +1 -1
  91. ccxt/base/exchange.py +38 -4
  92. ccxt/bigone.py +1 -1
  93. ccxt/binance.py +6 -4
  94. ccxt/bingx.py +4 -2
  95. ccxt/bitbank.py +4 -1
  96. ccxt/bitfinex.py +1 -1
  97. ccxt/bitfinex2.py +1 -1
  98. ccxt/bitflyer.py +1 -1
  99. ccxt/bitget.py +71 -5
  100. ccxt/bithumb.py +5 -1
  101. ccxt/bitmart.py +1 -1
  102. ccxt/bitmex.py +3 -1
  103. ccxt/bitopro.py +6 -1
  104. ccxt/bitrue.py +1 -1
  105. ccxt/bitso.py +4 -1
  106. ccxt/bitstamp.py +4 -1
  107. ccxt/bitteam.py +4 -0
  108. ccxt/bitvavo.py +4 -1
  109. ccxt/bl3p.py +3 -0
  110. ccxt/blockchaincom.py +1 -1
  111. ccxt/btcalpha.py +3 -0
  112. ccxt/btcbox.py +3 -0
  113. ccxt/btcmarkets.py +4 -1
  114. ccxt/btcturk.py +3 -0
  115. ccxt/bybit.py +116 -14
  116. ccxt/cex.py +6 -0
  117. ccxt/coinbase.py +94 -18
  118. ccxt/coinbaseinternational.py +3 -1
  119. ccxt/coinbasepro.py +7 -1
  120. ccxt/coincheck.py +3 -0
  121. ccxt/coinex.py +255 -192
  122. ccxt/coinlist.py +5 -1
  123. ccxt/coinmate.py +4 -1
  124. ccxt/coinone.py +3 -0
  125. ccxt/coinsph.py +5 -1
  126. ccxt/coinspot.py +3 -0
  127. ccxt/cryptocom.py +3 -1
  128. ccxt/delta.py +2 -2
  129. ccxt/deribit.py +1 -1
  130. ccxt/digifinex.py +3 -3
  131. ccxt/exmo.py +8 -3
  132. ccxt/gate.py +112 -24
  133. ccxt/gemini.py +1 -1
  134. ccxt/hitbtc.py +7 -6
  135. ccxt/hollaex.py +1 -1
  136. ccxt/htx.py +3 -1
  137. ccxt/huobijp.py +1 -1
  138. ccxt/hyperliquid.py +2 -2
  139. ccxt/idex.py +4 -1
  140. ccxt/independentreserve.py +3 -0
  141. ccxt/indodax.py +4 -1
  142. ccxt/kraken.py +1 -1
  143. ccxt/kucoin.py +3 -1
  144. ccxt/kucoinfutures.py +3 -1
  145. ccxt/kuna.py +1 -1
  146. ccxt/latoken.py +6 -0
  147. ccxt/lbank.py +1 -1
  148. ccxt/luno.py +3 -0
  149. ccxt/lykke.py +6 -1
  150. ccxt/mercado.py +4 -1
  151. ccxt/mexc.py +110 -4
  152. ccxt/ndax.py +5 -1
  153. ccxt/novadax.py +5 -1
  154. ccxt/okcoin.py +1 -1
  155. ccxt/okx.py +81 -5
  156. ccxt/onetrading.py +4 -1
  157. ccxt/p2b.py +3 -0
  158. ccxt/phemex.py +1 -1
  159. ccxt/poloniex.py +1 -1
  160. ccxt/pro/__init__.py +1 -1
  161. ccxt/pro/bybit.py +1 -1
  162. ccxt/pro/coinbase.py +28 -28
  163. ccxt/probit.py +4 -1
  164. ccxt/timex.py +3 -0
  165. ccxt/tokocrypto.py +1 -1
  166. ccxt/tradeogre.py +3 -0
  167. ccxt/upbit.py +1 -1
  168. ccxt/wavesexchange.py +4 -1
  169. ccxt/wazirx.py +3 -0
  170. ccxt/whitebit.py +1 -1
  171. ccxt/woo.py +4 -2
  172. ccxt/yobit.py +4 -1
  173. ccxt/zaif.py +1 -1
  174. ccxt/zonda.py +1 -1
  175. {ccxt-4.3.6.dist-info → ccxt-4.3.8.dist-info}/METADATA +4 -4
  176. {ccxt-4.3.6.dist-info → ccxt-4.3.8.dist-info}/RECORD +178 -178
  177. {ccxt-4.3.6.dist-info → ccxt-4.3.8.dist-info}/WHEEL +0 -0
  178. {ccxt-4.3.6.dist-info → ccxt-4.3.8.dist-info}/top_level.txt +0 -0
ccxt/coinlist.py CHANGED
@@ -103,7 +103,11 @@ class coinlist(Exchange, ImplicitAPI):
103
103
  'fetchOrders': True,
104
104
  'fetchOrderTrades': True,
105
105
  'fetchPosition': False,
106
+ 'fetchPositionHistory': False,
107
+ 'fetchPositionMode': False,
106
108
  'fetchPositions': False,
109
+ 'fetchPositionsForSymbol': False,
110
+ 'fetchPositionsHistory': False,
107
111
  'fetchPositionsRisk': False,
108
112
  'fetchPremiumIndexOHLCV': False,
109
113
  'fetchStatus': False,
@@ -1865,7 +1869,7 @@ class coinlist(Exchange, ImplicitAPI):
1865
1869
  # coinlist returns both internal transfers and blockchain transactions
1866
1870
  return self.parse_transactions(response, currency, since, limit)
1867
1871
 
1868
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1872
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1869
1873
  """
1870
1874
  request a withdrawal from CoinList wallet.(Disabled by default. Contact CoinList to apply for an exception.)
1871
1875
  :see: https://trade-docs.coinlist.co/?javascript--nodejs#request-withdrawal-from-wallet
ccxt/coinmate.py CHANGED
@@ -65,8 +65,11 @@ class coinmate(Exchange, ImplicitAPI):
65
65
  'fetchOrderBook': True,
66
66
  'fetchOrders': True,
67
67
  'fetchPosition': False,
68
+ 'fetchPositionHistory': False,
68
69
  'fetchPositionMode': False,
69
70
  'fetchPositions': False,
71
+ 'fetchPositionsForSymbol': False,
72
+ 'fetchPositionsHistory': False,
70
73
  'fetchPositionsRisk': False,
71
74
  'fetchPremiumIndexOHLCV': False,
72
75
  'fetchTicker': True,
@@ -584,7 +587,7 @@ class coinmate(Exchange, ImplicitAPI):
584
587
  },
585
588
  }
586
589
 
587
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
590
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
588
591
  """
589
592
  make a withdrawal
590
593
  :see: https://coinmate.docs.apiary.io/#reference/bitcoin-withdrawal-and-deposit/withdraw-bitcoins/post
ccxt/coinone.py CHANGED
@@ -72,8 +72,11 @@ class coinone(Exchange, ImplicitAPI):
72
72
  'fetchOrder': True,
73
73
  'fetchOrderBook': True,
74
74
  'fetchPosition': False,
75
+ 'fetchPositionHistory': False,
75
76
  'fetchPositionMode': False,
76
77
  'fetchPositions': False,
78
+ 'fetchPositionsForSymbol': False,
79
+ 'fetchPositionsHistory': False,
77
80
  'fetchPositionsRisk': False,
78
81
  'fetchPremiumIndexOHLCV': False,
79
82
  'fetchTicker': True,
ccxt/coinsph.py CHANGED
@@ -108,7 +108,11 @@ class coinsph(Exchange, ImplicitAPI):
108
108
  'fetchOrders': False,
109
109
  'fetchOrderTrades': True,
110
110
  'fetchPosition': False,
111
+ 'fetchPositionHistory': False,
112
+ 'fetchPositionMode': False,
111
113
  'fetchPositions': False,
114
+ 'fetchPositionsForSymbol': False,
115
+ 'fetchPositionsHistory': False,
112
116
  'fetchPositionsRisk': False,
113
117
  'fetchPremiumIndexOHLCV': False,
114
118
  'fetchStatus': True,
@@ -1497,7 +1501,7 @@ class coinsph(Exchange, ImplicitAPI):
1497
1501
  'tierBased': None,
1498
1502
  }
1499
1503
 
1500
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1504
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1501
1505
  """
1502
1506
  make a withdrawal to coins_ph account
1503
1507
  :see: https://coins-docs.github.io/rest-api/#withdrawuser_data
ccxt/coinspot.py CHANGED
@@ -60,8 +60,11 @@ class coinspot(Exchange, ImplicitAPI):
60
60
  'fetchOpenInterestHistory': False,
61
61
  'fetchOrderBook': True,
62
62
  'fetchPosition': False,
63
+ 'fetchPositionHistory': False,
63
64
  'fetchPositionMode': False,
64
65
  'fetchPositions': False,
66
+ 'fetchPositionsForSymbol': False,
67
+ 'fetchPositionsHistory': False,
65
68
  'fetchPositionsRisk': False,
66
69
  'fetchPremiumIndexOHLCV': False,
67
70
  'fetchTicker': True,
ccxt/cryptocom.py CHANGED
@@ -95,8 +95,10 @@ class cryptocom(Exchange, ImplicitAPI):
95
95
  'fetchOrderBook': True,
96
96
  'fetchOrders': True,
97
97
  'fetchPosition': True,
98
+ 'fetchPositionHistory': False,
98
99
  'fetchPositionMode': False,
99
100
  'fetchPositions': True,
101
+ 'fetchPositionsHistory': False,
100
102
  'fetchPremiumIndexOHLCV': False,
101
103
  'fetchSettlementHistory': True,
102
104
  'fetchStatus': False,
@@ -1516,7 +1518,7 @@ class cryptocom(Exchange, ImplicitAPI):
1516
1518
  address = addressString
1517
1519
  return [address, tag]
1518
1520
 
1519
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1521
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1520
1522
  """
1521
1523
  make a withdrawal
1522
1524
  :see: https://exchange-docs.crypto.com/exchange/v1/rest-ws/index.html#private-create-withdrawal
ccxt/delta.py CHANGED
@@ -2480,7 +2480,7 @@ class delta(Exchange, ImplicitAPI):
2480
2480
  'previousFundingDatetime': None,
2481
2481
  }
2482
2482
 
2483
- def add_margin(self, symbol: str, amount, params={}) -> MarginModification:
2483
+ def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
2484
2484
  """
2485
2485
  add margin
2486
2486
  :see: https://docs.delta.exchange/#add-remove-position-margin
@@ -2491,7 +2491,7 @@ class delta(Exchange, ImplicitAPI):
2491
2491
  """
2492
2492
  return self.modify_margin_helper(symbol, amount, 'add', params)
2493
2493
 
2494
- def reduce_margin(self, symbol: str, amount, params={}) -> MarginModification:
2494
+ def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
2495
2495
  """
2496
2496
  remove margin from a position
2497
2497
  :see: https://docs.delta.exchange/#add-remove-position-margin
ccxt/deribit.py CHANGED
@@ -2749,7 +2749,7 @@ class deribit(Exchange, ImplicitAPI):
2749
2749
  }
2750
2750
  return self.safe_string(statuses, status, status)
2751
2751
 
2752
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
2752
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2753
2753
  """
2754
2754
  make a withdrawal
2755
2755
  :see: https://docs.deribit.com/#private-withdraw
ccxt/digifinex.py CHANGED
@@ -2754,7 +2754,7 @@ class digifinex(Exchange, ImplicitAPI):
2754
2754
  #
2755
2755
  return self.parse_transfer(response, currency)
2756
2756
 
2757
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
2757
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2758
2758
  """
2759
2759
  make a withdrawal
2760
2760
  :param str code: unified currency code
@@ -3734,7 +3734,7 @@ class digifinex(Exchange, ImplicitAPI):
3734
3734
  depositWithdrawFees[code] = self.assign_default_deposit_withdraw_fees(depositWithdrawFees[code], currency)
3735
3735
  return depositWithdrawFees
3736
3736
 
3737
- def add_margin(self, symbol: str, amount, params={}) -> MarginModification:
3737
+ def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
3738
3738
  """
3739
3739
  add margin to a position
3740
3740
  :see: https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmargin
@@ -3748,7 +3748,7 @@ class digifinex(Exchange, ImplicitAPI):
3748
3748
  self.check_required_argument('addMargin', side, 'side', ['long', 'short'])
3749
3749
  return self.modify_margin_helper(symbol, amount, 1, params)
3750
3750
 
3751
- def reduce_margin(self, symbol: str, amount, params={}) -> MarginModification:
3751
+ def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
3752
3752
  """
3753
3753
  remove margin from a position
3754
3754
  :see: https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmargin
ccxt/exmo.py CHANGED
@@ -74,7 +74,12 @@ class exmo(Exchange, ImplicitAPI):
74
74
  'fetchOrderBook': True,
75
75
  'fetchOrderBooks': True,
76
76
  'fetchOrderTrades': True,
77
+ 'fetchPosition': False,
78
+ 'fetchPositionHistory': False,
77
79
  'fetchPositionMode': False,
80
+ 'fetchPositions': False,
81
+ 'fetchPositionsHistory': False,
82
+ 'fetchPositionsRisk': False,
78
83
  'fetchPremiumIndexOHLCV': False,
79
84
  'fetchTicker': True,
80
85
  'fetchTickers': True,
@@ -282,7 +287,7 @@ class exmo(Exchange, ImplicitAPI):
282
287
  'datetime': None,
283
288
  }
284
289
 
285
- def reduce_margin(self, symbol: str, amount, params={}) -> MarginModification:
290
+ def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
286
291
  """
287
292
  remove margin from a position
288
293
  :see: https://documenter.getpostman.com/view/10287440/SzYXWKPi#eebf9f25-0289-4946-9482-89872c738449
@@ -293,7 +298,7 @@ class exmo(Exchange, ImplicitAPI):
293
298
  """
294
299
  return self.modify_margin_helper(symbol, amount, 'reduce', params)
295
300
 
296
- def add_margin(self, symbol: str, amount, params={}) -> MarginModification:
301
+ def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
297
302
  """
298
303
  add margin
299
304
  :see: https://documenter.getpostman.com/view/10287440/SzYXWKPi#143ef808-79ca-4e49-9e79-a60ea4d8c0e3
@@ -1980,7 +1985,7 @@ class exmo(Exchange, ImplicitAPI):
1980
1985
  return self.markets[symbols[0]]
1981
1986
  return None
1982
1987
 
1983
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1988
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1984
1989
  """
1985
1990
  make a withdrawal
1986
1991
  :see: https://documenter.getpostman.com/view/10287440/SzYXWKPi#3ab9c34d-ad58-4f87-9c57-2e2ea88a8325
ccxt/gate.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.gate import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currencies, Currency, FundingHistory, Greeks, Int, Leverage, Leverages, MarginModification, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
9
+ from ccxt.base.types import Balances, Currencies, Currency, FundingHistory, Greeks, Int, Leverage, Leverages, MarginModification, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -156,8 +156,10 @@ class gate(Exchange, ImplicitAPI):
156
156
  'fetchOrder': True,
157
157
  'fetchOrderBook': True,
158
158
  'fetchPosition': True,
159
+ 'fetchPositionHistory': 'emulated',
159
160
  'fetchPositionMode': False,
160
161
  'fetchPositions': True,
162
+ 'fetchPositionsHistory': True,
161
163
  'fetchPremiumIndexOHLCV': False,
162
164
  'fetchSettlementHistory': True,
163
165
  'fetchTicker': True,
@@ -672,7 +674,6 @@ class gate(Exchange, ImplicitAPI):
672
674
  'option': 'options',
673
675
  'options': 'options',
674
676
  },
675
- 'defaultType': 'spot',
676
677
  'swap': {
677
678
  'fetchMarkets': {
678
679
  'settlementCurrencies': ['usdt', 'btc'],
@@ -3391,7 +3392,7 @@ class gate(Exchange, ImplicitAPI):
3391
3392
  response = self.privateWalletGetWithdrawals(self.extend(request, params))
3392
3393
  return self.parse_transactions(response, currency)
3393
3394
 
3394
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
3395
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
3395
3396
  """
3396
3397
  make a withdrawal
3397
3398
  :see: https://www.gate.io/docs/developers/apiv4/en/#withdraw
@@ -4946,37 +4947,61 @@ class gate(Exchange, ImplicitAPI):
4946
4947
  # "pending_orders": 0
4947
4948
  # }
4948
4949
  #
4950
+ # fetchPositionsHistory(swap and future)
4951
+ #
4952
+ # {
4953
+ # "contract": "SLERF_USDT", # Futures contract
4954
+ # "text": "web", # Text of close order
4955
+ # "long_price": "0.766306", # When 'side' is 'long,' it indicates the opening average price; when 'side' is 'short,' it indicates the closing average price.
4956
+ # "pnl": "-23.41702352", # PNL
4957
+ # "pnl_pnl": "-22.7187", # Position P/L
4958
+ # "pnl_fee": "-0.06527125", # Transaction Fees
4959
+ # "pnl_fund": "-0.63305227", # Funding Fees
4960
+ # "accum_size": "100",
4961
+ # "time": 1711279263, # Position close time
4962
+ # "short_price": "0.539119", # When 'side' is 'long,' it indicates the opening average price; when 'side' is 'short,' it indicates the closing average price
4963
+ # "side": "long", # Position side, long or short
4964
+ # "max_size": "100", # Max Trade Size
4965
+ # "first_open_time": 1711037985 # First Open Time
4966
+ # }
4967
+ #
4949
4968
  contract = self.safe_string(position, 'contract')
4950
4969
  market = self.safe_market(contract, market, '_', 'contract')
4951
- size = self.safe_string(position, 'size')
4952
- side = None
4953
- if Precise.string_gt(size, '0'):
4954
- side = 'long'
4955
- elif Precise.string_lt(size, '0'):
4956
- side = 'short'
4970
+ size = self.safe_string_2(position, 'size', 'accum_size')
4971
+ side = self.safe_string(position, 'side')
4972
+ if side is None:
4973
+ if Precise.string_gt(size, '0'):
4974
+ side = 'long'
4975
+ elif Precise.string_lt(size, '0'):
4976
+ side = 'short'
4957
4977
  maintenanceRate = self.safe_string(position, 'maintenance_rate')
4958
4978
  notional = self.safe_string(position, 'value')
4959
4979
  leverage = self.safe_string(position, 'leverage')
4960
4980
  marginMode = None
4961
- if leverage == '0':
4962
- marginMode = 'cross'
4963
- else:
4964
- marginMode = 'isolated'
4965
- unrealisedPnl = self.safe_string(position, 'unrealised_pnl')
4981
+ if leverage is not None:
4982
+ if leverage == '0':
4983
+ marginMode = 'cross'
4984
+ else:
4985
+ marginMode = 'isolated'
4966
4986
  # Initial Position Margin = ( Position Value / Leverage ) + Close Position Fee
4967
4987
  # *The default leverage under the full position is the highest leverage in the market.
4968
4988
  # *Trading fee is charged Fee Rate(0.075%).
4969
- takerFee = '0.00075'
4970
- feePaid = Precise.string_mul(takerFee, notional)
4971
- initialMarginString = Precise.string_add(Precise.string_div(notional, leverage), feePaid)
4972
- timestamp = self.safe_timestamp(position, 'open_time')
4989
+ feePaid = self.safe_string(position, 'pnl_fee')
4990
+ initialMarginString = None
4991
+ if feePaid is None:
4992
+ takerFee = '0.00075'
4993
+ feePaid = Precise.string_mul(takerFee, notional)
4994
+ initialMarginString = Precise.string_add(Precise.string_div(notional, leverage), feePaid)
4995
+ timestamp = self.safe_timestamp_2(position, 'open_time', 'first_open_time')
4996
+ if timestamp == 0:
4997
+ timestamp = None
4973
4998
  return self.safe_position({
4974
4999
  'info': position,
4975
5000
  'id': None,
4976
5001
  'symbol': self.safe_string(market, 'symbol'),
4977
5002
  'timestamp': timestamp,
4978
5003
  'datetime': self.iso8601(timestamp),
4979
- 'lastUpdateTimestamp': self.safe_timestamp(position, 'update_time'),
5004
+ 'lastUpdateTimestamp': self.safe_timestamp_2(position, 'update_time', 'time'),
4980
5005
  'initialMargin': self.parse_number(initialMarginString),
4981
5006
  'initialMarginPercentage': self.parse_number(Precise.string_div(initialMarginString, notional)),
4982
5007
  'maintenanceMargin': self.parse_number(Precise.string_mul(maintenanceRate, notional)),
@@ -4984,11 +5009,10 @@ class gate(Exchange, ImplicitAPI):
4984
5009
  'entryPrice': self.safe_number(position, 'entry_price'),
4985
5010
  'notional': self.parse_number(notional),
4986
5011
  'leverage': self.safe_number(position, 'leverage'),
4987
- 'unrealizedPnl': self.parse_number(unrealisedPnl),
4988
- 'realizedPnl': self.safe_number(position, 'realised_pnl'),
5012
+ 'unrealizedPnl': self.safe_number(position, 'unrealised_pnl'),
5013
+ 'realizedPnl': self.safe_number_2(position, 'realised_pnl', 'pnl'),
4989
5014
  'contracts': self.parse_number(Precise.string_abs(size)),
4990
5015
  'contractSize': self.safe_number(market, 'contractSize'),
4991
- # 'realisedPnl': position['realised_pnl'],
4992
5016
  'marginRatio': None,
4993
5017
  'liquidationPrice': self.safe_number(position, 'liq_price'),
4994
5018
  'markPrice': self.safe_number(position, 'mark_price'),
@@ -5697,7 +5721,7 @@ class gate(Exchange, ImplicitAPI):
5697
5721
  'datetime': None,
5698
5722
  }
5699
5723
 
5700
- def reduce_margin(self, symbol: str, amount, params={}) -> MarginModification:
5724
+ def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
5701
5725
  """
5702
5726
  remove margin from a position
5703
5727
  :see: https://www.gate.io/docs/developers/apiv4/en/#update-position-margin
@@ -5709,7 +5733,7 @@ class gate(Exchange, ImplicitAPI):
5709
5733
  """
5710
5734
  return self.modify_margin_helper(symbol, -amount, params)
5711
5735
 
5712
- def add_margin(self, symbol: str, amount, params={}) -> MarginModification:
5736
+ def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
5713
5737
  """
5714
5738
  add margin
5715
5739
  :see: https://www.gate.io/docs/developers/apiv4/en/#update-position-margin
@@ -6868,6 +6892,70 @@ class gate(Exchange, ImplicitAPI):
6868
6892
  'quoteVolume': None,
6869
6893
  }
6870
6894
 
6895
+ def fetch_positions_history(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
6896
+ """
6897
+ fetches historical positions
6898
+ :see: https://www.gate.io/docs/developers/apiv4/#list-position-close-history
6899
+ :see: https://www.gate.io/docs/developers/apiv4/#list-position-close-history-2
6900
+ :param str[] symbols: unified conract symbols, must all have the same settle currency and the same market type
6901
+ :param int [since]: the earliest time in ms to fetch positions for
6902
+ :param int [limit]: the maximum amount of records to fetch, default=1000
6903
+ :param dict params: extra parameters specific to the exchange api endpoint
6904
+ :param int [params.until]: the latest time in ms to fetch positions for
6905
+ *
6906
+ * EXCHANGE SPECIFIC PARAMETERS
6907
+ :param int offset: list offset, starting from 0
6908
+ :param str side: long or short
6909
+ :param str pnl: query profit or loss
6910
+ :returns dict[]: a list of `position structures <https://docs.ccxt.com/#/?id=position-structure>`
6911
+ """
6912
+ self.load_markets()
6913
+ market = None
6914
+ if symbols is not None:
6915
+ symbolsLength = len(symbols)
6916
+ if symbolsLength == 1:
6917
+ market = self.market(symbols[0])
6918
+ marketType = None
6919
+ marketType, params = self.handle_market_type_and_params('fetchPositionsHistory', market, params, 'swap')
6920
+ until = self.safe_integer(params, 'until')
6921
+ params = self.omit(params, 'until')
6922
+ request = {}
6923
+ request, params = self.prepare_request(market, marketType, params)
6924
+ if limit is not None:
6925
+ request['limit'] = limit
6926
+ if since is not None:
6927
+ request['from'] = self.parse_to_int(since / 1000)
6928
+ if until is not None:
6929
+ request['to'] = self.parse_to_int(until / 1000)
6930
+ response = None
6931
+ if marketType == 'swap':
6932
+ response = self.privateFuturesGetSettlePositionClose(self.extend(request, params))
6933
+ elif marketType == 'future':
6934
+ response = self.privateDeliveryGetSettlePositionClose(self.extend(request, params))
6935
+ else:
6936
+ raise NotSupported(self.id + ' fetchPositionsHistory() does not support markets of type ' + marketType)
6937
+ #
6938
+ # [
6939
+ # {
6940
+ # "contract": "SLERF_USDT",
6941
+ # "text": "web",
6942
+ # "long_price": "0.766306",
6943
+ # "pnl": "-23.41702352",
6944
+ # "pnl_pnl": "-22.7187",
6945
+ # "pnl_fee": "-0.06527125",
6946
+ # "pnl_fund": "-0.63305227",
6947
+ # "accum_size": "100",
6948
+ # "time": 1711279263,
6949
+ # "short_price": "0.539119",
6950
+ # "side": "long",
6951
+ # "max_size": "100",
6952
+ # "first_open_time": 1711037985
6953
+ # },
6954
+ # ...
6955
+ # ]
6956
+ #
6957
+ return self.parse_positions(response, symbols, params)
6958
+
6871
6959
  def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
6872
6960
  if response is None:
6873
6961
  return None
ccxt/gemini.py CHANGED
@@ -1522,7 +1522,7 @@ class gemini(Exchange, ImplicitAPI):
1522
1522
  response = self.privatePostV1Mytrades(self.extend(request, params))
1523
1523
  return self.parse_trades(response, market, since, limit)
1524
1524
 
1525
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1525
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1526
1526
  """
1527
1527
  make a withdrawal
1528
1528
  :see: https://docs.gemini.com/rest-api/#withdraw-crypto-funds
ccxt/hitbtc.py CHANGED
@@ -2491,7 +2491,7 @@ class hitbtc(Exchange, ImplicitAPI):
2491
2491
  'info': response,
2492
2492
  }
2493
2493
 
2494
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
2494
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2495
2495
  """
2496
2496
  make a withdrawal
2497
2497
  :see: https://api.hitbtc.com/#withdraw-crypto
@@ -3008,8 +3008,9 @@ class hitbtc(Exchange, ImplicitAPI):
3008
3008
  if market['swap']:
3009
3009
  if leverage is None:
3010
3010
  raise ArgumentsRequired(self.id + ' modifyMarginHelper() requires a leverage parameter for swap markets')
3011
- if amount != 0:
3012
- amount = self.amount_to_precision(symbol, amount)
3011
+ stringAmount = self.number_to_string(amount)
3012
+ if stringAmount != '0':
3013
+ amount = self.amount_to_precision(symbol, stringAmount)
3013
3014
  else:
3014
3015
  amount = '0'
3015
3016
  request = {
@@ -3091,7 +3092,7 @@ class hitbtc(Exchange, ImplicitAPI):
3091
3092
  'datetime': datetime,
3092
3093
  }
3093
3094
 
3094
- def reduce_margin(self, symbol: str, amount, params={}) -> MarginModification:
3095
+ def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
3095
3096
  """
3096
3097
  remove margin from a position
3097
3098
  :see: https://api.hitbtc.com/#create-update-margin-account-2
@@ -3103,11 +3104,11 @@ class hitbtc(Exchange, ImplicitAPI):
3103
3104
  :param bool [params.margin]: True for reducing spot-margin
3104
3105
  :returns dict: a `margin structure <https://docs.ccxt.com/#/?id=reduce-margin-structure>`
3105
3106
  """
3106
- if amount != 0:
3107
+ if self.number_to_string(amount) != '0':
3107
3108
  raise BadRequest(self.id + ' reduceMargin() on hitbtc requires the amount to be 0 and that will remove the entire margin amount')
3108
3109
  return self.modify_margin_helper(symbol, amount, 'reduce', params)
3109
3110
 
3110
- def add_margin(self, symbol: str, amount, params={}) -> MarginModification:
3111
+ def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
3111
3112
  """
3112
3113
  add margin
3113
3114
  :see: https://api.hitbtc.com/#create-update-margin-account-2
ccxt/hollaex.py CHANGED
@@ -1609,7 +1609,7 @@ class hollaex(Exchange, ImplicitAPI):
1609
1609
  'fee': fee,
1610
1610
  }
1611
1611
 
1612
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1612
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1613
1613
  """
1614
1614
  make a withdrawal
1615
1615
  :see: https://apidocs.hollaex.com/#withdrawal
ccxt/htx.py CHANGED
@@ -120,7 +120,9 @@ class htx(Exchange, ImplicitAPI):
120
120
  'fetchOrders': True,
121
121
  'fetchOrderTrades': True,
122
122
  'fetchPosition': True,
123
+ 'fetchPositionHistory': 'emulated',
123
124
  'fetchPositions': True,
125
+ 'fetchPositionsHistory': False,
124
126
  'fetchPositionsRisk': False,
125
127
  'fetchPremiumIndexOHLCV': True,
126
128
  'fetchSettlementHistory': True,
@@ -5975,7 +5977,7 @@ class htx(Exchange, ImplicitAPI):
5975
5977
  }
5976
5978
  return self.safe_string(statuses, status, status)
5977
5979
 
5978
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
5980
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
5979
5981
  """
5980
5982
  make a withdrawal
5981
5983
  :param str code: unified currency code
ccxt/huobijp.py CHANGED
@@ -1696,7 +1696,7 @@ class huobijp(Exchange, ImplicitAPI):
1696
1696
  }
1697
1697
  return self.safe_string(statuses, status, status)
1698
1698
 
1699
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1699
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1700
1700
  """
1701
1701
  make a withdrawal
1702
1702
  :param str code: unified currency code
ccxt/hyperliquid.py CHANGED
@@ -2126,7 +2126,7 @@ class hyperliquid(Exchange, ImplicitAPI):
2126
2126
  #
2127
2127
  return response
2128
2128
 
2129
- def add_margin(self, symbol: str, amount, params={}) -> MarginModification:
2129
+ def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
2130
2130
  """
2131
2131
  add margin
2132
2132
  :see: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#update-isolated-margin
@@ -2137,7 +2137,7 @@ class hyperliquid(Exchange, ImplicitAPI):
2137
2137
  """
2138
2138
  return self.modify_margin_helper(symbol, amount, 'add', params)
2139
2139
 
2140
- def reduce_margin(self, symbol: str, amount, params={}) -> MarginModification:
2140
+ def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
2141
2141
  """
2142
2142
  :see: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#update-isolated-margin
2143
2143
  remove margin from a position
ccxt/idex.py CHANGED
@@ -88,8 +88,11 @@ class idex(Exchange, ImplicitAPI):
88
88
  'fetchOrderBook': True,
89
89
  'fetchOrders': False,
90
90
  'fetchPosition': False,
91
+ 'fetchPositionHistory': False,
91
92
  'fetchPositionMode': False,
92
93
  'fetchPositions': False,
94
+ 'fetchPositionsForSymbol': False,
95
+ 'fetchPositionsHistory': False,
93
96
  'fetchPositionsRisk': False,
94
97
  'fetchPremiumIndexOHLCV': False,
95
98
  'fetchStatus': True,
@@ -1287,7 +1290,7 @@ class idex(Exchange, ImplicitAPI):
1287
1290
  response = self.privatePostOrders(request)
1288
1291
  return self.parse_order(response, market)
1289
1292
 
1290
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1293
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1291
1294
  """
1292
1295
  make a withdrawal
1293
1296
  :see: https://api-docs-v3.idex.io/#withdraw-funds
@@ -64,8 +64,11 @@ class independentreserve(Exchange, ImplicitAPI):
64
64
  'fetchOrder': True,
65
65
  'fetchOrderBook': True,
66
66
  'fetchPosition': False,
67
+ 'fetchPositionHistory': False,
67
68
  'fetchPositionMode': False,
68
69
  'fetchPositions': False,
70
+ 'fetchPositionsForSymbol': False,
71
+ 'fetchPositionsHistory': False,
69
72
  'fetchPositionsRisk': False,
70
73
  'fetchPremiumIndexOHLCV': False,
71
74
  'fetchTicker': True,
ccxt/indodax.py CHANGED
@@ -78,8 +78,11 @@ class indodax(Exchange, ImplicitAPI):
78
78
  'fetchOrderBook': True,
79
79
  'fetchOrders': False,
80
80
  'fetchPosition': False,
81
+ 'fetchPositionHistory': False,
81
82
  'fetchPositionMode': False,
82
83
  'fetchPositions': False,
84
+ 'fetchPositionsForSymbol': False,
85
+ 'fetchPositionsHistory': False,
83
86
  'fetchPositionsRisk': False,
84
87
  'fetchPremiumIndexOHLCV': False,
85
88
  'fetchTicker': True,
@@ -951,7 +954,7 @@ class indodax(Exchange, ImplicitAPI):
951
954
  transactions = self.array_concat(withdraws, deposits)
952
955
  return self.parse_transactions(transactions, currency, since, limit)
953
956
 
954
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
957
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
955
958
  """
956
959
  make a withdrawal
957
960
  :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#withdraw-coin-endpoints
ccxt/kraken.py CHANGED
@@ -2522,7 +2522,7 @@ class kraken(Exchange, ImplicitAPI):
2522
2522
  'info': depositAddress,
2523
2523
  }
2524
2524
 
2525
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
2525
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2526
2526
  """
2527
2527
  make a withdrawal
2528
2528
  :see: https://docs.kraken.com/rest/#tag/Funding/operation/withdrawFunds
ccxt/kucoin.py CHANGED
@@ -107,7 +107,9 @@ class kucoin(Exchange, ImplicitAPI):
107
107
  'fetchOrderBooks': False,
108
108
  'fetchOrdersByStatus': True,
109
109
  'fetchOrderTrades': True,
110
+ 'fetchPositionHistory': False,
110
111
  'fetchPositionMode': False,
112
+ 'fetchPositionsHistory': False,
111
113
  'fetchPremiumIndexOHLCV': False,
112
114
  'fetchStatus': True,
113
115
  'fetchTicker': True,
@@ -3003,7 +3005,7 @@ class kucoin(Exchange, ImplicitAPI):
3003
3005
  'tierBased': True,
3004
3006
  }
3005
3007
 
3006
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
3008
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
3007
3009
  """
3008
3010
  make a withdrawal
3009
3011
  :see: https://www.kucoin.com/docs/rest/funding/withdrawals/apply-withdraw
ccxt/kucoinfutures.py CHANGED
@@ -91,8 +91,10 @@ class kucoinfutures(kucoin, ImplicitAPI):
91
91
  'fetchOrder': True,
92
92
  'fetchOrderBook': True,
93
93
  'fetchPosition': True,
94
+ 'fetchPositionHistory': False,
94
95
  'fetchPositionMode': False,
95
96
  'fetchPositions': True,
97
+ 'fetchPositionsHistory': False,
96
98
  'fetchPremiumIndexOHLCV': False,
97
99
  'fetchStatus': True,
98
100
  'fetchTicker': True,
@@ -1425,7 +1427,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
1425
1427
  #
1426
1428
  return self.safe_value(response, 'data')
1427
1429
 
1428
- def add_margin(self, symbol: str, amount, params={}) -> MarginModification:
1430
+ def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
1429
1431
  """
1430
1432
  add margin
1431
1433
  :see: https://www.kucoin.com/docs/rest/futures-trading/positions/add-margin-manually