ccxt 4.0.106 → 4.0.108
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/ccxt.browser.js +1094 -460
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +15 -13
- package/dist/cjs/src/binance.js +101 -8
- package/dist/cjs/src/bitforex.js +9 -0
- package/dist/cjs/src/bitmart.js +298 -171
- package/dist/cjs/src/exmo.js +334 -43
- package/dist/cjs/src/pro/bitget.js +44 -1
- package/dist/cjs/src/pro/bybit.js +3 -3
- package/dist/cjs/src/pro/woo.js +69 -1
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/binance.d.ts +2 -5
- package/js/src/abstract/binancecoinm.d.ts +2 -5
- package/js/src/abstract/binanceus.d.ts +2 -5
- package/js/src/abstract/binanceusdm.d.ts +2 -5
- package/js/src/base/Exchange.d.ts +1 -1
- package/js/src/base/Exchange.js +14 -13
- package/js/src/binance.d.ts +1 -0
- package/js/src/binance.js +101 -8
- package/js/src/bitforex.js +9 -0
- package/js/src/bitmart.d.ts +1 -0
- package/js/src/bitmart.js +298 -171
- package/js/src/exmo.d.ts +5 -2
- package/js/src/exmo.js +334 -43
- package/js/src/pro/bitget.d.ts +1 -0
- package/js/src/pro/bitget.js +44 -1
- package/js/src/pro/bybit.js +3 -3
- package/js/src/pro/woo.d.ts +2 -0
- package/js/src/pro/woo.js +69 -1
- package/package.json +1 -1
package/js/src/bitmart.js
CHANGED
|
@@ -1318,40 +1318,47 @@ export default class bitmart extends Exchange {
|
|
|
1318
1318
|
// private fetchMyTrades spot
|
|
1319
1319
|
//
|
|
1320
1320
|
// {
|
|
1321
|
-
// "
|
|
1322
|
-
// "
|
|
1323
|
-
// "
|
|
1324
|
-
// "
|
|
1321
|
+
// "tradeId":"182342999769370687",
|
|
1322
|
+
// "orderId":"183270218784142990",
|
|
1323
|
+
// "clientOrderId":"183270218784142990",
|
|
1324
|
+
// "symbol":"ADA_USDT",
|
|
1325
1325
|
// "side":"buy",
|
|
1326
|
-
// "
|
|
1327
|
-
// "
|
|
1328
|
-
// "
|
|
1329
|
-
// "
|
|
1330
|
-
// "
|
|
1331
|
-
// "
|
|
1326
|
+
// "orderMode":"spot",
|
|
1327
|
+
// "type":"market",
|
|
1328
|
+
// "price":"0.245948",
|
|
1329
|
+
// "size":"20.71",
|
|
1330
|
+
// "notional":"5.09358308",
|
|
1331
|
+
// "fee":"0.00509358",
|
|
1332
|
+
// "feeCoinName":"USDT",
|
|
1333
|
+
// "tradeRole":"taker",
|
|
1334
|
+
// "createTime":1695658457836,
|
|
1332
1335
|
// }
|
|
1333
1336
|
//
|
|
1334
|
-
const id = this.safeString(trade, '
|
|
1335
|
-
const timestamp = this.safeInteger2(trade, 'order_time', '
|
|
1336
|
-
const
|
|
1337
|
-
const
|
|
1338
|
-
|
|
1339
|
-
const
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1337
|
+
const id = this.safeString(trade, 'tradeId');
|
|
1338
|
+
const timestamp = this.safeInteger2(trade, 'order_time', 'createTime');
|
|
1339
|
+
const side = this.safeStringLower2(trade, 'side', 'type');
|
|
1340
|
+
const takerOrMaker = this.safeString(trade, 'tradeRole');
|
|
1341
|
+
const isPublicTrade = ('order_time' in trade);
|
|
1342
|
+
const price = this.safeString(trade, 'price');
|
|
1343
|
+
let amount = undefined;
|
|
1344
|
+
let cost = undefined;
|
|
1345
|
+
let type = undefined;
|
|
1346
|
+
if (isPublicTrade) {
|
|
1347
|
+
amount = this.safeString(trade, 'count');
|
|
1348
|
+
cost = this.safeString(trade, 'amount');
|
|
1349
|
+
}
|
|
1350
|
+
else {
|
|
1351
|
+
amount = this.safeString(trade, 'size');
|
|
1352
|
+
cost = this.safeString(trade, 'notional');
|
|
1353
|
+
type = this.safeString(trade, 'type');
|
|
1354
|
+
}
|
|
1355
|
+
const orderId = this.safeString(trade, 'orderId');
|
|
1349
1356
|
const marketId = this.safeString(trade, 'symbol');
|
|
1350
1357
|
market = this.safeMarket(marketId, market, '_');
|
|
1351
|
-
const feeCostString = this.safeString(trade, '
|
|
1358
|
+
const feeCostString = this.safeString(trade, 'fee');
|
|
1352
1359
|
let fee = undefined;
|
|
1353
1360
|
if (feeCostString !== undefined) {
|
|
1354
|
-
const feeCurrencyId = this.safeString(trade, '
|
|
1361
|
+
const feeCurrencyId = this.safeString(trade, 'feeCoinName');
|
|
1355
1362
|
let feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
|
|
1356
1363
|
if (feeCurrencyCode === undefined) {
|
|
1357
1364
|
feeCurrencyCode = (side === 'buy') ? market['base'] : market['quote'];
|
|
@@ -1370,9 +1377,9 @@ export default class bitmart extends Exchange {
|
|
|
1370
1377
|
'symbol': market['symbol'],
|
|
1371
1378
|
'type': type,
|
|
1372
1379
|
'side': side,
|
|
1373
|
-
'price':
|
|
1374
|
-
'amount':
|
|
1375
|
-
'cost':
|
|
1380
|
+
'price': price,
|
|
1381
|
+
'amount': amount,
|
|
1382
|
+
'cost': cost,
|
|
1376
1383
|
'takerOrMaker': takerOrMaker,
|
|
1377
1384
|
'fee': fee,
|
|
1378
1385
|
}, market);
|
|
@@ -1575,66 +1582,83 @@ export default class bitmart extends Exchange {
|
|
|
1575
1582
|
/**
|
|
1576
1583
|
* @method
|
|
1577
1584
|
* @name bitmart#fetchMyTrades
|
|
1585
|
+
* @see https://developer-pro.bitmart.com/en/spot/#account-trade-list-v4-signed
|
|
1578
1586
|
* @description fetch all trades made by the user
|
|
1579
1587
|
* @param {string} symbol unified market symbol
|
|
1580
1588
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1581
1589
|
* @param {int} [limit] the maximum number of trades structures to retrieve
|
|
1582
1590
|
* @param {object} [params] extra parameters specific to the bitmart api endpoint
|
|
1591
|
+
* @param {int} [params.until] the latest time in ms to fetch trades for
|
|
1592
|
+
* @param {boolean} [params.marginMode] *spot* whether to fetch trades for margin orders or spot orders, defaults to spot orders (only isolated margin orders are supported)
|
|
1583
1593
|
* @returns {Trade[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure}
|
|
1584
1594
|
*/
|
|
1585
|
-
if (symbol === undefined) {
|
|
1586
|
-
throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
|
|
1587
|
-
}
|
|
1588
1595
|
await this.loadMarkets();
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1596
|
+
let market = undefined;
|
|
1597
|
+
const request = {};
|
|
1598
|
+
if (symbol !== undefined) {
|
|
1599
|
+
market = this.market(symbol);
|
|
1600
|
+
}
|
|
1601
|
+
let type = undefined;
|
|
1602
|
+
[type, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
|
|
1603
|
+
if (type !== 'spot') {
|
|
1604
|
+
throw new NotSupported(this.id + ' fetchMyTrades() does not support ' + type + ' orders, only spot orders are accepted');
|
|
1605
|
+
}
|
|
1606
|
+
let marginMode = undefined;
|
|
1607
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
|
|
1608
|
+
if (marginMode === 'isolated') {
|
|
1609
|
+
request['orderMode'] = 'iso_margin';
|
|
1592
1610
|
}
|
|
1593
1611
|
const options = this.safeValue(this.options, 'fetchMyTrades', {});
|
|
1594
1612
|
const defaultLimit = this.safeInteger(options, 'limit', 200);
|
|
1595
1613
|
if (limit === undefined) {
|
|
1596
1614
|
limit = defaultLimit;
|
|
1597
1615
|
}
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
'
|
|
1601
|
-
}
|
|
1602
|
-
const
|
|
1616
|
+
request['limit'] = limit;
|
|
1617
|
+
if (symbol !== undefined) {
|
|
1618
|
+
request['symbol'] = market['id'];
|
|
1619
|
+
}
|
|
1620
|
+
const until = this.safeInteger2(params, 'until', 'endTime');
|
|
1621
|
+
if (until !== undefined) {
|
|
1622
|
+
params = this.omit(params, ['endTime']);
|
|
1623
|
+
request['endTime'] = until;
|
|
1624
|
+
}
|
|
1625
|
+
const response = await this.privatePostSpotV4QueryTrades(this.extend(request, params));
|
|
1603
1626
|
//
|
|
1604
1627
|
// spot
|
|
1605
1628
|
//
|
|
1606
|
-
//
|
|
1607
|
-
//
|
|
1608
|
-
//
|
|
1609
|
-
//
|
|
1610
|
-
//
|
|
1611
|
-
//
|
|
1612
|
-
//
|
|
1613
|
-
//
|
|
1614
|
-
//
|
|
1615
|
-
//
|
|
1616
|
-
//
|
|
1617
|
-
//
|
|
1618
|
-
//
|
|
1619
|
-
//
|
|
1620
|
-
//
|
|
1621
|
-
//
|
|
1622
|
-
//
|
|
1623
|
-
//
|
|
1624
|
-
//
|
|
1625
|
-
//
|
|
1626
|
-
//
|
|
1627
|
-
//
|
|
1628
|
-
//
|
|
1629
|
+
// {
|
|
1630
|
+
// "code":1000,
|
|
1631
|
+
// "message":"success",
|
|
1632
|
+
// "data":[
|
|
1633
|
+
// {
|
|
1634
|
+
// "tradeId":"182342999769370687",
|
|
1635
|
+
// "orderId":"183270218784142990",
|
|
1636
|
+
// "clientOrderId":"183270218784142990",
|
|
1637
|
+
// "symbol":"ADA_USDT",
|
|
1638
|
+
// "side":"buy",
|
|
1639
|
+
// "orderMode":"spot",
|
|
1640
|
+
// "type":"market",
|
|
1641
|
+
// "price":"0.245948",
|
|
1642
|
+
// "size":"20.71",
|
|
1643
|
+
// "notional":"5.09358308",
|
|
1644
|
+
// "fee":"0.00509358",
|
|
1645
|
+
// "feeCoinName":"USDT",
|
|
1646
|
+
// "tradeRole":"taker",
|
|
1647
|
+
// "createTime":1695658457836,
|
|
1648
|
+
// "updateTime":1695658457836
|
|
1649
|
+
// }
|
|
1650
|
+
// ],
|
|
1651
|
+
// "trace":"fbaee9e0e2f5442fba5b3262fc86b0ac.65.16956593456523085"
|
|
1652
|
+
// }
|
|
1629
1653
|
//
|
|
1630
1654
|
const data = this.safeValue(response, 'data', {});
|
|
1631
|
-
|
|
1632
|
-
return this.parseTrades(trades, market, since, limit);
|
|
1655
|
+
return this.parseTrades(data, market, since, limit);
|
|
1633
1656
|
}
|
|
1634
1657
|
async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1635
1658
|
/**
|
|
1636
1659
|
* @method
|
|
1637
1660
|
* @name bitmart#fetchOrderTrades
|
|
1661
|
+
* @see https://developer-pro.bitmart.com/en/spot/#order-trade-list-v4-signed
|
|
1638
1662
|
* @description fetch all the trades made from a single order
|
|
1639
1663
|
* @param {string} id order id
|
|
1640
1664
|
* @param {string} symbol unified market symbol
|
|
@@ -1643,55 +1667,13 @@ export default class bitmart extends Exchange {
|
|
|
1643
1667
|
* @param {object} [params] extra parameters specific to the bitmart api endpoint
|
|
1644
1668
|
* @returns {object[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure}
|
|
1645
1669
|
*/
|
|
1646
|
-
if (symbol === undefined) {
|
|
1647
|
-
throw new ArgumentsRequired(this.id + ' fetchOrderTrades() requires a symbol argument');
|
|
1648
|
-
}
|
|
1649
1670
|
await this.loadMarkets();
|
|
1650
|
-
const market = this.market(symbol);
|
|
1651
|
-
if (!market['spot']) {
|
|
1652
|
-
throw new NotSupported(this.id + ' fetchOrderTrades() does not support ' + market['type'] + ' orders, only spot orders are accepted');
|
|
1653
|
-
}
|
|
1654
|
-
const options = this.safeValue(this.options, 'fetchOrderTrades', {});
|
|
1655
|
-
const defaultLimit = this.safeInteger(options, 'limit', 200);
|
|
1656
|
-
if (limit === undefined) {
|
|
1657
|
-
limit = defaultLimit;
|
|
1658
|
-
}
|
|
1659
1671
|
const request = {
|
|
1660
|
-
'
|
|
1661
|
-
'order_id': id,
|
|
1662
|
-
'N': limit,
|
|
1672
|
+
'orderId': id,
|
|
1663
1673
|
};
|
|
1664
|
-
const response = await this.
|
|
1665
|
-
//
|
|
1666
|
-
// spot
|
|
1667
|
-
//
|
|
1668
|
-
// {
|
|
1669
|
-
// "message":"OK",
|
|
1670
|
-
// "code":1000,
|
|
1671
|
-
// "trace":"a06a5c53-8e6f-42d6-8082-2ff4718d221c",
|
|
1672
|
-
// "data":{
|
|
1673
|
-
// "current_page":1,
|
|
1674
|
-
// "trades":[
|
|
1675
|
-
// {
|
|
1676
|
-
// "detail_id":256348632,
|
|
1677
|
-
// "order_id":2147484350,
|
|
1678
|
-
// "symbol":"BTC_USDT",
|
|
1679
|
-
// "create_time":1590462303000,
|
|
1680
|
-
// "side":"buy",
|
|
1681
|
-
// "fees":"0.00001350",
|
|
1682
|
-
// "fee_coin_name":"BTC",
|
|
1683
|
-
// "notional":"88.00000000",
|
|
1684
|
-
// "price_avg":"8800.00",
|
|
1685
|
-
// "size":"0.01000",
|
|
1686
|
-
// "exec_type":"M"
|
|
1687
|
-
// },
|
|
1688
|
-
// ]
|
|
1689
|
-
// }
|
|
1690
|
-
// }
|
|
1691
|
-
//
|
|
1674
|
+
const response = await this.privatePostSpotV4QueryOrderTrades(this.extend(request, params));
|
|
1692
1675
|
const data = this.safeValue(response, 'data', {});
|
|
1693
|
-
|
|
1694
|
-
return this.parseTrades(trades, market, since, limit);
|
|
1676
|
+
return this.parseTrades(data, undefined, since, limit);
|
|
1695
1677
|
}
|
|
1696
1678
|
customParseBalance(response, marketType) {
|
|
1697
1679
|
const data = this.safeValue(response, 'data', {});
|
|
@@ -1950,24 +1932,55 @@ export default class bitmart extends Exchange {
|
|
|
1950
1932
|
// "status":"8"
|
|
1951
1933
|
// }
|
|
1952
1934
|
//
|
|
1935
|
+
// spot v4
|
|
1936
|
+
// {
|
|
1937
|
+
// "orderId" : "118100034543076010",
|
|
1938
|
+
// "clientOrderId" : "118100034543076010",
|
|
1939
|
+
// "symbol" : "BTC_USDT",
|
|
1940
|
+
// "side" : "buy",
|
|
1941
|
+
// "orderMode" : "spot",
|
|
1942
|
+
// "type" : "limit",
|
|
1943
|
+
// "state" : "filled",
|
|
1944
|
+
// "price" : "48800.00",
|
|
1945
|
+
// "priceAvg" : "39999.00",
|
|
1946
|
+
// "size" : "0.10000",
|
|
1947
|
+
// "filledSize" : "0.10000",
|
|
1948
|
+
// "notional" : "4880.00000000",
|
|
1949
|
+
// "filledNotional" : "3999.90000000",
|
|
1950
|
+
// "createTime" : 1681701557927,
|
|
1951
|
+
// "updateTime" : 1681701559408
|
|
1952
|
+
// }
|
|
1953
|
+
//
|
|
1954
|
+
// swap: fetchOpenOrders
|
|
1955
|
+
//
|
|
1956
|
+
// {
|
|
1957
|
+
// "order_id": "230935812485489",
|
|
1958
|
+
// "client_order_id": "",
|
|
1959
|
+
// "price": "24000",
|
|
1960
|
+
// "size": "1",
|
|
1961
|
+
// "symbol": "BTCUSDT",
|
|
1962
|
+
// "state": 2,
|
|
1963
|
+
// "side": 1,
|
|
1964
|
+
// "type": "limit",
|
|
1965
|
+
// "leverage": "10",
|
|
1966
|
+
// "open_type": "isolated",
|
|
1967
|
+
// "deal_avg_price": "0",
|
|
1968
|
+
// "deal_size": "0",
|
|
1969
|
+
// "create_time": 1695702258629,
|
|
1970
|
+
// "update_time": 1695702258642
|
|
1971
|
+
// }
|
|
1972
|
+
//
|
|
1953
1973
|
let id = undefined;
|
|
1954
1974
|
if (typeof order === 'string') {
|
|
1955
1975
|
id = order;
|
|
1956
1976
|
order = {};
|
|
1957
1977
|
}
|
|
1958
|
-
id = this.
|
|
1959
|
-
const timestamp = this.
|
|
1978
|
+
id = this.safeString2(order, 'order_id', 'orderId', id);
|
|
1979
|
+
const timestamp = this.safeInteger2(order, 'create_time', 'createTime');
|
|
1960
1980
|
const marketId = this.safeString(order, 'symbol');
|
|
1961
|
-
const symbol = this.safeSymbol(marketId, market
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
status = this.parseOrderStatusByType(market['type'], this.safeString(order, 'status'));
|
|
1965
|
-
}
|
|
1966
|
-
const amount = this.safeString(order, 'size');
|
|
1967
|
-
const filled = this.safeString(order, 'filled_size');
|
|
1968
|
-
const average = this.safeString(order, 'price_avg');
|
|
1969
|
-
const price = this.safeString(order, 'price');
|
|
1970
|
-
const side = this.safeString(order, 'side');
|
|
1981
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
1982
|
+
market = this.safeMarket(symbol, market);
|
|
1983
|
+
const orderType = this.safeString(market, 'type', 'spot');
|
|
1971
1984
|
let type = this.safeString(order, 'type');
|
|
1972
1985
|
let timeInForce = undefined;
|
|
1973
1986
|
let postOnly = undefined;
|
|
@@ -1982,29 +1995,38 @@ export default class bitmart extends Exchange {
|
|
|
1982
1995
|
}
|
|
1983
1996
|
return this.safeOrder({
|
|
1984
1997
|
'id': id,
|
|
1985
|
-
'clientOrderId':
|
|
1998
|
+
'clientOrderId': this.safeString(order, 'client_order_id'),
|
|
1986
1999
|
'info': order,
|
|
1987
2000
|
'timestamp': timestamp,
|
|
1988
2001
|
'datetime': this.iso8601(timestamp),
|
|
1989
|
-
'lastTradeTimestamp':
|
|
2002
|
+
'lastTradeTimestamp': this.safeInteger(order, 'update_time'),
|
|
1990
2003
|
'symbol': symbol,
|
|
1991
2004
|
'type': type,
|
|
1992
2005
|
'timeInForce': timeInForce,
|
|
1993
2006
|
'postOnly': postOnly,
|
|
1994
|
-
'side': side,
|
|
1995
|
-
'price': price,
|
|
2007
|
+
'side': this.parseOrderSide(this.safeString(order, 'side')),
|
|
2008
|
+
'price': this.omitZero(this.safeString(order, 'price')),
|
|
1996
2009
|
'stopPrice': undefined,
|
|
1997
2010
|
'triggerPrice': undefined,
|
|
1998
|
-
'amount':
|
|
1999
|
-
'cost':
|
|
2000
|
-
'average':
|
|
2001
|
-
'filled':
|
|
2011
|
+
'amount': this.omitZero(this.safeString(order, 'size')),
|
|
2012
|
+
'cost': this.safeString2(order, 'filled_notional', 'filledNotional'),
|
|
2013
|
+
'average': this.safeStringN(order, ['price_avg', 'priceAvg', 'deal_avg_price']),
|
|
2014
|
+
'filled': this.safeStringN(order, ['filled_size', 'filledSize', 'deal_size']),
|
|
2002
2015
|
'remaining': undefined,
|
|
2003
|
-
'status': status,
|
|
2016
|
+
'status': this.parseOrderStatusByType(orderType, this.safeString2(order, 'status', 'state')),
|
|
2004
2017
|
'fee': undefined,
|
|
2005
2018
|
'trades': undefined,
|
|
2006
2019
|
}, market);
|
|
2007
2020
|
}
|
|
2021
|
+
parseOrderSide(side) {
|
|
2022
|
+
const sides = {
|
|
2023
|
+
'1': 'open long',
|
|
2024
|
+
'2': 'close short',
|
|
2025
|
+
'3': 'close long',
|
|
2026
|
+
'4': 'open short',
|
|
2027
|
+
};
|
|
2028
|
+
return this.safeString(sides, side, side);
|
|
2029
|
+
}
|
|
2008
2030
|
parseOrderStatusByType(type, status) {
|
|
2009
2031
|
const statusesByType = {
|
|
2010
2032
|
'spot': {
|
|
@@ -2015,7 +2037,11 @@ export default class bitmart extends Exchange {
|
|
|
2015
2037
|
'5': 'open',
|
|
2016
2038
|
'6': 'closed',
|
|
2017
2039
|
'7': 'canceling',
|
|
2018
|
-
'8': 'canceled',
|
|
2040
|
+
'8': 'canceled',
|
|
2041
|
+
'new': 'open',
|
|
2042
|
+
'partially_filled': 'filled',
|
|
2043
|
+
'filled': 'filled',
|
|
2044
|
+
'partially_canceled': 'canceled',
|
|
2019
2045
|
},
|
|
2020
2046
|
'swap': {
|
|
2021
2047
|
'1': 'open',
|
|
@@ -2308,19 +2334,116 @@ export default class bitmart extends Exchange {
|
|
|
2308
2334
|
/**
|
|
2309
2335
|
* @method
|
|
2310
2336
|
* @name bitmart#fetchOpenOrders
|
|
2337
|
+
* @see https://developer-pro.bitmart.com/en/spot/#current-open-orders-v4-signed
|
|
2338
|
+
* @see https://developer-pro.bitmart.com/en/futures/#get-all-open-orders-keyed
|
|
2311
2339
|
* @description fetch all unfilled currently open orders
|
|
2312
2340
|
* @param {string} symbol unified market symbol
|
|
2313
2341
|
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
2314
|
-
* @param {int} [limit] the maximum number of
|
|
2342
|
+
* @param {int} [limit] the maximum number of open order structures to retrieve
|
|
2315
2343
|
* @param {object} [params] extra parameters specific to the bitmart api endpoint
|
|
2344
|
+
* @param {boolean} [params.marginMode] *spot* whether to fetch trades for margin orders or spot orders, defaults to spot orders (only isolated margin orders are supported)
|
|
2345
|
+
* @param {int} [params.until] *spot* the latest time in ms to fetch orders for
|
|
2346
|
+
* @param {string} [params.type] *swap* order type, 'limit' or 'market'
|
|
2347
|
+
* @param {string} [params.order_state] *swap* the order state, 'all' or 'partially_filled', default is 'all'
|
|
2316
2348
|
* @returns {Order[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
|
|
2317
2349
|
*/
|
|
2318
|
-
|
|
2350
|
+
await this.loadMarkets();
|
|
2351
|
+
let market = undefined;
|
|
2352
|
+
const request = {};
|
|
2353
|
+
if (symbol !== undefined) {
|
|
2354
|
+
market = this.market(symbol);
|
|
2355
|
+
request['symbol'] = market['id'];
|
|
2356
|
+
}
|
|
2357
|
+
if (limit !== undefined) {
|
|
2358
|
+
request['limit'] = limit;
|
|
2359
|
+
}
|
|
2360
|
+
let type = undefined;
|
|
2361
|
+
let response = undefined;
|
|
2362
|
+
[type, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);
|
|
2363
|
+
if (type === 'spot') {
|
|
2364
|
+
let marginMode = undefined;
|
|
2365
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);
|
|
2366
|
+
if (marginMode === 'isolated') {
|
|
2367
|
+
request['orderMode'] = 'iso_margin';
|
|
2368
|
+
}
|
|
2369
|
+
if (since !== undefined) {
|
|
2370
|
+
request['startTime'] = since;
|
|
2371
|
+
}
|
|
2372
|
+
const until = this.safeInteger2(params, 'until', 'endTime');
|
|
2373
|
+
if (until !== undefined) {
|
|
2374
|
+
params = this.omit(params, ['endTime']);
|
|
2375
|
+
request['endTime'] = until;
|
|
2376
|
+
}
|
|
2377
|
+
response = await this.privatePostSpotV4QueryOpenOrders(this.extend(request, params));
|
|
2378
|
+
}
|
|
2379
|
+
else if (type === 'swap') {
|
|
2380
|
+
response = await this.privateGetContractPrivateGetOpenOrders(this.extend(request, params));
|
|
2381
|
+
}
|
|
2382
|
+
else {
|
|
2383
|
+
throw new NotSupported(this.id + ' fetchOpenOrders() does not support ' + type + ' orders, only spot and swap orders are accepted');
|
|
2384
|
+
}
|
|
2385
|
+
//
|
|
2386
|
+
// spot
|
|
2387
|
+
//
|
|
2388
|
+
// {
|
|
2389
|
+
// "code": 1000,
|
|
2390
|
+
// "message": "success",
|
|
2391
|
+
// "data": [
|
|
2392
|
+
// {
|
|
2393
|
+
// "orderId": "183299373022163211",
|
|
2394
|
+
// "clientOrderId": "183299373022163211",
|
|
2395
|
+
// "symbol": "BTC_USDT",
|
|
2396
|
+
// "side": "buy",
|
|
2397
|
+
// "orderMode": "spot",
|
|
2398
|
+
// "type": "limit",
|
|
2399
|
+
// "state": "new",
|
|
2400
|
+
// "price": "25000.00",
|
|
2401
|
+
// "priceAvg": "0.00",
|
|
2402
|
+
// "size": "0.00020",
|
|
2403
|
+
// "filledSize": "0.00000",
|
|
2404
|
+
// "notional": "5.00000000",
|
|
2405
|
+
// "filledNotional": "0.00000000",
|
|
2406
|
+
// "createTime": 1695703703338,
|
|
2407
|
+
// "updateTime": 1695703703359
|
|
2408
|
+
// }
|
|
2409
|
+
// ],
|
|
2410
|
+
// "trace": "15f11d48e3234c81a2e786cr2e7a38e6.71.16957022303515933"
|
|
2411
|
+
// }
|
|
2412
|
+
//
|
|
2413
|
+
// swap
|
|
2414
|
+
//
|
|
2415
|
+
// {
|
|
2416
|
+
// "code": 1000,
|
|
2417
|
+
// "message": "Ok",
|
|
2418
|
+
// "data": [
|
|
2419
|
+
// {
|
|
2420
|
+
// "order_id": "230935812485489",
|
|
2421
|
+
// "client_order_id": "",
|
|
2422
|
+
// "price": "24000",
|
|
2423
|
+
// "size": "1",
|
|
2424
|
+
// "symbol": "BTCUSDT",
|
|
2425
|
+
// "state": 2,
|
|
2426
|
+
// "side": 1,
|
|
2427
|
+
// "type": "limit",
|
|
2428
|
+
// "leverage": "10",
|
|
2429
|
+
// "open_type": "isolated",
|
|
2430
|
+
// "deal_avg_price": "0",
|
|
2431
|
+
// "deal_size": "0",
|
|
2432
|
+
// "create_time": 1695702258629,
|
|
2433
|
+
// "update_time": 1695702258642
|
|
2434
|
+
// }
|
|
2435
|
+
// ],
|
|
2436
|
+
// "trace": "7f9d94g10f9d4513bc08a7rfc3a5559a.71.16957022303515933"
|
|
2437
|
+
// }
|
|
2438
|
+
//
|
|
2439
|
+
const data = this.safeValue(response, 'data', []);
|
|
2440
|
+
return this.parseOrders(data, market, since, limit);
|
|
2319
2441
|
}
|
|
2320
2442
|
async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2321
2443
|
/**
|
|
2322
2444
|
* @method
|
|
2323
2445
|
* @name bitmart#fetchClosedOrders
|
|
2446
|
+
* @see https://developer-pro.bitmart.com/en/spot/#account-orders-v4-signed
|
|
2324
2447
|
* @description fetches information on multiple closed orders made by the user
|
|
2325
2448
|
* @param {string} symbol unified market symbol of the market orders were made in
|
|
2326
2449
|
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
@@ -2328,7 +2451,31 @@ export default class bitmart extends Exchange {
|
|
|
2328
2451
|
* @param {object} [params] extra parameters specific to the bitmart api endpoint
|
|
2329
2452
|
* @returns {Order[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
|
|
2330
2453
|
*/
|
|
2331
|
-
|
|
2454
|
+
await this.loadMarkets();
|
|
2455
|
+
let market = undefined;
|
|
2456
|
+
const request = {};
|
|
2457
|
+
if (symbol !== undefined) {
|
|
2458
|
+
market = this.market(symbol);
|
|
2459
|
+
request['symbol'] = market['id'];
|
|
2460
|
+
}
|
|
2461
|
+
let type = undefined;
|
|
2462
|
+
[type, params] = this.handleMarketTypeAndParams('fetchClosedOrders', market, params);
|
|
2463
|
+
if (type !== 'spot') {
|
|
2464
|
+
throw new NotSupported(this.id + ' fetchClosedOrders() does not support ' + type + ' orders, only spot orders are accepted');
|
|
2465
|
+
}
|
|
2466
|
+
let marginMode = undefined;
|
|
2467
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchClosedOrders', params);
|
|
2468
|
+
if (marginMode === 'isolated') {
|
|
2469
|
+
request['orderMode'] = 'iso_margin';
|
|
2470
|
+
}
|
|
2471
|
+
const until = this.safeInteger2(params, 'until', 'endTime');
|
|
2472
|
+
if (until !== undefined) {
|
|
2473
|
+
params = this.omit(params, ['endTime']);
|
|
2474
|
+
request['endTime'] = until;
|
|
2475
|
+
}
|
|
2476
|
+
const response = await this.privatePostSpotV4QueryHistoryOrders(this.extend(request, params));
|
|
2477
|
+
const data = this.safeValue(response, 'data');
|
|
2478
|
+
return this.parseOrders(data, market, since, limit);
|
|
2332
2479
|
}
|
|
2333
2480
|
async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2334
2481
|
/**
|
|
@@ -2347,49 +2494,29 @@ export default class bitmart extends Exchange {
|
|
|
2347
2494
|
/**
|
|
2348
2495
|
* @method
|
|
2349
2496
|
* @name bitmart#fetchOrder
|
|
2497
|
+
* @see https://developer-pro.bitmart.com/en/spot/#query-order-by-id-v4-signed
|
|
2498
|
+
* @see https://developer-pro.bitmart.com/en/spot/#query-order-by-clientorderid-v4-signed
|
|
2350
2499
|
* @description fetches information on an order made by the user
|
|
2351
2500
|
* @param {string} symbol unified symbol of the market the order was made in
|
|
2352
2501
|
* @param {object} [params] extra parameters specific to the bitmart api endpoint
|
|
2502
|
+
* @param {string} [params.clientOrderId] fetch the order by client order id instead of order id
|
|
2353
2503
|
* @returns {object} An [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
|
|
2354
2504
|
*/
|
|
2355
|
-
if (symbol === undefined) {
|
|
2356
|
-
throw new ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument');
|
|
2357
|
-
}
|
|
2358
2505
|
await this.loadMarkets();
|
|
2359
|
-
const
|
|
2360
|
-
|
|
2361
|
-
|
|
2506
|
+
const request = {};
|
|
2507
|
+
const clientOrderId = this.safeString(params, 'clientOrderId');
|
|
2508
|
+
if (!clientOrderId) {
|
|
2509
|
+
request['orderId'] = id;
|
|
2510
|
+
}
|
|
2511
|
+
let response = undefined;
|
|
2512
|
+
if (clientOrderId !== undefined) {
|
|
2513
|
+
response = await this.privatePostSpotV4QueryClientOrder(this.extend(request, params));
|
|
2514
|
+
}
|
|
2515
|
+
else {
|
|
2516
|
+
response = await this.privatePostSpotV4QueryOrder(this.extend(request, params));
|
|
2362
2517
|
}
|
|
2363
|
-
const request = {
|
|
2364
|
-
'symbol': market['id'],
|
|
2365
|
-
'order_id': id,
|
|
2366
|
-
};
|
|
2367
|
-
const response = await this.privateGetSpotV2OrderDetail(this.extend(request, params));
|
|
2368
|
-
//
|
|
2369
|
-
// spot
|
|
2370
|
-
//
|
|
2371
|
-
// {
|
|
2372
|
-
// "message":"OK",
|
|
2373
|
-
// "code":1000,
|
|
2374
|
-
// "trace":"a27c2cb5-ead4-471d-8455-1cfeda054ea6",
|
|
2375
|
-
// "data": {
|
|
2376
|
-
// "order_id":1736871726781,
|
|
2377
|
-
// "symbol":"BTC_USDT",
|
|
2378
|
-
// "create_time":1591096004000,
|
|
2379
|
-
// "side":"sell",
|
|
2380
|
-
// "type":"market",
|
|
2381
|
-
// "price":"0.00",
|
|
2382
|
-
// "price_avg":"0.00",
|
|
2383
|
-
// "size":"0.02000",
|
|
2384
|
-
// "notional":"0.00000000",
|
|
2385
|
-
// "filled_notional":"0.00000000",
|
|
2386
|
-
// "filled_size":"0.00000",
|
|
2387
|
-
// "status":"8"
|
|
2388
|
-
// }
|
|
2389
|
-
// }
|
|
2390
|
-
//
|
|
2391
2518
|
const data = this.safeValue(response, 'data', {});
|
|
2392
|
-
return this.parseOrder(data,
|
|
2519
|
+
return this.parseOrder(data, undefined);
|
|
2393
2520
|
}
|
|
2394
2521
|
async fetchDepositAddress(code, params = {}) {
|
|
2395
2522
|
/**
|
package/js/src/exmo.d.ts
CHANGED
|
@@ -64,12 +64,15 @@ export default class exmo extends Exchange {
|
|
|
64
64
|
fetchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").Trade[]>;
|
|
65
65
|
fetchMyTrades(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
|
|
66
66
|
createOrder(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): Promise<import("./base/types.js").Order>;
|
|
67
|
-
cancelOrder(id: string, symbol?: string, params?: {}): Promise<
|
|
67
|
+
cancelOrder(id: string, symbol?: string, params?: {}): Promise<import("./base/types.js").Order>;
|
|
68
68
|
fetchOrder(id: string, symbol?: string, params?: {}): Promise<any>;
|
|
69
69
|
fetchOrderTrades(id: string, symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<import("./base/types.js").Trade[]>;
|
|
70
70
|
fetchOpenOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
|
|
71
|
+
parseStatus(status: any): string;
|
|
72
|
+
parseSide(orderType: any): string;
|
|
71
73
|
parseOrder(order: any, market?: any): import("./base/types.js").Order;
|
|
72
|
-
fetchCanceledOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<
|
|
74
|
+
fetchCanceledOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<any[]>;
|
|
75
|
+
editOrder(id: string, symbol: any, type: any, side: any, amount?: any, price?: any, params?: {}): Promise<import("./base/types.js").Order>;
|
|
73
76
|
fetchDepositAddress(code: string, params?: {}): Promise<{
|
|
74
77
|
currency: string;
|
|
75
78
|
address: any;
|