@ch20026103/anysis 0.0.9-alpha → 0.0.11-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
@@ -102,8 +102,11 @@ function DemoWeek() {
102
102
  console.log({
103
103
  t: weekMaData5.dataset[weekMaData5.dataset.length - 1].t,
104
104
  ma5: weekMaData5.ma,
105
+ ma5ExclusionValue: weekMaData5.exclusionValue,
105
106
  ma10: weekMaData10.ma,
107
+ ma10ExclusionValue: weekMaData10.exclusionValue,
106
108
  ma20: weekMaData20.ma,
109
+ ma20ExclusionValue: weekMaData20.exclusionValue,
107
110
  });
108
111
  })
109
112
  .catch((error) => {
@@ -114,9 +117,9 @@ function DemoWeek() {
114
117
  });
115
118
  }
116
119
 
117
- DemoDay();
120
+ // DemoDay();
118
121
 
119
- const showWeek = false;
122
+ const showWeek = true;
120
123
  if (showWeek) {
121
124
  DemoWeek();
122
125
  }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var index_1 = require("./index");
4
+ describe("test Angle methods", function () {
5
+ it("test (0,0) (1,1)", function () {
6
+ var y = [0, 1];
7
+ var angle = (0, index_1.default)(y);
8
+ expect(angle).toEqual(45);
9
+ });
10
+ it("test (0,0) (1,10)", function () {
11
+ var y = [0, 200];
12
+ var angle = (0, index_1.default)(y);
13
+ expect(angle).toEqual(63.43494882292201);
14
+ });
15
+ it("test (0,0) (1,0)", function () {
16
+ var y = [0, 0];
17
+ var angle = (0, index_1.default)(y);
18
+ expect(angle).toEqual(0);
19
+ });
20
+ });
@@ -0,0 +1 @@
1
+ export default function TwoPointAngle(y: number[]): number;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var calculateDivisionFactor_1 = require("../../utils/calculateDivisionFactor");
4
+ function TwoPointAngle(y) {
5
+ if (y.length != 2)
6
+ return 0;
7
+ // 計算 x 和 y 的平均值
8
+ var increment = (0, calculateDivisionFactor_1.default)(y[1]);
9
+ var x = Array.from({ length: y.length }, function (_, index) { return index * increment; });
10
+ var m = (y[1] - y[0]) / (x[1] - x[0]);
11
+ // 計算角度(弧度)
12
+ var thetaRadians = Math.atan(m); // 轉換角度為度
13
+ var thetaDegrees = thetaRadians * (180 / Math.PI);
14
+ return thetaDegrees;
15
+ }
16
+ exports.default = TwoPointAngle;
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ var calculateDivisionFactor_1 = require("../../utils/calculateDivisionFactor");
3
4
  function Slope(y) {
4
5
  // 計算 x 和 y 的平均值
5
- var x = Array.from({ length: y.length }, function (_, k) { return k + 1; });
6
- var x_mean = x.reduce(function (acc, cur) { return acc + cur; }) / x.length;
7
6
  var y_mean = y.reduce(function (acc, cur) { return acc + cur; }) / y.length;
7
+ var increment = (0, calculateDivisionFactor_1.default)(y_mean);
8
+ console.log(y_mean, increment);
9
+ var x = Array.from({ length: y.length }, function (_, index) { return index * increment; });
10
+ var x_mean = x.reduce(function (acc, cur) { return acc + cur; }) / x.length;
8
11
  // 計算斜率
9
12
  var numerator = x.reduce(function (acc, cur, i) { return acc + (cur - x_mean) * (y[i] - y_mean); }, 0);
10
13
  var denominator = x.reduce(function (acc, cur) { return acc + Math.pow((cur - x_mean), 2); }, 0);
@@ -13,7 +13,7 @@ describe("test Slope methods", function () {
13
13
  expect(slope).toEqual(-1);
14
14
  });
15
15
  it("test 654321", function () {
16
- var y = [6, 5, 4, 3, 2, 1];
16
+ var y = [60, 50, 40, 30, 20, 10];
17
17
  var slope = (0, index_1.default)(y);
18
18
  expect(slope).toEqual(-1);
19
19
  });
@@ -1,3 +1,4 @@
1
+ export { default as Angle } from "./analyze/Angle/index.js";
1
2
  export { default as simpleRegressionModel } from "./analyze/Regression/simpleRegressoinModel.js";
2
3
  export { default as slope } from "./analyze/Slope/index.js";
3
4
  export { exponentialSmoothing, movingAverages, weightMovingAverages, } from "./analyze/TimeSeries/R/index.js";
@@ -7,14 +8,15 @@ export { default as Ema } from "./stockSkills/ema.js";
7
8
  export { default as Gold } from "./stockSkills/gold.js";
8
9
  export { default as Kd } from "./stockSkills/kd.js";
9
10
  export { default as Ma } from "./stockSkills/ma.js";
10
- export { default as Vma } from "./stockSkills/vma.js";
11
11
  export { default as Macd } from "./stockSkills/macd.js";
12
12
  export { default as Obv } from "./stockSkills/obv.js";
13
13
  export { default as Rsi } from "./stockSkills/rsi.js";
14
14
  export { default as dateFormat } from "./stockSkills/utils/dateFormat.js";
15
15
  export { default as getWeekLine } from "./stockSkills/utils/getWeekLine.js";
16
+ export { default as Vma } from "./stockSkills/vma.js";
16
17
  export { default as Williams } from "./stockSkills/williams.js";
17
18
  export { add } from "./test/add.js";
18
19
  export { minus } from "./test/minus.js";
20
+ export { default as calculateDivisionFactor } from "./utils/calculateDivisionFactor.js";
19
21
  export { default as isJSON } from "./utils/isJson.js";
20
22
  export { default as parseLsusbOutput } from "./utils/parseLsusbOutput.js";
package/dist/cjs/index.js CHANGED
@@ -1,21 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseLsusbOutput = exports.isJSON = exports.minus = exports.add = exports.Williams = exports.getWeekLine = exports.dateFormat = exports.Rsi = exports.Obv = exports.Macd = exports.Vma = exports.Ma = exports.Kd = exports.Gold = exports.Ema = exports.Boll = exports.calcSeasonalIndicesNoTrend = exports.weightMovingAverages = exports.movingAverages = exports.exponentialSmoothing = exports.slope = exports.simpleRegressionModel = void 0;
3
+ exports.parseLsusbOutput = exports.isJSON = exports.calculateDivisionFactor = exports.minus = exports.add = exports.Williams = exports.Vma = exports.getWeekLine = exports.dateFormat = exports.Rsi = exports.Obv = exports.Macd = exports.Ma = exports.Kd = exports.Gold = exports.Ema = exports.Boll = exports.calcSeasonalIndicesNoTrend = exports.weightMovingAverages = exports.movingAverages = exports.exponentialSmoothing = exports.slope = exports.simpleRegressionModel = exports.Angle = void 0;
4
4
  /*
5
5
  請注意,在 src/index.ts 中,我的導入包含文件擴展名(.js)。
6
6
  如果需要支持 Node.js 和構建工具(ex: webpack),則不需要這樣做。 **因為commonJs默認js副檔名**
7
7
  但如果要支持 ES 模塊的瀏覽器 ,則需要文件擴展名(.js)。
8
8
  */
9
+ var index_js_1 = require("./analyze/Angle/index.js");
10
+ Object.defineProperty(exports, "Angle", { enumerable: true, get: function () { return index_js_1.default; } });
9
11
  var simpleRegressoinModel_js_1 = require("./analyze/Regression/simpleRegressoinModel.js");
10
12
  Object.defineProperty(exports, "simpleRegressionModel", { enumerable: true, get: function () { return simpleRegressoinModel_js_1.default; } });
11
- var index_js_1 = require("./analyze/Slope/index.js");
12
- Object.defineProperty(exports, "slope", { enumerable: true, get: function () { return index_js_1.default; } });
13
- var index_js_2 = require("./analyze/TimeSeries/R/index.js");
14
- Object.defineProperty(exports, "exponentialSmoothing", { enumerable: true, get: function () { return index_js_2.exponentialSmoothing; } });
15
- Object.defineProperty(exports, "movingAverages", { enumerable: true, get: function () { return index_js_2.movingAverages; } });
16
- Object.defineProperty(exports, "weightMovingAverages", { enumerable: true, get: function () { return index_js_2.weightMovingAverages; } });
17
- var index_js_3 = require("./analyze/TimeSeries/RS/index.js");
18
- Object.defineProperty(exports, "calcSeasonalIndicesNoTrend", { enumerable: true, get: function () { return index_js_3.calcSeasonalIndicesNoTrend; } });
13
+ var index_js_2 = require("./analyze/Slope/index.js");
14
+ Object.defineProperty(exports, "slope", { enumerable: true, get: function () { return index_js_2.default; } });
15
+ var index_js_3 = require("./analyze/TimeSeries/R/index.js");
16
+ Object.defineProperty(exports, "exponentialSmoothing", { enumerable: true, get: function () { return index_js_3.exponentialSmoothing; } });
17
+ Object.defineProperty(exports, "movingAverages", { enumerable: true, get: function () { return index_js_3.movingAverages; } });
18
+ Object.defineProperty(exports, "weightMovingAverages", { enumerable: true, get: function () { return index_js_3.weightMovingAverages; } });
19
+ var index_js_4 = require("./analyze/TimeSeries/RS/index.js");
20
+ Object.defineProperty(exports, "calcSeasonalIndicesNoTrend", { enumerable: true, get: function () { return index_js_4.calcSeasonalIndicesNoTrend; } });
19
21
  var boll_js_1 = require("./stockSkills/boll.js");
20
22
  Object.defineProperty(exports, "Boll", { enumerable: true, get: function () { return boll_js_1.default; } });
21
23
  var ema_js_1 = require("./stockSkills/ema.js");
@@ -26,8 +28,6 @@ var kd_js_1 = require("./stockSkills/kd.js");
26
28
  Object.defineProperty(exports, "Kd", { enumerable: true, get: function () { return kd_js_1.default; } });
27
29
  var ma_js_1 = require("./stockSkills/ma.js");
28
30
  Object.defineProperty(exports, "Ma", { enumerable: true, get: function () { return ma_js_1.default; } });
29
- var vma_js_1 = require("./stockSkills/vma.js");
30
- Object.defineProperty(exports, "Vma", { enumerable: true, get: function () { return vma_js_1.default; } });
31
31
  var macd_js_1 = require("./stockSkills/macd.js");
32
32
  Object.defineProperty(exports, "Macd", { enumerable: true, get: function () { return macd_js_1.default; } });
33
33
  var obv_js_1 = require("./stockSkills/obv.js");
@@ -38,12 +38,16 @@ var dateFormat_js_1 = require("./stockSkills/utils/dateFormat.js");
38
38
  Object.defineProperty(exports, "dateFormat", { enumerable: true, get: function () { return dateFormat_js_1.default; } });
39
39
  var getWeekLine_js_1 = require("./stockSkills/utils/getWeekLine.js");
40
40
  Object.defineProperty(exports, "getWeekLine", { enumerable: true, get: function () { return getWeekLine_js_1.default; } });
41
+ var vma_js_1 = require("./stockSkills/vma.js");
42
+ Object.defineProperty(exports, "Vma", { enumerable: true, get: function () { return vma_js_1.default; } });
41
43
  var williams_js_1 = require("./stockSkills/williams.js");
42
44
  Object.defineProperty(exports, "Williams", { enumerable: true, get: function () { return williams_js_1.default; } });
43
45
  var add_js_1 = require("./test/add.js");
44
46
  Object.defineProperty(exports, "add", { enumerable: true, get: function () { return add_js_1.add; } });
45
47
  var minus_js_1 = require("./test/minus.js");
46
48
  Object.defineProperty(exports, "minus", { enumerable: true, get: function () { return minus_js_1.minus; } });
49
+ var calculateDivisionFactor_js_1 = require("./utils/calculateDivisionFactor.js");
50
+ Object.defineProperty(exports, "calculateDivisionFactor", { enumerable: true, get: function () { return calculateDivisionFactor_js_1.default; } });
47
51
  var isJson_js_1 = require("./utils/isJson.js");
48
52
  Object.defineProperty(exports, "isJSON", { enumerable: true, get: function () { return isJson_js_1.default; } });
49
53
  var parseLsusbOutput_js_1 = require("./utils/parseLsusbOutput.js");
@@ -1,5 +1,6 @@
1
1
  type DataType = {
2
2
  c: number;
3
+ [key: string]: unknown;
3
4
  };
4
5
  type ListType = DataType[];
5
6
  type ResMa5 = {
@@ -35,15 +36,30 @@ interface MaType {
35
36
  dataset: ListType;
36
37
  ma: number;
37
38
  type: number;
39
+ exclusionValue: {
40
+ "d+1": number;
41
+ d: number;
42
+ "d-1": number;
43
+ };
38
44
  };
39
45
  next: (data: DataType, preList: {
40
46
  dataset: ListType;
41
47
  ma: number;
42
48
  type: number;
49
+ exclusionValue: {
50
+ "d+1": number;
51
+ d: number;
52
+ "d-1": number;
53
+ };
43
54
  }, type: number) => {
44
55
  dataset: ListType;
45
56
  ma: number;
46
57
  type: number;
58
+ exclusionValue: {
59
+ "d+1": number;
60
+ d: number;
61
+ "d-1": number;
62
+ };
47
63
  };
48
64
  getAllMa: (list: ListType) => ResAllMa;
49
65
  getMa5: (list: ListType) => ResMa5;
@@ -57,6 +73,11 @@ export default class Ma implements MaType {
57
73
  dataset: DataType[];
58
74
  ma: number;
59
75
  type: number;
76
+ exclusionValue: {
77
+ "d+1": number;
78
+ d: number;
79
+ "d-1": number;
80
+ };
60
81
  };
61
82
  next(data: DataType, preList: {
62
83
  dataset: ListType;
@@ -66,6 +87,11 @@ export default class Ma implements MaType {
66
87
  dataset: ListType;
67
88
  ma: number;
68
89
  type: number;
90
+ exclusionValue: {
91
+ "d+1": number;
92
+ d: number;
93
+ "d-1": number;
94
+ };
69
95
  };
70
96
  getAllMa(list: ListType): ResAllMa;
71
97
  getMa5(list: ListType): ResMa5;
@@ -19,7 +19,7 @@ var Ma = /** @class */ (function () {
19
19
  configurable: true,
20
20
  writable: true,
21
21
  value: function (data, type) {
22
- return { dataset: [data], ma: 0, type: type };
22
+ return { dataset: [data], ma: 0, type: type, exclusionValue: { "d+1": 0, d: 0, "d-1": 0 } };
23
23
  }
24
24
  });
25
25
  Object.defineProperty(Ma.prototype, "next", {
@@ -29,15 +29,24 @@ var Ma = /** @class */ (function () {
29
29
  value: function (data, preList, type) {
30
30
  preList.dataset.push(data);
31
31
  if (preList.dataset.length < type) {
32
- return { dataset: preList.dataset, ma: 0, type: type };
32
+ return {
33
+ dataset: preList.dataset,
34
+ ma: 0,
35
+ type: type,
36
+ exclusionValue: { "d+1": 0, d: 0, "d-1": 0 },
37
+ };
33
38
  }
34
39
  else {
40
+ var exclusionValue = { "d+1": preList.dataset[1].c, d: preList.dataset[0].c, "d-1": 0 };
35
41
  if (preList.dataset.length > type) {
42
+ exclusionValue["d-1"] = exclusionValue.d;
36
43
  preList.dataset.shift();
44
+ exclusionValue["d+1"] = preList.dataset[1].c;
45
+ exclusionValue.d = preList.dataset[0].c;
37
46
  }
38
47
  var sum = preList.dataset.reduce(function (pre, current) { return pre + current.c; }, 0);
39
48
  var ma = Math.round((sum / type) * 100) / 100;
40
- return { dataset: preList.dataset, ma: ma, type: type };
49
+ return { dataset: preList.dataset, ma: ma, type: type, exclusionValue: exclusionValue };
41
50
  }
42
51
  }
43
52
  });
@@ -0,0 +1 @@
1
+ export default function calculateDivisionFactor(originalNumber: number): number;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function calculateDivisionFactor(originalNumber) {
4
+ // 去除小數點
5
+ originalNumber = Math.floor(originalNumber);
6
+ // 轉換正數
7
+ originalNumber = Math.abs(originalNumber);
8
+ // 將原始數字轉換為字符串以便計算其長度
9
+ var originalNumberStr = originalNumber.toString();
10
+ // 計算原始數字的位數
11
+ var numberOfDigits = originalNumberStr.length;
12
+ // 計算需要除以的數量,即 10 的位數次方
13
+ var divisionFactor = Math.pow(10, numberOfDigits - 1);
14
+ return divisionFactor;
15
+ }
16
+ exports.default = calculateDivisionFactor;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var calculateDivisionFactor_1 = require("./calculateDivisionFactor");
4
+ describe("test calculateDivisionFactor methods", function () {
5
+ it("test 435435.13", function () {
6
+ var divisionFactor = (0, calculateDivisionFactor_1.default)(435435.13);
7
+ expect(divisionFactor).toEqual(100000);
8
+ });
9
+ it("test 0.13", function () {
10
+ var divisionFactor = (0, calculateDivisionFactor_1.default)(0.13);
11
+ expect(divisionFactor).toEqual(1);
12
+ });
13
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ import Angle from "./index";
2
+ describe("test Angle methods", function () {
3
+ it("test (0,0) (1,1)", function () {
4
+ var y = [0, 1];
5
+ var angle = Angle(y);
6
+ expect(angle).toEqual(45);
7
+ });
8
+ it("test (0,0) (1,10)", function () {
9
+ var y = [0, 200];
10
+ var angle = Angle(y);
11
+ expect(angle).toEqual(63.43494882292201);
12
+ });
13
+ it("test (0,0) (1,0)", function () {
14
+ var y = [0, 0];
15
+ var angle = Angle(y);
16
+ expect(angle).toEqual(0);
17
+ });
18
+ });
@@ -0,0 +1 @@
1
+ export default function TwoPointAngle(y: number[]): number;
@@ -0,0 +1,13 @@
1
+ import calculateDivisionFactor from "../../utils/calculateDivisionFactor";
2
+ export default function TwoPointAngle(y) {
3
+ if (y.length != 2)
4
+ return 0;
5
+ // 計算 x 和 y 的平均值
6
+ var increment = calculateDivisionFactor(y[1]);
7
+ var x = Array.from({ length: y.length }, function (_, index) { return index * increment; });
8
+ var m = (y[1] - y[0]) / (x[1] - x[0]);
9
+ // 計算角度(弧度)
10
+ var thetaRadians = Math.atan(m); // 轉換角度為度
11
+ var thetaDegrees = thetaRadians * (180 / Math.PI);
12
+ return thetaDegrees;
13
+ }
@@ -1,8 +1,11 @@
1
+ import calculateDivisionFactor from "../../utils/calculateDivisionFactor";
1
2
  export default function Slope(y) {
2
3
  // 計算 x 和 y 的平均值
3
- var x = Array.from({ length: y.length }, function (_, k) { return k + 1; });
4
- var x_mean = x.reduce(function (acc, cur) { return acc + cur; }) / x.length;
5
4
  var y_mean = y.reduce(function (acc, cur) { return acc + cur; }) / y.length;
5
+ var increment = calculateDivisionFactor(y_mean);
6
+ console.log(y_mean, increment);
7
+ var x = Array.from({ length: y.length }, function (_, index) { return index * increment; });
8
+ var x_mean = x.reduce(function (acc, cur) { return acc + cur; }) / x.length;
6
9
  // 計算斜率
7
10
  var numerator = x.reduce(function (acc, cur, i) { return acc + (cur - x_mean) * (y[i] - y_mean); }, 0);
8
11
  var denominator = x.reduce(function (acc, cur) { return acc + Math.pow((cur - x_mean), 2); }, 0);
@@ -11,7 +11,7 @@ describe("test Slope methods", function () {
11
11
  expect(slope).toEqual(-1);
12
12
  });
13
13
  it("test 654321", function () {
14
- var y = [6, 5, 4, 3, 2, 1];
14
+ var y = [60, 50, 40, 30, 20, 10];
15
15
  var slope = Slope(y);
16
16
  expect(slope).toEqual(-1);
17
17
  });
@@ -1,3 +1,4 @@
1
+ export { default as Angle } from "./analyze/Angle/index.js";
1
2
  export { default as simpleRegressionModel } from "./analyze/Regression/simpleRegressoinModel.js";
2
3
  export { default as slope } from "./analyze/Slope/index.js";
3
4
  export { exponentialSmoothing, movingAverages, weightMovingAverages, } from "./analyze/TimeSeries/R/index.js";
@@ -7,14 +8,15 @@ export { default as Ema } from "./stockSkills/ema.js";
7
8
  export { default as Gold } from "./stockSkills/gold.js";
8
9
  export { default as Kd } from "./stockSkills/kd.js";
9
10
  export { default as Ma } from "./stockSkills/ma.js";
10
- export { default as Vma } from "./stockSkills/vma.js";
11
11
  export { default as Macd } from "./stockSkills/macd.js";
12
12
  export { default as Obv } from "./stockSkills/obv.js";
13
13
  export { default as Rsi } from "./stockSkills/rsi.js";
14
14
  export { default as dateFormat } from "./stockSkills/utils/dateFormat.js";
15
15
  export { default as getWeekLine } from "./stockSkills/utils/getWeekLine.js";
16
+ export { default as Vma } from "./stockSkills/vma.js";
16
17
  export { default as Williams } from "./stockSkills/williams.js";
17
18
  export { add } from "./test/add.js";
18
19
  export { minus } from "./test/minus.js";
20
+ export { default as calculateDivisionFactor } from "./utils/calculateDivisionFactor.js";
19
21
  export { default as isJSON } from "./utils/isJson.js";
20
22
  export { default as parseLsusbOutput } from "./utils/parseLsusbOutput.js";
package/dist/esm/index.js CHANGED
@@ -3,6 +3,7 @@
3
3
  如果需要支持 Node.js 和構建工具(ex: webpack),則不需要這樣做。 **因為commonJs默認js副檔名**
4
4
  但如果要支持 ES 模塊的瀏覽器 ,則需要文件擴展名(.js)。
5
5
  */
6
+ export { default as Angle } from "./analyze/Angle/index.js";
6
7
  export { default as simpleRegressionModel } from "./analyze/Regression/simpleRegressoinModel.js";
7
8
  export { default as slope } from "./analyze/Slope/index.js";
8
9
  export { exponentialSmoothing, movingAverages, weightMovingAverages, } from "./analyze/TimeSeries/R/index.js";
@@ -12,14 +13,15 @@ export { default as Ema } from "./stockSkills/ema.js";
12
13
  export { default as Gold } from "./stockSkills/gold.js";
13
14
  export { default as Kd } from "./stockSkills/kd.js";
14
15
  export { default as Ma } from "./stockSkills/ma.js";
15
- export { default as Vma } from "./stockSkills/vma.js";
16
16
  export { default as Macd } from "./stockSkills/macd.js";
17
17
  export { default as Obv } from "./stockSkills/obv.js";
18
18
  export { default as Rsi } from "./stockSkills/rsi.js";
19
19
  export { default as dateFormat } from "./stockSkills/utils/dateFormat.js";
20
20
  export { default as getWeekLine } from "./stockSkills/utils/getWeekLine.js";
21
+ export { default as Vma } from "./stockSkills/vma.js";
21
22
  export { default as Williams } from "./stockSkills/williams.js";
22
23
  export { add } from "./test/add.js";
23
24
  export { minus } from "./test/minus.js";
25
+ export { default as calculateDivisionFactor } from "./utils/calculateDivisionFactor.js";
24
26
  export { default as isJSON } from "./utils/isJson.js";
25
27
  export { default as parseLsusbOutput } from "./utils/parseLsusbOutput.js";
@@ -1,5 +1,6 @@
1
1
  type DataType = {
2
2
  c: number;
3
+ [key: string]: unknown;
3
4
  };
4
5
  type ListType = DataType[];
5
6
  type ResMa5 = {
@@ -35,15 +36,30 @@ interface MaType {
35
36
  dataset: ListType;
36
37
  ma: number;
37
38
  type: number;
39
+ exclusionValue: {
40
+ "d+1": number;
41
+ d: number;
42
+ "d-1": number;
43
+ };
38
44
  };
39
45
  next: (data: DataType, preList: {
40
46
  dataset: ListType;
41
47
  ma: number;
42
48
  type: number;
49
+ exclusionValue: {
50
+ "d+1": number;
51
+ d: number;
52
+ "d-1": number;
53
+ };
43
54
  }, type: number) => {
44
55
  dataset: ListType;
45
56
  ma: number;
46
57
  type: number;
58
+ exclusionValue: {
59
+ "d+1": number;
60
+ d: number;
61
+ "d-1": number;
62
+ };
47
63
  };
48
64
  getAllMa: (list: ListType) => ResAllMa;
49
65
  getMa5: (list: ListType) => ResMa5;
@@ -57,6 +73,11 @@ export default class Ma implements MaType {
57
73
  dataset: DataType[];
58
74
  ma: number;
59
75
  type: number;
76
+ exclusionValue: {
77
+ "d+1": number;
78
+ d: number;
79
+ "d-1": number;
80
+ };
60
81
  };
61
82
  next(data: DataType, preList: {
62
83
  dataset: ListType;
@@ -66,6 +87,11 @@ export default class Ma implements MaType {
66
87
  dataset: ListType;
67
88
  ma: number;
68
89
  type: number;
90
+ exclusionValue: {
91
+ "d+1": number;
92
+ d: number;
93
+ "d-1": number;
94
+ };
69
95
  };
70
96
  getAllMa(list: ListType): ResAllMa;
71
97
  getMa5(list: ListType): ResMa5;
@@ -17,7 +17,7 @@ var Ma = /** @class */ (function () {
17
17
  configurable: true,
18
18
  writable: true,
19
19
  value: function (data, type) {
20
- return { dataset: [data], ma: 0, type: type };
20
+ return { dataset: [data], ma: 0, type: type, exclusionValue: { "d+1": 0, d: 0, "d-1": 0 } };
21
21
  }
22
22
  });
23
23
  Object.defineProperty(Ma.prototype, "next", {
@@ -27,15 +27,24 @@ var Ma = /** @class */ (function () {
27
27
  value: function (data, preList, type) {
28
28
  preList.dataset.push(data);
29
29
  if (preList.dataset.length < type) {
30
- return { dataset: preList.dataset, ma: 0, type: type };
30
+ return {
31
+ dataset: preList.dataset,
32
+ ma: 0,
33
+ type: type,
34
+ exclusionValue: { "d+1": 0, d: 0, "d-1": 0 },
35
+ };
31
36
  }
32
37
  else {
38
+ var exclusionValue = { "d+1": preList.dataset[1].c, d: preList.dataset[0].c, "d-1": 0 };
33
39
  if (preList.dataset.length > type) {
40
+ exclusionValue["d-1"] = exclusionValue.d;
34
41
  preList.dataset.shift();
42
+ exclusionValue["d+1"] = preList.dataset[1].c;
43
+ exclusionValue.d = preList.dataset[0].c;
35
44
  }
36
45
  var sum = preList.dataset.reduce(function (pre, current) { return pre + current.c; }, 0);
37
46
  var ma = Math.round((sum / type) * 100) / 100;
38
- return { dataset: preList.dataset, ma: ma, type: type };
47
+ return { dataset: preList.dataset, ma: ma, type: type, exclusionValue: exclusionValue };
39
48
  }
40
49
  }
41
50
  });
@@ -0,0 +1 @@
1
+ export default function calculateDivisionFactor(originalNumber: number): number;
@@ -0,0 +1,13 @@
1
+ export default function calculateDivisionFactor(originalNumber) {
2
+ // 去除小數點
3
+ originalNumber = Math.floor(originalNumber);
4
+ // 轉換正數
5
+ originalNumber = Math.abs(originalNumber);
6
+ // 將原始數字轉換為字符串以便計算其長度
7
+ var originalNumberStr = originalNumber.toString();
8
+ // 計算原始數字的位數
9
+ var numberOfDigits = originalNumberStr.length;
10
+ // 計算需要除以的數量,即 10 的位數次方
11
+ var divisionFactor = Math.pow(10, numberOfDigits - 1);
12
+ return divisionFactor;
13
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,11 @@
1
+ import calculateDivisionFactor from "./calculateDivisionFactor";
2
+ describe("test calculateDivisionFactor methods", function () {
3
+ it("test 435435.13", function () {
4
+ var divisionFactor = calculateDivisionFactor(435435.13);
5
+ expect(divisionFactor).toEqual(100000);
6
+ });
7
+ it("test 0.13", function () {
8
+ var divisionFactor = calculateDivisionFactor(0.13);
9
+ expect(divisionFactor).toEqual(1);
10
+ });
11
+ });
package/dist/umd/index.js CHANGED
@@ -4,6 +4,33 @@
4
4
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.anysis = {}));
5
5
  })(this, (function (exports) { 'use strict';
6
6
 
7
+ function calculateDivisionFactor(originalNumber) {
8
+ // 去除小數點
9
+ originalNumber = Math.floor(originalNumber);
10
+ // 轉換正數
11
+ originalNumber = Math.abs(originalNumber);
12
+ // 將原始數字轉換為字符串以便計算其長度
13
+ var originalNumberStr = originalNumber.toString();
14
+ // 計算原始數字的位數
15
+ var numberOfDigits = originalNumberStr.length;
16
+ // 計算需要除以的數量,即 10 的位數次方
17
+ var divisionFactor = Math.pow(10, numberOfDigits - 1);
18
+ return divisionFactor;
19
+ }
20
+
21
+ function TwoPointAngle(y) {
22
+ if (y.length != 2)
23
+ return 0;
24
+ // 計算 x 和 y 的平均值
25
+ var increment = calculateDivisionFactor(y[1]);
26
+ var x = Array.from({ length: y.length }, function (_, index) { return index * increment; });
27
+ var m = (y[1] - y[0]) / (x[1] - x[0]);
28
+ // 計算角度(弧度)
29
+ var thetaRadians = Math.atan(m); // 轉換角度為度
30
+ var thetaDegrees = thetaRadians * (180 / Math.PI);
31
+ return thetaDegrees;
32
+ }
33
+
7
34
  function average(arr) {
8
35
  var total = arr.reduce(function (prev, curr) { return prev + curr; });
9
36
  var xBar = total / arr.length;
@@ -83,9 +110,11 @@
83
110
 
84
111
  function Slope(y) {
85
112
  // 計算 x 和 y 的平均值
86
- var x = Array.from({ length: y.length }, function (_, k) { return k + 1; });
87
- var x_mean = x.reduce(function (acc, cur) { return acc + cur; }) / x.length;
88
113
  var y_mean = y.reduce(function (acc, cur) { return acc + cur; }) / y.length;
114
+ var increment = calculateDivisionFactor(y_mean);
115
+ console.log(y_mean, increment);
116
+ var x = Array.from({ length: y.length }, function (_, index) { return index * increment; });
117
+ var x_mean = x.reduce(function (acc, cur) { return acc + cur; }) / x.length;
89
118
  // 計算斜率
90
119
  var numerator = x.reduce(function (acc, cur, i) { return acc + (cur - x_mean) * (y[i] - y_mean); }, 0);
91
120
  var denominator = x.reduce(function (acc, cur) { return acc + Math.pow((cur - x_mean), 2); }, 0);
@@ -741,7 +770,7 @@
741
770
  configurable: true,
742
771
  writable: true,
743
772
  value: function (data, type) {
744
- return { dataset: [data], ma: 0, type: type };
773
+ return { dataset: [data], ma: 0, type: type, exclusionValue: { "d+1": 0, d: 0, "d-1": 0 } };
745
774
  }
746
775
  });
747
776
  Object.defineProperty(Ma.prototype, "next", {
@@ -751,15 +780,24 @@
751
780
  value: function (data, preList, type) {
752
781
  preList.dataset.push(data);
753
782
  if (preList.dataset.length < type) {
754
- return { dataset: preList.dataset, ma: 0, type: type };
783
+ return {
784
+ dataset: preList.dataset,
785
+ ma: 0,
786
+ type: type,
787
+ exclusionValue: { "d+1": 0, d: 0, "d-1": 0 },
788
+ };
755
789
  }
756
790
  else {
791
+ var exclusionValue = { "d+1": preList.dataset[1].c, d: preList.dataset[0].c, "d-1": 0 };
757
792
  if (preList.dataset.length > type) {
793
+ exclusionValue["d-1"] = exclusionValue.d;
758
794
  preList.dataset.shift();
795
+ exclusionValue["d+1"] = preList.dataset[1].c;
796
+ exclusionValue.d = preList.dataset[0].c;
759
797
  }
760
798
  var sum = preList.dataset.reduce(function (pre, current) { return pre + current.c; }, 0);
761
799
  var ma = Math.round((sum / type) * 100) / 100;
762
- return { dataset: preList.dataset, ma: ma, type: type };
800
+ return { dataset: preList.dataset, ma: ma, type: type, exclusionValue: exclusionValue };
763
801
  }
764
802
  }
765
803
  });
@@ -882,39 +920,6 @@
882
920
  return Ma;
883
921
  }());
884
922
 
885
- var Vma = /** @class */ (function () {
886
- function Vma() {
887
- }
888
- Object.defineProperty(Vma.prototype, "init", {
889
- enumerable: false,
890
- configurable: true,
891
- writable: true,
892
- value: function (data, type) {
893
- return { dataset: [data], vma: 0, type: type };
894
- }
895
- });
896
- Object.defineProperty(Vma.prototype, "next", {
897
- enumerable: false,
898
- configurable: true,
899
- writable: true,
900
- value: function (data, preList, type) {
901
- preList.dataset.push(data);
902
- if (preList.dataset.length < type) {
903
- return { dataset: preList.dataset, vma: 0, type: type };
904
- }
905
- else {
906
- if (preList.dataset.length > type) {
907
- preList.dataset.shift();
908
- }
909
- var sum = preList.dataset.reduce(function (pre, current) { return pre + current.v; }, 0);
910
- var vma = Math.round((sum / type) * 100) / 100;
911
- return { dataset: preList.dataset, vma: vma, type: type };
912
- }
913
- }
914
- });
915
- return Vma;
916
- }());
917
-
918
923
  var __assign$3 = (undefined && undefined.__assign) || function () {
919
924
  __assign$3 = Object.assign || function(t) {
920
925
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -1440,6 +1445,39 @@
1440
1445
  }
1441
1446
  }
1442
1447
 
1448
+ var Vma = /** @class */ (function () {
1449
+ function Vma() {
1450
+ }
1451
+ Object.defineProperty(Vma.prototype, "init", {
1452
+ enumerable: false,
1453
+ configurable: true,
1454
+ writable: true,
1455
+ value: function (data, type) {
1456
+ return { dataset: [data], vma: 0, type: type };
1457
+ }
1458
+ });
1459
+ Object.defineProperty(Vma.prototype, "next", {
1460
+ enumerable: false,
1461
+ configurable: true,
1462
+ writable: true,
1463
+ value: function (data, preList, type) {
1464
+ preList.dataset.push(data);
1465
+ if (preList.dataset.length < type) {
1466
+ return { dataset: preList.dataset, vma: 0, type: type };
1467
+ }
1468
+ else {
1469
+ if (preList.dataset.length > type) {
1470
+ preList.dataset.shift();
1471
+ }
1472
+ var sum = preList.dataset.reduce(function (pre, current) { return pre + current.v; }, 0);
1473
+ var vma = Math.round((sum / type) * 100) / 100;
1474
+ return { dataset: preList.dataset, vma: vma, type: type };
1475
+ }
1476
+ }
1477
+ });
1478
+ return Vma;
1479
+ }());
1480
+
1443
1481
  var __assign = (undefined && undefined.__assign) || function () {
1444
1482
  __assign = Object.assign || function(t) {
1445
1483
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -1551,6 +1589,7 @@
1551
1589
  return devices;
1552
1590
  }
1553
1591
 
1592
+ exports.Angle = TwoPointAngle;
1554
1593
  exports.Boll = Boll;
1555
1594
  exports.Ema = Ema;
1556
1595
  exports.Gold = Gold;
@@ -1563,6 +1602,7 @@
1563
1602
  exports.Williams = Williams;
1564
1603
  exports.add = add;
1565
1604
  exports.calcSeasonalIndicesNoTrend = calcSeasonalIndicesNoTrend;
1605
+ exports.calculateDivisionFactor = calculateDivisionFactor;
1566
1606
  exports.dateFormat = dateFormat;
1567
1607
  exports.exponentialSmoothing = exponentialSmoothing;
1568
1608
  exports.getWeekLine = getWeekLine;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ch20026103/anysis",
3
- "version": "0.0.9-alpha",
3
+ "version": "0.0.11-alpha",
4
4
  "description": "provide many analyze methods in the library.",
5
5
  "keywords": [],
6
6
  "bugs": "git@github.com:cosmic1330/anysis/issues",