@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
@@ -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,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var index_1 = require("./index");
4
+ describe("test setStartMonthInYear", function () {
5
+ it("test 3", function () {
6
+ var res = (0, index_1.setStartMonthInYear)(3);
7
+ expect(res).toEqual([
8
+ "March",
9
+ "April",
10
+ "May",
11
+ "June",
12
+ "July",
13
+ "August",
14
+ "September",
15
+ "October",
16
+ "November",
17
+ "December",
18
+ "January",
19
+ "February",
20
+ ]);
21
+ });
22
+ });
@@ -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;
@@ -26,4 +26,10 @@ describe("test Slope methods", function () {
26
26
  var slope = (0, index_1.default)(x, y);
27
27
  expect(slope).toEqual(0);
28
28
  });
29
+ it("test 1,4,6,8,10,12", function () {
30
+ var x = [1, 2, 3, 4, 5, 6];
31
+ var y = [1, 4, 6, 8, 10, 12];
32
+ var slope = (0, index_1.default)(x, y);
33
+ expect(slope).toEqual(2.142857142857143);
34
+ });
29
35
  });
@@ -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[];
@@ -7,8 +7,11 @@ export { default as Kd } from "./stockSkills/kd.js";
7
7
  export { default as Ma } from "./stockSkills/ma.js";
8
8
  export { default as Macd } from "./stockSkills/macd.js";
9
9
  export { default as Rsi } from "./stockSkills/rsi.js";
10
+ export { default as Obv } from "./stockSkills/obv.js";
11
+ export { default as Ema } from "./stockSkills/ema.js";
10
12
  export { default as dateFormat } from "./stockSkills/utils/dateFormat.js";
11
13
  export { default as getWeekLine } from "./stockSkills/utils/getWeekLine.js";
12
14
  export { default as Williams } from "./stockSkills/williams.js";
15
+ export { default as Boll } from "./stockSkills/boll.js";
13
16
  export { add } from "./test/add.js";
14
17
  export { minus } from "./test/minus.js";
