binance-kit.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. const CryptoJS = require('crypto')
  2. module.exports = class BinanceKit {
  3. // 创建签名
  4. static createSignature(secretKey, data) {
  5. const hmac = CryptoJS.createHmac('sha256', secretKey)
  6. hmac.update(BinanceKit.toQueryString(data))
  7. return hmac.digest('hex')
  8. }
  9. // 将map转换为queryString
  10. static toQueryString(data) {
  11. let queryString = ''
  12. for (let key in data) {
  13. queryString = queryString + `${key}=${data[key]}&`
  14. }
  15. return queryString.substring(0, queryString.length - 1)
  16. }
  17. // 获取最终QueryURL
  18. static toFinalQueryURL(url, data, signature) {
  19. return `${url}?${BinanceKit.toQueryString(data)}&signature=${signature}`
  20. }
  21. static buildExchangeInfoSymbols(symbols) {
  22. let buffer = ''
  23. let isFirst = true
  24. for (const symbol of symbols) {
  25. if (isFirst) {
  26. isFirst = false
  27. buffer = `["${symbol}"`
  28. } else {
  29. buffer = `${buffer},"${symbol}"`
  30. }
  31. }
  32. return `${buffer}]`
  33. }
  34. static parseBalancesToAccountAssetMap(balances) {
  35. const accountAssetMap = {}
  36. balances.forEach((balance) => {
  37. accountAssetMap[balance.asset] = balance.free
  38. })
  39. return accountAssetMap
  40. }
  41. static parsePriceTickFilterMap(exchangeInfoSymbols) {
  42. const filterMap = {}
  43. exchangeInfoSymbols.forEach(function(pairInfo) {
  44. const filter = pairInfo.filters.filter(filterObj => filterObj.filterType === 'PRICE_FILTER')[0]
  45. filterMap[pairInfo.symbol] = Math.log10(1 / parseFloat(filter.tickSize))
  46. })
  47. return filterMap
  48. }
  49. static parseLotSizeFilterMap(exchangeInfoSymbols) {
  50. const filterMap = {}
  51. exchangeInfoSymbols.forEach(function(pairInfo) {
  52. const filter = pairInfo.filters.filter(filterObj => filterObj.filterType === 'LOT_SIZE')[0]
  53. filterMap[pairInfo.symbol] = Math.log10(1 / parseFloat(filter.stepSize))
  54. })
  55. return filterMap
  56. }
  57. static parseCloseTicks(originKlines) {
  58. return originKlines.map(kline => {
  59. return parseFloat(kline[4])
  60. })
  61. }
  62. }