@ch20026103/anysis 0.0.2 → 0.0.5-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/index.d.ts +1 -0
  6. package/dist/cjs/analyze/Slope/index.js +13 -0
  7. package/dist/cjs/analyze/Slope/slope.test.d.ts +1 -0
  8. package/dist/cjs/analyze/Slope/slope.test.js +35 -0
  9. package/dist/cjs/analyze/TimeSeries/R/index.d.ts +1 -1
  10. package/dist/cjs/index.d.ts +9 -5
  11. package/dist/cjs/index.js +23 -15
  12. package/dist/cjs/stockSkills/ema.d.ts +9 -0
  13. package/dist/cjs/stockSkills/ema.js +41 -0
  14. package/dist/cjs/stockSkills/ema.test.d.ts +1 -0
  15. package/dist/cjs/stockSkills/ema.test.js +11 -0
  16. package/dist/cjs/stockSkills/gold.d.ts +4 -4
  17. package/dist/cjs/stockSkills/kd.d.ts +78 -0
  18. package/dist/cjs/stockSkills/kd.js +125 -0
  19. package/dist/cjs/stockSkills/kd.test.d.ts +1 -0
  20. package/dist/cjs/stockSkills/kd.test.js +65 -0
  21. package/dist/cjs/stockSkills/ma.d.ts +49 -7
  22. package/dist/cjs/stockSkills/ma.js +69 -1
  23. package/dist/cjs/stockSkills/ma.test.js +41 -4
  24. package/dist/cjs/stockSkills/macd.d.ts +52 -6
  25. package/dist/cjs/stockSkills/macd.js +87 -0
  26. package/dist/cjs/stockSkills/macd.test.js +24 -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 +4 -4
  32. package/dist/cjs/stockSkills/test_data.test.d.ts +8 -0
  33. package/dist/cjs/stockSkills/test_data.test.js +626 -0
  34. package/dist/cjs/stockSkills/utils/getWeekLine.d.ts +2 -2
  35. package/dist/cjs/stockSkills/williams.d.ts +4 -4
  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/index.d.ts +1 -0
  41. package/dist/esm/analyze/Slope/index.js +10 -0
  42. package/dist/esm/analyze/Slope/slope.test.d.ts +1 -0
  43. package/dist/esm/analyze/Slope/slope.test.js +33 -0
  44. package/dist/esm/analyze/TimeSeries/R/index.d.ts +1 -1
  45. package/dist/esm/index.d.ts +9 -5
  46. package/dist/esm/index.js +9 -5
  47. package/dist/esm/stockSkills/ema.d.ts +9 -0
  48. package/dist/esm/stockSkills/ema.js +39 -0
  49. package/dist/esm/stockSkills/ema.test.d.ts +1 -0
  50. package/dist/esm/stockSkills/ema.test.js +9 -0
  51. package/dist/esm/stockSkills/gold.d.ts +4 -4
  52. package/dist/esm/stockSkills/kd.d.ts +78 -0
  53. package/dist/esm/stockSkills/kd.js +123 -0
  54. package/dist/esm/stockSkills/kd.test.d.ts +1 -0
  55. package/dist/esm/stockSkills/kd.test.js +63 -0
  56. package/dist/esm/stockSkills/ma.d.ts +49 -7
  57. package/dist/esm/stockSkills/ma.js +69 -1
  58. package/dist/esm/stockSkills/ma.test.js +41 -4
  59. package/dist/esm/stockSkills/macd.d.ts +52 -6
  60. package/dist/esm/stockSkills/macd.js +87 -0
  61. package/dist/esm/stockSkills/macd.test.js +24 -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 +4 -4
  67. package/dist/esm/stockSkills/test_data.test.d.ts +8 -0
  68. package/dist/esm/stockSkills/test_data.test.js +625 -0
  69. package/dist/esm/stockSkills/utils/getWeekLine.d.ts +2 -2
  70. package/dist/esm/stockSkills/williams.d.ts +4 -4
  71. package/dist/umd/index.js +901 -482
  72. package/package.json +15 -17
