@ch20026103/anysis 0.0.5-alpha → 0.0.7-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/dist/cjs/index.d.ts +4 -2
- package/dist/cjs/index.js +9 -5
- package/dist/cjs/stockSkills/boll.d.ts +58 -0
- package/dist/cjs/stockSkills/boll.js +101 -0
- package/dist/cjs/stockSkills/boll.test.d.ts +1 -0
- package/dist/cjs/stockSkills/boll.test.js +36 -0
- package/dist/cjs/stockSkills/ema.d.ts +2 -2
- package/dist/cjs/stockSkills/ema.js +1 -1
- package/dist/cjs/stockSkills/kd.d.ts +22 -22
- package/dist/cjs/stockSkills/kd.js +10 -10
- package/dist/cjs/stockSkills/ma.d.ts +13 -23
- package/dist/cjs/stockSkills/ma.js +9 -43
- package/dist/cjs/stockSkills/ma.test.js +3 -20
- package/dist/cjs/stockSkills/macd.d.ts +34 -34
- package/dist/cjs/stockSkills/macd.js +15 -15
- package/dist/cjs/stockSkills/macd.test.js +2 -0
- package/dist/cjs/stockSkills/rsi.d.ts +4 -4
- package/dist/cjs/stockSkills/rsi.js +2 -2
- package/dist/cjs/stockSkills/williams.d.ts +4 -4
- package/dist/cjs/stockSkills/williams.js +2 -2
- package/dist/cjs/utils/isJson.d.ts +1 -0
- package/dist/cjs/utils/isJson.js +12 -0
- package/dist/esm/index.d.ts +4 -2
- package/dist/esm/index.js +4 -2
- package/dist/esm/stockSkills/boll.d.ts +58 -0
- package/dist/esm/stockSkills/boll.js +99 -0
- package/dist/esm/stockSkills/boll.test.d.ts +1 -0
- package/dist/esm/stockSkills/boll.test.js +34 -0
- package/dist/esm/stockSkills/ema.d.ts +2 -2
- package/dist/esm/stockSkills/ema.js +1 -1
- package/dist/esm/stockSkills/kd.d.ts +22 -22
- package/dist/esm/stockSkills/kd.js +10 -10
- package/dist/esm/stockSkills/ma.d.ts +13 -23
- package/dist/esm/stockSkills/ma.js +9 -43
- package/dist/esm/stockSkills/ma.test.js +3 -20
- package/dist/esm/stockSkills/macd.d.ts +34 -34
- package/dist/esm/stockSkills/macd.js +15 -15
- package/dist/esm/stockSkills/macd.test.js +2 -0
- package/dist/esm/stockSkills/rsi.d.ts +4 -4
- package/dist/esm/stockSkills/rsi.js +2 -2
- package/dist/esm/stockSkills/williams.d.ts +4 -4
- package/dist/esm/stockSkills/williams.js +2 -2
- package/dist/esm/utils/isJson.d.ts +1 -0
- package/dist/esm/utils/isJson.js +9 -0
- package/dist/umd/index.js +279 -202
- package/package.json +17 -15
package/dist/cjs/index.d.ts
CHANGED
|
@@ -2,15 +2,17 @@ export { default as simpleRegressionModel } from "./analyze/Regression/simpleReg
|
|
|
2
2
|
export { default as slope } from "./analyze/Slope/index.js";
|
|
3
3
|
export { exponentialSmoothing, movingAverages, weightMovingAverages, } from "./analyze/TimeSeries/R/index.js";
|
|
4
4
|
export { calcSeasonalIndicesNoTrend } from "./analyze/TimeSeries/RS/index.js";
|
|
5
|
+
export { default as Boll } from "./stockSkills/boll.js";
|
|
6
|
+
export { default as Ema } from "./stockSkills/ema.js";
|
|
5
7
|
export { default as Gold } from "./stockSkills/gold.js";
|
|
6
8
|
export { default as Kd } from "./stockSkills/kd.js";
|
|
7
9
|
export { default as Ma } from "./stockSkills/ma.js";
|
|
8
10
|
export { default as Macd } from "./stockSkills/macd.js";
|
|
9
|
-
export { default as Rsi } from "./stockSkills/rsi.js";
|
|
10
11
|
export { default as Obv } from "./stockSkills/obv.js";
|
|
11
|
-
export { default as
|
|
12
|
+
export { default as Rsi } from "./stockSkills/rsi.js";
|
|
12
13
|
export { default as dateFormat } from "./stockSkills/utils/dateFormat.js";
|
|
13
14
|
export { default as getWeekLine } from "./stockSkills/utils/getWeekLine.js";
|
|
14
15
|
export { default as Williams } from "./stockSkills/williams.js";
|
|
15
16
|
export { add } from "./test/add.js";
|
|
16
17
|
export { minus } from "./test/minus.js";
|
|
18
|
+
export { default as isJSON } from "./utils/isJson.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.
|
|
3
|
+
exports.isJSON = exports.minus = exports.add = exports.Williams = 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 = void 0;
|
|
4
4
|
/*
|
|
5
5
|
請注意,在 src/index.ts 中,我的導入包含文件擴展名(.js)。
|
|
6
6
|
如果需要支持 Node.js 和構建工具(ex: webpack),則不需要這樣做。 **因為commonJs默認js副檔名**
|
|
@@ -16,6 +16,10 @@ Object.defineProperty(exports, "movingAverages", { enumerable: true, get: functi
|
|
|
16
16
|
Object.defineProperty(exports, "weightMovingAverages", { enumerable: true, get: function () { return index_js_2.weightMovingAverages; } });
|
|
17
17
|
var index_js_3 = require("./analyze/TimeSeries/RS/index.js");
|
|
18
18
|
Object.defineProperty(exports, "calcSeasonalIndicesNoTrend", { enumerable: true, get: function () { return index_js_3.calcSeasonalIndicesNoTrend; } });
|
|
19
|
+
var boll_js_1 = require("./stockSkills/boll.js");
|
|
20
|
+
Object.defineProperty(exports, "Boll", { enumerable: true, get: function () { return boll_js_1.default; } });
|
|
21
|
+
var ema_js_1 = require("./stockSkills/ema.js");
|
|
22
|
+
Object.defineProperty(exports, "Ema", { enumerable: true, get: function () { return ema_js_1.default; } });
|
|
19
23
|
var gold_js_1 = require("./stockSkills/gold.js");
|
|
20
24
|
Object.defineProperty(exports, "Gold", { enumerable: true, get: function () { return gold_js_1.default; } });
|
|
21
25
|
var kd_js_1 = require("./stockSkills/kd.js");
|
|
@@ -24,12 +28,10 @@ var ma_js_1 = require("./stockSkills/ma.js");
|
|
|
24
28
|
Object.defineProperty(exports, "Ma", { enumerable: true, get: function () { return ma_js_1.default; } });
|
|
25
29
|
var macd_js_1 = require("./stockSkills/macd.js");
|
|
26
30
|
Object.defineProperty(exports, "Macd", { enumerable: true, get: function () { return macd_js_1.default; } });
|
|
27
|
-
var rsi_js_1 = require("./stockSkills/rsi.js");
|
|
28
|
-
Object.defineProperty(exports, "Rsi", { enumerable: true, get: function () { return rsi_js_1.default; } });
|
|
29
31
|
var obv_js_1 = require("./stockSkills/obv.js");
|
|
30
32
|
Object.defineProperty(exports, "Obv", { enumerable: true, get: function () { return obv_js_1.default; } });
|
|
31
|
-
var
|
|
32
|
-
Object.defineProperty(exports, "
|
|
33
|
+
var rsi_js_1 = require("./stockSkills/rsi.js");
|
|
34
|
+
Object.defineProperty(exports, "Rsi", { enumerable: true, get: function () { return rsi_js_1.default; } });
|
|
33
35
|
var dateFormat_js_1 = require("./stockSkills/utils/dateFormat.js");
|
|
34
36
|
Object.defineProperty(exports, "dateFormat", { enumerable: true, get: function () { return dateFormat_js_1.default; } });
|
|
35
37
|
var getWeekLine_js_1 = require("./stockSkills/utils/getWeekLine.js");
|
|
@@ -40,3 +42,5 @@ var add_js_1 = require("./test/add.js");
|
|
|
40
42
|
Object.defineProperty(exports, "add", { enumerable: true, get: function () { return add_js_1.add; } });
|
|
41
43
|
var minus_js_1 = require("./test/minus.js");
|
|
42
44
|
Object.defineProperty(exports, "minus", { enumerable: true, get: function () { return minus_js_1.minus; } });
|
|
45
|
+
var isJson_js_1 = require("./utils/isJson.js");
|
|
46
|
+
Object.defineProperty(exports, "isJSON", { enumerable: true, get: function () { return isJson_js_1.default; } });
|
|
@@ -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
|
+
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
interface EmaType {
|
|
2
2
|
getStartEma: (list: number[], period: number) => number;
|
|
3
|
-
getEma: (list: number[], period: number) => (number |
|
|
3
|
+
getEma: (list: number[], period: number) => (number | null)[];
|
|
4
4
|
}
|
|
5
5
|
export default class Ema implements EmaType {
|
|
6
6
|
getStartEma(list: number[], period: number): number;
|
|
7
|
-
getEma(list: number[], period: number): (number |
|
|
7
|
+
getEma(list: number[], period: number): (number | null)[];
|
|
8
8
|
}
|
|
9
9
|
export {};
|
|
@@ -27,7 +27,7 @@ var Ema = /** @class */ (function () {
|
|
|
27
27
|
var ema = this.getStartEma(list.slice(0, period), period);
|
|
28
28
|
for (var i = 0; i < list.length; i++) {
|
|
29
29
|
if (i < period) {
|
|
30
|
-
res.push(
|
|
30
|
+
res.push(null);
|
|
31
31
|
continue;
|
|
32
32
|
}
|
|
33
33
|
ema = (list[i] * 2 + (period - 1) * ema) / (period + 1);
|
|
@@ -10,35 +10,35 @@ type DataType = {
|
|
|
10
10
|
type ListType = DataType[];
|
|
11
11
|
type ResRSV = {
|
|
12
12
|
c: number;
|
|
13
|
-
rsv
|
|
13
|
+
rsv: number | null;
|
|
14
14
|
}[];
|
|
15
15
|
type ResKD = {
|
|
16
16
|
c: number;
|
|
17
|
-
rsv
|
|
18
|
-
k
|
|
19
|
-
d
|
|
20
|
-
"k-d"
|
|
17
|
+
rsv: number | null;
|
|
18
|
+
k: number | null;
|
|
19
|
+
d: number | null;
|
|
20
|
+
"k-d": number | null;
|
|
21
21
|
}[];
|
|
22
22
|
export default class Kd implements KdType {
|
|
23
23
|
init(data: DataType): {
|
|
24
24
|
dataset: ListType;
|
|
25
|
-
rsv
|
|
26
|
-
k
|
|
27
|
-
d
|
|
28
|
-
"k-d"
|
|
25
|
+
rsv: number | null;
|
|
26
|
+
k: number | null;
|
|
27
|
+
d: number | null;
|
|
28
|
+
"k-d": number | null;
|
|
29
29
|
};
|
|
30
30
|
next(data: DataType, preList: {
|
|
31
31
|
dataset: ListType;
|
|
32
|
-
rsv
|
|
33
|
-
k
|
|
34
|
-
d
|
|
35
|
-
"k-d"
|
|
32
|
+
rsv: number | null;
|
|
33
|
+
k: number | null;
|
|
34
|
+
d: number | null;
|
|
35
|
+
"k-d": number | null;
|
|
36
36
|
}, type: number): {
|
|
37
37
|
dataset: ListType;
|
|
38
|
-
rsv:
|
|
39
|
-
k:
|
|
40
|
-
d:
|
|
41
|
-
"k-d":
|
|
38
|
+
rsv: null;
|
|
39
|
+
k: null;
|
|
40
|
+
d: null;
|
|
41
|
+
"k-d": null;
|
|
42
42
|
} | {
|
|
43
43
|
dataset: ListType;
|
|
44
44
|
rsv: number;
|
|
@@ -47,7 +47,7 @@ export default class Kd implements KdType {
|
|
|
47
47
|
"k-d": number;
|
|
48
48
|
};
|
|
49
49
|
getRSV(list: ListType): ({
|
|
50
|
-
rsv:
|
|
50
|
+
rsv: null;
|
|
51
51
|
c: number;
|
|
52
52
|
h: number;
|
|
53
53
|
l: number;
|
|
@@ -58,10 +58,10 @@ export default class Kd implements KdType {
|
|
|
58
58
|
l: number;
|
|
59
59
|
})[];
|
|
60
60
|
getKD(list: ListType): ({
|
|
61
|
-
rsv:
|
|
62
|
-
k:
|
|
63
|
-
d:
|
|
64
|
-
"k-d":
|
|
61
|
+
rsv: null;
|
|
62
|
+
k: null;
|
|
63
|
+
d: null;
|
|
64
|
+
"k-d": null;
|
|
65
65
|
c: number;
|
|
66
66
|
h: number;
|
|
67
67
|
l: number;
|
|
@@ -21,10 +21,10 @@ var Kd = /** @class */ (function () {
|
|
|
21
21
|
value: function (data) {
|
|
22
22
|
return {
|
|
23
23
|
dataset: [data],
|
|
24
|
-
rsv:
|
|
25
|
-
k:
|
|
26
|
-
d:
|
|
27
|
-
"k-d":
|
|
24
|
+
rsv: null,
|
|
25
|
+
k: null,
|
|
26
|
+
d: null,
|
|
27
|
+
"k-d": null,
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
});
|
|
@@ -37,10 +37,10 @@ var Kd = /** @class */ (function () {
|
|
|
37
37
|
if (preList.dataset.length < type) {
|
|
38
38
|
return {
|
|
39
39
|
dataset: preList.dataset,
|
|
40
|
-
rsv:
|
|
41
|
-
k:
|
|
42
|
-
d:
|
|
43
|
-
"k-d":
|
|
40
|
+
rsv: null,
|
|
41
|
+
k: null,
|
|
42
|
+
d: null,
|
|
43
|
+
"k-d": null,
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
@@ -76,7 +76,7 @@ var Kd = /** @class */ (function () {
|
|
|
76
76
|
var res = [];
|
|
77
77
|
for (var i = 0; i < list.length; i++) {
|
|
78
78
|
if (i < 8)
|
|
79
|
-
res[i] = __assign(__assign({}, list[i]), { rsv:
|
|
79
|
+
res[i] = __assign(__assign({}, list[i]), { rsv: null });
|
|
80
80
|
else {
|
|
81
81
|
var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
|
|
82
82
|
var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
|
|
@@ -99,7 +99,7 @@ var Kd = /** @class */ (function () {
|
|
|
99
99
|
var yesterdayD = 50;
|
|
100
100
|
for (var i = 0; i < list.length; i++) {
|
|
101
101
|
if (i < 8)
|
|
102
|
-
res[i] = __assign(__assign({}, list[i]), { rsv:
|
|
102
|
+
res[i] = __assign(__assign({}, list[i]), { rsv: null, k: null, d: null, "k-d": null });
|
|
103
103
|
else {
|
|
104
104
|
var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
|
|
105
105
|
var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
|
|
@@ -4,39 +4,31 @@ type DataType = {
|
|
|
4
4
|
type ListType = DataType[];
|
|
5
5
|
type ResMa5 = {
|
|
6
6
|
c: number;
|
|
7
|
-
ma5
|
|
7
|
+
ma5: number | null;
|
|
8
8
|
}[];
|
|
9
9
|
type ResMa10 = {
|
|
10
10
|
c: number;
|
|
11
|
-
ma10
|
|
11
|
+
ma10: number | null;
|
|
12
12
|
}[];
|
|
13
13
|
type ResMa20 = {
|
|
14
14
|
c: number;
|
|
15
|
-
ma20
|
|
15
|
+
ma20: number | null;
|
|
16
16
|
}[];
|
|
17
17
|
type ResMa60 = {
|
|
18
18
|
c: number;
|
|
19
|
-
ma60
|
|
19
|
+
ma60: number | null;
|
|
20
20
|
}[];
|
|
21
|
-
type
|
|
21
|
+
type ResMa = {
|
|
22
22
|
c: number;
|
|
23
|
-
|
|
24
|
-
}[];
|
|
25
|
-
type ResBoll = {
|
|
26
|
-
c: number;
|
|
27
|
-
ma25?: number;
|
|
28
|
-
bollUb?: number;
|
|
29
|
-
bollLb?: number;
|
|
23
|
+
ma: number | null;
|
|
30
24
|
}[];
|
|
31
25
|
type ResAllMa = {
|
|
32
26
|
c: number;
|
|
33
|
-
ma5
|
|
34
|
-
ma10
|
|
35
|
-
ma20
|
|
36
|
-
ma25
|
|
37
|
-
ma60
|
|
38
|
-
bollUb?: number;
|
|
39
|
-
bollLb?: number;
|
|
27
|
+
ma5: number | null;
|
|
28
|
+
ma10: number | null;
|
|
29
|
+
ma20: number | null;
|
|
30
|
+
ma25: number | null;
|
|
31
|
+
ma60: number | null;
|
|
40
32
|
}[];
|
|
41
33
|
interface MaType {
|
|
42
34
|
init: (data: DataType, type: number) => {
|
|
@@ -58,8 +50,7 @@ interface MaType {
|
|
|
58
50
|
getMa10: (list: ListType) => ResMa10;
|
|
59
51
|
getMa20: (list: ListType) => ResMa20;
|
|
60
52
|
getMa60: (list: ListType) => ResMa60;
|
|
61
|
-
|
|
62
|
-
getBoll: (list: ListType) => ResBoll;
|
|
53
|
+
getMa: (list: ListType, self: number) => ResMa;
|
|
63
54
|
}
|
|
64
55
|
export default class Ma implements MaType {
|
|
65
56
|
init(data: DataType, type: number): {
|
|
@@ -81,7 +72,6 @@ export default class Ma implements MaType {
|
|
|
81
72
|
getMa10(list: ListType): ResMa10;
|
|
82
73
|
getMa20(list: ListType): ResMa20;
|
|
83
74
|
getMa60(list: ListType): ResMa60;
|
|
84
|
-
|
|
85
|
-
getBoll(list: ListType): ResBoll;
|
|
75
|
+
getMa(list: ListType, self: number): ResMa;
|
|
86
76
|
}
|
|
87
77
|
export {};
|
|
@@ -51,9 +51,8 @@ var Ma = /** @class */ (function () {
|
|
|
51
51
|
var responseMa10 = this.getMa10(list);
|
|
52
52
|
var responseMa20 = this.getMa20(list);
|
|
53
53
|
var responseMa60 = this.getMa60(list);
|
|
54
|
-
var responseBoll = this.getBoll(list);
|
|
55
54
|
for (var i = 0; i < list.length; i++) {
|
|
56
|
-
res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseMa60[i]
|
|
55
|
+
res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseMa60[i]);
|
|
57
56
|
}
|
|
58
57
|
return res;
|
|
59
58
|
}
|
|
@@ -66,7 +65,7 @@ var Ma = /** @class */ (function () {
|
|
|
66
65
|
var res = [];
|
|
67
66
|
for (var i = 0; i < list.length; i++) {
|
|
68
67
|
if (i < 4)
|
|
69
|
-
res[i] = __assign(__assign({}, list[i]), { ma5:
|
|
68
|
+
res[i] = __assign(__assign({}, list[i]), { ma5: null });
|
|
70
69
|
else {
|
|
71
70
|
var sum = list
|
|
72
71
|
.slice(i - 4, i + 1)
|
|
@@ -86,7 +85,7 @@ var Ma = /** @class */ (function () {
|
|
|
86
85
|
var res = [];
|
|
87
86
|
for (var i = 0; i < list.length; i++) {
|
|
88
87
|
if (i < 9)
|
|
89
|
-
res[i] = __assign(__assign({}, list[i]), { ma10:
|
|
88
|
+
res[i] = __assign(__assign({}, list[i]), { ma10: null });
|
|
90
89
|
else {
|
|
91
90
|
var sum = list
|
|
92
91
|
.slice(i - 9, i + 1)
|
|
@@ -106,7 +105,7 @@ var Ma = /** @class */ (function () {
|
|
|
106
105
|
var res = [];
|
|
107
106
|
for (var i = 0; i < list.length; i++) {
|
|
108
107
|
if (i < 19)
|
|
109
|
-
res[i] = __assign(__assign({}, list[i]), { ma20:
|
|
108
|
+
res[i] = __assign(__assign({}, list[i]), { ma20: null });
|
|
110
109
|
else {
|
|
111
110
|
var sum = list
|
|
112
111
|
.slice(i - 19, i + 1)
|
|
@@ -126,7 +125,7 @@ var Ma = /** @class */ (function () {
|
|
|
126
125
|
var res = [];
|
|
127
126
|
for (var i = 0; i < list.length; i++) {
|
|
128
127
|
if (i < 59)
|
|
129
|
-
res[i] = __assign(__assign({}, list[i]), { ma60:
|
|
128
|
+
res[i] = __assign(__assign({}, list[i]), { ma60: null });
|
|
130
129
|
else {
|
|
131
130
|
var sum = list
|
|
132
131
|
.slice(i - 59, i + 1)
|
|
@@ -138,7 +137,7 @@ var Ma = /** @class */ (function () {
|
|
|
138
137
|
return res;
|
|
139
138
|
}
|
|
140
139
|
});
|
|
141
|
-
Object.defineProperty(Ma.prototype, "
|
|
140
|
+
Object.defineProperty(Ma.prototype, "getMa", {
|
|
142
141
|
enumerable: false,
|
|
143
142
|
configurable: true,
|
|
144
143
|
writable: true,
|
|
@@ -146,51 +145,18 @@ var Ma = /** @class */ (function () {
|
|
|
146
145
|
var res = [];
|
|
147
146
|
for (var i = 0; i < list.length; i++) {
|
|
148
147
|
if (i < self - 1)
|
|
149
|
-
res[i] = __assign(__assign({}, list[i]), {
|
|
148
|
+
res[i] = __assign(__assign({}, list[i]), { ma: null });
|
|
150
149
|
else {
|
|
151
150
|
var sum = list
|
|
152
151
|
.slice(i - (self - 1), i + 1)
|
|
153
152
|
.reduce(function (pre, current) { return pre + current.c; }, 0);
|
|
154
|
-
var
|
|
155
|
-
res[i] = __assign(__assign({}, list[i]), {
|
|
153
|
+
var ma = Math.round((sum / self) * 100) / 100;
|
|
154
|
+
res[i] = __assign(__assign({}, list[i]), { ma: ma });
|
|
156
155
|
}
|
|
157
156
|
}
|
|
158
157
|
return res;
|
|
159
158
|
}
|
|
160
159
|
});
|
|
161
|
-
Object.defineProperty(Ma.prototype, "getBoll", {
|
|
162
|
-
enumerable: false,
|
|
163
|
-
configurable: true,
|
|
164
|
-
writable: true,
|
|
165
|
-
value: function (list) {
|
|
166
|
-
var res = [];
|
|
167
|
-
var _loop_1 = function (i) {
|
|
168
|
-
if (i < 24)
|
|
169
|
-
res[i] = __assign(__assign({}, list[i]), { ma25: undefined, bollUb: undefined, bollLb: undefined });
|
|
170
|
-
else {
|
|
171
|
-
// ma25
|
|
172
|
-
var sumMa25 = list
|
|
173
|
-
.slice(i - 24, i + 1)
|
|
174
|
-
.reduce(function (pre, current) { return pre + current.c; }, 0);
|
|
175
|
-
var ma25_1 = Math.round((sumMa25 / 25) * 100) / 100;
|
|
176
|
-
// 標準差
|
|
177
|
-
var sumBase = res
|
|
178
|
-
.slice(i - 24, i + 1)
|
|
179
|
-
.reduce(function (pre, current) {
|
|
180
|
-
return ma25_1 !== undefined
|
|
181
|
-
? pre + Math.pow(current.c - ma25_1, 2)
|
|
182
|
-
: pre;
|
|
183
|
-
}, 0);
|
|
184
|
-
var base = Math.round(Math.sqrt(sumBase / 25) * 100) / 100;
|
|
185
|
-
res[i] = __assign(__assign({}, list[i]), { ma25: ma25_1, bollUb: ma25_1 + 2 * base, bollLb: ma25_1 - 2 * base });
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
for (var i = 0; i < list.length; i++) {
|
|
189
|
-
_loop_1(i);
|
|
190
|
-
}
|
|
191
|
-
return res;
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
160
|
return Ma;
|
|
195
161
|
}());
|
|
196
162
|
exports.default = Ma;
|
|
@@ -63,30 +63,16 @@ describe("test ma methods", function () {
|
|
|
63
63
|
ma60: 134.86,
|
|
64
64
|
});
|
|
65
65
|
});
|
|
66
|
-
it("test
|
|
66
|
+
it("test getMa()", function () {
|
|
67
67
|
var ma = new ma_1.default();
|
|
68
|
-
expect(ma.
|
|
68
|
+
expect(ma.getMa(test_data_test_1.default, 20)[test_data_test_1.default.length - 1]).toEqual({
|
|
69
69
|
c: 142,
|
|
70
70
|
o: 138,
|
|
71
71
|
t: 20211214,
|
|
72
72
|
v: 16841,
|
|
73
73
|
h: 143,
|
|
74
74
|
l: 138,
|
|
75
|
-
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
it("test getBoll()", function () {
|
|
79
|
-
var ma = new ma_1.default();
|
|
80
|
-
expect(ma.getBoll(test_data_test_1.default)[test_data_test_1.default.length - 1]).toEqual({
|
|
81
|
-
c: 142,
|
|
82
|
-
o: 138,
|
|
83
|
-
t: 20211214,
|
|
84
|
-
v: 16841,
|
|
85
|
-
h: 143,
|
|
86
|
-
l: 138,
|
|
87
|
-
ma25: 142.66,
|
|
88
|
-
bollLb: 126.69999999999999,
|
|
89
|
-
bollUb: 158.62,
|
|
75
|
+
ma: 144.88,
|
|
90
76
|
});
|
|
91
77
|
});
|
|
92
78
|
it("test getAllMa()", function () {
|
|
@@ -102,9 +88,6 @@ describe("test ma methods", function () {
|
|
|
102
88
|
ma10: 146.7,
|
|
103
89
|
ma20: 144.88,
|
|
104
90
|
ma60: 134.86,
|
|
105
|
-
ma25: 142.66,
|
|
106
|
-
bollUb: 158.62,
|
|
107
|
-
bollLb: 126.69999999999999,
|
|
108
91
|
});
|
|
109
92
|
});
|
|
110
93
|
});
|