tick-kit.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. const NumKit = require("./num-kit");
  2. class TickKit {}
  3. /**
  4. * EMA计算器
  5. * @param lastEma 上一个EMA
  6. * @param closePrice 收盘价
  7. * @param units 数据条数
  8. * @returns {number}
  9. */
  10. TickKit.EMA = function (lastEma, closePrice, units) {
  11. return (lastEma * (units - 1) + closePrice * 2) / (units + 1)
  12. }
  13. /**
  14. *
  15. * 计算移动平均线指标, ma的周期为days
  16. *
  17. * @method MA
  18. * @param {Array} ticks 一维数组类型,每个元素为当前Tick的收盘价格
  19. * @param {Integer} day
  20. * @return {Array} mas
  21. */
  22. TickKit.MA = function (ticks, day) {
  23. const mas = []
  24. for (let i = 0; i < ticks.length; i++) {
  25. if (i < day - 1) {
  26. mas.push(ticks[i])
  27. } else {
  28. let valueSum = 0
  29. for (let j = i; j > i - day; j--) {
  30. valueSum += ticks[j]
  31. }
  32. mas.push(valueSum / day)
  33. }
  34. }
  35. return mas
  36. }
  37. /**
  38. *
  39. * 计算macd指标,快速和慢速移动平均线的周期分别取12和26
  40. *
  41. * @method MACD
  42. * @param {Array} ticks
  43. * 一维数组类型,每个元素为tick的收盘价格
  44. * @param {Integer} N1
  45. * 整数类型,是为快线
  46. * @param {Integer} N2
  47. * 整数类型,是为慢线
  48. * @param {Integer} N3
  49. * 整数类型,是为信号长度
  50. * @return {Object} 返回一个包含diffs deas bars属性的对象,每个属性对应的类型为{Array[Number]}
  51. */
  52. TickKit.MACD = function (ticks, N1, N2, N3) {
  53. const emaN1 = []
  54. const emaN2 = []
  55. const diffs = []
  56. const deas = []
  57. const bars = []
  58. for (let i = 0; i < ticks.length; i++) {
  59. const c = ticks[i]
  60. if (i === 0) {
  61. emaN1.push(c)
  62. emaN2.push(c)
  63. deas.push(0)
  64. } else {
  65. emaN1.push(TickKit.EMA(emaN1[i - 1], c, N1))
  66. emaN2.push(TickKit.EMA(emaN2[i - 1], c, N2))
  67. }
  68. // 计算离差值
  69. diffs.push(emaN1[i] - emaN2[i])
  70. if (i !== 0) {
  71. deas.push(TickKit.EMA(deas[i - 1], diffs[i], N3))
  72. }
  73. // bars.push((diffs[i]-deas[i]) * 2);
  74. bars.push(diffs[i] - deas[i])
  75. }
  76. return { diffs: diffs, deas: deas, bars: bars }
  77. }
  78. module.exports = TickKit