ccxt 4.0.99 → 4.0.101

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 (91) hide show
  1. package/CHANGELOG.md +224 -0
  2. package/README.md +3 -3
  3. package/dist/ccxt.browser.js +477 -226
  4. package/dist/ccxt.browser.min.js +2 -2
  5. package/dist/cjs/ccxt.js +1 -1
  6. package/dist/cjs/src/base/Exchange.js +6 -1
  7. package/dist/cjs/src/binance.js +28 -1
  8. package/dist/cjs/src/bitbank.js +11 -0
  9. package/dist/cjs/src/bitfinex.js +12 -8
  10. package/dist/cjs/src/bitflyer.js +39 -10
  11. package/dist/cjs/src/bitforex.js +0 -8
  12. package/dist/cjs/src/bitget.js +15 -5
  13. package/dist/cjs/src/bitstamp1.js +22 -0
  14. package/dist/cjs/src/bl3p.js +24 -0
  15. package/dist/cjs/src/bybit.js +111 -36
  16. package/dist/cjs/src/coinbasepro.js +11 -0
  17. package/dist/cjs/src/currencycom.js +1 -1
  18. package/dist/cjs/src/deribit.js +3 -3
  19. package/dist/cjs/src/huobi.js +1 -1
  20. package/dist/cjs/src/huobijp.js +1 -1
  21. package/dist/cjs/src/idex.js +1 -1
  22. package/dist/cjs/src/kucoinfutures.js +46 -51
  23. package/dist/cjs/src/lbank.js +1 -1
  24. package/dist/cjs/src/lbank2.js +3 -3
  25. package/dist/cjs/src/okx.js +5 -5
  26. package/dist/cjs/src/pro/ascendex.js +2 -2
  27. package/dist/cjs/src/pro/binance.js +11 -11
  28. package/dist/cjs/src/pro/bitfinex2.js +5 -5
  29. package/dist/cjs/src/pro/bitget.js +5 -5
  30. package/dist/cjs/src/pro/bitmex.js +2 -2
  31. package/dist/cjs/src/pro/bittrex.js +2 -2
  32. package/dist/cjs/src/pro/bitvavo.js +2 -2
  33. package/dist/cjs/src/pro/bybit.js +2 -2
  34. package/dist/cjs/src/pro/coinbase.js +5 -6
  35. package/dist/cjs/src/pro/cryptocom.js +4 -4
  36. package/dist/cjs/src/pro/currencycom.js +3 -3
  37. package/dist/cjs/src/pro/hitbtc.js +4 -4
  38. package/dist/cjs/src/pro/huobi.js +7 -8
  39. package/dist/cjs/src/pro/huobijp.js +1 -2
  40. package/dist/cjs/src/pro/krakenfutures.js +7 -7
  41. package/dist/cjs/src/pro/kucoin.js +51 -2
  42. package/dist/cjs/src/pro/kucoinfutures.js +3 -3
  43. package/dist/cjs/src/pro/phemex.js +4 -4
  44. package/dist/cjs/src/pro/poloniex.js +6 -6
  45. package/dist/cjs/src/pro/whitebit.js +7 -7
  46. package/dist/cjs/src/probit.js +2 -2
  47. package/js/ccxt.d.ts +1 -1
  48. package/js/ccxt.js +1 -1
  49. package/js/src/base/Exchange.js +6 -1
  50. package/js/src/binance.js +28 -1
  51. package/js/src/bitbank.js +11 -0
  52. package/js/src/bitfinex.js +12 -8
  53. package/js/src/bitflyer.js +39 -10
  54. package/js/src/bitforex.js +0 -8
  55. package/js/src/bitget.js +15 -5
  56. package/js/src/bitstamp1.js +22 -0
  57. package/js/src/bl3p.js +24 -0
  58. package/js/src/bybit.js +111 -36
  59. package/js/src/coinbasepro.js +11 -0
  60. package/js/src/currencycom.js +1 -1
  61. package/js/src/deribit.js +3 -3
  62. package/js/src/huobi.js +1 -1
  63. package/js/src/huobijp.js +1 -1
  64. package/js/src/idex.js +1 -1
  65. package/js/src/kucoinfutures.js +46 -51
  66. package/js/src/lbank.js +1 -1
  67. package/js/src/lbank2.js +3 -3
  68. package/js/src/okx.js +5 -5
  69. package/js/src/pro/ascendex.js +2 -2
  70. package/js/src/pro/binance.js +11 -11
  71. package/js/src/pro/bitfinex2.js +5 -5
  72. package/js/src/pro/bitget.js +5 -5
  73. package/js/src/pro/bitmex.js +2 -2
  74. package/js/src/pro/bittrex.js +2 -2
  75. package/js/src/pro/bitvavo.js +2 -2
  76. package/js/src/pro/bybit.js +2 -2
  77. package/js/src/pro/coinbase.js +5 -6
  78. package/js/src/pro/cryptocom.js +4 -4
  79. package/js/src/pro/currencycom.js +3 -3
  80. package/js/src/pro/hitbtc.js +4 -4
  81. package/js/src/pro/huobi.js +7 -8
  82. package/js/src/pro/huobijp.js +1 -2
  83. package/js/src/pro/krakenfutures.js +7 -7
  84. package/js/src/pro/kucoin.d.ts +1 -0
  85. package/js/src/pro/kucoin.js +51 -2
  86. package/js/src/pro/kucoinfutures.js +3 -3
  87. package/js/src/pro/phemex.js +4 -4
  88. package/js/src/pro/poloniex.js +6 -6
  89. package/js/src/pro/whitebit.js +7 -7
  90. package/js/src/probit.js +2 -2
  91. package/package.json +1 -1
