utils.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /**
  2. * Extract buy/sell bid prices from data points
  3. * @param {any[]} data
  4. * @returns {number[]}
  5. */
  6. export const extractBidPrices = (data) => {
  7. const set = new Set(data.map(d => {
  8. const marketDepth = d.marketDepth;
  9. if (marketDepth) {
  10. let buys = marketDepth.buys.map(b => +b.rate);
  11. let sells = marketDepth.sells.map(b => +b.rate);
  12. return buys.concat(sells, [marketDepth.lastBuyQty !== 0 ? +marketDepth.lastBuyPrice : +marketDepth.lastSellPrice]);
  13. }
  14. return [];
  15. }).reduce((acc, val) => acc.concat(val), []));
  16. return Array.from(set);
  17. }
  18. /**
  19. * Extract buy/sell bid volumnes from a single data point
  20. * @param {any} data
  21. * @returns {number[]}
  22. */
  23. export const extractBidVolumes = (data) => {
  24. if (data) {
  25. const marketDepth = data.marketDepth;
  26. if (marketDepth) {
  27. let buys = marketDepth.buys.map(b => +b.qty);
  28. let sells = marketDepth.sells.map(b => +b.qty);
  29. return buys.concat(sells);
  30. }
  31. }
  32. else return [];
  33. }
  34. /**
  35. * Extract max volume (buy or sell) for a data point
  36. * @param {any} data
  37. * @returns {number}
  38. */
  39. export const extractMaxVolume = (data) => {
  40. const vols = extractBidVolumes(data).sort((a, b) => a - b);
  41. if (vols.length > 0) return vols[vols.length - 1];
  42. else return 1;
  43. }
  44. /**
  45. * Extract max traded volume within a given set of datapoints
  46. * @param {any[]} data
  47. * @returns {number}
  48. */
  49. export const extractMaxTradedVolume = (data) => {
  50. let vols = data.map(d => {
  51. if (d.marketDepth) return +d.marketDepth.lastTradedQty;
  52. else return 0;
  53. }).sort((a, b) => a - b);
  54. if (vols.length > 0) return vols[vols.length - 1];
  55. else return 1;
  56. }
  57. /**
  58. * 获取data中的的所有order book的最大值
  59. * @param {any[]} data
  60. * @returns {number}
  61. */
  62. export const extractMaxAskBidVolume = (data) => {
  63. let maxVols = data.map(d => {
  64. if (d.marketDepth) {
  65. let asksMax = Math.max(...d.marketDepth.buys.map(order => order.qty));
  66. let bidsMax = Math.max(...d.marketDepth.sells.map(order => order.qty))
  67. return Math.max(asksMax, bidsMax);
  68. }
  69. else return 0;
  70. });
  71. if (maxVols.length > 0) return Math.max(...maxVols);
  72. else return 1;
  73. }
  74. export const extractAvgTradedVolume = (data) => {
  75. let vols = data.map(d => {
  76. if (d.marketDepth) return +d.marketDepth.lastSellQty + +d.marketDepth.lastBuyQty;
  77. else return 0;
  78. });
  79. if (vols.length > 0) return vols.reduce((acc, curr) => acc + curr, 0) / vols.length;
  80. else return 1;
  81. }
  82. /**
  83. * Format zoom scale time
  84. * @param {number} seconds
  85. */
  86. export const zoomTimeFormat = (seconds, decimal) => {
  87. if(!decimal) decimal = 2;
  88. if(seconds > 59) {
  89. if(seconds > 3599) {
  90. let hrs = seconds/3600;
  91. return `${hrs.toFixed(decimal)} 小时`;
  92. }
  93. else {
  94. let mins = seconds/60;
  95. return `${mins.toFixed(decimal)} 分钟`;
  96. }
  97. }
  98. else return `${seconds} 秒`;
  99. }