@ch20026103/anysis 0.0.2-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/.eslintrc.json +15 -0
- package/.gitattributes +1 -0
- package/.vscode/settings.json +5 -0
- package/README.md +11 -0
- package/commitlint.config.js +3 -0
- package/dist/cjs/analyze/Month/index.d.ts +15 -0
- package/dist/cjs/analyze/Month/index.js +24 -0
- package/dist/cjs/analyze/Regression/simpleRegressoinModel.d.ts +12 -0
- package/dist/cjs/analyze/Regression/simpleRegressoinModel.js +79 -0
- package/dist/cjs/analyze/Regression/simpleRegressoinModel.test.d.ts +1 -0
- package/dist/cjs/analyze/Regression/simpleRegressoinModel.test.js +16 -0
- package/dist/cjs/analyze/TimeSeries/R/index.d.ts +7 -0
- package/dist/cjs/analyze/TimeSeries/R/index.js +39 -0
- package/dist/cjs/analyze/TimeSeries/RS/index.d.ts +2 -0
- package/dist/cjs/analyze/TimeSeries/RS/index.js +31 -0
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.js +34 -0
- package/dist/cjs/stockSkills/gold.d.ts +47 -0
- package/dist/cjs/stockSkills/gold.js +216 -0
- package/dist/cjs/stockSkills/gold.test.d.ts +1 -0
- package/dist/cjs/stockSkills/gold.test.js +45 -0
- package/dist/cjs/stockSkills/ma.d.ts +58 -0
- package/dist/cjs/stockSkills/ma.js +169 -0
- package/dist/cjs/stockSkills/ma.test.d.ts +1 -0
- package/dist/cjs/stockSkills/ma.test.js +98 -0
- package/dist/cjs/stockSkills/macd.d.ts +59 -0
- package/dist/cjs/stockSkills/macd.js +144 -0
- package/dist/cjs/stockSkills/macd.test.d.ts +1 -0
- package/dist/cjs/stockSkills/macd.test.js +74 -0
- package/dist/cjs/stockSkills/rsi.d.ts +32 -0
- package/dist/cjs/stockSkills/rsi.js +145 -0
- package/dist/cjs/stockSkills/rsi.test.d.ts +1 -0
- package/dist/cjs/stockSkills/rsi.test.js +30 -0
- package/dist/cjs/stockSkills/test_data.test.d.ts +9 -0
- package/dist/cjs/stockSkills/test_data.test.js +166 -0
- package/dist/cjs/stockSkills/utils/dateFormat.d.ts +12 -0
- package/dist/cjs/stockSkills/utils/dateFormat.js +58 -0
- package/dist/cjs/stockSkills/utils/dateFormat.test.d.ts +1 -0
- package/dist/cjs/stockSkills/utils/dateFormat.test.js +29 -0
- package/dist/cjs/stockSkills/utils/getWeekLine.d.ts +17 -0
- package/dist/cjs/stockSkills/utils/getWeekLine.js +75 -0
- package/dist/cjs/stockSkills/utils/getWeekLine.test.d.ts +1 -0
- package/dist/cjs/stockSkills/utils/getWeekLine.test.js +16 -0
- package/dist/cjs/stockSkills/williams.d.ts +29 -0
- package/dist/cjs/stockSkills/williams.js +77 -0
- package/dist/cjs/stockSkills/williams.test.d.ts +1 -0
- package/dist/cjs/stockSkills/williams.test.js +43 -0
- package/dist/cjs/test/add.d.ts +1 -0
- package/dist/cjs/test/add.js +7 -0
- package/dist/cjs/test/minus.d.ts +1 -0
- package/dist/cjs/test/minus.js +7 -0
- package/dist/esm/analyze/Month/index.d.ts +15 -0
- package/dist/esm/analyze/Month/index.js +20 -0
- package/dist/esm/analyze/Regression/simpleRegressoinModel.d.ts +12 -0
- package/dist/esm/analyze/Regression/simpleRegressoinModel.js +76 -0
- package/dist/esm/analyze/Regression/simpleRegressoinModel.test.d.ts +1 -0
- package/dist/esm/analyze/Regression/simpleRegressoinModel.test.js +14 -0
- package/dist/esm/analyze/TimeSeries/R/index.d.ts +7 -0
- package/dist/esm/analyze/TimeSeries/R/index.js +33 -0
- package/dist/esm/analyze/TimeSeries/RS/index.d.ts +2 -0
- package/dist/esm/analyze/TimeSeries/RS/index.js +27 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.js +17 -0
- package/dist/esm/stockSkills/gold.d.ts +47 -0
- package/dist/esm/stockSkills/gold.js +214 -0
- package/dist/esm/stockSkills/gold.test.d.ts +1 -0
- package/dist/esm/stockSkills/gold.test.js +43 -0
- package/dist/esm/stockSkills/ma.d.ts +58 -0
- package/dist/esm/stockSkills/ma.js +167 -0
- package/dist/esm/stockSkills/ma.test.d.ts +1 -0
- package/dist/esm/stockSkills/ma.test.js +96 -0
- package/dist/esm/stockSkills/macd.d.ts +59 -0
- package/dist/esm/stockSkills/macd.js +142 -0
- package/dist/esm/stockSkills/macd.test.d.ts +1 -0
- package/dist/esm/stockSkills/macd.test.js +72 -0
- package/dist/esm/stockSkills/rsi.d.ts +32 -0
- package/dist/esm/stockSkills/rsi.js +143 -0
- package/dist/esm/stockSkills/rsi.test.d.ts +1 -0
- package/dist/esm/stockSkills/rsi.test.js +28 -0
- package/dist/esm/stockSkills/test_data.test.d.ts +9 -0
- package/dist/esm/stockSkills/test_data.test.js +164 -0
- package/dist/esm/stockSkills/utils/dateFormat.d.ts +12 -0
- package/dist/esm/stockSkills/utils/dateFormat.js +55 -0
- package/dist/esm/stockSkills/utils/dateFormat.test.d.ts +1 -0
- package/dist/esm/stockSkills/utils/dateFormat.test.js +27 -0
- package/dist/esm/stockSkills/utils/getWeekLine.d.ts +17 -0
- package/dist/esm/stockSkills/utils/getWeekLine.js +72 -0
- package/dist/esm/stockSkills/utils/getWeekLine.test.d.ts +1 -0
- package/dist/esm/stockSkills/utils/getWeekLine.test.js +14 -0
- package/dist/esm/stockSkills/williams.d.ts +29 -0
- package/dist/esm/stockSkills/williams.js +75 -0
- package/dist/esm/stockSkills/williams.test.d.ts +1 -0
- package/dist/esm/stockSkills/williams.test.js +41 -0
- package/dist/esm/test/add.d.ts +1 -0
- package/dist/esm/test/add.js +3 -0
- package/dist/esm/test/minus.d.ts +1 -0
- package/dist/esm/test/minus.js +3 -0
- package/dist/umd/index.js +1059 -0
- package/package.json +61 -0
- package/test.js +29 -0
- package/vite.config.js +10 -0
package/.eslintrc.json
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"parser": "@typescript-eslint/parser",
|
|
3
|
+
"extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
|
|
4
|
+
"plugins": ["@typescript-eslint"],
|
|
5
|
+
"parserOptions": {
|
|
6
|
+
"ecaVersion": 13,
|
|
7
|
+
"sourceType": "module"
|
|
8
|
+
},
|
|
9
|
+
"env": {
|
|
10
|
+
"browser": true,
|
|
11
|
+
"node": true,
|
|
12
|
+
"es2021": true
|
|
13
|
+
},
|
|
14
|
+
"rules": {}
|
|
15
|
+
}
|
package/.gitattributes
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* text=auto eol=lf
|
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare type setStartMonthInYearType = {
|
|
2
|
+
January: unknown;
|
|
3
|
+
February: unknown;
|
|
4
|
+
March: unknown;
|
|
5
|
+
April: unknown;
|
|
6
|
+
May: unknown;
|
|
7
|
+
June: unknown;
|
|
8
|
+
July: unknown;
|
|
9
|
+
August: unknown;
|
|
10
|
+
September: unknown;
|
|
11
|
+
October: unknown;
|
|
12
|
+
November: unknown;
|
|
13
|
+
December: unknown;
|
|
14
|
+
};
|
|
15
|
+
export declare function setStartMonthInYear(startMonth: number): string[];
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setStartMonthInYear = void 0;
|
|
4
|
+
function setStartMonthInYear(startMonth) {
|
|
5
|
+
var base = [
|
|
6
|
+
"January",
|
|
7
|
+
"February",
|
|
8
|
+
"March",
|
|
9
|
+
"April",
|
|
10
|
+
"May",
|
|
11
|
+
"June",
|
|
12
|
+
"July",
|
|
13
|
+
"August",
|
|
14
|
+
"September",
|
|
15
|
+
"October",
|
|
16
|
+
"November",
|
|
17
|
+
"December",
|
|
18
|
+
];
|
|
19
|
+
var end = base.slice(0, startMonth - 1);
|
|
20
|
+
var start = base.slice(startMonth - 1);
|
|
21
|
+
var response = start.concat(end);
|
|
22
|
+
return response;
|
|
23
|
+
}
|
|
24
|
+
exports.setStartMonthInYear = setStartMonthInYear;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare type RegressionResponseType = {
|
|
2
|
+
description: string;
|
|
3
|
+
predictModel: (xValue: number) => number;
|
|
4
|
+
explained: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* xArray = independent
|
|
8
|
+
* yArray = dependent
|
|
9
|
+
* response: Y = b0 + b1X
|
|
10
|
+
*/
|
|
11
|
+
export default function simpleRegressionModel(xArray: number[], yArray: number[]): RegressionResponseType;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
function average(arr) {
|
|
4
|
+
var total = arr.reduce(function (prev, curr) { return prev + curr; });
|
|
5
|
+
var xBar = total / arr.length;
|
|
6
|
+
return xBar;
|
|
7
|
+
}
|
|
8
|
+
function calcB1(_a) {
|
|
9
|
+
var xBar = _a.xBar, yBar = _a.yBar, xArray = _a.xArray, yArray = _a.yArray;
|
|
10
|
+
var i = 0;
|
|
11
|
+
var denominator = 0;
|
|
12
|
+
var numerator = 0;
|
|
13
|
+
while (i < xArray.length) {
|
|
14
|
+
denominator += (xArray[i] - xBar) * (yArray[i] - yBar);
|
|
15
|
+
numerator += Math.pow(xArray[i] - xBar, 2);
|
|
16
|
+
i++;
|
|
17
|
+
}
|
|
18
|
+
return denominator / numerator;
|
|
19
|
+
}
|
|
20
|
+
function calcB0(_a) {
|
|
21
|
+
var xBar = _a.xBar, yBar = _a.yBar, b1 = _a.b1;
|
|
22
|
+
return yBar - b1 * xBar;
|
|
23
|
+
}
|
|
24
|
+
function calcSSR(_a) {
|
|
25
|
+
var yBar = _a.yBar, predictRegressionModel = _a.predictRegressionModel, xArray = _a.xArray;
|
|
26
|
+
var Sum = xArray.reduce(function (prev, curr) {
|
|
27
|
+
return prev + Math.pow(predictRegressionModel(curr) - yBar, 2);
|
|
28
|
+
}, 0);
|
|
29
|
+
return Sum;
|
|
30
|
+
}
|
|
31
|
+
function calcSSE(_a) {
|
|
32
|
+
var predictRegressionModel = _a.predictRegressionModel, yArray = _a.yArray, xArray = _a.xArray;
|
|
33
|
+
var Sum = 0;
|
|
34
|
+
for (var i = 0; i < xArray.length; i++) {
|
|
35
|
+
var X = xArray[i];
|
|
36
|
+
var Y = yArray[i];
|
|
37
|
+
Sum += Math.pow(Y - predictRegressionModel(X), 2);
|
|
38
|
+
}
|
|
39
|
+
return Sum;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* xArray = independent
|
|
43
|
+
* yArray = dependent
|
|
44
|
+
* response: Y = b0 + b1X
|
|
45
|
+
*/
|
|
46
|
+
function simpleRegressionModel(xArray, yArray) {
|
|
47
|
+
if (xArray.length !== yArray.length)
|
|
48
|
+
return {
|
|
49
|
+
description: "xArray length is different about yArray length",
|
|
50
|
+
predictModel: function () { return NaN; },
|
|
51
|
+
explained: "0%",
|
|
52
|
+
};
|
|
53
|
+
var xBar = average(xArray);
|
|
54
|
+
var yBar = average(yArray);
|
|
55
|
+
var b1 = calcB1({ xBar: xBar, yBar: yBar, xArray: xArray, yArray: yArray });
|
|
56
|
+
var b0 = calcB0({ xBar: xBar, yBar: yBar, b1: b1 });
|
|
57
|
+
var predictRegressionModel = function (xValue) {
|
|
58
|
+
return b0 + b1 * xValue;
|
|
59
|
+
};
|
|
60
|
+
var SSR = calcSSR({
|
|
61
|
+
yBar: yBar,
|
|
62
|
+
predictRegressionModel: predictRegressionModel,
|
|
63
|
+
xArray: xArray,
|
|
64
|
+
});
|
|
65
|
+
var SSE = calcSSE({
|
|
66
|
+
predictRegressionModel: predictRegressionModel,
|
|
67
|
+
yArray: yArray,
|
|
68
|
+
xArray: xArray,
|
|
69
|
+
});
|
|
70
|
+
var SST = SSR + SSE;
|
|
71
|
+
var rPower = (SSR / SST) * 100 + "%";
|
|
72
|
+
var response = {
|
|
73
|
+
description: "Y=".concat(b0, "+").concat(b1, "X"),
|
|
74
|
+
predictModel: predictRegressionModel,
|
|
75
|
+
explained: rPower,
|
|
76
|
+
};
|
|
77
|
+
return response;
|
|
78
|
+
}
|
|
79
|
+
exports.default = simpleRegressionModel;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var simpleRegressoinModel_1 = require("./simpleRegressoinModel");
|
|
4
|
+
describe("test simple regressoin model methods", function () {
|
|
5
|
+
it("test example", function () {
|
|
6
|
+
var a = [3, 4, 6, 4, 2, 5];
|
|
7
|
+
var b = [6, 8, 9, 5, 4.5, 9.5];
|
|
8
|
+
var res = (0, simpleRegressoinModel_1.default)(a, b);
|
|
9
|
+
expect(res).toEqual({
|
|
10
|
+
description: "Y=2+1.25X",
|
|
11
|
+
explained: "69.44444444444444%",
|
|
12
|
+
predictModel: expect.any(Function),
|
|
13
|
+
});
|
|
14
|
+
expect((res === null || res === void 0 ? void 0 : res.predictModel) && res.predictModel(6)).toBe(9.5);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function movingAverages(arr: number[], periods: number): number[];
|
|
2
|
+
export declare function weightMovingAverages(arr: number[], periods: number[]): number[];
|
|
3
|
+
declare type ExponentialSmoothingOptions = {
|
|
4
|
+
initialForecast: number;
|
|
5
|
+
};
|
|
6
|
+
export declare function exponentialSmoothing(arr: number[], alpha: number, options?: Partial<ExponentialSmoothingOptions>): number[];
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.exponentialSmoothing = exports.weightMovingAverages = exports.movingAverages = void 0;
|
|
4
|
+
function movingAverages(arr, periods) {
|
|
5
|
+
var response = new Array(periods).fill(0);
|
|
6
|
+
for (var i = periods; i < arr.length; i++) {
|
|
7
|
+
var Sum = 0;
|
|
8
|
+
for (var e = 1; e <= periods; e++) {
|
|
9
|
+
Sum += arr[i - e];
|
|
10
|
+
}
|
|
11
|
+
response.push(Sum / periods);
|
|
12
|
+
}
|
|
13
|
+
return response;
|
|
14
|
+
}
|
|
15
|
+
exports.movingAverages = movingAverages;
|
|
16
|
+
function weightMovingAverages(arr, periods) {
|
|
17
|
+
var response = new Array(periods.length).fill(0);
|
|
18
|
+
var weightSum = periods.reduce(function (pre, curr) { return pre + curr; });
|
|
19
|
+
for (var i = periods.length - 1; i < arr.length; i++) {
|
|
20
|
+
var Sum = 0;
|
|
21
|
+
for (var e = 0; e < periods.length; e++) {
|
|
22
|
+
Sum += arr[i - e] * periods[e];
|
|
23
|
+
}
|
|
24
|
+
response.push(Sum / weightSum);
|
|
25
|
+
}
|
|
26
|
+
return response;
|
|
27
|
+
}
|
|
28
|
+
exports.weightMovingAverages = weightMovingAverages;
|
|
29
|
+
function exponentialSmoothing(arr, alpha, options) {
|
|
30
|
+
var PreviousForecast = (options === null || options === void 0 ? void 0 : options.initialForecast) || arr[0];
|
|
31
|
+
var forecasts = [PreviousForecast];
|
|
32
|
+
for (var i = 1; i <= arr.length; i++) {
|
|
33
|
+
var Sum = PreviousForecast + alpha * (arr[i - 1] - PreviousForecast);
|
|
34
|
+
PreviousForecast = Sum;
|
|
35
|
+
forecasts.push(Sum);
|
|
36
|
+
}
|
|
37
|
+
return forecasts;
|
|
38
|
+
}
|
|
39
|
+
exports.exponentialSmoothing = exponentialSmoothing;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calcSeasonalIndicesNoTrend = void 0;
|
|
4
|
+
var index_js_1 = require("../../Month/index.js");
|
|
5
|
+
function calcSeasonalIndicesNoTrend(monthData, annualEstimate, startMonth) {
|
|
6
|
+
if (startMonth === void 0) { startMonth = 1; }
|
|
7
|
+
// error
|
|
8
|
+
if (monthData.length % 12 !== 0)
|
|
9
|
+
return "data length fail";
|
|
10
|
+
// calc
|
|
11
|
+
var loop = monthData.length / 12;
|
|
12
|
+
var SumArr = [];
|
|
13
|
+
while (SumArr.length < 12) {
|
|
14
|
+
var Sum = 0;
|
|
15
|
+
for (var i = 0; i < loop; i++) {
|
|
16
|
+
Sum += monthData[i * 12 + SumArr.length];
|
|
17
|
+
}
|
|
18
|
+
SumArr.push(Sum / loop);
|
|
19
|
+
}
|
|
20
|
+
var SumAverage = SumArr.reduce(function (pre, curr) { return pre + curr; }) / 12;
|
|
21
|
+
var seasonalIndexal = SumArr.map(function (sum) { return sum / SumAverage; });
|
|
22
|
+
// create Map
|
|
23
|
+
var perMonth = annualEstimate / 12;
|
|
24
|
+
var months = (0, index_js_1.setStartMonthInYear)(startMonth);
|
|
25
|
+
var nextYearForecast = {};
|
|
26
|
+
months.forEach(function (month, index) {
|
|
27
|
+
nextYearForecast[month] = perMonth * seasonalIndexal[index];
|
|
28
|
+
});
|
|
29
|
+
return nextYearForecast;
|
|
30
|
+
}
|
|
31
|
+
exports.calcSeasonalIndicesNoTrend = calcSeasonalIndicesNoTrend;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { default as simpleRegressionModel } from "./analyze/Regression/simpleRegressoinModel.js";
|
|
2
|
+
export { movingAverages, weightMovingAverages, exponentialSmoothing, } from "./analyze/TimeSeries/R/index.js";
|
|
3
|
+
export { calcSeasonalIndicesNoTrend } from "./analyze/TimeSeries/RS/index.js";
|
|
4
|
+
export { add } from "./test/add.js";
|
|
5
|
+
export { minus } from "./test/minus.js";
|
|
6
|
+
export { default as Ma } from "./stockSkills/ma.js";
|
|
7
|
+
export { default as Macd } from "./stockSkills/macd.js";
|
|
8
|
+
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";
|
|
11
|
+
export { default as dateFormat } from "./stockSkills/utils/dateFormat.js";
|
|
12
|
+
export { default as getWeekLine } from "./stockSkills/utils/getWeekLine.js";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getWeekLine = exports.dateFormat = exports.Gold = exports.Williams = exports.Rsi = exports.Macd = exports.Ma = exports.minus = exports.add = exports.calcSeasonalIndicesNoTrend = exports.exponentialSmoothing = exports.weightMovingAverages = exports.movingAverages = exports.simpleRegressionModel = void 0;
|
|
4
|
+
/*
|
|
5
|
+
請注意,在 src/index.ts 中,我的導入包含文件擴展名(.js)。
|
|
6
|
+
如果需要支持 Node.js 和構建工具(ex: webpack),則不需要這樣做。 **因為commonJs默認js副檔名**
|
|
7
|
+
但如果要支持 ES 模塊的瀏覽器 ,則需要文件擴展名(.js)。
|
|
8
|
+
*/
|
|
9
|
+
var simpleRegressoinModel_js_1 = require("./analyze/Regression/simpleRegressoinModel.js");
|
|
10
|
+
Object.defineProperty(exports, "simpleRegressionModel", { enumerable: true, get: function () { return simpleRegressoinModel_js_1.default; } });
|
|
11
|
+
var index_js_1 = require("./analyze/TimeSeries/R/index.js");
|
|
12
|
+
Object.defineProperty(exports, "movingAverages", { enumerable: true, get: function () { return index_js_1.movingAverages; } });
|
|
13
|
+
Object.defineProperty(exports, "weightMovingAverages", { enumerable: true, get: function () { return index_js_1.weightMovingAverages; } });
|
|
14
|
+
Object.defineProperty(exports, "exponentialSmoothing", { enumerable: true, get: function () { return index_js_1.exponentialSmoothing; } });
|
|
15
|
+
var index_js_2 = require("./analyze/TimeSeries/RS/index.js");
|
|
16
|
+
Object.defineProperty(exports, "calcSeasonalIndicesNoTrend", { enumerable: true, get: function () { return index_js_2.calcSeasonalIndicesNoTrend; } });
|
|
17
|
+
var add_js_1 = require("./test/add.js");
|
|
18
|
+
Object.defineProperty(exports, "add", { enumerable: true, get: function () { return add_js_1.add; } });
|
|
19
|
+
var minus_js_1 = require("./test/minus.js");
|
|
20
|
+
Object.defineProperty(exports, "minus", { enumerable: true, get: function () { return minus_js_1.minus; } });
|
|
21
|
+
var ma_js_1 = require("./stockSkills/ma.js");
|
|
22
|
+
Object.defineProperty(exports, "Ma", { enumerable: true, get: function () { return ma_js_1.default; } });
|
|
23
|
+
var macd_js_1 = require("./stockSkills/macd.js");
|
|
24
|
+
Object.defineProperty(exports, "Macd", { enumerable: true, get: function () { return macd_js_1.default; } });
|
|
25
|
+
var rsi_js_1 = require("./stockSkills/rsi.js");
|
|
26
|
+
Object.defineProperty(exports, "Rsi", { enumerable: true, get: function () { return rsi_js_1.default; } });
|
|
27
|
+
var williams_js_1 = require("./stockSkills/williams.js");
|
|
28
|
+
Object.defineProperty(exports, "Williams", { enumerable: true, get: function () { return williams_js_1.default; } });
|
|
29
|
+
var gold_js_1 = require("./stockSkills/gold.js");
|
|
30
|
+
Object.defineProperty(exports, "Gold", { enumerable: true, get: function () { return gold_js_1.default; } });
|
|
31
|
+
var dateFormat_js_1 = require("./stockSkills/utils/dateFormat.js");
|
|
32
|
+
Object.defineProperty(exports, "dateFormat", { enumerable: true, get: function () { return dateFormat_js_1.default; } });
|
|
33
|
+
var getWeekLine_js_1 = require("./stockSkills/utils/getWeekLine.js");
|
|
34
|
+
Object.defineProperty(exports, "getWeekLine", { enumerable: true, get: function () { return getWeekLine_js_1.default; } });
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
declare type ResGoldType = {
|
|
2
|
+
highestPointDate: number;
|
|
3
|
+
lowestPointDate: number;
|
|
4
|
+
lowestPoint: number;
|
|
5
|
+
highestPoint: number;
|
|
6
|
+
superStrong: number;
|
|
7
|
+
strong: number;
|
|
8
|
+
middle: number;
|
|
9
|
+
weak: number;
|
|
10
|
+
superWeak: number;
|
|
11
|
+
};
|
|
12
|
+
declare type ListType = {
|
|
13
|
+
h: number;
|
|
14
|
+
t: number;
|
|
15
|
+
o: number;
|
|
16
|
+
c: number;
|
|
17
|
+
l: number;
|
|
18
|
+
}[];
|
|
19
|
+
declare type ResHightestType = {
|
|
20
|
+
[key: string]: {
|
|
21
|
+
h: number;
|
|
22
|
+
t: number;
|
|
23
|
+
o: number;
|
|
24
|
+
c: number;
|
|
25
|
+
l: number;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
declare type ResLowestType = {
|
|
29
|
+
[key: string]: {
|
|
30
|
+
h: number;
|
|
31
|
+
t: number;
|
|
32
|
+
o: number;
|
|
33
|
+
c: number;
|
|
34
|
+
l: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
interface GoldType {
|
|
38
|
+
findHighPoint: (list: ListType) => ResHightestType;
|
|
39
|
+
findLowPoint: (list: ListType) => ResLowestType;
|
|
40
|
+
getGold: (list: ListType) => ResGoldType;
|
|
41
|
+
}
|
|
42
|
+
export default class Gold implements GoldType {
|
|
43
|
+
findHighPoint(list: ListType): ResHightestType;
|
|
44
|
+
findLowPoint(list: ListType): ResLowestType;
|
|
45
|
+
getGold(list: ListType): ResGoldType;
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var getWeekLine_js_1 = require("./utils/getWeekLine.js");
|
|
4
|
+
var Gold = /** @class */ (function () {
|
|
5
|
+
function Gold() {
|
|
6
|
+
}
|
|
7
|
+
Object.defineProperty(Gold.prototype, "findHighPoint", {
|
|
8
|
+
enumerable: false,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
value: function (list) {
|
|
12
|
+
var weekLine = (0, getWeekLine_js_1.default)(list, true);
|
|
13
|
+
var hightPoints = {};
|
|
14
|
+
var _loop_1 = function (i) {
|
|
15
|
+
var hightPoint = undefined;
|
|
16
|
+
switch (i) {
|
|
17
|
+
case 0:
|
|
18
|
+
{
|
|
19
|
+
var h1 = weekLine[i].h;
|
|
20
|
+
var h2 = weekLine[i + 1].h;
|
|
21
|
+
var h3 = weekLine[i + 2].h;
|
|
22
|
+
if (h1 > h2 && h1 > h3)
|
|
23
|
+
hightPoint = weekLine[i];
|
|
24
|
+
}
|
|
25
|
+
break;
|
|
26
|
+
case 1:
|
|
27
|
+
{
|
|
28
|
+
var h1 = weekLine[i - 1].h;
|
|
29
|
+
var h2 = weekLine[i].h;
|
|
30
|
+
var h3 = weekLine[i + 1].h;
|
|
31
|
+
var h4 = weekLine[i + 2].h;
|
|
32
|
+
if (h2 > h1 && h2 > h3 && h2 > h4)
|
|
33
|
+
hightPoint = weekLine[i];
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
case weekLine.length - 3:
|
|
37
|
+
{
|
|
38
|
+
var h1 = weekLine[i - 2].h;
|
|
39
|
+
var h2 = weekLine[i - 1].h;
|
|
40
|
+
var h3 = weekLine[i].h;
|
|
41
|
+
var h4 = weekLine[i + 1].h;
|
|
42
|
+
var h5 = weekLine[i + 2].h;
|
|
43
|
+
if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
|
|
44
|
+
hightPoint = weekLine[i];
|
|
45
|
+
}
|
|
46
|
+
break;
|
|
47
|
+
case weekLine.length - 2:
|
|
48
|
+
{
|
|
49
|
+
var h1 = weekLine[i - 2].h;
|
|
50
|
+
var h2 = weekLine[i - 1].h;
|
|
51
|
+
var h3 = weekLine[i].h;
|
|
52
|
+
var h4 = weekLine[i + 1].h;
|
|
53
|
+
if (h3 > h1 && h3 > h2 && h3 > h4)
|
|
54
|
+
hightPoint = weekLine[i];
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
case weekLine.length - 1:
|
|
58
|
+
{
|
|
59
|
+
var h1 = weekLine[i - 2].h;
|
|
60
|
+
var h2 = weekLine[i - 1].h;
|
|
61
|
+
var h3 = weekLine[i].h;
|
|
62
|
+
if (h3 > h2 && h3 > h1)
|
|
63
|
+
hightPoint = weekLine[i];
|
|
64
|
+
}
|
|
65
|
+
break;
|
|
66
|
+
default:
|
|
67
|
+
{
|
|
68
|
+
var h1 = weekLine[i - 2].h;
|
|
69
|
+
var h2 = weekLine[i - 1].h;
|
|
70
|
+
var h3 = weekLine[i].h;
|
|
71
|
+
var h4 = weekLine[i + 1].h;
|
|
72
|
+
var h5 = weekLine[i + 2].h;
|
|
73
|
+
var h6 = weekLine[i + 3].h;
|
|
74
|
+
if (h3 > h2 && h3 > h4 && h3 > h5 && h3 > h6)
|
|
75
|
+
hightPoint = weekLine[i];
|
|
76
|
+
if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
|
|
77
|
+
hightPoint = weekLine[i];
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
if (hightPoint && hightPoint["detail"]) {
|
|
82
|
+
var h_1 = hightPoint.h;
|
|
83
|
+
var theHight = hightPoint.detail.find(function (item) { return item.h === h_1; });
|
|
84
|
+
delete hightPoint.detail;
|
|
85
|
+
if (theHight)
|
|
86
|
+
hightPoints[theHight === null || theHight === void 0 ? void 0 : theHight.t] = theHight;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
for (var i = 0; i < weekLine.length; i++) {
|
|
90
|
+
_loop_1(i);
|
|
91
|
+
}
|
|
92
|
+
return hightPoints;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
Object.defineProperty(Gold.prototype, "findLowPoint", {
|
|
96
|
+
enumerable: false,
|
|
97
|
+
configurable: true,
|
|
98
|
+
writable: true,
|
|
99
|
+
value: function (list) {
|
|
100
|
+
var weekLine = (0, getWeekLine_js_1.default)(list, true);
|
|
101
|
+
var lowPoints = {};
|
|
102
|
+
var _loop_2 = function (i) {
|
|
103
|
+
var lowPoint = undefined;
|
|
104
|
+
switch (i) {
|
|
105
|
+
case 0:
|
|
106
|
+
{
|
|
107
|
+
var l1 = weekLine[i].l;
|
|
108
|
+
var l2 = weekLine[i + 1].l;
|
|
109
|
+
var l3 = weekLine[i + 2].l;
|
|
110
|
+
if (l1 < l2 && l1 < l3)
|
|
111
|
+
lowPoint = weekLine[i];
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
case 1:
|
|
115
|
+
{
|
|
116
|
+
var l1 = weekLine[i - 1].l;
|
|
117
|
+
var l2 = weekLine[i].l;
|
|
118
|
+
var l3 = weekLine[i + 1].l;
|
|
119
|
+
var l4 = weekLine[i + 2].l;
|
|
120
|
+
if (l2 < l1 && l2 < l3 && l2 < l4)
|
|
121
|
+
lowPoint = weekLine[i];
|
|
122
|
+
}
|
|
123
|
+
break;
|
|
124
|
+
case weekLine.length - 3:
|
|
125
|
+
{
|
|
126
|
+
var l1 = weekLine[i - 2].l;
|
|
127
|
+
var l2 = weekLine[i - 1].l;
|
|
128
|
+
var l3 = weekLine[i].l;
|
|
129
|
+
var l4 = weekLine[i + 1].l;
|
|
130
|
+
var l5 = weekLine[i + 2].l;
|
|
131
|
+
if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
|
|
132
|
+
lowPoint = weekLine[i];
|
|
133
|
+
}
|
|
134
|
+
break;
|
|
135
|
+
case weekLine.length - 2:
|
|
136
|
+
{
|
|
137
|
+
var l1 = weekLine[i - 2].l;
|
|
138
|
+
var l2 = weekLine[i - 1].l;
|
|
139
|
+
var l3 = weekLine[i].l;
|
|
140
|
+
var l4 = weekLine[i + 1].l;
|
|
141
|
+
if (l3 < l1 && l3 < l2 && l3 < l4)
|
|
142
|
+
lowPoint = weekLine[i];
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
case weekLine.length - 1:
|
|
146
|
+
{
|
|
147
|
+
var l1 = weekLine[i - 2].l;
|
|
148
|
+
var l2 = weekLine[i - 1].l;
|
|
149
|
+
var l3 = weekLine[i].l;
|
|
150
|
+
if (l3 < l2 && l3 < l1)
|
|
151
|
+
lowPoint = weekLine[i];
|
|
152
|
+
}
|
|
153
|
+
break;
|
|
154
|
+
default:
|
|
155
|
+
{
|
|
156
|
+
var l1 = weekLine[i - 2].l;
|
|
157
|
+
var l2 = weekLine[i - 1].l;
|
|
158
|
+
var l3 = weekLine[i].l;
|
|
159
|
+
var l4 = weekLine[i + 1].l;
|
|
160
|
+
var l5 = weekLine[i + 2].l;
|
|
161
|
+
var l6 = weekLine[i + 3].l;
|
|
162
|
+
if (l3 < l2 && l3 < l4 && l3 < l5 && l3 < l6)
|
|
163
|
+
lowPoint = weekLine[i];
|
|
164
|
+
if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
|
|
165
|
+
lowPoint = weekLine[i];
|
|
166
|
+
}
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
if (lowPoint && lowPoint["detail"]) {
|
|
170
|
+
var l_1 = lowPoint.l;
|
|
171
|
+
var theLow = lowPoint.detail.find(function (item) { return item.l === l_1; });
|
|
172
|
+
delete lowPoint.detail;
|
|
173
|
+
if (theLow)
|
|
174
|
+
lowPoints[theLow === null || theLow === void 0 ? void 0 : theLow.t] = theLow;
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
for (var i = 0; i < weekLine.length; i++) {
|
|
178
|
+
_loop_2(i);
|
|
179
|
+
}
|
|
180
|
+
return lowPoints;
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
Object.defineProperty(Gold.prototype, "getGold", {
|
|
184
|
+
enumerable: false,
|
|
185
|
+
configurable: true,
|
|
186
|
+
writable: true,
|
|
187
|
+
value: function (list) {
|
|
188
|
+
var hightPoints = this.findHighPoint(list);
|
|
189
|
+
var lowPoints = this.findLowPoint(list);
|
|
190
|
+
var lastHightPointDate = Object.keys(hightPoints).slice(-1)[0] !==
|
|
191
|
+
list[list.length - 1].t.toString()
|
|
192
|
+
? Object.keys(hightPoints).slice(-1)[0]
|
|
193
|
+
: Object.keys(hightPoints).slice(-2)[0];
|
|
194
|
+
var lastLowPointDate = Object.keys(lowPoints).slice(-1)[0] !== list[list.length - 1].t.toString()
|
|
195
|
+
? Object.keys(lowPoints).slice(-1)[0]
|
|
196
|
+
: Object.keys(lowPoints).slice(-2)[0];
|
|
197
|
+
var highestPoint = hightPoints[lastHightPointDate].h;
|
|
198
|
+
var lowestPoint = lowPoints[lastLowPointDate].l;
|
|
199
|
+
var res = {
|
|
200
|
+
highestPointDate: parseInt(lastHightPointDate),
|
|
201
|
+
lowestPointDate: parseInt(lastLowPointDate),
|
|
202
|
+
lowestPoint: lowestPoint,
|
|
203
|
+
highestPoint: highestPoint,
|
|
204
|
+
superStrong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.191) * 100) / 100,
|
|
205
|
+
strong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.382) * 100) / 100,
|
|
206
|
+
middle: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.5) * 100) /
|
|
207
|
+
100,
|
|
208
|
+
weak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.618) * 100) / 100,
|
|
209
|
+
superWeak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.809) * 100) / 100,
|
|
210
|
+
};
|
|
211
|
+
return res;
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
return Gold;
|
|
215
|
+
}());
|
|
216
|
+
exports.default = Gold;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var gold_1 = require("./gold");
|
|
4
|
+
var test_data_test_1 = require("./test_data.test");
|
|
5
|
+
describe("test Gold methods", function () {
|
|
6
|
+
it("test findHighPoint()", function () {
|
|
7
|
+
var gold = new gold_1.default();
|
|
8
|
+
var hightPoints = gold.findHighPoint(test_data_test_1.default);
|
|
9
|
+
expect(hightPoints["20211130"]).toEqual({
|
|
10
|
+
c: 155.5,
|
|
11
|
+
h: 164.5,
|
|
12
|
+
l: 155,
|
|
13
|
+
o: 158,
|
|
14
|
+
t: 20211130,
|
|
15
|
+
v: 83112,
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
it("test findLowPoint()", function () {
|
|
19
|
+
var gold = new gold_1.default();
|
|
20
|
+
var lowPoints = gold.findLowPoint(test_data_test_1.default);
|
|
21
|
+
expect(lowPoints["20211122"]).toEqual({
|
|
22
|
+
t: 20211122,
|
|
23
|
+
o: 135,
|
|
24
|
+
h: 140,
|
|
25
|
+
l: 134,
|
|
26
|
+
c: 137.5,
|
|
27
|
+
v: 9864,
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
it("test getGold(", function () {
|
|
31
|
+
var gold = new gold_1.default();
|
|
32
|
+
var allGold = gold.getGold(test_data_test_1.default);
|
|
33
|
+
expect(allGold).toEqual({
|
|
34
|
+
highestPoint: 164.5,
|
|
35
|
+
highestPointDate: 20211130,
|
|
36
|
+
lowestPoint: 134,
|
|
37
|
+
lowestPointDate: 20211122,
|
|
38
|
+
middle: 149.25,
|
|
39
|
+
strong: 152.85,
|
|
40
|
+
superStrong: 158.67,
|
|
41
|
+
superWeak: 139.83,
|
|
42
|
+
weak: 145.65,
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
});
|