@@ -14,7 +14,7 @@ class kucoin extends kucoin$1 {
14
14
  'watchOrderBook': true,
15
15
  'watchOrders': true,
16
16
  'watchMyTrades': true,
17
- 'watchTickers': false,
17
+ 'watchTickers': true,
18
18
  'watchTicker': true,
19
19
  'watchTrades': true,
20
20
  'watchTradesForSymbols': true,
@@ -132,6 +132,29 @@ class kucoin extends kucoin$1 {
132
132
  const messageHash = 'ticker:' + symbol;
133
133
  return await this.subscribe(url, messageHash, topic, query);
134
134
  }
135
+ async watchTickers(symbols = undefined, params = {}) {
136
+ /**
137
+ * @method
138
+ * @name kucoin#watchTickers
139
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
140
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
141
+ * @param {object} [params] extra parameters specific to the kucoin api endpoint
142
+ * @returns {object} a [ticker structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure}
143
+ */
144
+ await this.loadMarkets();
145
+ symbols = this.marketSymbols(symbols);
146
+ let messageHash = 'tickers';
147
+ if (symbols !== undefined) {
148
+ messageHash = 'tickers::' + symbols.join(',');
149
+ }
150
+ const url = await this.negotiate(false);
151
+ const topic = '/market/ticker:all';
152
+ const tickers = await this.subscribe(url, messageHash, topic, params);
153
+ if (this.newUpdates) {
154
+ return tickers;
155
+ }
156
+ return this.filterByArray(this.tickers, 'symbol', symbols);
157
+ }
135
158
  handleTicker(client, message) {
136
159
  //
137
160
  // market/snapshot
@@ -191,7 +214,14 @@ class kucoin extends kucoin$1 {
191
214
  let market = undefined;
192
215
  if (topic !== undefined) {
193
216
  const parts = topic.split(':');
194
- const marketId = this.safeString(parts, 1);
217
+ const first = this.safeString(parts, 1);
218
+ let marketId = undefined;
219
+ if (first === 'all') {
220
+ marketId = this.safeString(message, 'subject');
221
+ }
222
+ else {
223
+ marketId = first;
224
+ }
195
225
  market = this.safeMarket(marketId, market, '-');
196
226
  }
197
227
  const data = this.safeValue(message, 'data', {});
@@ -201,6 +231,21 @@ class kucoin extends kucoin$1 {
201
231
  this.tickers[symbol] = ticker;
202
232
  const messageHash = 'ticker:' + symbol;
203
233
  client.resolve(ticker, messageHash);
234
+ // watchTickers
235
+ client.resolve(ticker, 'tickers');
236
+ const messageHashes = this.findMessageHashes(client, 'tickers::');
237
+ for (let i = 0; i < messageHashes.length; i++) {
238
+ const messageHash = messageHashes[i];
239
+ const parts = messageHash.split('::');
240
+ const symbolsString = parts[1];
241
+ const symbols = symbolsString.split(',');
242
+ const tickers = this.filterByArray(this.tickers, 'symbol', symbols);
243
+ const tickersSymbols = Object.keys(tickers);
244
+ const numTickers = tickersSymbols.length;
245
+ if (numTickers > 0) {
246
+ client.resolve(tickers, messageHash);
247
+ }
248
+ }
204
249
  }
205
250
  async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
206
251
  /**
@@ -880,6 +925,10 @@ class kucoin extends kucoin$1 {
880
925
  // }
881
926
  // }
882
927
  //
928
+ const topic = this.safeString(message, 'topic');
929
+ if (topic === '/market/ticker:all') {
930
+ return this.handleTicker(client, message);
931
+ }
883
932
  const subject = this.safeString(message, 'subject');
884
933
  const methods = {
885
934
  'trade.l2update': this.handleOrderBook,
@@ -389,9 +389,9 @@ class kucoinfutures extends kucoinfutures$1 {
389
389
  const deltaEnd = this.safeInteger(data, 'sequence');
390
390
  if (nonce === undefined) {
391
391
  const cacheLength = storedOrderBook.cache.length;
392
- const topicParts = topic.split(':');
393
- const topicSymbol = this.safeString(topicParts, 1);
394
- const topicChannel = this.safeString(topicParts, 0);
392
+ const topicPartsNew = topic.split(':');
393
+ const topicSymbol = this.safeString(topicPartsNew, 1);
394
+ const topicChannel = this.safeString(topicPartsNew, 0);
395
395
  const subscriptions = Object.keys(client.subscriptions);
396
396
  let subscription = undefined;
397
397
  for (let i = 0; i < subscriptions.length; i++) {
@@ -1123,8 +1123,8 @@ class phemex extends phemex$1 {
1123
1123
  }
1124
1124
  const keys = Object.keys(marketIds);
1125
1125
  for (let i = 0; i < keys.length; i++) {
1126
- const messageHash = 'orders' + ':' + keys[i];
1127
- client.resolve(this.orders, messageHash);
1126
+ const currentMessageHash = 'orders' + ':' + keys[i];
1127
+ client.resolve(this.orders, currentMessageHash);
1128
1128
  }
1129
1129
  // resolve generic subscription (spot or swap)
1130
1130
  const messageHash = 'orders:' + type;
@@ -1406,8 +1406,8 @@ class phemex extends phemex$1 {
1406
1406
  return method.call(this, client, message);
1407
1407
  }
1408
1408
  }
1409
- const method = this.safeString(message, 'method', '');
1410
- if (('market24h' in message) || ('spot_market24h' in message) || (method.indexOf('perp_market24h_pack_p') >= 0)) {
1409
+ const methodName = this.safeString(message, 'method', '');
1410
+ if (('market24h' in message) || ('spot_market24h' in message) || (methodName.indexOf('perp_market24h_pack_p') >= 0)) {
1411
1411
  return this.handleTicker(client, message);
1412
1412
  }
1413
1413
  else if (('trades' in message) || ('trades_p' in message)) {
@@ -620,8 +620,8 @@ class poloniex extends poloniex$1 {
620
620
  let totalCost = '0';
621
621
  let totalAmount = '0';
622
622
  const previousOrderTrades = previousOrder['trades'];
623
- for (let i = 0; i < previousOrderTrades.length; i++) {
624
- const previousOrderTrade = previousOrderTrades[i];
623
+ for (let j = 0; j < previousOrderTrades.length; j++) {
624
+ const previousOrderTrade = previousOrderTrades[j];
625
625
  const cost = this.numberToString(previousOrderTrade['cost']);
626
626
  const amount = this.numberToString(previousOrderTrade['amount']);
627
627
  totalCost = Precise["default"].stringAdd(totalCost, cost);
@@ -861,16 +861,16 @@ class poloniex extends poloniex$1 {
861
861
  }
862
862
  const orderbook = this.orderbooks[symbol];
863
863
  if (bids !== undefined) {
864
- for (let i = 0; i < bids.length; i++) {
865
- const bid = this.safeValue(bids, i);
864
+ for (let j = 0; j < bids.length; j++) {
865
+ const bid = this.safeValue(bids, j);
866
866
  const price = this.safeNumber(bid, 0);
867
867
  const amount = this.safeNumber(bid, 1);
868
868
  orderbook['bids'].store(price, amount);
869
869
  }
870
870
  }
871
871
  if (asks !== undefined) {
872
- for (let i = 0; i < asks.length; i++) {
873
- const ask = this.safeValue(asks, i);
872
+ for (let j = 0; j < asks.length; j++) {
873
+ const ask = this.safeValue(asks, j);
874
874
  const price = this.safeNumber(ask, 0);
875
875
  const amount = this.safeNumber(ask, 1);
876
876
  orderbook['asks'].store(price, amount);
@@ -280,8 +280,8 @@ class whitebit extends whitebit$1 {
280
280
  // watchTickers
281
281
  const messageHashes = Object.keys(client.futures);
282
282
  for (let i = 0; i < messageHashes.length; i++) {
283
- const messageHash = messageHashes[i];
284
- if (messageHash.indexOf('tickers') >= 0 && messageHash.indexOf(symbol) >= 0) {
283
+ const currentMessageHash = messageHashes[i];
284
+ if (currentMessageHash.indexOf('tickers') >= 0 && currentMessageHash.indexOf(symbol) >= 0) {
285
285
  // Example: user calls watchTickers with ['LTC/USDT', 'ETH/USDT']
286
286
  // the associated messagehash will be: 'tickers:LTC/USDT:ETH/USDT'
287
287
  // since we only have access to a single symbol at a time
@@ -291,7 +291,7 @@ class whitebit extends whitebit$1 {
291
291
  // user might have multiple watchTickers promises
292
292
  // watchTickers ( ['LTC/USDT', 'ETH/USDT'] ), watchTickers ( ['ETC/USDT', 'DOGE/USDT'] )
293
293
  // and we want to make sure we resolve only the correct ones
294
- client.resolve(ticker, messageHash);
294
+ client.resolve(ticker, currentMessageHash);
295
295
  }
296
296
  }
297
297
  return message;
@@ -749,15 +749,15 @@ class whitebit extends whitebit$1 {
749
749
  }
750
750
  else {
751
751
  // resubscribe
752
- let marketIds = [];
753
- marketIds = Object.keys(subscription);
752
+ let marketIdsNew = [];
753
+ marketIdsNew = Object.keys(subscription);
754
754
  if (isNested) {
755
- marketIds = [marketIds];
755
+ marketIdsNew = [marketIdsNew];
756
756
  }
757
757
  const resubRequest = {
758
758
  'id': id,
759
759
  'method': method,
760
- 'params': marketIds,
760
+ 'params': marketIdsNew,
761
761
  };
762
762
  if (method in client.subscriptions) {
763
763
  delete client.subscriptions[method];
@@ -431,14 +431,14 @@ class probit extends probit$1 {
431
431
  }
432
432
  const precision = this.parsePrecision(this.safeString(network, 'precision'));
433
433
  const withdrawFee = this.safeValue(network, 'withdrawal_fee', []);
434
- const fee = this.safeValue(withdrawFee, 0, {});
434
+ const networkfee = this.safeValue(withdrawFee, 0, {});
435
435
  networkList[networkCode] = {
436
436
  'id': networkId,
437
437
  'network': networkCode,
438
438
  'active': currentActive,
439
439
  'deposit': currentDeposit,
440
440
  'withdraw': currentWithdraw,
441
- 'fee': this.safeNumber(fee, 'amount'),
441
+ 'fee': this.safeNumber(networkfee, 'amount'),
442
442
  'precision': this.parseNumber(precision),
443
443
  'limits': {
444
444
  'withdraw': {
package/js/ccxt.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
4
4
  import * as errors from './src/base/errors.js';
5
5
  import { Market, Trade, Fee, Ticker, OrderBook, Order, Transaction, Tickers, Currency, Balance, DepositAddress, WithdrawalResponse, DepositAddressResponse, OHLCV, Balances, PartialBalances, Dictionary, MinMax, Position } from './src/base/types.js';
6
6
  import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending } from './src/base/errors.js';
7
- declare const version = "4.0.98";
7
+ declare const version = "4.0.100";
8
8
  import ace from './src/ace.js';
9
9
  import alpaca from './src/alpaca.js';
10
10
  import ascendex from './src/ascendex.js';
package/js/ccxt.js CHANGED
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
38
38
  import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending } from './src/base/errors.js';
39
39
  //-----------------------------------------------------------------------------
40
40
  // this is updated by vss.js when building
41
- const version = '4.0.99';
41
+ const version = '4.0.101';
42
42
  Exchange.ccxtVersion = version;
43
43
  //-----------------------------------------------------------------------------
44
44
  import ace from './src/ace.js';
@@ -1661,7 +1661,12 @@ export default class Exchange {
1661
1661
  const oldNumber = this.number;
1662
1662
  // we parse trades as strings here!
1663
1663
  this.number = String;
1664
- trades = this.parseTrades(rawTrades, market);
1664
+ const firstTrade = this.safeValue(rawTrades, 0);
1665
+ // parse trades if they haven't already been parsed
1666
+ const tradesAreParsed = ((firstTrade !== undefined) && ('info' in firstTrade) && ('id' in firstTrade));
1667
+ if (!tradesAreParsed) {
1668
+ trades = this.parseTrades(rawTrades, market);
1669
+ }
1665
1670
  this.number = oldNumber;
1666
1671
  let tradesLength = 0;
1667
1672
  const isArray = Array.isArray(trades);
package/js/src/binance.js CHANGED
@@ -3423,6 +3423,18 @@ export default class binance extends Exchange {
3423
3423
  // "M": true // Was the trade the best price match?
3424
3424
  // }
3425
3425
  //
3426
+ // REST: aggregate trades for swap & future (both linear and inverse)
3427
+ //
3428
+ // {
3429
+ // "a": "269772814",
3430
+ // "p": "25864.1",
3431
+ // "q": "3",
3432
+ // "f": "662149354",
3433
+ // "l": "662149355",
3434
+ // "T": "1694209776022",
3435
+ // "m": false,
3436
+ // }
3437
+ //
3426
3438
  // recent public trades and old public trades
3427
3439
  // https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#recent-trades-list
3428
3440
  // https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#old-trade-lookup-market_data
@@ -3676,7 +3688,8 @@ export default class binance extends Exchange {
3676
3688
  }
3677
3689
  }
3678
3690
  if (limit !== undefined) {
3679
- request['limit'] = limit; // default = 500, maximum = 1000
3691
+ const isFutureOrSwap = (market['swap'] || market['future']);
3692
+ request['limit'] = isFutureOrSwap ? Math.min(limit, 1000) : limit; // default = 500, maximum = 1000
3680
3693
  }
3681
3694
  params = this.omit(params, ['until', 'fetchTradesMethod']);
3682
3695
  //
@@ -3705,6 +3718,20 @@ export default class binance extends Exchange {
3705
3718
  // }
3706
3719
  // ]
3707
3720
  //
3721
+ // inverse (swap & future)
3722
+ //
3723
+ // [
3724
+ // {
3725
+ // "a": "269772814",
3726
+ // "p": "25864.1",
3727
+ // "q": "3",
3728
+ // "f": "662149354",
3729
+ // "l": "662149355",
3730
+ // "T": "1694209776022",
3731
+ // "m": false,
3732
+ // },
3733
+ // ]
3734
+ //
3708
3735
  // recent public trades and historical public trades
3709
3736
  //
3710
3737
  // [
package/js/src/bitbank.js CHANGED
@@ -319,6 +319,17 @@ export default class bitbank extends Exchange {
319
319
  return this.parseOrderBook(orderbook, market['symbol'], timestamp);
320
320
  }
321
321
  parseTrade(trade, market = undefined) {
322
+ //
323
+ // fetchTrades
324
+ //
325
+ // {
326
+ // "transaction_id": "1143247037",
327
+ // "side": "buy",
328
+ // "price": "3836025",
329
+ // "amount": "0.0005",
330
+ // "executed_at": "1694249441593"
331
+ // }
332
+ //
322
333
  const timestamp = this.safeInteger(trade, 'executed_at');
323
334
  market = this.safeMarket(undefined, market);
324
335
  const priceString = this.safeString(trade, 'price');
@@ -922,14 +922,6 @@ export default class bitfinex extends Exchange {
922
922
  // "type":"sell"
923
923
  // }
924
924
  //
925
- // { "timestamp":1637258238,
926
- // "tid":894452800,
927
- // "price":"0.99958",
928
- // "amount":"261.90514",
929
- // "exchange":"bitfinex",
930
- // "type":"buy"
931
- // }
932
- //
933
925
  // fetchMyTrades (private) v1
934
926
  //
935
927
  // {
@@ -1008,6 +1000,18 @@ export default class bitfinex extends Exchange {
1008
1000
  request['timestamp'] = this.parseToInt(since / 1000);
1009
1001
  }
1010
1002
  const response = await this.publicGetTradesSymbol(this.extend(request, params));
1003
+ //
1004
+ // [
1005
+ // {
1006
+ // "timestamp": "1694284565",
1007
+ // "tid": "1415415034",
1008
+ // "price": "25862.0",
1009
+ // "amount": "0.00020685",
1010
+ // "exchange": "bitfinex",
1011
+ // "type": "buy"
1012
+ // },
1013
+ // ]
1014
+ //
1011
1015
  return this.parseTrades(response, market, since, limit);
1012
1016
  }
1013
1017
  async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -409,7 +409,7 @@ export default class bitflyer extends Exchange {
409
409
  //
410
410
  // fetchTrades (public) v1
411
411
  //
412
- // {
412
+ // {
413
413
  // "id":2278466664,
414
414
  // "side":"SELL",
415
415
  // "price":56810.7,
@@ -419,16 +419,18 @@ export default class bitflyer extends Exchange {
419
419
  // "sell_child_order_acceptance_id":"JRF20211119-114639-236919"
420
420
  // }
421
421
  //
422
- // {
423
- // "id":2278463423,
424
- // "side":"BUY",
425
- // "price":56757.83,
426
- // "size":0.6003,"exec_date":"2021-11-19T11:28:00.523",
427
- // "buy_child_order_acceptance_id":"JRF20211119-112800-236526",
428
- // "sell_child_order_acceptance_id":"JRF20211119-112734-062017"
429
- // }
430
- //
422
+ // fetchMyTrades
431
423
  //
424
+ // {
425
+ // "id": 37233,
426
+ // "side": "BUY",
427
+ // "price": 33470,
428
+ // "size": 0.01,
429
+ // "exec_date": "2015-07-07T09:57:40.397",
430
+ // "child_order_id": "JOR20150707-060559-021935",
431
+ // "child_order_acceptance_id": "JRF20150707-060559-396699"
432
+ // "commission": 0,
433
+ // },
432
434
  //
433
435
  let side = this.safeStringLower(trade, 'side');
434
436
  if (side !== undefined) {
@@ -487,6 +489,19 @@ export default class bitflyer extends Exchange {
487
489
  request['count'] = limit;
488
490
  }
489
491
  const response = await this.publicGetGetexecutions(this.extend(request, params));
492
+ //
493
+ // [
494
+ // {
495
+ // "id": 39287,
496
+ // "side": "BUY",
497
+ // "price": 31690,
498
+ // "size": 27.04,
499
+ // "exec_date": "2015-07-08T02:43:34.823",
500
+ // "buy_child_order_acceptance_id": "JRF20150707-200203-452209",
501
+ // "sell_child_order_acceptance_id": "JRF20150708-024334-060234"
502
+ // },
503
+ // ]
504
+ //
490
505
  return this.parseTrades(response, market, since, limit);
491
506
  }
492
507
  async fetchTradingFee(symbol, params = {}) {
@@ -723,6 +738,20 @@ export default class bitflyer extends Exchange {
723
738
  request['count'] = limit;
724
739
  }
725
740
  const response = await this.privateGetGetexecutions(this.extend(request, params));
741
+ //
742
+ // [
743
+ // {
744
+ // "id": 37233,
745
+ // "side": "BUY",
746
+ // "price": 33470,
747
+ // "size": 0.01,
748
+ // "exec_date": "2015-07-07T09:57:40.397",
749
+ // "child_order_id": "JOR20150707-060559-021935",
750
+ // "child_order_acceptance_id": "JRF20150707-060559-396699"
751
+ // "commission": 0,
752
+ // },
753
+ // ]
754
+ //
726
755
  return this.parseTrades(response, market, since, limit);
727
756
  }
728
757
  async fetchPositions(symbols = undefined, params = {}) {
@@ -249,14 +249,6 @@ export default class bitforex extends Exchange {
249
249
  // "tid":"1131019666"
250
250
  // }
251
251
  //
252
- // {
253
- // "price":57591.33,
254
- // "amount":0.002,
255
- // "time":1637329685322,
256
- // "direction":1,
257
- // "tid":"1131019639"
258
- // }
259
- //
260
252
  // fetchMyTrades (private)
261
253
  //
262
254
  // {
package/js/src/bitget.js CHANGED
@@ -2152,7 +2152,7 @@ export default class bitget extends Exchange {
2152
2152
  // "fillTime": "1692073691000"
2153
2153
  // }
2154
2154
  //
2155
- // swap
2155
+ // swap (public trades)
2156
2156
  //
2157
2157
  // {
2158
2158
  // "tradeId": "1075199767891652609",
@@ -2284,6 +2284,16 @@ export default class bitget extends Exchange {
2284
2284
  params = this.omit(params, 'method');
2285
2285
  if (swapMethod === 'publicMixGetMarketFillsHistory') {
2286
2286
  response = await this.publicMixGetMarketFillsHistory(this.extend(request, params));
2287
+ //
2288
+ // {
2289
+ // "tradeId": "1084459062491590657",
2290
+ // "price": "25874",
2291
+ // "size": "1.624",
2292
+ // "side": "Buy",
2293
+ // "timestamp": "1694281109000",
2294
+ // "symbol": "BTCUSDT_UMCBL",
2295
+ // }
2296
+ //
2287
2297
  }
2288
2298
  else if (swapMethod === 'publicMixGetMarketFills') {
2289
2299
  response = await this.publicMixGetMarketFills(this.extend(request, params));
@@ -2984,12 +2994,12 @@ export default class bitget extends Exchange {
2984
2994
  }
2985
2995
  else if (isStopLossOrTakeProfit) {
2986
2996
  if (isStopLoss) {
2987
- const stopLossTriggerPrice = this.safeValue2(stopLoss, 'triggerPrice', 'stopPrice');
2988
- request['presetStopLossPrice'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
2997
+ const slTriggerPrice = this.safeValue2(stopLoss, 'triggerPrice', 'stopPrice');
2998
+ request['presetStopLossPrice'] = this.priceToPrecision(symbol, slTriggerPrice);
2989
2999
  }
2990
3000
  if (isTakeProfit) {
2991
- const takeProfitTriggerPrice = this.safeValue2(takeProfit, 'triggerPrice', 'stopPrice');
2992
- request['presetTakeProfitPrice'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
3001
+ const tpTriggerPrice = this.safeValue2(takeProfit, 'triggerPrice', 'stopPrice');
3002
+ request['presetTakeProfitPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);
2993
3003
  }
2994
3004
  }
2995
3005
  }
@@ -218,6 +218,17 @@ export default class bitstamp1 extends Exchange {
218
218
  return this.parseTicker(ticker, market);
219
219
  }
220
220
  parseTrade(trade, market = undefined) {
221
+ //
222
+ // public trade
223
+ //
224
+ // {
225
+ // "amount": "0.00114000",
226
+ // "date": "1694287856",
227
+ // "price": "25865",
228
+ // "tid": 298730788,
229
+ // "type": 0
230
+ // }
231
+ //
221
232
  const timestamp = this.safeTimestamp2(trade, 'date', 'datetime');
222
233
  const side = (trade['type'] === 0) ? 'buy' : 'sell';
223
234
  const orderId = this.safeString(trade, 'order_id');
@@ -262,6 +273,17 @@ export default class bitstamp1 extends Exchange {
262
273
  'time': 'minute',
263
274
  };
264
275
  const response = await this.publicGetTransactions(this.extend(request, params));
276
+ //
277
+ // [
278
+ // {
279
+ // "amount": "0.00114000",
280
+ // "date": "1694287856",
281
+ // "price": "25865",
282
+ // "tid": 298730788,
283
+ // "type": 0
284
+ // },
285
+ // ]
286
+ //
265
287
  return this.parseTrades(response, market, since, limit);
266
288
  }
267
289
  parseBalance(response) {
package/js/src/bl3p.js CHANGED
@@ -244,6 +244,16 @@ export default class bl3p extends Exchange {
244
244
  return this.parseTicker(ticker, market);
245
245
  }
246
246
  parseTrade(trade, market = undefined) {
247
+ //
248
+ // fetchTrades
249
+ //
250
+ // {
251
+ // "trade_id": "2518789",
252
+ // "date": "1694348697745",
253
+ // "amount_int": "2959153",
254
+ // "price_int": "2416231440"
255
+ // }
256
+ //
247
257
  const id = this.safeString(trade, 'trade_id');
248
258
  const timestamp = this.safeInteger(trade, 'date');
249
259
  const price = this.safeString(trade, 'price_int');
@@ -280,6 +290,20 @@ export default class bl3p extends Exchange {
280
290
  const response = await this.publicGetMarketTrades(this.extend({
281
291
  'market': market['id'],
282
292
  }, params));
293
+ //
294
+ // {
295
+ // "result": "success",
296
+ // "data": {
297
+ // "trades": [
298
+ // {
299
+ // "trade_id": "2518789",
300
+ // "date": "1694348697745",
301
+ // "amount_int": "2959153",
302
+ // "price_int": "2416231440"
303
+ // },
304
+ // ]
305
+ // }
306
+ // }
283
307
  const result = this.parseTrades(response['data']['trades'], market, since, limit);
284
308
  return result;
285
309
  }