package/dist/cjs/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.minus = exports.add = exports.Williams = exports.getWeekLine = exports.dateFormat = exports.Rsi = exports.Macd = exports.Ma = exports.Kd = exports.Gold = exports.calcSeasonalIndicesNoTrend = exports.weightMovingAverages = exports.movingAverages = exports.exponentialSmoothing = exports.slope = exports.simpleRegressionModel = void 0;
3
+ exports.minus = exports.add = exports.Boll = exports.Williams = exports.getWeekLine = exports.dateFormat = exports.Ema = exports.Obv = exports.Rsi = exports.Macd = exports.Ma = exports.Kd = exports.Gold = exports.calcSeasonalIndicesNoTrend = exports.weightMovingAverages = exports.movingAverages = exports.exponentialSmoothing = exports.slope = exports.simpleRegressionModel = void 0;
4
4
  /*
5
5
  請注意,在 src/index.ts 中,我的導入包含文件擴展名(.js)。
6
6
  如果需要支持 Node.js 和構建工具(ex: webpack),則不需要這樣做。 **因為commonJs默認js副檔名**
@@ -26,12 +26,18 @@ var macd_js_1 = require("./stockSkills/macd.js");
26
26
  Object.defineProperty(exports, "Macd", { enumerable: true, get: function () { return macd_js_1.default; } });
27
27
  var rsi_js_1 = require("./stockSkills/rsi.js");
28
28
  Object.defineProperty(exports, "Rsi", { enumerable: true, get: function () { return rsi_js_1.default; } });
29
+ var obv_js_1 = require("./stockSkills/obv.js");
30
+ Object.defineProperty(exports, "Obv", { enumerable: true, get: function () { return obv_js_1.default; } });
31
+ var ema_js_1 = require("./stockSkills/ema.js");
32
+ Object.defineProperty(exports, "Ema", { enumerable: true, get: function () { return ema_js_1.default; } });
29
33
  var dateFormat_js_1 = require("./stockSkills/utils/dateFormat.js");
30
34
  Object.defineProperty(exports, "dateFormat", { enumerable: true, get: function () { return dateFormat_js_1.default; } });
31
35
  var getWeekLine_js_1 = require("./stockSkills/utils/getWeekLine.js");
32
36
  Object.defineProperty(exports, "getWeekLine", { enumerable: true, get: function () { return getWeekLine_js_1.default; } });
33
37
  var williams_js_1 = require("./stockSkills/williams.js");
34
38
  Object.defineProperty(exports, "Williams", { enumerable: true, get: function () { return williams_js_1.default; } });
39
+ var boll_js_1 = require("./stockSkills/boll.js");
40
+ Object.defineProperty(exports, "Boll", { enumerable: true, get: function () { return boll_js_1.default; } });
35
41
  var add_js_1 = require("./test/add.js");
36
42
  Object.defineProperty(exports, "add", { enumerable: true, get: function () { return add_js_1.add; } });
37
43
  var minus_js_1 = require("./test/minus.js");
@@ -0,0 +1,58 @@
1
+ type ItemType = {
2
+ c: number;
3
+ };
4
+ type ListType = ItemType[];
5
+ type ResBoll = {
6
+ c: number;
7
+ bollMa: number | null;
8
+ bollUb: number | null;
9
+ bollLb: number | null;
10
+ }[];
11
+ interface BollType {
12
+ init: (data: ItemType) => {
13
+ dataset: ListType;
14
+ bollMa: number | null;
15
+ bollUb: number | null;
16
+ bollLb: number | null;
17
+ };
18
+ next: (data: ItemType, preList: {
19
+ dataset: ListType;
20
+ bollMa: number | null;
21
+ bollUb: number | null;
22
+ bollLb: number | null;
23
+ }, type: number) => {
24
+ dataset: ListType;
25
+ bollMa: number | null;
26
+ bollUb: number | null;
27
+ bollLb: number | null;
28
+ };
29
+ getBoll: (list: ListType, type: number) => ResBoll;
30
+ }
31
+ export default class Boll implements BollType {
32
+ init(data: ItemType): {
33
+ dataset: ListType;
34
+ bollMa: number | null;
35
+ bollUb: number | null;
36
+ bollLb: number | null;
37
+ };
38
+ next(data: ItemType, preList: {
39
+ dataset: ListType;
40
+ bollMa: number | null;
41
+ bollUb: number | null;
42
+ bollLb: number | null;
43
+ }, type: number): {
44
+ dataset: ListType;
45
+ type: number;
46
+ bollMa: null;
47
+ bollUb: null;
48
+ bollLb: null;
49
+ } | {
50
+ dataset: ListType;
51
+ type: number;
52
+ bollMa: number;
53
+ bollUb: number;
54
+ bollLb: number;
55
+ };
56
+ getBoll(list: ListType, type: number): ResBoll;
57
+ }
58
+ export {};
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ var Boll = /** @class */ (function () {
15
+ function Boll() {
16
+ }
17
+ Object.defineProperty(Boll.prototype, "init", {
18
+ enumerable: false,
19
+ configurable: true,
20
+ writable: true,
21
+ value: function (data) {
22
+ return {
23
+ dataset: [data],
24
+ bollMa: null,
25
+ bollUb: null,
26
+ bollLb: null,
27
+ };
28
+ }
29
+ });
30
+ Object.defineProperty(Boll.prototype, "next", {
31
+ enumerable: false,
32
+ configurable: true,
33
+ writable: true,
34
+ value: function (data, preList, type) {
35
+ preList.dataset.push(data);
36
+ if (preList.dataset.length < type) {
37
+ return {
38
+ dataset: preList.dataset,
39
+ type: type,
40
+ bollMa: null,
41
+ bollUb: null,
42
+ bollLb: null,
43
+ };
44
+ }
45
+ else {
46
+ if (preList.dataset.length > type) {
47
+ preList.dataset.shift();
48
+ }
49
+ var sum = preList.dataset.reduce(function (pre, current) { return pre + current.c; }, 0);
50
+ var bollMa_1 = Math.round((sum / type) * 100) / 100;
51
+ var difference = preList.dataset.reduce(function (pre, current) {
52
+ return bollMa_1 !== null ? pre + Math.pow(current.c - bollMa_1, 2) : pre;
53
+ }, 0);
54
+ var std = Math.round(Math.sqrt(difference / type) * 100) / 100;
55
+ return {
56
+ dataset: preList.dataset,
57
+ type: type,
58
+ bollMa: bollMa_1,
59
+ bollUb: bollMa_1 + 2 * std,
60
+ bollLb: bollMa_1 - 2 * std,
61
+ };
62
+ }
63
+ }
64
+ });
65
+ Object.defineProperty(Boll.prototype, "getBoll", {
66
+ enumerable: false,
67
+ configurable: true,
68
+ writable: true,
69
+ value: function (list, type) {
70
+ var res = [];
71
+ var _loop_1 = function (i) {
72
+ if (i < type)
73
+ res[i] = __assign(__assign({}, list[i]), { bollMa: null, bollUb: null, bollLb: null });
74
+ else {
75
+ // bollMa
76
+ var sumMa = list
77
+ .slice(i - (type - 1), i + 1)
78
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
79
+ console.log("sumMa", sumMa);
80
+ var bollMa_2 = Math.round((sumMa / type) * 100) / 100;
81
+ // 標準差
82
+ var difference = res
83
+ .slice(i - (type - 1), i + 1)
84
+ .reduce(function (pre, current) {
85
+ return bollMa_2 !== null
86
+ ? pre + Math.pow(current.c - bollMa_2, 2)
87
+ : pre;
88
+ }, 0);
89
+ var std = Math.round(Math.sqrt(difference / type) * 100) / 100;
90
+ res[i] = __assign(__assign({}, list[i]), { bollMa: bollMa_2, bollUb: bollMa_2 + 2 * std, bollLb: bollMa_2 - 2 * std });
91
+ }
92
+ };
93
+ for (var i = 0; i < list.length; i++) {
94
+ _loop_1(i);
95
+ }
96
+ return res;
97
+ }
98
+ });
99
+ return Boll;
100
+ }());
101
+ exports.default = Boll;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var boll_1 = require("./boll");
4
+ var test_data_test_1 = require("./test_data.test");
5
+ describe("test boll methods", function () {
6
+ it("test init & next", function () {
7
+ var index = test_data_test_1.default.length - 1;
8
+ var boll = new boll_1.default();
9
+ var init = boll.init(test_data_test_1.default[0]);
10
+ var res = init;
11
+ for (var i = 1; i <= index; i++) {
12
+ var item = test_data_test_1.default[i];
13
+ res = boll.next(item, res, 25);
14
+ }
15
+ expect({
16
+ bollMa: res.bollMa,
17
+ bollLb: res.bollLb,
18
+ bollUb: res.bollUb,
19
+ }).toEqual({ bollMa: 142.66, bollLb: 126.69999999999999, bollUb: 158.62 });
20
+ });
21
+ it("test getBoll()", function () {
22
+ var boll = new boll_1.default();
23
+ var res = boll.getBoll(test_data_test_1.default, 25);
24
+ expect(res[test_data_test_1.default.length - 1]).toEqual({
25
+ c: 142,
26
+ o: 138,
27
+ t: 20211214,
28
+ v: 16841,
29
+ h: 143,
30
+ l: 138,
31
+ bollMa: 142.66,
32
+ bollLb: 126.69999999999999,
33
+ bollUb: 158.62,
34
+ });
35
+ });
36
+ });
@@ -0,0 +1,9 @@
1
+ interface EmaType {
2
+ getStartEma: (list: number[], period: number) => number;
3
+ getEma: (list: number[], period: number) => (number | null)[];
4
+ }
5
+ export default class Ema implements EmaType {
6
+ getStartEma(list: number[], period: number): number;
7
+ getEma(list: number[], period: number): (number | null)[];
8
+ }
9
+ export {};
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var Ema = /** @class */ (function () {
4
+ function Ema() {
5
+ }
6
+ Object.defineProperty(Ema.prototype, "getStartEma", {
7
+ enumerable: false,
8
+ configurable: true,
9
+ writable: true,
10
+ value: function (list, period) {
11
+ if (list.length < period)
12
+ throw new Error("list.length < period");
13
+ var sum = 0;
14
+ for (var i = 0; i < period; i++) {
15
+ sum += list[i];
16
+ }
17
+ var initialEMA = sum / period;
18
+ return initialEMA;
19
+ }
20
+ });
21
+ Object.defineProperty(Ema.prototype, "getEma", {
22
+ enumerable: false,
23
+ configurable: true,
24
+ writable: true,
25
+ value: function (list, period) {
26
+ var res = [];
27
+ var ema = this.getStartEma(list.slice(0, period), period);
28
+ for (var i = 0; i < list.length; i++) {
29
+ if (i < period) {
30
+ res.push(null);
31
+ continue;
32
+ }
33
+ ema = (list[i] * 2 + (period - 1) * ema) / (period + 1);
34
+ res.push(ema);
35
+ }
36
+ return res;
37
+ }
38
+ });
39
+ return Ema;
40
+ }());
41
+ exports.default = Ema;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var ema_1 = require("./ema");
4
+ var test_data_test_1 = require("./test_data.test");
5
+ describe("test ema methods", function () {
6
+ it("test getEma5()", function () {
7
+ var ema = new ema_1.default();
8
+ var res = ema.getEma(test_data_test_1.default.map(function (item) { return item.c; }), 5);
9
+ expect(res[test_data_test_1.default.length - 1]).toEqual(141.83482746491333);
10
+ });
11
+ });
@@ -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;
@@ -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;
@@ -14,6 +14,60 @@ Object.defineProperty(exports, "__esModule", { value: true });
14
14
  var Kd = /** @class */ (function () {
15
15
  function Kd() {
16
16
  }
17
+ Object.defineProperty(Kd.prototype, "init", {
18
+ enumerable: false,
19
+ configurable: true,
20
+ writable: true,
21
+ value: function (data) {
22
+ return {
23
+ dataset: [data],
24
+ rsv: null,
25
+ k: null,
26
+ d: null,
27
+ "k-d": null,
28
+ };
29
+ }
30
+ });
31
+ Object.defineProperty(Kd.prototype, "next", {
32
+ enumerable: false,
33
+ configurable: true,
34
+ writable: true,
35
+ value: function (data, preList, type) {
36
+ preList.dataset.push(data);
37
+ if (preList.dataset.length < type) {
38
+ return {
39
+ dataset: preList.dataset,
40
+ rsv: null,
41
+ k: null,
42
+ d: null,
43
+ "k-d": null,
44
+ };
45
+ }
46
+ else {
47
+ if (preList.dataset.length > type) {
48
+ preList.dataset.shift();
49
+ }
50
+ var low = Math.min.apply(Math, preList.dataset.map(function (item) { return item.l; }));
51
+ var hight = Math.max.apply(Math, preList.dataset.map(function (item) { return item.h; }));
52
+ var close_1 = data.c;
53
+ var rsv = ((close_1 - low) / (hight - low)) * 100;
54
+ rsv = Math.round(rsv * 100) / 100;
55
+ var k = (2 / 3) * (preList.k ? preList.k : 50) + (1 / 3) * rsv;
56
+ var d = (2 / 3) * (preList.d ? preList.d : 50) + (1 / 3) * k;
57
+ var k_d = k - d;
58
+ k = Math.round(k * 100) / 100;
59
+ d = Math.round(d * 100) / 100;
60
+ k_d = Math.round(k_d * 100) / 100;
61
+ return {
62
+ dataset: preList.dataset,
63
+ rsv: rsv,
64
+ k: k,
65
+ d: d,
66
+ "k-d": k_d,
67
+ };
68
+ }
69
+ }
70
+ });
17
71
  Object.defineProperty(Kd.prototype, "getRSV", {
18
72
  enumerable: false,
19
73
  configurable: true,
@@ -22,12 +76,12 @@ var Kd = /** @class */ (function () {
22
76
  var res = [];
23
77
  for (var i = 0; i < list.length; i++) {
24
78
  if (i < 8)
25
- res[i] = __assign(__assign({}, list[i]), { rsv: undefined });
79
+ res[i] = __assign(__assign({}, list[i]), { rsv: null });
26
80
  else {
27
81
  var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
28
82
  var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
29
- var close_1 = list[i].c;
30
- var rsv = ((close_1 - low) / (hight - low)) * 100;
83
+ var close_2 = list[i].c;
84
+ var rsv = ((close_2 - low) / (hight - low)) * 100;
31
85
  rsv = Math.round(rsv * 100) / 100;
32
86
  res[i] = __assign(__assign({}, list[i]), { rsv: rsv });
33
87
  }
@@ -45,12 +99,12 @@ var Kd = /** @class */ (function () {
45
99
  var yesterdayD = 50;
46
100
  for (var i = 0; i < list.length; i++) {
47
101
  if (i < 8)
48
- res[i] = __assign(__assign({}, list[i]), { rsv: undefined, k: undefined, d: undefined, "k-d": undefined });
102
+ res[i] = __assign(__assign({}, list[i]), { rsv: null, k: null, d: null, "k-d": null });
49
103
  else {
50
104
  var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
51
105
  var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
52
- var close_2 = list[i].c;
53
- var rsv = ((close_2 - low) / (hight - low)) * 100;
106
+ var close_3 = list[i].c;
107
+ var rsv = ((close_3 - low) / (hight - low)) * 100;
54
108
  rsv = Math.round(rsv * 100) / 100;
55
109
  var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
56
110
  var d = (2 / 3) * yesterdayD + (1 / 3) * k;
@@ -3,6 +3,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var kd_1 = require("./kd");
4
4
  var test_data_test_1 = require("./test_data.test");
5
5
  describe("test kd methods", function () {
6
+ it("test init", function () {
7
+ var index = test_data_test_1.data_9904.length - 1;
8
+ var kd = new kd_1.default();
9
+ var realData = kd.getKD(test_data_test_1.data_9904)[index];
10
+ var init = kd.init(test_data_test_1.data_9904[0]);
11
+ var res = init;
12
+ for (var i = 1; i <= index; i++) {
13
+ var item = test_data_test_1.data_9904[i];
14
+ res = kd.next(item, res, 9);
15
+ }
16
+ expect({
17
+ dataset: {
18
+ c: realData.c,
19
+ h: realData.h,
20
+ l: realData.l,
21
+ },
22
+ rsv: realData.rsv,
23
+ "k-d": realData["k-d"],
24
+ k: realData.k,
25
+ d: realData.d,
26
+ }).toEqual({
27
+ dataset: {
28
+ c: res.dataset[res.dataset.length - 1].c,
29
+ h: res.dataset[res.dataset.length - 1].h,
30
+ l: res.dataset[res.dataset.length - 1].l,
31
+ },
32
+ rsv: res.rsv,
33
+ "k-d": res["k-d"],
34
+ k: res.k,
35
+ d: res.d,
36
+ });
37
+ });
6
38
  it("test getRSV()", function () {
7
39
  var kd = new kd_1.default();
8
40
  expect(kd.getRSV(test_data_test_1.data_9904)[test_data_test_1.data_9904.length - 1]).toEqual({
@@ -15,7 +47,7 @@ describe("test kd methods", function () {
15
47
  rsv: 90.63,
16
48
  });
17
49
  });
18
- it("test getRSV()", function () {
50
+ it("test getKD()", function () {
19
51
  var kd = new kd_1.default();
20
52
  expect(kd.getKD(test_data_test_1.data_9904)[test_data_test_1.data_9904.length - 1]).toEqual({
21
53
  o: 26.4,
@@ -27,7 +59,7 @@ describe("test kd methods", function () {
27
59
  rsv: 90.63,
28
60
  k: 64.41,
29
61
  d: 45.25,
30
- 'k-d': 19.16
62
+ "k-d": 19.16,
31
63
  });
32
64
  });
33
65
  });