tick-kit.js 2.1 KB

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