@ch20026103/anysis 0.0.16-beta2 → 0.0.17-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.
package/demo/main.js CHANGED
@@ -14,15 +14,10 @@ function DemoDay(stockId) {
14
14
  res = res.data.replace(/^\(|\);$/g, "");
15
15
  let parse = JSON.parse(res);
16
16
  let data = parse.ta;
17
- let weekData = week.init(data[0]);
18
17
 
18
+ let kdData = kd.init(data[0], 9);
19
19
  for (let i = 1; i < data.length; i++) {
20
- weekData = week.next(data[i], weekData);
21
- }
22
-
23
- let kdData = kd.init(weekData.week[0], 9);
24
- for (let i = 0; i < weekData.week.length; i++) {
25
- kdData = kd.next(weekData.week[i], kdData, 9);
20
+ kdData = kd.next(data[i], kdData, 9);
26
21
  }
27
22
  console.log(kdData);
28
23
  })
@@ -10,6 +10,7 @@ type ResKD = {
10
10
  k: number;
11
11
  d: number;
12
12
  "k-d": number;
13
+ j: number;
13
14
  [key: string]: unknown;
14
15
  };
15
16
  export type KdResType = {
@@ -18,6 +19,7 @@ export type KdResType = {
18
19
  k: number;
19
20
  d: number;
20
21
  "k-d": number;
22
+ j: number;
21
23
  type: number;
22
24
  };
23
25
  interface KdClassType {
@@ -25,6 +25,7 @@ var Kd = /** @class */ (function () {
25
25
  k: 0,
26
26
  d: 0,
27
27
  "k-d": 0,
28
+ j: 0,
28
29
  type: type,
29
30
  };
30
31
  }
@@ -42,6 +43,7 @@ var Kd = /** @class */ (function () {
42
43
  k: 0,
43
44
  d: 0,
44
45
  "k-d": 0,
46
+ j: 0,
45
47
  type: type,
46
48
  };
47
49
  }
@@ -57,15 +59,18 @@ var Kd = /** @class */ (function () {
57
59
  var k = (2 / 3) * (preList.k ? preList.k : 50) + (1 / 3) * rsv;
58
60
  var d = (2 / 3) * (preList.d ? preList.d : 50) + (1 / 3) * k;
59
61
  var k_d = k - d;
62
+ var j = 3 * d - 2 * k;
60
63
  k = Math.round(k * 100) / 100;
61
64
  d = Math.round(d * 100) / 100;
62
65
  k_d = Math.round(k_d * 100) / 100;
66
+ j = Math.round(j * 100) / 100;
63
67
  return {
64
68
  dataset: preList.dataset,
65
69
  rsv: rsv,
66
70
  k: k,
67
71
  d: d,
68
72
  "k-d": k_d,
73
+ j: j,
69
74
  type: type,
70
75
  };
71
76
  }
@@ -102,7 +107,7 @@ var Kd = /** @class */ (function () {
102
107
  var yesterdayD = 50;
103
108
  for (var i = 0; i < list.length; i++) {
104
109
  if (i < 8)
105
- res[i] = __assign(__assign({}, list[i]), { rsv: 0, k: 0, d: 0, "k-d": 0 });
110
+ res[i] = __assign(__assign({}, list[i]), { rsv: 0, k: 0, d: 0, "k-d": 0, j: 0 });
106
111
  else {
107
112
  var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
108
113
  var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
@@ -112,10 +117,12 @@ var Kd = /** @class */ (function () {
112
117
  var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
113
118
  var d = (2 / 3) * yesterdayD + (1 / 3) * k;
114
119
  var k_d = k - d;
120
+ var j = 3 * d - 2 * k;
115
121
  k = Math.round(k * 100) / 100;
116
122
  d = Math.round(d * 100) / 100;
117
123
  k_d = Math.round(k_d * 100) / 100;
118
- res[i] = __assign(__assign({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d });
124
+ j = Math.round(j * 100) / 100;
125
+ res[i] = __assign(__assign({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d, j: j });
119
126
  yesterdayK = k;
120
127
  yesterdayD = d;
121
128
  }
@@ -60,6 +60,7 @@ describe("test kd methods", function () {
60
60
  k: 64.41,
61
61
  d: 45.25,
62
62
  "k-d": 19.16,
63
+ j: 6.93,
63
64
  });
64
65
  });
65
66
  });
@@ -1,6 +1,6 @@
1
1
  export type StockType = {
2
2
  c: number;
3
- v?: number;
3
+ v: number;
4
4
  l: number;
5
5
  h: number;
6
6
  o: number;
@@ -1,5 +1,5 @@
1
1
  import { StockType } from "./types";
2
- type NewStockType = Required<Pick<StockType, 'v'>> & StockType;
2
+ type NewStockType = Required<Pick<StockType, "v">> & StockType;
3
3
  type NewStockListType = NewStockType[];
4
4
  export type WeekResType = {
5
5
  dataset: NewStockListType;
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
- if (ar || !(i in from)) {
5
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
- ar[i] = from[i];
7
- }
8
- }
9
- return to.concat(ar || Array.prototype.slice.call(from));
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  var Week = /** @class */ (function () {
13
4
  function Week() {
@@ -25,30 +16,38 @@ var Week = /** @class */ (function () {
25
16
  configurable: true,
26
17
  writable: true,
27
18
  value: function (data, preList) {
28
- var year = data.t
29
- .toString()
30
- .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3");
31
- var day = new Date(year).getDay();
32
- if (day === 6 || day === 0)
33
- return { dataset: preList.dataset, week: preList.week };
34
19
  preList.dataset.push(data);
35
- if (day === 5) {
36
- var week = {
37
- o: preList.dataset[0]["o"],
38
- c: preList.dataset[preList.dataset.length - 1]["c"],
39
- t: preList.dataset[preList.dataset.length - 1]["t"],
40
- h: Math.max.apply(Math, preList.dataset.map(function (item) { return item.h; })),
41
- l: Math.min.apply(Math, preList.dataset.map(function (item) { return item.l; })),
42
- v: preList.dataset.reduce(function (pre, current) { return pre + current.v; }, 0),
43
- };
44
- return { dataset: preList.dataset, week: __spreadArray(__spreadArray([], preList.week, true), [week], false) };
45
- }
46
- else {
47
- if (day === 1) {
48
- preList.dataset = [data];
20
+ var index = 0;
21
+ if (preList.dataset.length === 1)
22
+ return preList;
23
+ for (var i = 1; i < preList.dataset.length; i++) {
24
+ var pre_day = new Date(preList.dataset[i - 1].t
25
+ .toString()
26
+ .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3")).getDay();
27
+ var curr_day = new Date(preList.dataset[i].t
28
+ .toString()
29
+ .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3")).getDay();
30
+ if (pre_day > curr_day) {
31
+ index = i;
32
+ break;
49
33
  }
50
- return { dataset: preList.dataset, week: preList.week };
51
34
  }
35
+ // 以index拆分数组
36
+ var week = preList.dataset.slice(0, index);
37
+ var dataset = preList.dataset.slice(index);
38
+ if (week.length > 0) {
39
+ var weekData = {
40
+ o: week[0]["o"],
41
+ c: week[week.length - 1]["c"],
42
+ t: week[week.length - 1]["t"],
43
+ h: Math.max.apply(Math, week.map(function (item) { return item.h; })),
44
+ l: Math.min.apply(Math, week.map(function (item) { return item.l; })),
45
+ v: week.reduce(function (pre, current) { return pre + current.v; }, 0),
46
+ };
47
+ preList.week.push(weekData);
48
+ }
49
+ preList.dataset = dataset;
50
+ return preList;
52
51
  }
53
52
  });
54
53
  return Week;
@@ -1,57 +1,119 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var week_1 = require("./week");
4
- describe('Week', function () {
4
+ describe("Week", function () {
5
5
  var week;
6
6
  beforeEach(function () {
7
7
  week = new week_1.default();
8
8
  });
9
- describe('init', function () {
10
- it('應該正確初始化數據', function () {
11
- var data = { o: 100, c: 101, h: 102, l: 99, t: 20230501, v: 1000 };
9
+ describe("init", function () {
10
+ it("應該正確初始化數據", function () {
11
+ var data = {
12
+ o: 100,
13
+ c: 101,
14
+ h: 102,
15
+ l: 99,
16
+ t: 20230501,
17
+ v: 1000,
18
+ };
12
19
  var result = week.init(data);
13
20
  expect(result).toEqual({ dataset: [data], week: [] });
14
21
  });
15
22
  });
16
- describe('next', function () {
17
- it('應該正確處理非週末的數據', function () {
18
- var initialData = { o: 100, c: 101, h: 102, l: 99, t: 20230501, v: 1000 };
19
- var nextData = { o: 101, c: 102, h: 103, l: 100, t: 20230502, v: 1100 };
23
+ describe("next", function () {
24
+ it("應該正確處理非週末的數據", function () {
25
+ var initialData = {
26
+ o: 100,
27
+ c: 101,
28
+ h: 102,
29
+ l: 99,
30
+ t: 20230501,
31
+ v: 1000,
32
+ };
33
+ var nextData = {
34
+ o: 101,
35
+ c: 102,
36
+ h: 103,
37
+ l: 100,
38
+ t: 20230502,
39
+ v: 1100,
40
+ };
20
41
  var initialResult = week.init(initialData);
21
42
  var result = week.next(nextData, initialResult);
22
43
  expect(result.dataset).toHaveLength(2);
23
44
  expect(result.week).toHaveLength(0);
24
45
  });
25
- it('應該在週五時生成週數據', function () {
26
- var initialData = { o: 100, c: 101, h: 102, l: 99, t: 20230501, v: 1000 };
46
+ it("應該在週五時生成週數據", function () {
47
+ var initialData = {
48
+ o: 100,
49
+ c: 101,
50
+ h: 102,
51
+ l: 99,
52
+ t: 20230501,
53
+ v: 1000,
54
+ };
27
55
  var result = week.init(initialData);
28
- for (var i = 2; i <= 5; i++) {
29
- var nextData = { o: 100 + i, c: 101 + i, h: 102 + i, l: 99 + i, t: 20230500 + i, v: 1000 + i * 100 };
56
+ for (var i = 1; i <= 9; i++) {
57
+ var nextData = {
58
+ o: 100 + i,
59
+ c: 101 + i,
60
+ h: 102 + i,
61
+ l: 99 + i,
62
+ t: 20230501 + i,
63
+ v: 1000 + i * 100,
64
+ };
30
65
  result = week.next(nextData, result);
31
66
  }
32
- expect(result.dataset).toHaveLength(5);
67
+ expect(result.dataset).toHaveLength(4);
33
68
  expect(result.week).toHaveLength(1);
34
69
  expect(result.week[0]).toEqual({
35
70
  o: 100,
36
71
  c: 106,
72
+ t: 20230506,
37
73
  h: 107,
38
74
  l: 99,
39
- t: 20230505,
40
- v: 6400
75
+ v: 7500,
41
76
  });
42
77
  });
43
- it('應該忽略週末數據', function () {
44
- var initialData = { o: 100, c: 101, h: 102, l: 99, t: 20230505, v: 1000 };
45
- var weekendData = { o: 101, c: 102, h: 103, l: 100, t: 20230506, v: 1100 };
78
+ it("應該忽略週末數據", function () {
79
+ var initialData = {
80
+ o: 100,
81
+ c: 101,
82
+ h: 102,
83
+ l: 99,
84
+ t: 20230505,
85
+ v: 1000,
86
+ };
87
+ var weekendData = {
88
+ o: 101,
89
+ c: 102,
90
+ h: 103,
91
+ l: 100,
92
+ t: 20230506,
93
+ v: 1100,
94
+ };
46
95
  var initialResult = week.init(initialData);
47
96
  var result = week.next(weekendData, initialResult);
48
97
  expect(result).toEqual(initialResult);
49
98
  });
50
- it('應該在新的一週開始時重置數據集', function () {
51
- var fridayData = { o: 100, c: 101, h: 102, l: 99, t: 20230505, v: 1000 };
52
- var mondayData = { o: 101, c: 102, h: 103, l: 100, t: 20230508, v: 1100 };
99
+ it("應該在新的一週開始時重置數據集", function () {
100
+ var fridayData = {
101
+ o: 100,
102
+ c: 101,
103
+ h: 102,
104
+ l: 99,
105
+ t: 20230505,
106
+ v: 1000,
107
+ };
108
+ var mondayData = {
109
+ o: 101,
110
+ c: 102,
111
+ h: 103,
112
+ l: 100,
113
+ t: 20230508,
114
+ v: 1100,
115
+ };
53
116
  var result = week.init(fridayData);
54
- result = week.next(fridayData, result);
55
117
  result = week.next(mondayData, result);
56
118
  expect(result.dataset).toHaveLength(1);
57
119
  expect(result.dataset[0]).toEqual(mondayData);
@@ -10,6 +10,7 @@ type ResKD = {
10
10
  k: number;
11
11
  d: number;
12
12
  "k-d": number;
13
+ j: number;
13
14
  [key: string]: unknown;
14
15
  };
15
16
  export type KdResType = {
@@ -18,6 +19,7 @@ export type KdResType = {
18
19
  k: number;
19
20
  d: number;
20
21
  "k-d": number;
22
+ j: number;
21
23
  type: number;
22
24
  };
23
25
  interface KdClassType {
@@ -23,6 +23,7 @@ var Kd = /** @class */ (function () {
23
23
  k: 0,
24
24
  d: 0,
25
25
  "k-d": 0,
26
+ j: 0,
26
27
  type: type,
27
28
  };
28
29
  }
@@ -40,6 +41,7 @@ var Kd = /** @class */ (function () {
40
41
  k: 0,
41
42
  d: 0,
42
43
  "k-d": 0,
44
+ j: 0,
43
45
  type: type,
44
46
  };
45
47
  }
@@ -55,15 +57,18 @@ var Kd = /** @class */ (function () {
55
57
  var k = (2 / 3) * (preList.k ? preList.k : 50) + (1 / 3) * rsv;
56
58
  var d = (2 / 3) * (preList.d ? preList.d : 50) + (1 / 3) * k;
57
59
  var k_d = k - d;
60
+ var j = 3 * d - 2 * k;
58
61
  k = Math.round(k * 100) / 100;
59
62
  d = Math.round(d * 100) / 100;
60
63
  k_d = Math.round(k_d * 100) / 100;
64
+ j = Math.round(j * 100) / 100;
61
65
  return {
62
66
  dataset: preList.dataset,
63
67
  rsv: rsv,
64
68
  k: k,
65
69
  d: d,
66
70
  "k-d": k_d,
71
+ j: j,
67
72
  type: type,
68
73
  };
69
74
  }
@@ -100,7 +105,7 @@ var Kd = /** @class */ (function () {
100
105
  var yesterdayD = 50;
101
106
  for (var i = 0; i < list.length; i++) {
102
107
  if (i < 8)
103
- res[i] = __assign(__assign({}, list[i]), { rsv: 0, k: 0, d: 0, "k-d": 0 });
108
+ res[i] = __assign(__assign({}, list[i]), { rsv: 0, k: 0, d: 0, "k-d": 0, j: 0 });
104
109
  else {
105
110
  var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
106
111
  var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
@@ -110,10 +115,12 @@ var Kd = /** @class */ (function () {
110
115
  var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
111
116
  var d = (2 / 3) * yesterdayD + (1 / 3) * k;
112
117
  var k_d = k - d;
118
+ var j = 3 * d - 2 * k;
113
119
  k = Math.round(k * 100) / 100;
114
120
  d = Math.round(d * 100) / 100;
115
121
  k_d = Math.round(k_d * 100) / 100;
116
- res[i] = __assign(__assign({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d });
122
+ j = Math.round(j * 100) / 100;
123
+ res[i] = __assign(__assign({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d, j: j });
117
124
  yesterdayK = k;
118
125
  yesterdayD = d;
119
126
  }
@@ -58,6 +58,7 @@ describe("test kd methods", function () {
58
58
  k: 64.41,
59
59
  d: 45.25,
60
60
  "k-d": 19.16,
61
+ j: 6.93,
61
62
  });
62
63
  });
63
64
  });
@@ -1,6 +1,6 @@
1
1
  export type StockType = {
2
2
  c: number;
3
- v?: number;
3
+ v: number;
4
4
  l: number;
5
5
  h: number;
6
6
  o: number;
@@ -1,5 +1,5 @@
1
1
  import { StockType } from "./types";
2
- type NewStockType = Required<Pick<StockType, 'v'>> & StockType;
2
+ type NewStockType = Required<Pick<StockType, "v">> & StockType;
3
3
  type NewStockListType = NewStockType[];
4
4
  export type WeekResType = {
5
5
  dataset: NewStockListType;
@@ -1,12 +1,3 @@
1
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
2
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3
- if (ar || !(i in from)) {
4
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
5
- ar[i] = from[i];
6
- }
7
- }
8
- return to.concat(ar || Array.prototype.slice.call(from));
9
- };
10
1
  var Week = /** @class */ (function () {
11
2
  function Week() {
12
3
  }
@@ -23,30 +14,38 @@ var Week = /** @class */ (function () {
23
14
  configurable: true,
24
15
  writable: true,
25
16
  value: function (data, preList) {
26
- var year = data.t
27
- .toString()
28
- .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3");
29
- var day = new Date(year).getDay();
30
- if (day === 6 || day === 0)
31
- return { dataset: preList.dataset, week: preList.week };
32
17
  preList.dataset.push(data);
33
- if (day === 5) {
34
- var week = {
35
- o: preList.dataset[0]["o"],
36
- c: preList.dataset[preList.dataset.length - 1]["c"],
37
- t: preList.dataset[preList.dataset.length - 1]["t"],
38
- h: Math.max.apply(Math, preList.dataset.map(function (item) { return item.h; })),
39
- l: Math.min.apply(Math, preList.dataset.map(function (item) { return item.l; })),
40
- v: preList.dataset.reduce(function (pre, current) { return pre + current.v; }, 0),
41
- };
42
- return { dataset: preList.dataset, week: __spreadArray(__spreadArray([], preList.week, true), [week], false) };
43
- }
44
- else {
45
- if (day === 1) {
46
- preList.dataset = [data];
18
+ var index = 0;
19
+ if (preList.dataset.length === 1)
20
+ return preList;
21
+ for (var i = 1; i < preList.dataset.length; i++) {
22
+ var pre_day = new Date(preList.dataset[i - 1].t
23
+ .toString()
24
+ .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3")).getDay();
25
+ var curr_day = new Date(preList.dataset[i].t
26
+ .toString()
27
+ .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3")).getDay();
28
+ if (pre_day > curr_day) {
29
+ index = i;
30
+ break;
47
31
  }
48
- return { dataset: preList.dataset, week: preList.week };
49
32
  }
33
+ // 以index拆分数组
34
+ var week = preList.dataset.slice(0, index);
35
+ var dataset = preList.dataset.slice(index);
36
+ if (week.length > 0) {
37
+ var weekData = {
38
+ o: week[0]["o"],
39
+ c: week[week.length - 1]["c"],
40
+ t: week[week.length - 1]["t"],
41
+ h: Math.max.apply(Math, week.map(function (item) { return item.h; })),
42
+ l: Math.min.apply(Math, week.map(function (item) { return item.l; })),
43
+ v: week.reduce(function (pre, current) { return pre + current.v; }, 0),
44
+ };
45
+ preList.week.push(weekData);
46
+ }
47
+ preList.dataset = dataset;
48
+ return preList;
50
49
  }
51
50
  });
52
51
  return Week;
@@ -1,55 +1,117 @@
1
- import Week from './week';
2
- describe('Week', function () {
1
+ import Week from "./week";
2
+ describe("Week", function () {
3
3
  var week;
4
4
  beforeEach(function () {
5
5
  week = new Week();
6
6
  });
7
- describe('init', function () {
8
- it('應該正確初始化數據', function () {
9
- var data = { o: 100, c: 101, h: 102, l: 99, t: 20230501, v: 1000 };
7
+ describe("init", function () {
8
+ it("應該正確初始化數據", function () {
9
+ var data = {
10
+ o: 100,
11
+ c: 101,
12
+ h: 102,
13
+ l: 99,
14
+ t: 20230501,
15
+ v: 1000,
16
+ };
10
17
  var result = week.init(data);
11
18
  expect(result).toEqual({ dataset: [data], week: [] });
12
19
  });
13
20
  });
14
- describe('next', function () {
15
- it('應該正確處理非週末的數據', function () {
16
- var initialData = { o: 100, c: 101, h: 102, l: 99, t: 20230501, v: 1000 };
17
- var nextData = { o: 101, c: 102, h: 103, l: 100, t: 20230502, v: 1100 };
21
+ describe("next", function () {
22
+ it("應該正確處理非週末的數據", function () {
23
+ var initialData = {
24
+ o: 100,
25
+ c: 101,
26
+ h: 102,
27
+ l: 99,
28
+ t: 20230501,
29
+ v: 1000,
30
+ };
31
+ var nextData = {
32
+ o: 101,
33
+ c: 102,
34
+ h: 103,
35
+ l: 100,
36
+ t: 20230502,
37
+ v: 1100,
38
+ };
18
39
  var initialResult = week.init(initialData);
19
40
  var result = week.next(nextData, initialResult);
20
41
  expect(result.dataset).toHaveLength(2);
21
42
  expect(result.week).toHaveLength(0);
22
43
  });
23
- it('應該在週五時生成週數據', function () {
24
- var initialData = { o: 100, c: 101, h: 102, l: 99, t: 20230501, v: 1000 };
44
+ it("應該在週五時生成週數據", function () {
45
+ var initialData = {
46
+ o: 100,
47
+ c: 101,
48
+ h: 102,
49
+ l: 99,
50
+ t: 20230501,
51
+ v: 1000,
52
+ };
25
53
  var result = week.init(initialData);
26
- for (var i = 2; i <= 5; i++) {
27
- var nextData = { o: 100 + i, c: 101 + i, h: 102 + i, l: 99 + i, t: 20230500 + i, v: 1000 + i * 100 };
54
+ for (var i = 1; i <= 9; i++) {
55
+ var nextData = {
56
+ o: 100 + i,
57
+ c: 101 + i,
58
+ h: 102 + i,
59
+ l: 99 + i,
60
+ t: 20230501 + i,
61
+ v: 1000 + i * 100,
62
+ };
28
63
  result = week.next(nextData, result);
29
64
  }
30
- expect(result.dataset).toHaveLength(5);
65
+ expect(result.dataset).toHaveLength(4);
31
66
  expect(result.week).toHaveLength(1);
32
67
  expect(result.week[0]).toEqual({
33
68
  o: 100,
34
69
  c: 106,
70
+ t: 20230506,
35
71
  h: 107,
36
72
  l: 99,
37
- t: 20230505,
38
- v: 6400
73
+ v: 7500,
39
74
  });
40
75
  });
41
- it('應該忽略週末數據', function () {
42
- var initialData = { o: 100, c: 101, h: 102, l: 99, t: 20230505, v: 1000 };
43
- var weekendData = { o: 101, c: 102, h: 103, l: 100, t: 20230506, v: 1100 };
76
+ it("應該忽略週末數據", function () {
77
+ var initialData = {
78
+ o: 100,
79
+ c: 101,
80
+ h: 102,
81
+ l: 99,
82
+ t: 20230505,
83
+ v: 1000,
84
+ };
85
+ var weekendData = {
86
+ o: 101,
87
+ c: 102,
88
+ h: 103,
89
+ l: 100,
90
+ t: 20230506,
91
+ v: 1100,
92
+ };
44
93
  var initialResult = week.init(initialData);
45
94
  var result = week.next(weekendData, initialResult);
46
95
  expect(result).toEqual(initialResult);
47
96
  });
48
- it('應該在新的一週開始時重置數據集', function () {
49
- var fridayData = { o: 100, c: 101, h: 102, l: 99, t: 20230505, v: 1000 };
50
- var mondayData = { o: 101, c: 102, h: 103, l: 100, t: 20230508, v: 1100 };
97
+ it("應該在新的一週開始時重置數據集", function () {
98
+ var fridayData = {
99
+ o: 100,
100
+ c: 101,
101
+ h: 102,
102
+ l: 99,
103
+ t: 20230505,
104
+ v: 1000,
105
+ };
106
+ var mondayData = {
107
+ o: 101,
108
+ c: 102,
109
+ h: 103,
110
+ l: 100,
111
+ t: 20230508,
112
+ v: 1100,
113
+ };
51
114
  var result = week.init(fridayData);
52
- result = week.next(fridayData, result);
53
115
  result = week.next(mondayData, result);
54
116
  expect(result.dataset).toHaveLength(1);
55
117
  expect(result.dataset[0]).toEqual(mondayData);
package/dist/umd/index.js CHANGED
@@ -756,6 +756,7 @@
756
756
  k: 0,
757
757
  d: 0,
758
758
  "k-d": 0,
759
+ j: 0,
759
760
  type: type,
760
761
  };
761
762
  }
@@ -773,6 +774,7 @@
773
774
  k: 0,
774
775
  d: 0,
775
776
  "k-d": 0,
777
+ j: 0,
776
778
  type: type,
777
779
  };
778
780
  }
@@ -788,15 +790,18 @@
788
790
  var k = (2 / 3) * (preList.k ? preList.k : 50) + (1 / 3) * rsv;
789
791
  var d = (2 / 3) * (preList.d ? preList.d : 50) + (1 / 3) * k;
790
792
  var k_d = k - d;
793
+ var j = 3 * d - 2 * k;
791
794
  k = Math.round(k * 100) / 100;
792
795
  d = Math.round(d * 100) / 100;
793
796
  k_d = Math.round(k_d * 100) / 100;
797
+ j = Math.round(j * 100) / 100;
794
798
  return {
795
799
  dataset: preList.dataset,
796
800
  rsv: rsv,
797
801
  k: k,
798
802
  d: d,
799
803
  "k-d": k_d,
804
+ j: j,
800
805
  type: type,
801
806
  };
802
807
  }
@@ -833,7 +838,7 @@
833
838
  var yesterdayD = 50;
834
839
  for (var i = 0; i < list.length; i++) {
835
840
  if (i < 8)
836
- res[i] = __assign$5(__assign$5({}, list[i]), { rsv: 0, k: 0, d: 0, "k-d": 0 });
841
+ res[i] = __assign$5(__assign$5({}, list[i]), { rsv: 0, k: 0, d: 0, "k-d": 0, j: 0 });
837
842
  else {
838
843
  var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
839
844
  var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
@@ -843,10 +848,12 @@
843
848
  var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
844
849
  var d = (2 / 3) * yesterdayD + (1 / 3) * k;
845
850
  var k_d = k - d;
851
+ var j = 3 * d - 2 * k;
846
852
  k = Math.round(k * 100) / 100;
847
853
  d = Math.round(d * 100) / 100;
848
854
  k_d = Math.round(k_d * 100) / 100;
849
- res[i] = __assign$5(__assign$5({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d });
855
+ j = Math.round(j * 100) / 100;
856
+ res[i] = __assign$5(__assign$5({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d, j: j });
850
857
  yesterdayK = k;
851
858
  yesterdayD = d;
852
859
  }
@@ -1272,7 +1279,7 @@
1272
1279
  };
1273
1280
  return __assign$2.apply(this, arguments);
1274
1281
  };
1275
- var __spreadArray$1 = (undefined && undefined.__spreadArray) || function (to, from, pack) {
1282
+ var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {
1276
1283
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
1277
1284
  if (ar || !(i in from)) {
1278
1285
  if (!ar) ar = Array.prototype.slice.call(from, 0, i);
@@ -1322,7 +1329,7 @@
1322
1329
  var sum = obvList.reduce(function (pre, current) { return pre + current; }, 0);
1323
1330
  var vma = Math.round((sum / type) * 100) / 100;
1324
1331
  return {
1325
- dataset: __spreadArray$1(__spreadArray$1([], preList.dataset, true), [data], false),
1332
+ dataset: __spreadArray(__spreadArray([], preList.dataset, true), [data], false),
1326
1333
  obv: obv,
1327
1334
  preClose: currentClose,
1328
1335
  obvList: obvList,
@@ -1532,15 +1539,6 @@
1532
1539
  }
1533
1540
  }
1534
1541
 
1535
- var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {
1536
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
1537
- if (ar || !(i in from)) {
1538
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
1539
- ar[i] = from[i];
1540
- }
1541
- }
1542
- return to.concat(ar || Array.prototype.slice.call(from));
1543
- };
1544
1542
  var Week = /** @class */ (function () {
1545
1543
  function Week() {
1546
1544
  }
@@ -1557,30 +1555,38 @@
1557
1555
  configurable: true,
1558
1556
  writable: true,
1559
1557
  value: function (data, preList) {
1560
- var year = data.t
1561
- .toString()
1562
- .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3");
1563
- var day = new Date(year).getDay();
1564
- if (day === 6 || day === 0)
1565
- return { dataset: preList.dataset, week: preList.week };
1566
1558
  preList.dataset.push(data);
1567
- if (day === 5) {
1568
- var week = {
1569
- o: preList.dataset[0]["o"],
1570
- c: preList.dataset[preList.dataset.length - 1]["c"],
1571
- t: preList.dataset[preList.dataset.length - 1]["t"],
1572
- h: Math.max.apply(Math, preList.dataset.map(function (item) { return item.h; })),
1573
- l: Math.min.apply(Math, preList.dataset.map(function (item) { return item.l; })),
1574
- v: preList.dataset.reduce(function (pre, current) { return pre + current.v; }, 0),
1575
- };
1576
- return { dataset: preList.dataset, week: __spreadArray(__spreadArray([], preList.week, true), [week], false) };
1577
- }
1578
- else {
1579
- if (day === 1) {
1580
- preList.dataset = [data];
1559
+ var index = 0;
1560
+ if (preList.dataset.length === 1)
1561
+ return preList;
1562
+ for (var i = 1; i < preList.dataset.length; i++) {
1563
+ var pre_day = new Date(preList.dataset[i - 1].t
1564
+ .toString()
1565
+ .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3")).getDay();
1566
+ var curr_day = new Date(preList.dataset[i].t
1567
+ .toString()
1568
+ .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3")).getDay();
1569
+ if (pre_day > curr_day) {
1570
+ index = i;
1571
+ break;
1581
1572
  }
1582
- return { dataset: preList.dataset, week: preList.week };
1583
1573
  }
1574
+ // 以index拆分数组
1575
+ var week = preList.dataset.slice(0, index);
1576
+ var dataset = preList.dataset.slice(index);
1577
+ if (week.length > 0) {
1578
+ var weekData = {
1579
+ o: week[0]["o"],
1580
+ c: week[week.length - 1]["c"],
1581
+ t: week[week.length - 1]["t"],
1582
+ h: Math.max.apply(Math, week.map(function (item) { return item.h; })),
1583
+ l: Math.min.apply(Math, week.map(function (item) { return item.l; })),
1584
+ v: week.reduce(function (pre, current) { return pre + current.v; }, 0),
1585
+ };
1586
+ preList.week.push(weekData);
1587
+ }
1588
+ preList.dataset = dataset;
1589
+ return preList;
1584
1590
  }
1585
1591
  });
1586
1592
  return Week;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ch20026103/anysis",
3
- "version": "0.0.16-beta2",
3
+ "version": "0.0.17-alpha",
4
4
  "description": "provide many analyze methods in the library.",
5
5
  "keywords": [],
6
6
  "bugs": "git@github.com:cosmic1330/anysis/issues",
@@ -12,6 +12,21 @@
12
12
  "module": "dist/esm/index.js",
13
13
  "browser": "dist/umd/index.js",
14
14
  "types": "dist/esm/index.d.ts",
15
+ "scripts": {
16
+ "build": "pnpm clean && pnpm build:esm && pnpm build:cjs && pnpm build:umd",
17
+ "build:cjs": "tsc --module commonjs --target es5 --outDir dist/cjs",
18
+ "build:esm": "tsc --module esnext --target es5 --outDir dist/esm",
19
+ "build:umd": "rollup dist/esm/index.js --file dist/umd/index.js --format umd --name anysis",
20
+ "clean": "rimraf dist",
21
+ "lint": "eslint --fix \"**/*.{js,jsx,ts,tsx,mjs}\"",
22
+ "prepare": "pnpm exec husky install",
23
+ "prettier": "pnpm exec prettier --write .",
24
+ "prepublishOnly": "pnpm build",
25
+ "published": "npm publish",
26
+ "unpublished": "npm unpublish --force --registry http://localhost:4873 ",
27
+ "test": "vitest",
28
+ "demo": "node demo/main.js"
29
+ },
15
30
  "lint-staged": {
16
31
  "*.{js,jsx,ts,tsx,mjs}": [
17
32
  "pnpm lint"
@@ -42,18 +57,5 @@
42
57
  },
43
58
  "vota": {
44
59
  "node": "16.11.0"
45
- },
46
- "scripts": {
47
- "build": "pnpm clean && pnpm build:esm && pnpm build:cjs && pnpm build:umd",
48
- "build:cjs": "tsc --module commonjs --target es5 --outDir dist/cjs",
49
- "build:esm": "tsc --module esnext --target es5 --outDir dist/esm",
50
- "build:umd": "rollup dist/esm/index.js --file dist/umd/index.js --format umd --name anysis",
51
- "clean": "rimraf dist",
52
- "lint": "eslint --fix \"**/*.{js,jsx,ts,tsx,mjs}\"",
53
- "prettier": "pnpm exec prettier --write .",
54
- "published": "npm publish",
55
- "unpublished": "npm unpublish --force --registry http://localhost:4873 ",
56
- "test": "vitest",
57
- "demo": "node demo/main.js"
58
60
  }
59
- }
61
+ }