@@ -1,17 +1,17 @@
1
- declare type ListType = {
1
+ type ListType = {
2
2
  h: number;
3
3
  l: number;
4
4
  c: number;
5
5
  }[];
6
- declare type ResWilliams9Type = {
6
+ type ResWilliams9Type = {
7
7
  c: number;
8
8
  williams9?: number;
9
9
  }[];
10
- declare type ResWilliams18Type = {
10
+ type ResWilliams18Type = {
11
11
  c: number;
12
12
  williams18?: number;
13
13
  }[];
14
- declare type ResAllWilliamsType = {
14
+ type ResAllWilliamsType = {
15
15
  c: number;
16
16
  williams18?: number;
17
17
  williams9?: number;
@@ -1,4 +1,4 @@
1
- export declare type setStartMonthInYearType = {
1
+ export type setStartMonthInYearType = {
2
2
  January: unknown;
3
3
  February: unknown;
4
4
  March: unknown;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ import { setStartMonthInYear } from "./index";
2
+ describe("test setStartMonthInYear", function () {
3
+ it("test 3", function () {
4
+ var res = setStartMonthInYear(3);
5
+ expect(res).toEqual([
6
+ "March",
7
+ "April",
8
+ "May",
9
+ "June",
10
+ "July",
11
+ "August",
12
+ "September",
13
+ "October",
14
+ "November",
15
+ "December",
16
+ "January",
17
+ "February",
18
+ ]);
19
+ });
20
+ });
@@ -1,4 +1,4 @@
1
- declare type RegressionResponseType = {
1
+ type RegressionResponseType = {
2
2
  description: string;
3
3
  predictModel: (xValue: number) => number;
4
4
  explained: string;
@@ -0,0 +1 @@
1
+ export default function Slope(x: number[], y: number[]): number;
@@ -0,0 +1,10 @@
1
+ export default function Slope(x, y) {
2
+ // 計算 x 和 y 的平均值
3
+ var x_mean = x.reduce(function (acc, cur) { return acc + cur; }) / x.length;
4
+ var y_mean = y.reduce(function (acc, cur) { return acc + cur; }) / y.length;
5
+ // 計算斜率
6
+ var numerator = x.reduce(function (acc, cur, i) { return acc + (cur - x_mean) * (y[i] - y_mean); }, 0);
7
+ var denominator = x.reduce(function (acc, cur) { return acc + Math.pow((cur - x_mean), 2); }, 0);
8
+ var slope = numerator / denominator;
9
+ return slope;
10
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import Slope from "./index";
2
+ describe("test Slope methods", function () {
3
+ it("test 123456", function () {
4
+ var x = [1, 2, 3, 4, 5, 6];
5
+ var y = [1, 2, 3, 4, 5, 6];
6
+ var slope = Slope(x, y);
7
+ expect(slope).toEqual(1);
8
+ });
9
+ it("test -123456", function () {
10
+ var x = [1, 2, 3, 4, 5, 6];
11
+ var y = [-1, -2, -3, -4, -5, -6];
12
+ var slope = Slope(x, y);
13
+ expect(slope).toEqual(-1);
14
+ });
15
+ it("test 654321", function () {
16
+ var x = [1, 2, 3, 4, 5, 6];
17
+ var y = [6, 5, 4, 3, 2, 1];
18
+ var slope = Slope(x, y);
19
+ expect(slope).toEqual(-1);
20
+ });
21
+ it("test 222222", function () {
22
+ var x = [1, 2, 3, 4, 5, 6];
23
+ var y = [2, 2, 2, 2, 2, 2];
24
+ var slope = Slope(x, y);
25
+ expect(slope).toEqual(0);
26
+ });
27
+ it("test 1,4,6,8,10,12", function () {
28
+ var x = [1, 2, 3, 4, 5, 6];
29
+ var y = [1, 4, 6, 8, 10, 12];
30
+ var slope = Slope(x, y);
31
+ expect(slope).toEqual(2.142857142857143);
32
+ });
33
+ });
@@ -1,6 +1,6 @@
1
1
  export declare function movingAverages(arr: number[], periods: number): number[];
2
2
  export declare function weightMovingAverages(arr: number[], periods: number[]): number[];
3
- declare type ExponentialSmoothingOptions = {
3
+ type ExponentialSmoothingOptions = {
4
4
  initialForecast: number;
5
5
  };
6
6
  export declare function exponentialSmoothing(arr: number[], alpha: number, options?: Partial<ExponentialSmoothingOptions>): number[];
@@ -1,12 +1,16 @@
1
1
  export { default as simpleRegressionModel } from "./analyze/Regression/simpleRegressoinModel.js";
2
- export { movingAverages, weightMovingAverages, exponentialSmoothing, } from "./analyze/TimeSeries/R/index.js";
2
+ export { default as slope } from "./analyze/Slope/index.js";
3
+ export { exponentialSmoothing, movingAverages, weightMovingAverages, } from "./analyze/TimeSeries/R/index.js";
3
4
  export { calcSeasonalIndicesNoTrend } from "./analyze/TimeSeries/RS/index.js";
4
- export { add } from "./test/add.js";
5
- export { minus } from "./test/minus.js";
5
+ export { default as Gold } from "./stockSkills/gold.js";
6
+ export { default as Kd } from "./stockSkills/kd.js";
6
7
  export { default as Ma } from "./stockSkills/ma.js";
7
8
  export { default as Macd } from "./stockSkills/macd.js";
8
9
  export { default as Rsi } from "./stockSkills/rsi.js";
9
- export { default as Williams } from "./stockSkills/williams.js";
10
- export { default as Gold } from "./stockSkills/gold.js";
10
+ export { default as Obv } from "./stockSkills/obv.js";
11
+ export { default as Ema } from "./stockSkills/ema.js";
11
12
  export { default as dateFormat } from "./stockSkills/utils/dateFormat.js";
12
13
  export { default as getWeekLine } from "./stockSkills/utils/getWeekLine.js";
14
+ export { default as Williams } from "./stockSkills/williams.js";
15
+ export { add } from "./test/add.js";
16
+ export { minus } from "./test/minus.js";
package/dist/esm/index.js CHANGED
@@ -4,14 +4,18 @@
4
4
  但如果要支持 ES 模塊的瀏覽器 ,則需要文件擴展名(.js)。
5
5
  */
6
6
  export { default as simpleRegressionModel } from "./analyze/Regression/simpleRegressoinModel.js";
7
- export { movingAverages, weightMovingAverages, exponentialSmoothing, } from "./analyze/TimeSeries/R/index.js";
7
+ export { default as slope } from "./analyze/Slope/index.js";
8
+ export { exponentialSmoothing, movingAverages, weightMovingAverages, } from "./analyze/TimeSeries/R/index.js";
8
9
  export { calcSeasonalIndicesNoTrend } from "./analyze/TimeSeries/RS/index.js";
9
- export { add } from "./test/add.js";
10
- export { minus } from "./test/minus.js";
10
+ export { default as Gold } from "./stockSkills/gold.js";
11
+ export { default as Kd } from "./stockSkills/kd.js";
11
12
  export { default as Ma } from "./stockSkills/ma.js";
12
13
  export { default as Macd } from "./stockSkills/macd.js";
13
14
  export { default as Rsi } from "./stockSkills/rsi.js";
14
- export { default as Williams } from "./stockSkills/williams.js";
15
- export { default as Gold } from "./stockSkills/gold.js";
15
+ export { default as Obv } from "./stockSkills/obv.js";
16
+ export { default as Ema } from "./stockSkills/ema.js";
16
17
  export { default as dateFormat } from "./stockSkills/utils/dateFormat.js";
17
18
  export { default as getWeekLine } from "./stockSkills/utils/getWeekLine.js";
19
+ export { default as Williams } from "./stockSkills/williams.js";
20
+ export { add } from "./test/add.js";
21
+ export { minus } from "./test/minus.js";
@@ -0,0 +1,9 @@
1
+ interface EmaType {
2
+ getStartEma: (list: number[], period: number) => number;
3
+ getEma: (list: number[], period: number) => (number | undefined)[];
4
+ }
5
+ export default class Ema implements EmaType {
6
+ getStartEma(list: number[], period: number): number;
7
+ getEma(list: number[], period: number): (number | undefined)[];
8
+ }
9
+ export {};
@@ -0,0 +1,39 @@
1
+ var Ema = /** @class */ (function () {
2
+ function Ema() {
3
+ }
4
+ Object.defineProperty(Ema.prototype, "getStartEma", {
5
+ enumerable: false,
6
+ configurable: true,
7
+ writable: true,
8
+ value: function (list, period) {
9
+ if (list.length < period)
10
+ throw new Error("list.length < period");
11
+ var sum = 0;
12
+ for (var i = 0; i < period; i++) {
13
+ sum += list[i];
14
+ }
15
+ var initialEMA = sum / period;
16
+ return initialEMA;
17
+ }
18
+ });
19
+ Object.defineProperty(Ema.prototype, "getEma", {
20
+ enumerable: false,
21
+ configurable: true,
22
+ writable: true,
23
+ value: function (list, period) {
24
+ var res = [];
25
+ var ema = this.getStartEma(list.slice(0, period), period);
26
+ for (var i = 0; i < list.length; i++) {
27
+ if (i < period) {
28
+ res.push(undefined);
29
+ continue;
30
+ }
31
+ ema = (list[i] * 2 + (period - 1) * ema) / (period + 1);
32
+ res.push(ema);
33
+ }
34
+ return res;
35
+ }
36
+ });
37
+ return Ema;
38
+ }());
39
+ export default Ema;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ import Ema from "./ema";
2
+ import data from "./test_data.test";
3
+ describe("test ema methods", function () {
4
+ it("test getEma5()", function () {
5
+ var ema = new Ema();
6
+ var res = ema.getEma(data.map(function (item) { return item.c; }), 5);
7
+ expect(res[data.length - 1]).toEqual(141.83482746491333);
8
+ });
9
+ });
@@ -1,4 +1,4 @@
1
- declare type ResGoldType = {
1
+ type ResGoldType = {
2
2
  highestPointDate: number;
3
3
  lowestPointDate: number;
4
4
  lowestPoint: number;
@@ -9,14 +9,14 @@ declare type ResGoldType = {
9
9
  weak: number;
10
10
  superWeak: number;
11
11
  };
12
- declare type ListType = {
12
+ type ListType = {
13
13
  h: number;
14
14
  t: number;
15
15
  o: number;
16
16
  c: number;
17
17
  l: number;
18
18
  }[];
19
- declare type ResHightestType = {
19
+ type ResHightestType = {
20
20
  [key: string]: {
21
21
  h: number;
22
22
  t: number;
@@ -25,7 +25,7 @@ declare type ResHightestType = {
25
25
  l: number;
26
26
  };
27
27
  };
28
- declare type ResLowestType = {
28
+ type ResLowestType = {
29
29
  [key: string]: {
30
30
  h: number;
31
31
  t: number;
@@ -0,0 +1,78 @@
1
+ interface KdType {
2
+ getRSV: (list: ListType) => ResRSV;
3
+ getKD: (list: ListType) => ResKD;
4
+ }
5
+ type DataType = {
6
+ c: number;
7
+ h: number;
8
+ l: number;
9
+ };
10
+ type ListType = DataType[];
11
+ type ResRSV = {
12
+ c: number;
13
+ rsv?: number;
14
+ }[];
15
+ type ResKD = {
16
+ c: number;
17
+ rsv?: number;
18
+ k?: number;
19
+ d?: number;
20
+ "k-d"?: number;
21
+ }[];
22
+ export default class Kd implements KdType {
23
+ init(data: DataType): {
24
+ dataset: ListType;
25
+ rsv?: number;
26
+ k?: number;
27
+ d?: number;
28
+ "k-d"?: number;
29
+ };
30
+ next(data: DataType, preList: {
31
+ dataset: ListType;
32
+ rsv?: number;
33
+ k?: number;
34
+ d?: number;
35
+ "k-d"?: number;
36
+ }, type: number): {
37
+ dataset: ListType;
38
+ rsv: undefined;
39
+ k: undefined;
40
+ d: undefined;
41
+ "k-d": undefined;
42
+ } | {
43
+ dataset: ListType;
44
+ rsv: number;
45
+ k: number;
46
+ d: number;
47
+ "k-d": number;
48
+ };
49
+ getRSV(list: ListType): ({
50
+ rsv: undefined;
51
+ c: number;
52
+ h: number;
53
+ l: number;
54
+ } | {
55
+ rsv: number;
56
+ c: number;
57
+ h: number;
58
+ l: number;
59
+ })[];
60
+ getKD(list: ListType): ({
61
+ rsv: undefined;
62
+ k: undefined;
63
+ d: undefined;
64
+ "k-d": undefined;
65
+ c: number;
66
+ h: number;
67
+ l: number;
68
+ } | {
69
+ rsv: number;
70
+ k: number;
71
+ d: number;
72
+ "k-d": number;
73
+ c: number;
74
+ h: number;
75
+ l: number;
76
+ })[];
77
+ }
78
+ export {};
@@ -0,0 +1,123 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var Kd = /** @class */ (function () {
13
+ function Kd() {
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: undefined,
23
+ k: undefined,
24
+ d: undefined,
25
+ "k-d": undefined,
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: undefined,
39
+ k: undefined,
40
+ d: undefined,
41
+ "k-d": undefined,
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
+ });
69
+ Object.defineProperty(Kd.prototype, "getRSV", {
70
+ enumerable: false,
71
+ configurable: true,
72
+ writable: true,
73
+ value: function (list) {
74
+ var res = [];
75
+ for (var i = 0; i < list.length; i++) {
76
+ if (i < 8)
77
+ res[i] = __assign(__assign({}, list[i]), { rsv: undefined });
78
+ else {
79
+ var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
80
+ var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
81
+ var close_2 = list[i].c;
82
+ var rsv = ((close_2 - low) / (hight - low)) * 100;
83
+ rsv = Math.round(rsv * 100) / 100;
84
+ res[i] = __assign(__assign({}, list[i]), { rsv: rsv });
85
+ }
86
+ }
87
+ return res;
88
+ }
89
+ });
90
+ Object.defineProperty(Kd.prototype, "getKD", {
91
+ enumerable: false,
92
+ configurable: true,
93
+ writable: true,
94
+ value: function (list) {
95
+ var res = [];
96
+ var yesterdayK = 50;
97
+ var yesterdayD = 50;
98
+ for (var i = 0; i < list.length; i++) {
99
+ if (i < 8)
100
+ res[i] = __assign(__assign({}, list[i]), { rsv: undefined, k: undefined, d: undefined, "k-d": undefined });
101
+ else {
102
+ var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
103
+ var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
104
+ var close_3 = list[i].c;
105
+ var rsv = ((close_3 - low) / (hight - low)) * 100;
106
+ rsv = Math.round(rsv * 100) / 100;
107
+ var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
108
+ var d = (2 / 3) * yesterdayD + (1 / 3) * k;
109
+ var k_d = k - d;
110
+ k = Math.round(k * 100) / 100;
111
+ d = Math.round(d * 100) / 100;
112
+ k_d = Math.round(k_d * 100) / 100;
113
+ res[i] = __assign(__assign({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d });
114
+ yesterdayK = k;
115
+ yesterdayD = d;
116
+ }
117
+ }
118
+ return res;
119
+ }
120
+ });
121
+ return Kd;
122
+ }());
123
+ export default Kd;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,63 @@
1
+ import Kd from "./kd";
2
+ import { data_9904 as data } from "./test_data.test";
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
+ });
36
+ it("test getRSV()", function () {
37
+ var kd = new Kd();
38
+ expect(kd.getRSV(data)[data.length - 1]).toEqual({
39
+ o: 26.4,
40
+ l: 34.3,
41
+ h: 34.8,
42
+ c: 34.65,
43
+ v: 12765,
44
+ t: 20230216,
45
+ rsv: 90.63,
46
+ });
47
+ });
48
+ it("test getKD()", function () {
49
+ var kd = new Kd();
50
+ expect(kd.getKD(data)[data.length - 1]).toEqual({
51
+ o: 26.4,
52
+ l: 34.3,
53
+ h: 34.8,
54
+ c: 34.65,
55
+ v: 12765,
56
+ t: 20230216,
57
+ rsv: 90.63,
58
+ k: 64.41,
59
+ d: 45.25,
60
+ "k-d": 19.16,
61
+ });
62
+ });
63
+ });
@@ -1,45 +1,87 @@
1
- declare type ListType = {
1
+ type DataType = {
2
2
  c: number;
3
- }[];
4
- declare type ResMa5 = {
3
+ };
4
+ type ListType = DataType[];
5
+ type ResMa5 = {
5
6
  c: number;
6
7
  ma5?: number;
7
8
  }[];
8
- declare type ResMa10 = {
9
+ type ResMa10 = {
9
10
  c: number;
10
11
  ma10?: number;
11
12
  }[];
12
- declare type ResMa20 = {
13
+ type ResMa20 = {
13
14
  c: number;
14
15
  ma20?: number;
15
16
  }[];
16
- declare type ResBoll = {
17
+ type ResMa60 = {
18
+ c: number;
19
+ ma60?: number;
20
+ }[];
21
+ type ResMaSelf = {
22
+ c: number;
23
+ maSelf?: number;
24
+ }[];
25
+ type ResBoll = {
17
26
  c: number;
18
27
  ma25?: number;
19
28
  bollUb?: number;
20
29
  bollLb?: number;
21
30
  }[];
22
- declare type ResAllMa = {
31
+ type ResAllMa = {
23
32
  c: number;
24
33
  ma5?: number;
25
34
  ma10?: number;
26
35
  ma20?: number;
27
36
  ma25?: number;
37
+ ma60?: number;
28
38
  bollUb?: number;
29
39
  bollLb?: number;
30
40
  }[];
31
41
  interface MaType {
42
+ init: (data: DataType, type: number) => {
43
+ dataset: ListType;
44
+ ma: number;
45
+ type: number;
46
+ };
47
+ next: (data: DataType, preList: {
48
+ dataset: ListType;
49
+ ma: number;
50
+ type: number;
51
+ }, type: number) => {
52
+ dataset: ListType;
53
+ ma: number;
54
+ type: number;
55
+ };
32
56
  getAllMa: (list: ListType) => ResAllMa;
33
57
  getMa5: (list: ListType) => ResMa5;
34
58
  getMa10: (list: ListType) => ResMa10;
35
59
  getMa20: (list: ListType) => ResMa20;
60
+ getMa60: (list: ListType) => ResMa60;
61
+ getMaSelf: (list: ListType, self: number) => ResMaSelf;
36
62
  getBoll: (list: ListType) => ResBoll;
37
63
  }
38
64
  export default class Ma implements MaType {
65
+ init(data: DataType, type: number): {
66
+ dataset: DataType[];
67
+ ma: number;
68
+ type: number;
69
+ };
70
+ next(data: DataType, preList: {
71
+ dataset: ListType;
72
+ ma: number;
73
+ type: number;
74
+ }, type: number): {
75
+ dataset: ListType;
76
+ ma: number;
77
+ type: number;
78
+ };
39
79
  getAllMa(list: ListType): ResAllMa;
40
80
  getMa5(list: ListType): ResMa5;
41
81
  getMa10(list: ListType): ResMa10;
42
82
  getMa20(list: ListType): ResMa20;
83
+ getMa60(list: ListType): ResMa60;
84
+ getMaSelf(list: ListType, self: number): ResMaSelf;
43
85
  getBoll(list: ListType): ResBoll;
44
86
  }
45
87
  export {};