@ch20026103/anysis 0.0.3-alpha → 0.0.6-alpha

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 (72) hide show
  1. package/dist/cjs/analyze/Month/index.d.ts +1 -1
  2. package/dist/cjs/analyze/Month/index.test.d.ts +1 -0
  3. package/dist/cjs/analyze/Month/index.test.js +22 -0
  4. package/dist/cjs/analyze/Regression/simpleRegressoinModel.d.ts +1 -1
  5. package/dist/cjs/analyze/Slope/slope.test.js +6 -0
  6. package/dist/cjs/analyze/TimeSeries/R/index.d.ts +1 -1
  7. package/dist/cjs/index.d.ts +3 -0
  8. package/dist/cjs/index.js +7 -1
  9. package/dist/cjs/stockSkills/boll.d.ts +58 -0
  10. package/dist/cjs/stockSkills/boll.js +101 -0
  11. package/dist/cjs/stockSkills/boll.test.d.ts +1 -0
  12. package/dist/cjs/stockSkills/boll.test.js +36 -0
  13. package/dist/cjs/stockSkills/ema.d.ts +9 -0
  14. package/dist/cjs/stockSkills/ema.js +41 -0
  15. package/dist/cjs/stockSkills/ema.test.d.ts +1 -0
  16. package/dist/cjs/stockSkills/ema.test.js +11 -0
  17. package/dist/cjs/stockSkills/gold.d.ts +4 -4
  18. package/dist/cjs/stockSkills/kd.d.ts +41 -14
  19. package/dist/cjs/stockSkills/kd.js +60 -6
  20. package/dist/cjs/stockSkills/kd.test.js +34 -2
  21. package/dist/cjs/stockSkills/ma.d.ts +49 -30
  22. package/dist/cjs/stockSkills/ma.js +37 -44
  23. package/dist/cjs/stockSkills/ma.test.js +15 -20
  24. package/dist/cjs/stockSkills/macd.d.ts +62 -16
  25. package/dist/cjs/stockSkills/macd.js +92 -5
  26. package/dist/cjs/stockSkills/macd.test.js +26 -0
  27. package/dist/cjs/stockSkills/obv.d.ts +44 -0
  28. package/dist/cjs/stockSkills/obv.js +89 -0
  29. package/dist/cjs/stockSkills/obv.test.d.ts +1 -0
  30. package/dist/cjs/stockSkills/obv.test.js +20 -0
  31. package/dist/cjs/stockSkills/rsi.d.ts +8 -8
  32. package/dist/cjs/stockSkills/rsi.js +2 -2
  33. package/dist/cjs/stockSkills/utils/getWeekLine.d.ts +2 -2
  34. package/dist/cjs/stockSkills/williams.d.ts +8 -8
  35. package/dist/cjs/stockSkills/williams.js +2 -2
  36. package/dist/esm/analyze/Month/index.d.ts +1 -1
  37. package/dist/esm/analyze/Month/index.test.d.ts +1 -0
  38. package/dist/esm/analyze/Month/index.test.js +20 -0
  39. package/dist/esm/analyze/Regression/simpleRegressoinModel.d.ts +1 -1
  40. package/dist/esm/analyze/Slope/slope.test.js +6 -0
  41. package/dist/esm/analyze/TimeSeries/R/index.d.ts +1 -1
  42. package/dist/esm/index.d.ts +3 -0
  43. package/dist/esm/index.js +3 -0
  44. package/dist/esm/stockSkills/boll.d.ts +58 -0
  45. package/dist/esm/stockSkills/boll.js +99 -0
  46. package/dist/esm/stockSkills/boll.test.d.ts +1 -0
  47. package/dist/esm/stockSkills/boll.test.js +34 -0
  48. package/dist/esm/stockSkills/ema.d.ts +9 -0
  49. package/dist/esm/stockSkills/ema.js +39 -0
  50. package/dist/esm/stockSkills/ema.test.d.ts +1 -0
  51. package/dist/esm/stockSkills/ema.test.js +9 -0
  52. package/dist/esm/stockSkills/gold.d.ts +4 -4
  53. package/dist/esm/stockSkills/kd.d.ts +41 -14
  54. package/dist/esm/stockSkills/kd.js +60 -6
  55. package/dist/esm/stockSkills/kd.test.js +34 -2
  56. package/dist/esm/stockSkills/ma.d.ts +49 -30
  57. package/dist/esm/stockSkills/ma.js +37 -44
  58. package/dist/esm/stockSkills/ma.test.js +15 -20
  59. package/dist/esm/stockSkills/macd.d.ts +62 -16
  60. package/dist/esm/stockSkills/macd.js +92 -5
  61. package/dist/esm/stockSkills/macd.test.js +26 -0
  62. package/dist/esm/stockSkills/obv.d.ts +44 -0
  63. package/dist/esm/stockSkills/obv.js +87 -0
  64. package/dist/esm/stockSkills/obv.test.d.ts +1 -0
  65. package/dist/esm/stockSkills/obv.test.js +18 -0
  66. package/dist/esm/stockSkills/rsi.d.ts +8 -8
  67. package/dist/esm/stockSkills/rsi.js +2 -2
  68. package/dist/esm/stockSkills/utils/getWeekLine.d.ts +2 -2
  69. package/dist/esm/stockSkills/williams.d.ts +8 -8
  70. package/dist/esm/stockSkills/williams.js +2 -2
  71. package/dist/umd/index.js +458 -96
  72. package/package.json +15 -17
