ccxt 4.2.100__py2.py3-none-any.whl → 4.3.1__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/async_support/__init__.py +1 -1
- ccxt/async_support/base/exchange.py +1 -1
- ccxt/async_support/binance.py +55 -1
- ccxt/async_support/bitget.py +60 -2
- ccxt/async_support/bybit.py +1 -1
- ccxt/async_support/coinex.py +54 -58
- ccxt/async_support/okx.py +74 -5
- ccxt/async_support/woo.py +38 -0
- ccxt/base/exchange.py +1 -1
- ccxt/binance.py +55 -1
- ccxt/bitget.py +60 -2
- ccxt/bybit.py +1 -1
- ccxt/coinex.py +54 -58
- ccxt/okx.py +74 -5
- ccxt/pro/__init__.py +1 -1
- ccxt/pro/kraken.py +2 -2
- ccxt/woo.py +38 -0
- {ccxt-4.2.100.dist-info → ccxt-4.3.1.dist-info}/METADATA +4 -4
- {ccxt-4.2.100.dist-info → ccxt-4.3.1.dist-info}/RECORD +22 -22
- {ccxt-4.2.100.dist-info → ccxt-4.3.1.dist-info}/WHEEL +0 -0
- {ccxt-4.2.100.dist-info → ccxt-4.3.1.dist-info}/top_level.txt +0 -0
ccxt/bitget.py
CHANGED
@@ -58,6 +58,7 @@ class bitget(Exchange, ImplicitAPI):
|
|
58
58
|
'cancelOrders': True,
|
59
59
|
'closeAllPositions': True,
|
60
60
|
'closePosition': True,
|
61
|
+
'createConvertTrade': True,
|
61
62
|
'createDepositAddress': False,
|
62
63
|
'createMarketBuyOrderWithCost': True,
|
63
64
|
'createMarketOrderWithCost': False,
|
@@ -7866,8 +7867,8 @@ class bitget(Exchange, ImplicitAPI):
|
|
7866
7867
|
"""
|
7867
7868
|
self.load_markets()
|
7868
7869
|
request = {
|
7869
|
-
'fromCoin': fromCode
|
7870
|
-
'toCoin': toCode
|
7870
|
+
'fromCoin': fromCode,
|
7871
|
+
'toCoin': toCode,
|
7871
7872
|
'fromCoinSize': self.number_to_string(amount),
|
7872
7873
|
}
|
7873
7874
|
response = self.privateConvertGetV2ConvertQuotedPrice(self.extend(request, params))
|
@@ -7894,6 +7895,54 @@ class bitget(Exchange, ImplicitAPI):
|
|
7894
7895
|
toCurrency = self.currency(toCurrencyId)
|
7895
7896
|
return self.parse_conversion(data, fromCurrency, toCurrency)
|
7896
7897
|
|
7898
|
+
def create_convert_trade(self, id: str, fromCode: str, toCode: str, amount: Num = None, params={}) -> Conversion:
|
7899
|
+
"""
|
7900
|
+
convert from one currency to another
|
7901
|
+
:see: https://www.bitget.com/api-doc/common/convert/Trade
|
7902
|
+
:param str id: the id of the trade that you want to make
|
7903
|
+
:param str fromCode: the currency that you want to sell and convert from
|
7904
|
+
:param str toCode: the currency that you want to buy and convert into
|
7905
|
+
:param float amount: how much you want to trade in units of the from currency
|
7906
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
7907
|
+
:param str params['price']: the price of the conversion, obtained from fetchConvertQuote()
|
7908
|
+
:param str params['toAmount']: the amount you want to trade in units of the toCurrency, obtained from fetchConvertQuote()
|
7909
|
+
:returns dict: a `conversion structure <https://docs.ccxt.com/#/?id=conversion-structure>`
|
7910
|
+
"""
|
7911
|
+
self.load_markets()
|
7912
|
+
price = self.safe_string_2(params, 'price', 'cnvtPrice')
|
7913
|
+
if price is None:
|
7914
|
+
raise ArgumentsRequired(self.id + ' createConvertTrade() requires a price parameter')
|
7915
|
+
toAmount = self.safe_string_2(params, 'toAmount', 'toCoinSize')
|
7916
|
+
if toAmount is None:
|
7917
|
+
raise ArgumentsRequired(self.id + ' createConvertTrade() requires a toAmount parameter')
|
7918
|
+
params = self.omit(params, ['price', 'toAmount'])
|
7919
|
+
request = {
|
7920
|
+
'traceId': id,
|
7921
|
+
'fromCoin': fromCode,
|
7922
|
+
'toCoin': toCode,
|
7923
|
+
'fromCoinSize': self.number_to_string(amount),
|
7924
|
+
'toCoinSize': toAmount,
|
7925
|
+
'cnvtPrice': price,
|
7926
|
+
}
|
7927
|
+
response = self.privateConvertPostV2ConvertTrade(self.extend(request, params))
|
7928
|
+
#
|
7929
|
+
# {
|
7930
|
+
# "code": "00000",
|
7931
|
+
# "msg": "success",
|
7932
|
+
# "requestTime": 1712123746203,
|
7933
|
+
# "data": {
|
7934
|
+
# "cnvtPrice": "0.99940076",
|
7935
|
+
# "toCoin": "USDC",
|
7936
|
+
# "toCoinSize": "4.99700379",
|
7937
|
+
# "ts": "1712123746217"
|
7938
|
+
# }
|
7939
|
+
# }
|
7940
|
+
#
|
7941
|
+
data = self.safe_dict(response, 'data', {})
|
7942
|
+
toCurrencyId = self.safe_string(data, 'toCoin', toCode)
|
7943
|
+
toCurrency = self.currency(toCurrencyId)
|
7944
|
+
return self.parse_conversion(data, None, toCurrency)
|
7945
|
+
|
7897
7946
|
def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
|
7898
7947
|
#
|
7899
7948
|
# fetchConvertQuote
|
@@ -7908,6 +7957,15 @@ class bitget(Exchange, ImplicitAPI):
|
|
7908
7957
|
# "fee": "0"
|
7909
7958
|
# }
|
7910
7959
|
#
|
7960
|
+
# createConvertTrade
|
7961
|
+
#
|
7962
|
+
# {
|
7963
|
+
# "cnvtPrice": "0.99940076",
|
7964
|
+
# "toCoin": "USDC",
|
7965
|
+
# "toCoinSize": "4.99700379",
|
7966
|
+
# "ts": "1712123746217"
|
7967
|
+
# }
|
7968
|
+
#
|
7911
7969
|
timestamp = self.safe_integer(conversion, 'ts')
|
7912
7970
|
fromCoin = self.safe_string(conversion, 'fromCoin')
|
7913
7971
|
fromCode = self.safe_currency_code(fromCoin, fromCurrency)
|
ccxt/bybit.py
CHANGED
@@ -4997,7 +4997,7 @@ class bybit(Exchange, ImplicitAPI):
|
|
4997
4997
|
coin = self.safe_string(result, 'coin')
|
4998
4998
|
currency = self.currency(coin)
|
4999
4999
|
parsed = self.parse_deposit_addresses(chains, [currency['code']], False, {
|
5000
|
-
'currency': currency['
|
5000
|
+
'currency': currency['code'],
|
5001
5001
|
})
|
5002
5002
|
return self.index_by(parsed, 'network')
|
5003
5003
|
|
ccxt/coinex.py
CHANGED
@@ -616,54 +616,52 @@ class coinex(Exchange, ImplicitAPI):
|
|
616
616
|
def fetch_markets(self, params={}) -> List[Market]:
|
617
617
|
"""
|
618
618
|
retrieves data on all markets for coinex
|
619
|
-
:see: https://
|
620
|
-
:see: https://
|
619
|
+
:see: https://docs.coinex.com/api/v2/spot/market/http/list-market
|
620
|
+
:see: https://docs.coinex.com/api/v2/futures/market/http/list-market
|
621
621
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
622
622
|
:returns dict[]: an array of objects representing market data
|
623
623
|
"""
|
624
|
-
|
624
|
+
promisesUnresolved = [
|
625
625
|
self.fetch_spot_markets(params),
|
626
626
|
self.fetch_contract_markets(params),
|
627
627
|
]
|
628
|
-
promises =
|
628
|
+
promises = promisesUnresolved
|
629
629
|
spotMarkets = promises[0]
|
630
630
|
swapMarkets = promises[1]
|
631
631
|
return self.array_concat(spotMarkets, swapMarkets)
|
632
632
|
|
633
633
|
def fetch_spot_markets(self, params):
|
634
|
-
response = self.
|
634
|
+
response = self.v2PublicGetSpotMarket(params)
|
635
635
|
#
|
636
636
|
# {
|
637
637
|
# "code": 0,
|
638
|
-
# "data":
|
639
|
-
#
|
640
|
-
# "
|
641
|
-
# "
|
642
|
-
# "
|
643
|
-
# "
|
644
|
-
# "
|
645
|
-
# "
|
646
|
-
# "
|
647
|
-
# "
|
648
|
-
#
|
649
|
-
#
|
638
|
+
# "data": [
|
639
|
+
# {
|
640
|
+
# "base_ccy": "SORA",
|
641
|
+
# "base_ccy_precision": 8,
|
642
|
+
# "is_amm_available": True,
|
643
|
+
# "is_margin_available": False,
|
644
|
+
# "maker_fee_rate": "0.003",
|
645
|
+
# "market": "SORAUSDT",
|
646
|
+
# "min_amount": "500",
|
647
|
+
# "quote_ccy": "USDT",
|
648
|
+
# "quote_ccy_precision": 6,
|
649
|
+
# "taker_fee_rate": "0.003"
|
650
|
+
# },
|
651
|
+
# ],
|
652
|
+
# "message": "OK"
|
650
653
|
# }
|
651
654
|
#
|
652
|
-
markets = self.
|
655
|
+
markets = self.safe_list(response, 'data', [])
|
653
656
|
result = []
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
tradingName = self.safe_string(market, 'trading_name')
|
660
|
-
baseId = tradingName
|
661
|
-
quoteId = self.safe_string(market, 'pricing_name')
|
657
|
+
for i in range(0, len(markets)):
|
658
|
+
market = markets[i]
|
659
|
+
id = self.safe_string(market, 'market')
|
660
|
+
baseId = self.safe_string(market, 'base_ccy')
|
661
|
+
quoteId = self.safe_string(market, 'quote_ccy')
|
662
662
|
base = self.safe_currency_code(baseId)
|
663
663
|
quote = self.safe_currency_code(quoteId)
|
664
664
|
symbol = base + '/' + quote
|
665
|
-
if tradingName == id:
|
666
|
-
symbol = id
|
667
665
|
result.append({
|
668
666
|
'id': id,
|
669
667
|
'symbol': symbol,
|
@@ -691,8 +689,8 @@ class coinex(Exchange, ImplicitAPI):
|
|
691
689
|
'strike': None,
|
692
690
|
'optionType': None,
|
693
691
|
'precision': {
|
694
|
-
'amount': self.parse_number(self.parse_precision(self.safe_string(market, '
|
695
|
-
'price': self.parse_number(self.parse_precision(self.safe_string(market, '
|
692
|
+
'amount': self.parse_number(self.parse_precision(self.safe_string(market, 'base_ccy_precision'))),
|
693
|
+
'price': self.parse_number(self.parse_precision(self.safe_string(market, 'quote_ccy_precision'))),
|
696
694
|
},
|
697
695
|
'limits': {
|
698
696
|
'leverage': {
|
@@ -718,45 +716,43 @@ class coinex(Exchange, ImplicitAPI):
|
|
718
716
|
return result
|
719
717
|
|
720
718
|
def fetch_contract_markets(self, params):
|
721
|
-
response = self.
|
719
|
+
response = self.v2PublicGetFuturesMarket(params)
|
722
720
|
#
|
723
721
|
# {
|
724
722
|
# "code": 0,
|
725
723
|
# "data": [
|
726
724
|
# {
|
727
|
-
# "
|
728
|
-
# "
|
729
|
-
# "
|
730
|
-
# "
|
731
|
-
# "
|
732
|
-
# "
|
733
|
-
# "
|
734
|
-
# "
|
735
|
-
# "
|
736
|
-
# "
|
737
|
-
# "
|
738
|
-
# "tick_size": "0.1", # Min. Price Increment
|
739
|
-
# "available": True
|
725
|
+
# "base_ccy": "BTC",
|
726
|
+
# "base_ccy_precision": 8,
|
727
|
+
# "contract_type": "inverse",
|
728
|
+
# "leverage": ["1","2","3","5","8","10","15","20","30","50","100"],
|
729
|
+
# "maker_fee_rate": "0",
|
730
|
+
# "market": "BTCUSD",
|
731
|
+
# "min_amount": "10",
|
732
|
+
# "open_interest_volume": "2566879",
|
733
|
+
# "quote_ccy": "USD",
|
734
|
+
# "quote_ccy_precision": 2,
|
735
|
+
# "taker_fee_rate": "0"
|
740
736
|
# },
|
741
737
|
# ],
|
742
738
|
# "message": "OK"
|
743
739
|
# }
|
744
740
|
#
|
745
|
-
markets = self.
|
741
|
+
markets = self.safe_list(response, 'data', [])
|
746
742
|
result = []
|
747
743
|
for i in range(0, len(markets)):
|
748
744
|
entry = markets[i]
|
749
745
|
fees = self.fees
|
750
|
-
leverages = self.
|
751
|
-
subType = self.
|
752
|
-
linear = (subType ==
|
753
|
-
inverse = (subType ==
|
754
|
-
id = self.safe_string(entry, '
|
755
|
-
baseId = self.safe_string(entry, '
|
756
|
-
quoteId = self.safe_string(entry, '
|
746
|
+
leverages = self.safe_list(entry, 'leverage', [])
|
747
|
+
subType = self.safe_string(entry, 'contract_type')
|
748
|
+
linear = (subType == 'linear')
|
749
|
+
inverse = (subType == 'inverse')
|
750
|
+
id = self.safe_string(entry, 'market')
|
751
|
+
baseId = self.safe_string(entry, 'base_ccy')
|
752
|
+
quoteId = self.safe_string(entry, 'quote_ccy')
|
757
753
|
base = self.safe_currency_code(baseId)
|
758
754
|
quote = self.safe_currency_code(quoteId)
|
759
|
-
settleId = 'USDT' if (subType ==
|
755
|
+
settleId = 'USDT' if (subType == 'linear') else baseId
|
760
756
|
settle = self.safe_currency_code(settleId)
|
761
757
|
symbol = base + '/' + quote + ':' + settle
|
762
758
|
leveragesLength = len(leverages)
|
@@ -775,20 +771,20 @@ class coinex(Exchange, ImplicitAPI):
|
|
775
771
|
'swap': True,
|
776
772
|
'future': False,
|
777
773
|
'option': False,
|
778
|
-
'active':
|
774
|
+
'active': None,
|
779
775
|
'contract': True,
|
780
776
|
'linear': linear,
|
781
777
|
'inverse': inverse,
|
782
778
|
'taker': fees['trading']['taker'],
|
783
779
|
'maker': fees['trading']['maker'],
|
784
|
-
'contractSize': self.
|
780
|
+
'contractSize': self.parse_number('1'),
|
785
781
|
'expiry': None,
|
786
782
|
'expiryDatetime': None,
|
787
783
|
'strike': None,
|
788
784
|
'optionType': None,
|
789
785
|
'precision': {
|
790
|
-
'amount': self.parse_number(self.parse_precision(self.safe_string(entry, '
|
791
|
-
'price': self.parse_number(self.parse_precision(self.safe_string(entry, '
|
786
|
+
'amount': self.parse_number(self.parse_precision(self.safe_string(entry, 'base_ccy_precision'))),
|
787
|
+
'price': self.parse_number(self.parse_precision(self.safe_string(entry, 'quote_ccy_precision'))),
|
792
788
|
},
|
793
789
|
'limits': {
|
794
790
|
'leverage': {
|
@@ -796,7 +792,7 @@ class coinex(Exchange, ImplicitAPI):
|
|
796
792
|
'max': self.safe_number(leverages, leveragesLength - 1),
|
797
793
|
},
|
798
794
|
'amount': {
|
799
|
-
'min': self.safe_number(entry, '
|
795
|
+
'min': self.safe_number(entry, 'min_amount'),
|
800
796
|
'max': None,
|
801
797
|
},
|
802
798
|
'price': {
|
ccxt/okx.py
CHANGED
@@ -58,6 +58,7 @@ class okx(Exchange, ImplicitAPI):
|
|
58
58
|
'cancelOrders': True,
|
59
59
|
'closeAllPositions': False,
|
60
60
|
'closePosition': True,
|
61
|
+
'createConvertTrade': True,
|
61
62
|
'createDepositAddress': False,
|
62
63
|
'createMarketBuyOrderWithCost': True,
|
63
64
|
'createMarketSellOrderWithCost': True,
|
@@ -7150,6 +7151,57 @@ class okx(Exchange, ImplicitAPI):
|
|
7150
7151
|
toCurrency = self.currency(toCurrencyId)
|
7151
7152
|
return self.parse_conversion(result, fromCurrency, toCurrency)
|
7152
7153
|
|
7154
|
+
def create_convert_trade(self, id: str, fromCode: str, toCode: str, amount: Num = None, params={}) -> Conversion:
|
7155
|
+
"""
|
7156
|
+
convert from one currency to another
|
7157
|
+
:see: https://www.okx.com/docs-v5/en/#funding-account-rest-api-convert-trade
|
7158
|
+
:param str id: the id of the trade that you want to make
|
7159
|
+
:param str fromCode: the currency that you want to sell and convert from
|
7160
|
+
:param str toCode: the currency that you want to buy and convert into
|
7161
|
+
:param float [amount]: how much you want to trade in units of the from currency
|
7162
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
7163
|
+
:returns dict: a `conversion structure <https://docs.ccxt.com/#/?id=conversion-structure>`
|
7164
|
+
"""
|
7165
|
+
self.load_markets()
|
7166
|
+
request = {
|
7167
|
+
'quoteId': id,
|
7168
|
+
'baseCcy': fromCode,
|
7169
|
+
'quoteCcy': toCode,
|
7170
|
+
'szCcy': fromCode,
|
7171
|
+
'sz': self.number_to_string(amount),
|
7172
|
+
'side': 'sell',
|
7173
|
+
}
|
7174
|
+
response = self.privatePostAssetConvertTrade(self.extend(request, params))
|
7175
|
+
#
|
7176
|
+
# {
|
7177
|
+
# "code": "0",
|
7178
|
+
# "data": [
|
7179
|
+
# {
|
7180
|
+
# "baseCcy": "ETH",
|
7181
|
+
# "clTReqId": "",
|
7182
|
+
# "fillBaseSz": "0.01023052",
|
7183
|
+
# "fillPx": "2932.40104429",
|
7184
|
+
# "fillQuoteSz": "30",
|
7185
|
+
# "instId": "ETH-USDT",
|
7186
|
+
# "quoteCcy": "USDT",
|
7187
|
+
# "quoteId": "quoterETH-USDT16461885104612381",
|
7188
|
+
# "side": "buy",
|
7189
|
+
# "state": "fullyFilled",
|
7190
|
+
# "tradeId": "trader16461885203381437",
|
7191
|
+
# "ts": "1646188520338"
|
7192
|
+
# }
|
7193
|
+
# ],
|
7194
|
+
# "msg": ""
|
7195
|
+
# }
|
7196
|
+
#
|
7197
|
+
data = self.safe_list(response, 'data', [])
|
7198
|
+
result = self.safe_dict(data, 0, {})
|
7199
|
+
fromCurrencyId = self.safe_string(result, 'baseCcy', fromCode)
|
7200
|
+
fromCurrency = self.currency(fromCurrencyId)
|
7201
|
+
toCurrencyId = self.safe_string(result, 'quoteCcy', toCode)
|
7202
|
+
toCurrency = self.currency(toCurrencyId)
|
7203
|
+
return self.parse_conversion(result, fromCurrency, toCurrency)
|
7204
|
+
|
7153
7205
|
def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
|
7154
7206
|
#
|
7155
7207
|
# fetchConvertQuote
|
@@ -7170,7 +7222,24 @@ class okx(Exchange, ImplicitAPI):
|
|
7170
7222
|
# "ttlMs": "10000"
|
7171
7223
|
# }
|
7172
7224
|
#
|
7173
|
-
|
7225
|
+
# createConvertTrade
|
7226
|
+
#
|
7227
|
+
# {
|
7228
|
+
# "baseCcy": "ETH",
|
7229
|
+
# "clTReqId": "",
|
7230
|
+
# "fillBaseSz": "0.01023052",
|
7231
|
+
# "fillPx": "2932.40104429",
|
7232
|
+
# "fillQuoteSz": "30",
|
7233
|
+
# "instId": "ETH-USDT",
|
7234
|
+
# "quoteCcy": "USDT",
|
7235
|
+
# "quoteId": "quoterETH-USDT16461885104612381",
|
7236
|
+
# "side": "buy",
|
7237
|
+
# "state": "fullyFilled",
|
7238
|
+
# "tradeId": "trader16461885203381437",
|
7239
|
+
# "ts": "1646188520338"
|
7240
|
+
# }
|
7241
|
+
#
|
7242
|
+
timestamp = self.safe_integer_2(conversion, 'quoteTime', 'ts')
|
7174
7243
|
fromCoin = self.safe_string(conversion, 'baseCcy')
|
7175
7244
|
fromCode = self.safe_currency_code(fromCoin, fromCurrency)
|
7176
7245
|
to = self.safe_string(conversion, 'quoteCcy')
|
@@ -7179,12 +7248,12 @@ class okx(Exchange, ImplicitAPI):
|
|
7179
7248
|
'info': conversion,
|
7180
7249
|
'timestamp': timestamp,
|
7181
7250
|
'datetime': self.iso8601(timestamp),
|
7182
|
-
'id': self.
|
7251
|
+
'id': self.safe_string_n(conversion, ['clQReqId', 'tradeId', 'quoteId']),
|
7183
7252
|
'fromCurrency': fromCode,
|
7184
|
-
'fromAmount': self.
|
7253
|
+
'fromAmount': self.safe_number_2(conversion, 'baseSz', 'fillBaseSz'),
|
7185
7254
|
'toCurrency': toCode,
|
7186
|
-
'toAmount': self.
|
7187
|
-
'price': self.
|
7255
|
+
'toAmount': self.safe_number_2(conversion, 'quoteSz', 'fillQuoteSz'),
|
7256
|
+
'price': self.safe_number_2(conversion, 'cnvtPx', 'fillPx'),
|
7188
7257
|
'fee': None,
|
7189
7258
|
}
|
7190
7259
|
|
ccxt/pro/__init__.py
CHANGED
ccxt/pro/kraken.py
CHANGED
@@ -150,7 +150,7 @@ class kraken(ccxt.async_support.kraken):
|
|
150
150
|
'pair': market['wsId'],
|
151
151
|
'volume': self.amount_to_precision(symbol, amount),
|
152
152
|
}
|
153
|
-
request, params = self.orderRequest('createOrderWs
|
153
|
+
request, params = self.orderRequest('createOrderWs', symbol, type, request, price, params)
|
154
154
|
return await self.watch(url, messageHash, self.extend(request, params), messageHash)
|
155
155
|
|
156
156
|
def handle_create_edit_order(self, client, message):
|
@@ -204,7 +204,7 @@ class kraken(ccxt.async_support.kraken):
|
|
204
204
|
'pair': market['wsId'],
|
205
205
|
'volume': self.amount_to_precision(symbol, amount),
|
206
206
|
}
|
207
|
-
request, params = self.orderRequest('editOrderWs
|
207
|
+
request, params = self.orderRequest('editOrderWs', symbol, type, request, price, params)
|
208
208
|
return await self.watch(url, messageHash, self.extend(request, params), messageHash)
|
209
209
|
|
210
210
|
async def cancel_orders_ws(self, ids: List[str], symbol: Str = None, params={}):
|
ccxt/woo.py
CHANGED
@@ -45,6 +45,7 @@ class woo(Exchange, ImplicitAPI):
|
|
45
45
|
'cancelWithdraw': False, # exchange have that endpoint disabled atm, but was once implemented in ccxt per old docs: https://kronosresearch.github.io/wootrade-documents/#cancel-withdraw-request
|
46
46
|
'closeAllPositions': False,
|
47
47
|
'closePosition': False,
|
48
|
+
'createConvertTrade': True,
|
48
49
|
'createDepositAddress': False,
|
49
50
|
'createMarketBuyOrderWithCost': True,
|
50
51
|
'createMarketOrder': False,
|
@@ -2823,6 +2824,35 @@ class woo(Exchange, ImplicitAPI):
|
|
2823
2824
|
toCurrency = self.currency(toCurrencyId)
|
2824
2825
|
return self.parse_conversion(data, fromCurrency, toCurrency)
|
2825
2826
|
|
2827
|
+
def create_convert_trade(self, id: str, fromCode: str, toCode: str, amount: Num = None, params={}) -> Conversion:
|
2828
|
+
"""
|
2829
|
+
convert from one currency to another
|
2830
|
+
:see: https://docs.woo.org/#send-quote-rft
|
2831
|
+
:param str id: the id of the trade that you want to make
|
2832
|
+
:param str fromCode: the currency that you want to sell and convert from
|
2833
|
+
:param str toCode: the currency that you want to buy and convert into
|
2834
|
+
:param float [amount]: how much you want to trade in units of the from currency
|
2835
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2836
|
+
:returns dict: a `conversion structure <https://docs.ccxt.com/#/?id=conversion-structure>`
|
2837
|
+
"""
|
2838
|
+
self.load_markets()
|
2839
|
+
request = {
|
2840
|
+
'quoteId': id,
|
2841
|
+
}
|
2842
|
+
response = self.v3PrivatePostConvertRft(self.extend(request, params))
|
2843
|
+
#
|
2844
|
+
# {
|
2845
|
+
# "success": True,
|
2846
|
+
# "data": {
|
2847
|
+
# "quoteId": 123123123,
|
2848
|
+
# "counterPartyId": "",
|
2849
|
+
# "rftAccepted": 1 # 1 -> success; 2 -> processing; 3 -> fail
|
2850
|
+
# }
|
2851
|
+
# }
|
2852
|
+
#
|
2853
|
+
data = self.safe_dict(response, 'data', {})
|
2854
|
+
return self.parse_conversion(data)
|
2855
|
+
|
2826
2856
|
def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
|
2827
2857
|
#
|
2828
2858
|
# fetchConvertQuote
|
@@ -2839,6 +2869,14 @@ class woo(Exchange, ImplicitAPI):
|
|
2839
2869
|
# "message": 1659084466000
|
2840
2870
|
# }
|
2841
2871
|
#
|
2872
|
+
# createConvertTrade
|
2873
|
+
#
|
2874
|
+
# {
|
2875
|
+
# "quoteId": 123123123,
|
2876
|
+
# "counterPartyId": "",
|
2877
|
+
# "rftAccepted": 1 # 1 -> success; 2 -> processing; 3 -> fail
|
2878
|
+
# }
|
2879
|
+
#
|
2842
2880
|
timestamp = self.safe_integer(conversion, 'expireTimestamp')
|
2843
2881
|
fromCoin = self.safe_string(conversion, 'sellToken')
|
2844
2882
|
fromCode = self.safe_currency_code(fromCoin, fromCurrency)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ccxt
|
3
|
-
Version: 4.
|
3
|
+
Version: 4.3.1
|
4
4
|
Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
|
5
5
|
Home-page: https://ccxt.com
|
6
6
|
Author: Igor Kroitor
|
@@ -261,13 +261,13 @@ console.log(version, Object.keys(exchanges));
|
|
261
261
|
|
262
262
|
All-in-one browser bundle (dependencies included), served from a CDN of your choice:
|
263
263
|
|
264
|
-
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.
|
265
|
-
* unpkg: https://unpkg.com/ccxt@4.
|
264
|
+
* jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.1/dist/ccxt.browser.js
|
265
|
+
* unpkg: https://unpkg.com/ccxt@4.3.1/dist/ccxt.browser.js
|
266
266
|
|
267
267
|
CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
|
268
268
|
|
269
269
|
```HTML
|
270
|
-
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.
|
270
|
+
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.1/dist/ccxt.browser.js"></script>
|
271
271
|
```
|
272
272
|
|
273
273
|
Creates a global `ccxt` object:
|