@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.
Files changed (101) hide show
  1. package/.eslintrc.json +15 -0
  2. package/.gitattributes +1 -0
  3. package/.vscode/settings.json +5 -0
  4. package/README.md +11 -0
  5. package/commitlint.config.js +3 -0
  6. package/dist/cjs/analyze/Month/index.d.ts +15 -0
  7. package/dist/cjs/analyze/Month/index.js +24 -0
  8. package/dist/cjs/analyze/Regression/simpleRegressoinModel.d.ts +12 -0
  9. package/dist/cjs/analyze/Regression/simpleRegressoinModel.js +79 -0
  10. package/dist/cjs/analyze/Regression/simpleRegressoinModel.test.d.ts +1 -0
  11. package/dist/cjs/analyze/Regression/simpleRegressoinModel.test.js +16 -0
  12. package/dist/cjs/analyze/TimeSeries/R/index.d.ts +7 -0
  13. package/dist/cjs/analyze/TimeSeries/R/index.js +39 -0
  14. package/dist/cjs/analyze/TimeSeries/RS/index.d.ts +2 -0
  15. package/dist/cjs/analyze/TimeSeries/RS/index.js +31 -0
  16. package/dist/cjs/index.d.ts +12 -0
  17. package/dist/cjs/index.js +34 -0
  18. package/dist/cjs/stockSkills/gold.d.ts +47 -0
  19. package/dist/cjs/stockSkills/gold.js +216 -0
  20. package/dist/cjs/stockSkills/gold.test.d.ts +1 -0
  21. package/dist/cjs/stockSkills/gold.test.js +45 -0
  22. package/dist/cjs/stockSkills/ma.d.ts +58 -0
  23. package/dist/cjs/stockSkills/ma.js +169 -0
  24. package/dist/cjs/stockSkills/ma.test.d.ts +1 -0
  25. package/dist/cjs/stockSkills/ma.test.js +98 -0
  26. package/dist/cjs/stockSkills/macd.d.ts +59 -0
  27. package/dist/cjs/stockSkills/macd.js +144 -0
  28. package/dist/cjs/stockSkills/macd.test.d.ts +1 -0
  29. package/dist/cjs/stockSkills/macd.test.js +74 -0
  30. package/dist/cjs/stockSkills/rsi.d.ts +32 -0
  31. package/dist/cjs/stockSkills/rsi.js +145 -0
  32. package/dist/cjs/stockSkills/rsi.test.d.ts +1 -0
  33. package/dist/cjs/stockSkills/rsi.test.js +30 -0
  34. package/dist/cjs/stockSkills/test_data.test.d.ts +9 -0
  35. package/dist/cjs/stockSkills/test_data.test.js +166 -0
  36. package/dist/cjs/stockSkills/utils/dateFormat.d.ts +12 -0
  37. package/dist/cjs/stockSkills/utils/dateFormat.js +58 -0
  38. package/dist/cjs/stockSkills/utils/dateFormat.test.d.ts +1 -0
  39. package/dist/cjs/stockSkills/utils/dateFormat.test.js +29 -0
  40. package/dist/cjs/stockSkills/utils/getWeekLine.d.ts +17 -0
  41. package/dist/cjs/stockSkills/utils/getWeekLine.js +75 -0
  42. package/dist/cjs/stockSkills/utils/getWeekLine.test.d.ts +1 -0
  43. package/dist/cjs/stockSkills/utils/getWeekLine.test.js +16 -0
  44. package/dist/cjs/stockSkills/williams.d.ts +29 -0
  45. package/dist/cjs/stockSkills/williams.js +77 -0
  46. package/dist/cjs/stockSkills/williams.test.d.ts +1 -0
  47. package/dist/cjs/stockSkills/williams.test.js +43 -0
  48. package/dist/cjs/test/add.d.ts +1 -0
  49. package/dist/cjs/test/add.js +7 -0
  50. package/dist/cjs/test/minus.d.ts +1 -0
  51. package/dist/cjs/test/minus.js +7 -0
  52. package/dist/esm/analyze/Month/index.d.ts +15 -0
  53. package/dist/esm/analyze/Month/index.js +20 -0
  54. package/dist/esm/analyze/Regression/simpleRegressoinModel.d.ts +12 -0
  55. package/dist/esm/analyze/Regression/simpleRegressoinModel.js +76 -0
  56. package/dist/esm/analyze/Regression/simpleRegressoinModel.test.d.ts +1 -0
  57. package/dist/esm/analyze/Regression/simpleRegressoinModel.test.js +14 -0
  58. package/dist/esm/analyze/TimeSeries/R/index.d.ts +7 -0
  59. package/dist/esm/analyze/TimeSeries/R/index.js +33 -0
  60. package/dist/esm/analyze/TimeSeries/RS/index.d.ts +2 -0
  61. package/dist/esm/analyze/TimeSeries/RS/index.js +27 -0
  62. package/dist/esm/index.d.ts +12 -0
  63. package/dist/esm/index.js +17 -0
  64. package/dist/esm/stockSkills/gold.d.ts +47 -0
  65. package/dist/esm/stockSkills/gold.js +214 -0
  66. package/dist/esm/stockSkills/gold.test.d.ts +1 -0
  67. package/dist/esm/stockSkills/gold.test.js +43 -0
  68. package/dist/esm/stockSkills/ma.d.ts +58 -0
  69. package/dist/esm/stockSkills/ma.js +167 -0
  70. package/dist/esm/stockSkills/ma.test.d.ts +1 -0
  71. package/dist/esm/stockSkills/ma.test.js +96 -0
  72. package/dist/esm/stockSkills/macd.d.ts +59 -0
  73. package/dist/esm/stockSkills/macd.js +142 -0
  74. package/dist/esm/stockSkills/macd.test.d.ts +1 -0
  75. package/dist/esm/stockSkills/macd.test.js +72 -0
  76. package/dist/esm/stockSkills/rsi.d.ts +32 -0
  77. package/dist/esm/stockSkills/rsi.js +143 -0
  78. package/dist/esm/stockSkills/rsi.test.d.ts +1 -0
  79. package/dist/esm/stockSkills/rsi.test.js +28 -0
  80. package/dist/esm/stockSkills/test_data.test.d.ts +9 -0
  81. package/dist/esm/stockSkills/test_data.test.js +164 -0
  82. package/dist/esm/stockSkills/utils/dateFormat.d.ts +12 -0
  83. package/dist/esm/stockSkills/utils/dateFormat.js +55 -0
  84. package/dist/esm/stockSkills/utils/dateFormat.test.d.ts +1 -0
  85. package/dist/esm/stockSkills/utils/dateFormat.test.js +27 -0
  86. package/dist/esm/stockSkills/utils/getWeekLine.d.ts +17 -0
  87. package/dist/esm/stockSkills/utils/getWeekLine.js +72 -0
  88. package/dist/esm/stockSkills/utils/getWeekLine.test.d.ts +1 -0
  89. package/dist/esm/stockSkills/utils/getWeekLine.test.js +14 -0
  90. package/dist/esm/stockSkills/williams.d.ts +29 -0
  91. package/dist/esm/stockSkills/williams.js +75 -0
  92. package/dist/esm/stockSkills/williams.test.d.ts +1 -0
  93. package/dist/esm/stockSkills/williams.test.js +41 -0
  94. package/dist/esm/test/add.d.ts +1 -0
  95. package/dist/esm/test/add.js +3 -0
  96. package/dist/esm/test/minus.d.ts +1 -0
  97. package/dist/esm/test/minus.js +3 -0
  98. package/dist/umd/index.js +1059 -0
  99. package/package.json +61 -0
  100. package/test.js +29 -0
  101. package/vite.config.js +10 -0