@@ -2,25 +2,52 @@ interface KdType {
2
2
  getRSV: (list: ListType) => ResRSV;
3
3
  getKD: (list: ListType) => ResKD;
4
4
  }
5
- declare type ListType = {
5
+ type DataType = {
6
6
  c: number;
7
7
  h: number;
8
8
  l: number;
9
- }[];
10
- declare type ResRSV = {
9
+ };
10
+ type ListType = DataType[];
11
+ type ResRSV = {
11
12
  c: number;
12
- rsv?: number;
13
+ rsv: number | null;
13
14
  }[];
14
- declare type ResKD = {
15
+ type ResKD = {
15
16
  c: number;
16
- rsv?: number;
17
- k?: number;
18
- d?: number;
19
- "k-d"?: number;
17
+ rsv: number | null;
18
+ k: number | null;
19
+ d: number | null;
20
+ "k-d": number | null;
20
21
  }[];
21
22
  export default class Kd implements KdType {
23
+ init(data: DataType): {
24
+ dataset: ListType;
25
+ rsv: number | null;
26
+ k: number | null;
27
+ d: number | null;
28
+ "k-d": number | null;
29
+ };
30
+ next(data: DataType, preList: {
31
+ dataset: ListType;
32
+ rsv: number | null;
33
+ k: number | null;
34
+ d: number | null;
35
+ "k-d": number | null;
36
+ }, type: number): {
37
+ dataset: ListType;
38
+ rsv: null;
39
+ k: null;
40
+ d: null;
41
+ "k-d": null;
42
+ } | {
43
+ dataset: ListType;
44
+ rsv: number;
45
+ k: number;
46
+ d: number;
47
+ "k-d": number;
48
+ };
22
49
  getRSV(list: ListType): ({
23
- rsv: undefined;
50
+ rsv: null;
24
51
  c: number;
25
52
  h: number;
26
53
  l: number;
@@ -31,10 +58,10 @@ export default class Kd implements KdType {
31
58
  l: number;
32
59
  })[];
33
60
  getKD(list: ListType): ({
34
- rsv: undefined;
35
- k: undefined;
36
- d: undefined;
37
- "k-d": undefined;
61
+ rsv: null;
62
+ k: null;
63
+ d: null;
64
+ "k-d": null;
38
65
  c: number;
39
66
  h: number;
40
67
  l: number;
@@ -12,6 +12,60 @@ var __assign = (this && this.__assign) || function () {
12
12
  var Kd = /** @class */ (function () {
13
13
  function Kd() {
14
14
  }
15
+ Object.defineProperty(Kd.prototype, "init", {
16
+ enumerable: false,
17
+ configurable: true,
18
+ writable: true,
19
+ value: function (data) {
20
+ return {
21
+ dataset: [data],
22
+ rsv: null,
23
+ k: null,
24
+ d: null,
25
+ "k-d": null,
26
+ };
27
+ }
28
+ });
29
+ Object.defineProperty(Kd.prototype, "next", {
30
+ enumerable: false,
31
+ configurable: true,
32
+ writable: true,
33
+ value: function (data, preList, type) {
34
+ preList.dataset.push(data);
35
+ if (preList.dataset.length < type) {
36
+ return {
37
+ dataset: preList.dataset,
38
+ rsv: null,
39
+ k: null,
40
+ d: null,
41
+ "k-d": null,
42
+ };
43
+ }
44
+ else {
45
+ if (preList.dataset.length > type) {
46
+ preList.dataset.shift();
47
+ }
48
+ var low = Math.min.apply(Math, preList.dataset.map(function (item) { return item.l; }));
49
+ var hight = Math.max.apply(Math, preList.dataset.map(function (item) { return item.h; }));
50
+ var close_1 = data.c;
51
+ var rsv = ((close_1 - low) / (hight - low)) * 100;
52
+ rsv = Math.round(rsv * 100) / 100;
53
+ var k = (2 / 3) * (preList.k ? preList.k : 50) + (1 / 3) * rsv;
54
+ var d = (2 / 3) * (preList.d ? preList.d : 50) + (1 / 3) * k;
55
+ var k_d = k - d;
56
+ k = Math.round(k * 100) / 100;
57
+ d = Math.round(d * 100) / 100;
58
+ k_d = Math.round(k_d * 100) / 100;
59
+ return {
60
+ dataset: preList.dataset,
61
+ rsv: rsv,
62
+ k: k,
63
+ d: d,
64
+ "k-d": k_d,
65
+ };
66
+ }
67
+ }
68
+ });
15
69
  Object.defineProperty(Kd.prototype, "getRSV", {
16
70
  enumerable: false,
17
71
  configurable: true,
@@ -20,12 +74,12 @@ var Kd = /** @class */ (function () {
20
74
  var res = [];
21
75
  for (var i = 0; i < list.length; i++) {
22
76
  if (i < 8)
23
- res[i] = __assign(__assign({}, list[i]), { rsv: undefined });
77
+ res[i] = __assign(__assign({}, list[i]), { rsv: null });
24
78
  else {
25
79
  var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
26
80
  var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
27
- var close_1 = list[i].c;
28
- var rsv = ((close_1 - low) / (hight - low)) * 100;
81
+ var close_2 = list[i].c;
82
+ var rsv = ((close_2 - low) / (hight - low)) * 100;
29
83
  rsv = Math.round(rsv * 100) / 100;
30
84
  res[i] = __assign(__assign({}, list[i]), { rsv: rsv });
31
85
  }
@@ -43,12 +97,12 @@ var Kd = /** @class */ (function () {
43
97
  var yesterdayD = 50;
44
98
  for (var i = 0; i < list.length; i++) {
45
99
  if (i < 8)
46
- res[i] = __assign(__assign({}, list[i]), { rsv: undefined, k: undefined, d: undefined, "k-d": undefined });
100
+ res[i] = __assign(__assign({}, list[i]), { rsv: null, k: null, d: null, "k-d": null });
47
101
  else {
48
102
  var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
49
103
  var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
50
- var close_2 = list[i].c;
51
- var rsv = ((close_2 - low) / (hight - low)) * 100;
104
+ var close_3 = list[i].c;
105
+ var rsv = ((close_3 - low) / (hight - low)) * 100;
52
106
  rsv = Math.round(rsv * 100) / 100;
53
107
  var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
54
108
  var d = (2 / 3) * yesterdayD + (1 / 3) * k;
@@ -1,6 +1,38 @@
1
1
  import Kd from "./kd";
2
2
  import { data_9904 as data } from "./test_data.test";
3
3
  describe("test kd methods", function () {
4
+ it("test init", function () {
5
+ var index = data.length - 1;
6
+ var kd = new Kd();
7
+ var realData = kd.getKD(data)[index];
8
+ var init = kd.init(data[0]);
9
+ var res = init;
10
+ for (var i = 1; i <= index; i++) {
11
+ var item = data[i];
12
+ res = kd.next(item, res, 9);
13
+ }
14
+ expect({
15
+ dataset: {
16
+ c: realData.c,
17
+ h: realData.h,
18
+ l: realData.l,
19
+ },
20
+ rsv: realData.rsv,
21
+ "k-d": realData["k-d"],
22
+ k: realData.k,
23
+ d: realData.d,
24
+ }).toEqual({
25
+ dataset: {
26
+ c: res.dataset[res.dataset.length - 1].c,
27
+ h: res.dataset[res.dataset.length - 1].h,
28
+ l: res.dataset[res.dataset.length - 1].l,
29
+ },
30
+ rsv: res.rsv,
31
+ "k-d": res["k-d"],
32
+ k: res.k,
33
+ d: res.d,
34
+ });
35
+ });
4
36
  it("test getRSV()", function () {
5
37
  var kd = new Kd();
6
38
  expect(kd.getRSV(data)[data.length - 1]).toEqual({
@@ -13,7 +45,7 @@ describe("test kd methods", function () {
13
45
  rsv: 90.63,
14
46
  });
15
47
  });
16
- it("test getRSV()", function () {
48
+ it("test getKD()", function () {
17
49
  var kd = new Kd();
18
50
  expect(kd.getKD(data)[data.length - 1]).toEqual({
19
51
  o: 26.4,
@@ -25,7 +57,7 @@ describe("test kd methods", function () {
25
57
  rsv: 90.63,
26
58
  k: 64.41,
27
59
  d: 45.25,
28
- 'k-d': 19.16
60
+ "k-d": 19.16,
29
61
  });
30
62
  });
31
63
  });
@@ -1,58 +1,77 @@
1
- declare type ListType = {
1
+ type DataType = {
2
2
  c: number;
3
- }[];
4
- declare type ResMa5 = {
5
- c: number;
6
- ma5?: number;
7
- }[];
8
- declare type ResMa10 = {
3
+ };
4
+ type ListType = DataType[];
5
+ type ResMa5 = {
9
6
  c: number;
10
- ma10?: number;
7
+ ma5: number | null;
11
8
  }[];
12
- declare type ResMa20 = {
9
+ type ResMa10 = {
13
10
  c: number;
14
- ma20?: number;
11
+ ma10: number | null;
15
12
  }[];
16
- declare type ResMa60 = {
13
+ type ResMa20 = {
17
14
  c: number;
18
- ma60?: number;
15
+ ma20: number | null;
19
16
  }[];
20
- declare type ResMaSelf = {
17
+ type ResMa60 = {
21
18
  c: number;
22
- maSelf?: number;
19
+ ma60: number | null;
23
20
  }[];
24
- declare type ResBoll = {
21
+ type ResMa = {
25
22
  c: number;
26
- ma25?: number;
27
- bollUb?: number;
28
- bollLb?: number;
23
+ ma: number | null;
29
24
  }[];
30
- declare type ResAllMa = {
25
+ type ResAllMa = {
31
26
  c: number;
32
- ma5?: number;
33
- ma10?: number;
34
- ma20?: number;
35
- ma25?: number;
36
- ma60?: number;
37
- bollUb?: number;
38
- bollLb?: number;
27
+ ma5: number | null;
28
+ ma10: number | null;
29
+ ma20: number | null;
30
+ ma25: number | null;
31
+ ma60: number | null;
39
32
  }[];
40
33
  interface MaType {
34
+ init: (data: DataType, type: number) => {
35
+ dataset: ListType;
36
+ ma: number;
37
+ type: number;
38
+ };
39
+ next: (data: DataType, preList: {
40
+ dataset: ListType;
41
+ ma: number;
42
+ type: number;
43
+ }, type: number) => {
44
+ dataset: ListType;
45
+ ma: number;
46
+ type: number;
47
+ };
41
48
  getAllMa: (list: ListType) => ResAllMa;
42
49
  getMa5: (list: ListType) => ResMa5;
43
50
  getMa10: (list: ListType) => ResMa10;
44
51
  getMa20: (list: ListType) => ResMa20;
45
52
  getMa60: (list: ListType) => ResMa60;
46
- getMaSelf: (list: ListType, self: number) => ResMaSelf;
47
- getBoll: (list: ListType) => ResBoll;
53
+ getMa: (list: ListType, self: number) => ResMa;
48
54
  }
49
55
  export default class Ma implements MaType {
56
+ init(data: DataType, type: number): {
57
+ dataset: DataType[];
58
+ ma: number;
59
+ type: number;
60
+ };
61
+ next(data: DataType, preList: {
62
+ dataset: ListType;
63
+ ma: number;
64
+ type: number;
65
+ }, type: number): {
66
+ dataset: ListType;
67
+ ma: number;
68
+ type: number;
69
+ };
50
70
  getAllMa(list: ListType): ResAllMa;
51
71
  getMa5(list: ListType): ResMa5;
52
72
  getMa10(list: ListType): ResMa10;
53
73
  getMa20(list: ListType): ResMa20;
54
74
  getMa60(list: ListType): ResMa60;
55
- getMaSelf(list: ListType, self: number): ResMaSelf;
56
- getBoll(list: ListType): ResBoll;
75
+ getMa(list: ListType, self: number): ResMa;
57
76
  }
58
77
  export {};
@@ -12,6 +12,33 @@ var __assign = (this && this.__assign) || function () {
12
12
  var Ma = /** @class */ (function () {
13
13
  function Ma() {
14
14
  }
15
+ Object.defineProperty(Ma.prototype, "init", {
16
+ enumerable: false,
17
+ configurable: true,
18
+ writable: true,
19
+ value: function (data, type) {
20
+ return { dataset: [data], ma: 0, type: type };
21
+ }
22
+ });
23
+ Object.defineProperty(Ma.prototype, "next", {
24
+ enumerable: false,
25
+ configurable: true,
26
+ writable: true,
27
+ value: function (data, preList, type) {
28
+ preList.dataset.push(data);
29
+ if (preList.dataset.length < type) {
30
+ return { dataset: preList.dataset, ma: 0, type: type };
31
+ }
32
+ else {
33
+ if (preList.dataset.length > type) {
34
+ preList.dataset.shift();
35
+ }
36
+ var sum = preList.dataset.reduce(function (pre, current) { return pre + current.c; }, 0);
37
+ var ma = Math.round((sum / type) * 100) / 100;
38
+ return { dataset: preList.dataset, ma: ma, type: type };
39
+ }
40
+ }
41
+ });
15
42
  Object.defineProperty(Ma.prototype, "getAllMa", {
16
43
  enumerable: false,
17
44
  configurable: true,
@@ -22,9 +49,8 @@ var Ma = /** @class */ (function () {
22
49
  var responseMa10 = this.getMa10(list);
23
50
  var responseMa20 = this.getMa20(list);
24
51
  var responseMa60 = this.getMa60(list);
25
- var responseBoll = this.getBoll(list);
26
52
  for (var i = 0; i < list.length; i++) {
27
- res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseMa60[i], responseBoll[i]);
53
+ res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseMa60[i]);
28
54
  }
29
55
  return res;
30
56
  }
@@ -37,7 +63,7 @@ var Ma = /** @class */ (function () {
37
63
  var res = [];
38
64
  for (var i = 0; i < list.length; i++) {
39
65
  if (i < 4)
40
- res[i] = __assign(__assign({}, list[i]), { ma5: undefined });
66
+ res[i] = __assign(__assign({}, list[i]), { ma5: null });
41
67
  else {
42
68
  var sum = list
43
69
  .slice(i - 4, i + 1)
@@ -57,7 +83,7 @@ var Ma = /** @class */ (function () {
57
83
  var res = [];
58
84
  for (var i = 0; i < list.length; i++) {
59
85
  if (i < 9)
60
- res[i] = __assign(__assign({}, list[i]), { ma10: undefined });
86
+ res[i] = __assign(__assign({}, list[i]), { ma10: null });
61
87
  else {
62
88
  var sum = list
63
89
  .slice(i - 9, i + 1)
@@ -77,7 +103,7 @@ var Ma = /** @class */ (function () {
77
103
  var res = [];
78
104
  for (var i = 0; i < list.length; i++) {
79
105
  if (i < 19)
80
- res[i] = __assign(__assign({}, list[i]), { ma20: undefined });
106
+ res[i] = __assign(__assign({}, list[i]), { ma20: null });
81
107
  else {
82
108
  var sum = list
83
109
  .slice(i - 19, i + 1)
@@ -97,7 +123,7 @@ var Ma = /** @class */ (function () {
97
123
  var res = [];
98
124
  for (var i = 0; i < list.length; i++) {
99
125
  if (i < 59)
100
- res[i] = __assign(__assign({}, list[i]), { ma60: undefined });
126
+ res[i] = __assign(__assign({}, list[i]), { ma60: null });
101
127
  else {
102
128
  var sum = list
103
129
  .slice(i - 59, i + 1)
@@ -109,59 +135,26 @@ var Ma = /** @class */ (function () {
109
135
  return res;
110
136
  }
111
137
  });
112
- Object.defineProperty(Ma.prototype, "getMaSelf", {
138
+ Object.defineProperty(Ma.prototype, "getMa", {
113
139
  enumerable: false,
114
140
  configurable: true,
115
141
  writable: true,
116
142
  value: function (list, self) {
117
143
  var res = [];
118
144
  for (var i = 0; i < list.length; i++) {
119
- if (i < (self - 1))
120
- res[i] = __assign(__assign({}, list[i]), { maSelf: undefined });
145
+ if (i < self - 1)
146
+ res[i] = __assign(__assign({}, list[i]), { ma: null });
121
147
  else {
122
148
  var sum = list
123
149
  .slice(i - (self - 1), i + 1)
124
150
  .reduce(function (pre, current) { return pre + current.c; }, 0);
125
- var maSelf = Math.round((sum / self) * 100) / 100;
126
- res[i] = __assign(__assign({}, list[i]), { maSelf: maSelf });
151
+ var ma = Math.round((sum / self) * 100) / 100;
152
+ res[i] = __assign(__assign({}, list[i]), { ma: ma });
127
153
  }
128
154
  }
129
155
  return res;
130
156
  }
131
157
  });
132
- Object.defineProperty(Ma.prototype, "getBoll", {
133
- enumerable: false,
134
- configurable: true,
135
- writable: true,
136
- value: function (list) {
137
- var res = [];
138
- var _loop_1 = function (i) {
139
- if (i < 24)
140
- res[i] = __assign(__assign({}, list[i]), { ma25: undefined, bollUb: undefined, bollLb: undefined });
141
- else {
142
- // ma25
143
- var sumMa25 = list
144
- .slice(i - 24, i + 1)
145
- .reduce(function (pre, current) { return pre + current.c; }, 0);
146
- var ma25_1 = Math.round((sumMa25 / 25) * 100) / 100;
147
- // 標準差
148
- var sumBase = res
149
- .slice(i - 24, i + 1)
150
- .reduce(function (pre, current) {
151
- return ma25_1 !== undefined
152
- ? pre + Math.pow(current.c - ma25_1, 2)
153
- : pre;
154
- }, 0);
155
- var base = Math.round(Math.sqrt(sumBase / 25) * 100) / 100;
156
- res[i] = __assign(__assign({}, list[i]), { ma25: ma25_1, bollUb: ma25_1 + 2 * base, bollLb: ma25_1 - 2 * base });
157
- }
158
- };
159
- for (var i = 0; i < list.length; i++) {
160
- _loop_1(i);
161
- }
162
- return res;
163
- }
164
- });
165
158
  return Ma;
166
159
  }());
167
160
  export default Ma;
@@ -1,6 +1,18 @@
1
1
  import Ma from "./ma";
2
2
  import data from "./test_data.test";
3
3
  describe("test ma methods", function () {
4
+ it("test init & next", function () {
5
+ var index = data.length - 1;
6
+ var ma = new Ma();
7
+ var realData = ma.getMa5(data)[index];
8
+ var init = ma.init(data[0], 5);
9
+ var res = init;
10
+ for (var i = 1; i <= index; i++) {
11
+ var item = data[i];
12
+ res = ma.next(item, res, 5);
13
+ }
14
+ expect(realData.ma5).toEqual(res.ma);
15
+ });
4
16
  it("test getMa5()", function () {
5
17
  var ma = new Ma();
6
18
  expect(ma.getMa5(data)[data.length - 1]).toEqual({
@@ -49,30 +61,16 @@ describe("test ma methods", function () {
49
61
  ma60: 134.86,
50
62
  });
51
63
  });
52
- it("test getMaSelf()", function () {
53
- var ma = new Ma();
54
- expect(ma.getMaSelf(data, 20)[data.length - 1]).toEqual({
55
- c: 142,
56
- o: 138,
57
- t: 20211214,
58
- v: 16841,
59
- h: 143,
60
- l: 138,
61
- maSelf: 144.88,
62
- });
63
- });
64
- it("test getBoll()", function () {
64
+ it("test getMa()", function () {
65
65
  var ma = new Ma();
66
- expect(ma.getBoll(data)[data.length - 1]).toEqual({
66
+ expect(ma.getMa(data, 20)[data.length - 1]).toEqual({
67
67
  c: 142,
68
68
  o: 138,
69
69
  t: 20211214,
70
70
  v: 16841,
71
71
  h: 143,
72
72
  l: 138,
73
- ma25: 142.66,
74
- bollLb: 126.69999999999999,
75
- bollUb: 158.62,
73
+ ma: 144.88,
76
74
  });
77
75
  });
78
76
  it("test getAllMa()", function () {
@@ -88,9 +86,6 @@ describe("test ma methods", function () {
88
86
  ma10: 146.7,
89
87
  ma20: 144.88,
90
88
  ma60: 134.86,
91
- ma25: 142.66,
92
- bollUb: 158.62,
93
- bollLb: 126.69999999999999,
94
89
  });
95
90
  });
96
91
  });
@@ -1,44 +1,67 @@
1
- declare type ItemType = {
1
+ type ItemType = {
2
2
  h: number;
3
3
  l: number;
4
4
  c: number;
5
5
  };
6
- declare type ResEMA12Type = {
6
+ type ResEMA12Type = {
7
7
  h: number;
8
8
  l: number;
9
9
  c: number;
10
- EMA12?: number;
10
+ EMA12: number | null;
11
11
  }[];
12
- declare type ResEMA26Type = {
12
+ type ResEMA26Type = {
13
13
  h: number;
14
14
  l: number;
15
15
  c: number;
16
- EMA26?: number;
16
+ EMA26: number | null;
17
17
  }[];
18
- declare type ResDifType = {
18
+ type ResDifType = {
19
19
  h: number;
20
20
  l: number;
21
21
  c: number;
22
- DIF?: number;
22
+ DIF: number | null;
23
23
  }[];
24
- declare type ResMacd9Type = {
24
+ type ResMacd9Type = {
25
25
  h: number;
26
26
  l: number;
27
27
  c: number;
28
- MACD9?: number;
29
- OSC?: number;
28
+ MACD9: number | null;
29
+ OSC: number | null;
30
30
  }[];
31
- declare type ResAllMacdType = {
31
+ type ResAllMacdType = {
32
32
  h: number;
33
33
  l: number;
34
34
  c: number;
35
- EMA12?: number;
36
- EMA26?: number;
37
- DIF?: number;
38
- MACD9?: number;
39
- OSC?: number;
35
+ EMA12: number | null;
36
+ EMA26: number | null;
37
+ DIF: number | null;
38
+ MACD9: number | null;
39
+ OSC: number | null;
40
40
  }[];
41
41
  interface MacdType {
42
+ init: (data: ItemType) => {
43
+ dataset: ItemType[];
44
+ ema12: number | null;
45
+ ema26: number | null;
46
+ dif: number[];
47
+ macd: number | null;
48
+ osc: number | null;
49
+ };
50
+ next: (data: ItemType, preList: {
51
+ dataset: ItemType[];
52
+ ema12: number | null;
53
+ ema26: number | null;
54
+ dif: number[];
55
+ macd: number | null;
56
+ osc: number | null;
57
+ }) => {
58
+ dataset: ItemType[];
59
+ ema12: number | null;
60
+ ema26: number | null;
61
+ dif: number[];
62
+ macd: number | null;
63
+ osc: number | null;
64
+ };
42
65
  getMACD: (list: ItemType[]) => ResAllMacdType;
43
66
  getDI: (item: ItemType) => number;
44
67
  getStartEMA: (list: ItemType[]) => number;
@@ -48,6 +71,29 @@ interface MacdType {
48
71
  getMACD9: (list: ItemType[], DIF: ResDifType) => ResMacd9Type;
49
72
  }
50
73
  export default class MACD implements MacdType {
74
+ init(data: ItemType): {
75
+ dataset: ItemType[];
76
+ ema12: number | null;
77
+ ema26: number | null;
78
+ dif: number[];
79
+ macd: number | null;
80
+ osc: number | null;
81
+ };
82
+ next(data: ItemType, preList: {
83
+ dataset: ItemType[];
84
+ ema12: number | null;
85
+ ema26: number | null;
86
+ dif: number[];
87
+ macd: number | null;
88
+ osc: number | null;
89
+ }): {
90
+ dataset: ItemType[];
91
+ ema12: number | null;
92
+ ema26: number | null;
93
+ dif: number[];
94
+ macd: number | null;
95
+ osc: number | null;
96
+ };
51
97
  getMACD(list: ItemType[]): ResAllMacdType;
52
98
  getDI(item: ItemType): number;
53
99
  getStartEMA(arr: ItemType[]): number;