@@ -0,0 +1,43 @@
1
+ import Gold from "./gold";
2
+ import data from "./test_data.test";
3
+ describe("test Gold methods", function () {
4
+ it("test findHighPoint()", function () {
5
+ var gold = new Gold();
6
+ var hightPoints = gold.findHighPoint(data);
7
+ expect(hightPoints["20211130"]).toEqual({
8
+ c: 155.5,
9
+ h: 164.5,
10
+ l: 155,
11
+ o: 158,
12
+ t: 20211130,
13
+ v: 83112,
14
+ });
15
+ });
16
+ it("test findLowPoint()", function () {
17
+ var gold = new Gold();
18
+ var lowPoints = gold.findLowPoint(data);
19
+ expect(lowPoints["20211122"]).toEqual({
20
+ t: 20211122,
21
+ o: 135,
22
+ h: 140,
23
+ l: 134,
24
+ c: 137.5,
25
+ v: 9864,
26
+ });
27
+ });
28
+ it("test getGold(", function () {
29
+ var gold = new Gold();
30
+ var allGold = gold.getGold(data);
31
+ expect(allGold).toEqual({
32
+ highestPoint: 164.5,
33
+ highestPointDate: 20211130,
34
+ lowestPoint: 134,
35
+ lowestPointDate: 20211122,
36
+ middle: 149.25,
37
+ strong: 152.85,
38
+ superStrong: 158.67,
39
+ superWeak: 139.83,
40
+ weak: 145.65,
41
+ });
42
+ });
43
+ });
@@ -0,0 +1,58 @@
1
+ declare type ListType = {
2
+ c: number;
3
+ }[];
4
+ declare type ResMa5 = {
5
+ c: number;
6
+ ma5?: number;
7
+ }[];
8
+ declare type ResMa10 = {
9
+ c: number;
10
+ ma10?: number;
11
+ }[];
12
+ declare type ResMa20 = {
13
+ c: number;
14
+ ma20?: number;
15
+ }[];
16
+ declare type ResMa60 = {
17
+ c: number;
18
+ ma60?: number;
19
+ }[];
20
+ declare type ResMaSelf = {
21
+ c: number;
22
+ maSelf?: number;
23
+ }[];
24
+ declare type ResBoll = {
25
+ c: number;
26
+ ma25?: number;
27
+ bollUb?: number;
28
+ bollLb?: number;
29
+ }[];
30
+ declare type ResAllMa = {
31
+ c: number;
32
+ ma5?: number;
33
+ ma10?: number;
34
+ ma20?: number;
35
+ ma25?: number;
36
+ ma60?: number;
37
+ bollUb?: number;
38
+ bollLb?: number;
39
+ }[];
40
+ interface MaType {
41
+ getAllMa: (list: ListType) => ResAllMa;
42
+ getMa5: (list: ListType) => ResMa5;
43
+ getMa10: (list: ListType) => ResMa10;
44
+ getMa20: (list: ListType) => ResMa20;
45
+ getMa60: (list: ListType) => ResMa60;
46
+ getMaSelf: (list: ListType, self: number) => ResMaSelf;
47
+ getBoll: (list: ListType) => ResBoll;
48
+ }
49
+ export default class Ma implements MaType {
50
+ getAllMa(list: ListType): ResAllMa;
51
+ getMa5(list: ListType): ResMa5;
52
+ getMa10(list: ListType): ResMa10;
53
+ getMa20(list: ListType): ResMa20;
54
+ getMa60(list: ListType): ResMa60;
55
+ getMaSelf(list: ListType, self: number): ResMaSelf;
56
+ getBoll(list: ListType): ResBoll;
57
+ }
58
+ export {};
@@ -0,0 +1,167 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var Ma = /** @class */ (function () {
13
+ function Ma() {
14
+ }
15
+ Object.defineProperty(Ma.prototype, "getAllMa", {
16
+ enumerable: false,
17
+ configurable: true,
18
+ writable: true,
19
+ value: function (list) {
20
+ var res = [];
21
+ var responseMa5 = this.getMa5(list);
22
+ var responseMa10 = this.getMa10(list);
23
+ var responseMa20 = this.getMa20(list);
24
+ var responseMa60 = this.getMa60(list);
25
+ var responseBoll = this.getBoll(list);
26
+ for (var i = 0; i < list.length; i++) {
27
+ res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseMa60[i], responseBoll[i]);
28
+ }
29
+ return res;
30
+ }
31
+ });
32
+ Object.defineProperty(Ma.prototype, "getMa5", {
33
+ enumerable: false,
34
+ configurable: true,
35
+ writable: true,
36
+ value: function (list) {
37
+ var res = [];
38
+ for (var i = 0; i < list.length; i++) {
39
+ if (i < 4)
40
+ res[i] = __assign(__assign({}, list[i]), { ma5: undefined });
41
+ else {
42
+ var sum = list
43
+ .slice(i - 4, i + 1)
44
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
45
+ var ma5 = Math.round((sum / 5) * 100) / 100;
46
+ res[i] = __assign(__assign({}, list[i]), { ma5: ma5 });
47
+ }
48
+ }
49
+ return res;
50
+ }
51
+ });
52
+ Object.defineProperty(Ma.prototype, "getMa10", {
53
+ enumerable: false,
54
+ configurable: true,
55
+ writable: true,
56
+ value: function (list) {
57
+ var res = [];
58
+ for (var i = 0; i < list.length; i++) {
59
+ if (i < 9)
60
+ res[i] = __assign(__assign({}, list[i]), { ma10: undefined });
61
+ else {
62
+ var sum = list
63
+ .slice(i - 9, i + 1)
64
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
65
+ var ma10 = Math.round((sum / 10) * 100) / 100;
66
+ res[i] = __assign(__assign({}, list[i]), { ma10: ma10 });
67
+ }
68
+ }
69
+ return res;
70
+ }
71
+ });
72
+ Object.defineProperty(Ma.prototype, "getMa20", {
73
+ enumerable: false,
74
+ configurable: true,
75
+ writable: true,
76
+ value: function (list) {
77
+ var res = [];
78
+ for (var i = 0; i < list.length; i++) {
79
+ if (i < 19)
80
+ res[i] = __assign(__assign({}, list[i]), { ma20: undefined });
81
+ else {
82
+ var sum = list
83
+ .slice(i - 19, i + 1)
84
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
85
+ var ma20 = Math.round((sum / 20) * 100) / 100;
86
+ res[i] = __assign(__assign({}, list[i]), { ma20: ma20 });
87
+ }
88
+ }
89
+ return res;
90
+ }
91
+ });
92
+ Object.defineProperty(Ma.prototype, "getMa60", {
93
+ enumerable: false,
94
+ configurable: true,
95
+ writable: true,
96
+ value: function (list) {
97
+ var res = [];
98
+ for (var i = 0; i < list.length; i++) {
99
+ if (i < 59)
100
+ res[i] = __assign(__assign({}, list[i]), { ma60: undefined });
101
+ else {
102
+ var sum = list
103
+ .slice(i - 59, i + 1)
104
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
105
+ var ma60 = Math.round((sum / 60) * 100) / 100;
106
+ res[i] = __assign(__assign({}, list[i]), { ma60: ma60 });
107
+ }
108
+ }
109
+ return res;
110
+ }
111
+ });
112
+ Object.defineProperty(Ma.prototype, "getMaSelf", {
113
+ enumerable: false,
114
+ configurable: true,
115
+ writable: true,
116
+ value: function (list, self) {
117
+ var res = [];
118
+ for (var i = 0; i < list.length; i++) {
119
+ if (i < (self - 1))
120
+ res[i] = __assign(__assign({}, list[i]), { maSelf: undefined });
121
+ else {
122
+ var sum = list
123
+ .slice(i - (self - 1), i + 1)
124
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
125
+ var maSelf = Math.round((sum / self) * 100) / 100;
126
+ res[i] = __assign(__assign({}, list[i]), { maSelf: maSelf });
127
+ }
128
+ }
129
+ return res;
130
+ }
131
+ });
132
+ Object.defineProperty(Ma.prototype, "getBoll", {
133
+ enumerable: false,
134
+ configurable: true,
135
+ writable: true,
136
+ value: function (list) {
137
+ var res = [];
138
+ var _loop_1 = function (i) {
139
+ if (i < 24)
140
+ res[i] = __assign(__assign({}, list[i]), { ma25: undefined, bollUb: undefined, bollLb: undefined });
141
+ else {
142
+ // ma25
143
+ var sumMa25 = list
144
+ .slice(i - 24, i + 1)
145
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
146
+ var ma25_1 = Math.round((sumMa25 / 25) * 100) / 100;
147
+ // 標準差
148
+ var sumBase = res
149
+ .slice(i - 24, i + 1)
150
+ .reduce(function (pre, current) {
151
+ return ma25_1 !== undefined
152
+ ? pre + Math.pow(current.c - ma25_1, 2)
153
+ : pre;
154
+ }, 0);
155
+ var base = Math.round(Math.sqrt(sumBase / 25) * 100) / 100;
156
+ res[i] = __assign(__assign({}, list[i]), { ma25: ma25_1, bollUb: ma25_1 + 2 * base, bollLb: ma25_1 - 2 * base });
157
+ }
158
+ };
159
+ for (var i = 0; i < list.length; i++) {
160
+ _loop_1(i);
161
+ }
162
+ return res;
163
+ }
164
+ });
165
+ return Ma;
166
+ }());
167
+ export default Ma;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,96 @@
1
+ import Ma from "./ma";
2
+ import data from "./test_data.test";
3
+ describe("test ma methods", function () {
4
+ it("test getMa5()", function () {
5
+ var ma = new Ma();
6
+ expect(ma.getMa5(data)[data.length - 1]).toEqual({
7
+ c: 142,
8
+ o: 138,
9
+ t: 20211214,
10
+ v: 16841,
11
+ h: 143,
12
+ l: 138,
13
+ ma5: 141.1,
14
+ });
15
+ });
16
+ it("test getMa10()", function () {
17
+ var ma = new Ma();
18
+ expect(ma.getMa10(data)[data.length - 1]).toEqual({
19
+ c: 142,
20
+ o: 138,
21
+ t: 20211214,
22
+ v: 16841,
23
+ h: 143,
24
+ l: 138,
25
+ ma10: 146.7,
26
+ });
27
+ });
28
+ it("test getMa20()", function () {
29
+ var ma = new Ma();
30
+ expect(ma.getMa20(data)[data.length - 1]).toEqual({
31
+ c: 142,
32
+ o: 138,
33
+ t: 20211214,
34
+ v: 16841,
35
+ h: 143,
36
+ l: 138,
37
+ ma20: 144.88,
38
+ });
39
+ });
40
+ it("test getMa60()", function () {
41
+ var ma = new Ma();
42
+ expect(ma.getMa60(data)[data.length - 1]).toEqual({
43
+ c: 142,
44
+ o: 138,
45
+ t: 20211214,
46
+ v: 16841,
47
+ h: 143,
48
+ l: 138,
49
+ ma60: 134.86,
50
+ });
51
+ });
52
+ it("test getMaSelf()", function () {
53
+ var ma = new Ma();
54
+ expect(ma.getMaSelf(data, 20)[data.length - 1]).toEqual({
55
+ c: 142,
56
+ o: 138,
57
+ t: 20211214,
58
+ v: 16841,
59
+ h: 143,
60
+ l: 138,
61
+ maSelf: 144.88,
62
+ });
63
+ });
64
+ it("test getBoll()", function () {
65
+ var ma = new Ma();
66
+ expect(ma.getBoll(data)[data.length - 1]).toEqual({
67
+ c: 142,
68
+ o: 138,
69
+ t: 20211214,
70
+ v: 16841,
71
+ h: 143,
72
+ l: 138,
73
+ ma25: 142.66,
74
+ bollLb: 126.69999999999999,
75
+ bollUb: 158.62,
76
+ });
77
+ });
78
+ it("test getAllMa()", function () {
79
+ var ma = new Ma();
80
+ expect(ma.getAllMa(data)[data.length - 1]).toEqual({
81
+ t: 20211214,
82
+ o: 138,
83
+ h: 143,
84
+ l: 138,
85
+ c: 142,
86
+ v: 16841,
87
+ ma5: 141.1,
88
+ ma10: 146.7,
89
+ ma20: 144.88,
90
+ ma60: 134.86,
91
+ ma25: 142.66,
92
+ bollUb: 158.62,
93
+ bollLb: 126.69999999999999,
94
+ });
95
+ });
96
+ });
@@ -0,0 +1,59 @@
1
+ declare type ItemType = {
2
+ h: number;
3
+ l: number;
4
+ c: number;
5
+ };
6
+ declare type ResEMA12Type = {
7
+ h: number;
8
+ l: number;
9
+ c: number;
10
+ EMA12?: number;
11
+ }[];
12
+ declare type ResEMA26Type = {
13
+ h: number;
14
+ l: number;
15
+ c: number;
16
+ EMA26?: number;
17
+ }[];
18
+ declare type ResDifType = {
19
+ h: number;
20
+ l: number;
21
+ c: number;
22
+ DIF?: number;
23
+ }[];
24
+ declare type ResMacd9Type = {
25
+ h: number;
26
+ l: number;
27
+ c: number;
28
+ MACD9?: number;
29
+ OSC?: number;
30
+ }[];
31
+ declare type ResAllMacdType = {
32
+ h: number;
33
+ l: number;
34
+ c: number;
35
+ EMA12?: number;
36
+ EMA26?: number;
37
+ DIF?: number;
38
+ MACD9?: number;
39
+ OSC?: number;
40
+ }[];
41
+ interface MacdType {
42
+ getMACD: (list: ItemType[]) => ResAllMacdType;
43
+ getDI: (item: ItemType) => number;
44
+ getStartEMA: (list: ItemType[]) => number;
45
+ getEMA12: (list: ItemType[]) => ResEMA12Type;
46
+ getEMA26: (list: ItemType[]) => ResEMA26Type;
47
+ getDIF: (list: ItemType[], ResEMA12: ResEMA12Type, ResEMA26: ResEMA26Type) => ResDifType;
48
+ getMACD9: (list: ItemType[], DIF: ResDifType) => ResMacd9Type;
49
+ }
50
+ export default class MACD implements MacdType {
51
+ getMACD(list: ItemType[]): ResAllMacdType;
52
+ getDI(item: ItemType): number;
53
+ getStartEMA(arr: ItemType[]): number;
54
+ getEMA12(list: ItemType[]): ResEMA12Type;
55
+ getEMA26(list: ItemType[]): ResEMA26Type;
56
+ getDIF(list: ItemType[], ResEMA12: ResEMA12Type, ResEMA26: ResEMA26Type): ResDifType;
57
+ getMACD9(list: ItemType[], DIF: ResDifType): ResMacd9Type;
58
+ }
59
+ export {};
@@ -0,0 +1,142 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var MACD = /** @class */ (function () {
13
+ function MACD() {
14
+ }
15
+ Object.defineProperty(MACD.prototype, "getMACD", {
16
+ enumerable: false,
17
+ configurable: true,
18
+ writable: true,
19
+ value: function (list) {
20
+ // 首筆RSI
21
+ var res = [];
22
+ var EMA12 = this.getEMA12(list);
23
+ var EMA26 = this.getEMA26(list);
24
+ var DIF = this.getDIF(list, EMA12, EMA26);
25
+ var MACD9 = this.getMACD9(list, DIF);
26
+ for (var i = 0; i < list.length; i++) {
27
+ res[i] = Object.assign(list[i], DIF[i], MACD9[i]);
28
+ }
29
+ return res;
30
+ }
31
+ });
32
+ Object.defineProperty(MACD.prototype, "getDI", {
33
+ enumerable: false,
34
+ configurable: true,
35
+ writable: true,
36
+ value: function (item) {
37
+ return (item["h"] + item["l"] + 2 * item["c"]) / 4;
38
+ }
39
+ });
40
+ Object.defineProperty(MACD.prototype, "getStartEMA", {
41
+ enumerable: false,
42
+ configurable: true,
43
+ writable: true,
44
+ value: function (arr) {
45
+ var _this = this;
46
+ var sum = 0;
47
+ arr.forEach(function (item) {
48
+ var DI = _this.getDI(item);
49
+ sum += DI;
50
+ });
51
+ return sum / arr.length;
52
+ }
53
+ });
54
+ Object.defineProperty(MACD.prototype, "getEMA12", {
55
+ enumerable: false,
56
+ configurable: true,
57
+ writable: true,
58
+ value: function (list) {
59
+ var start = list.slice(0, 11);
60
+ var beforeEMA12 = this.getStartEMA(start);
61
+ var res = [];
62
+ for (var i = 0; i < list.length; i++) {
63
+ if (i < 12)
64
+ res[i] = __assign(__assign({}, list[i]), { EMA12: undefined });
65
+ else {
66
+ beforeEMA12 = (beforeEMA12 * 11) / 13 + (this.getDI(list[i]) * 2) / 13;
67
+ res[i] = __assign(__assign({}, list[i]), { EMA12: beforeEMA12 });
68
+ }
69
+ }
70
+ return res;
71
+ }
72
+ });
73
+ Object.defineProperty(MACD.prototype, "getEMA26", {
74
+ enumerable: false,
75
+ configurable: true,
76
+ writable: true,
77
+ value: function (list) {
78
+ var start = list.slice(0, 25);
79
+ var beforeEMA26 = this.getStartEMA(start);
80
+ var res = [];
81
+ for (var i = 0; i < list.length; i++) {
82
+ if (i < 26)
83
+ res[i] = __assign(__assign({}, list[i]), { EMA26: undefined });
84
+ else {
85
+ beforeEMA26 = (beforeEMA26 * 25) / 27 + (this.getDI(list[i]) * 2) / 27;
86
+ res[i] = __assign(__assign({}, list[i]), { EMA26: beforeEMA26 });
87
+ }
88
+ }
89
+ return res;
90
+ }
91
+ });
92
+ Object.defineProperty(MACD.prototype, "getDIF", {
93
+ enumerable: false,
94
+ configurable: true,
95
+ writable: true,
96
+ value: function (list, ResEMA12, ResEMA26) {
97
+ var _a, _b;
98
+ var res = [];
99
+ for (var i = 0; i < list.length; i++) {
100
+ if (i < 26)
101
+ res[i] = __assign(__assign({}, list[i]), { DIF: undefined });
102
+ else {
103
+ var EMA12 = ((_a = ResEMA12 === null || ResEMA12 === void 0 ? void 0 : ResEMA12[i]) === null || _a === void 0 ? void 0 : _a["EMA12"]) && ResEMA12[i]["EMA12"];
104
+ var EMA26 = ((_b = ResEMA26 === null || ResEMA26 === void 0 ? void 0 : ResEMA26[i]) === null || _b === void 0 ? void 0 : _b["EMA26"]) && ResEMA26[i]["EMA26"];
105
+ var DIF = EMA12 - EMA26;
106
+ res[i] = __assign(__assign({}, list[i]), { DIF: DIF });
107
+ }
108
+ }
109
+ return res;
110
+ }
111
+ });
112
+ Object.defineProperty(MACD.prototype, "getMACD9", {
113
+ enumerable: false,
114
+ configurable: true,
115
+ writable: true,
116
+ value: function (list, DIF) {
117
+ var res = [];
118
+ var beforeMACD9 = 0;
119
+ for (var i = 0; i < list.length; i++) {
120
+ if (i < 26)
121
+ res[i] = __assign(__assign({}, list[i]), { MACD9: undefined, OSC: undefined });
122
+ else if (i === 26) {
123
+ var MACD9 = DIF.slice(26, 34)
124
+ .map(function (item) { return ((item === null || item === void 0 ? void 0 : item.DIF) ? item["DIF"] : 0); })
125
+ .reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
126
+ var OSC = DIF[i]["DIF"] - MACD9;
127
+ res[26] = __assign(__assign({}, list[i]), { MACD9: MACD9, OSC: OSC });
128
+ beforeMACD9 = MACD9;
129
+ }
130
+ else {
131
+ var MACD9 = beforeMACD9 + ((DIF[i]["DIF"] - beforeMACD9) * 2) / 10;
132
+ var OSC = DIF[i]["DIF"] - MACD9;
133
+ res[i] = __assign(__assign({}, list[i]), { MACD9: MACD9, OSC: OSC });
134
+ beforeMACD9 = MACD9;
135
+ }
136
+ }
137
+ return res;
138
+ }
139
+ });
140
+ return MACD;
141
+ }());
142
+ export default MACD;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,72 @@
1
+ import Macd from "./macd";
2
+ import data from "./test_data.test";
3
+ describe("test macd methods", function () {
4
+ it("test getEMA12()", function () {
5
+ var macd = new Macd();
6
+ expect(macd.getEMA12(data)[data.length - 1]).toEqual({
7
+ c: 142,
8
+ o: 138,
9
+ t: 20211214,
10
+ v: 16841,
11
+ h: 143,
12
+ l: 138,
13
+ EMA12: 144.01967137166324,
14
+ });
15
+ });
16
+ it("test getEMA26()", function () {
17
+ var macd = new Macd();
18
+ expect(macd.getEMA26(data)[data.length - 1]).toEqual({
19
+ c: 142,
20
+ o: 138,
21
+ t: 20211214,
22
+ v: 16841,
23
+ h: 143,
24
+ l: 138,
25
+ EMA26: 142.2290771028552,
26
+ });
27
+ });
28
+ it("test getDIF()", function () {
29
+ var macd = new Macd();
30
+ var Ema26 = macd.getEMA26(data);
31
+ var Ema12 = macd.getEMA12(data);
32
+ expect(macd.getDIF(data, Ema12, Ema26)[data.length - 1]).toEqual({
33
+ c: 142,
34
+ o: 138,
35
+ t: 20211214,
36
+ v: 16841,
37
+ h: 143,
38
+ l: 138,
39
+ DIF: 1.7905942688080358,
40
+ });
41
+ });
42
+ it("test getMACD9()", function () {
43
+ var macd = new Macd();
44
+ var Ema26 = macd.getEMA26(data);
45
+ var Ema12 = macd.getEMA12(data);
46
+ var Dif = macd.getDIF(data, Ema12, Ema26);
47
+ expect(macd.getMACD9(data, Dif)[data.length - 1]).toEqual({
48
+ c: 142,
49
+ o: 138,
50
+ t: 20211214,
51
+ v: 16841,
52
+ h: 143,
53
+ l: 138,
54
+ MACD9: 3.461688641153529,
55
+ OSC: -1.6710943723454932,
56
+ });
57
+ });
58
+ it("test getMACD()", function () {
59
+ var macd = new Macd();
60
+ expect(macd.getMACD(data)[data.length - 1]).toEqual({
61
+ c: 142,
62
+ o: 138,
63
+ t: 20211214,
64
+ v: 16841,
65
+ h: 143,
66
+ l: 138,
67
+ DIF: 1.7905942688080358,
68
+ MACD9: 3.461688641153529,
69
+ OSC: -1.6710943723454932,
70
+ });
71
+ });
72
+ });
@@ -0,0 +1,32 @@
1
+ declare type ListType = {
2
+ c: number;
3
+ }[];
4
+ declare type ResRsi6Type = {
5
+ c: number;
6
+ rsi6?: number;
7
+ }[];
8
+ declare type ResRsi12Type = {
9
+ c: number;
10
+ rsi12?: number;
11
+ }[];
12
+ declare type ResAllRsiType = {
13
+ c: number;
14
+ rsi6?: number;
15
+ rsi12?: number;
16
+ }[];
17
+ interface RsiType {
18
+ getRsi6: (list: ListType) => ResRsi6Type;
19
+ getRsi12: (list: ListType) => ResRsi12Type;
20
+ getStartUpAvg: (list: ListType, count: number) => number;
21
+ getStartDownAvg: (list: ListType, count: number) => number;
22
+ getRsi: (UpAvg: number, DownAvg: number) => number;
23
+ }
24
+ export default class Rsi implements RsiType {
25
+ getAllRsi(list: ListType): ResAllRsiType;
26
+ getRsi6(list: ListType): ResRsi6Type;
27
+ getRsi12(list: ListType): ResRsi12Type;
28
+ getStartUpAvg(list: ListType, count: number): number;
29
+ getStartDownAvg(list: ListType, count: number): number;
30
+ getRsi(UpAvg: number, DownAvg: number): number;
31
+ }
32
+ export {};