@ch20026103/anysis 0.0.13-alpha → 0.0.15-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 (33) hide show
  1. package/demo/main.js +13 -9
  2. package/dist/cjs/analyze/SwingExtremes/index.d.ts +3 -3
  3. package/dist/cjs/analyze/SwingExtremes/index.js +60 -19
  4. package/dist/cjs/analyze/SwingExtremes/index.test.js +1 -1
  5. package/dist/cjs/index.d.ts +3 -1
  6. package/dist/cjs/index.js +2 -2
  7. package/dist/cjs/stockSkills/boll.d.ts +4 -4
  8. package/dist/cjs/stockSkills/ema.d.ts +32 -0
  9. package/dist/cjs/stockSkills/ema.js +38 -0
  10. package/dist/cjs/stockSkills/ema.test.js +11 -0
  11. package/dist/cjs/stockSkills/gold.d.ts +12 -11
  12. package/dist/cjs/stockSkills/gold.js +1 -14
  13. package/dist/cjs/stockSkills/gold.test.js +8 -10
  14. package/dist/cjs/stockSkills/rsi.d.ts +26 -29
  15. package/dist/cjs/stockSkills/rsi.js +79 -101
  16. package/dist/cjs/stockSkills/rsi.test.js +9 -20
  17. package/dist/esm/analyze/SwingExtremes/index.d.ts +3 -3
  18. package/dist/esm/analyze/SwingExtremes/index.js +60 -19
  19. package/dist/esm/analyze/SwingExtremes/index.test.js +1 -1
  20. package/dist/esm/index.d.ts +3 -1
  21. package/dist/esm/index.js +1 -1
  22. package/dist/esm/stockSkills/boll.d.ts +4 -4
  23. package/dist/esm/stockSkills/ema.d.ts +32 -0
  24. package/dist/esm/stockSkills/ema.js +38 -0
  25. package/dist/esm/stockSkills/ema.test.js +11 -0
  26. package/dist/esm/stockSkills/gold.d.ts +12 -11
  27. package/dist/esm/stockSkills/gold.js +1 -14
  28. package/dist/esm/stockSkills/gold.test.js +8 -10
  29. package/dist/esm/stockSkills/rsi.d.ts +26 -29
  30. package/dist/esm/stockSkills/rsi.js +79 -101
  31. package/dist/esm/stockSkills/rsi.test.js +9 -20
  32. package/dist/umd/index.js +178 -134
  33. package/package.json +1 -1
package/demo/main.js CHANGED
@@ -1,7 +1,12 @@
1
1
  /* eslint @typescript-eslint/no-var-requires: "off" */
2
2
  const axios = require("axios");
3
- const { Williams } = require("../dist/cjs/index.js");
4
- const williams = new Williams();
3
+ const {
4
+ Rsi,
5
+ } = require("../dist/cjs/index.js");
6
+
7
+
8
+ // 使用示例
9
+ const rsi = new Rsi();
5
10
  function DemoDay(stockId) {
6
11
  axios
7
12
  .get(
@@ -11,14 +16,13 @@ function DemoDay(stockId) {
11
16
  res = res.data.replace(/^\(|\);$/g, "");
12
17
  let parse = JSON.parse(res);
13
18
  let data = parse.ta;
14
- let williams9Data = williams.init(data[0], 9);
15
- let williams18Data = williams.init(data[0], 18);
19
+ const rsis = rsi.calculateRSI(data, 5);
20
+ let rsi5Data = rsi.init(data[0],5);
16
21
  for (let i = 1; i < data.length; i++) {
17
- williams9Data = williams.next(data[i], williams9Data, 9);
18
- williams18Data = williams.next(data[i], williams18Data, 18);
22
+ rsi5Data = rsi.next(data[i], rsi5Data, 5);
19
23
  }
20
- console.log(williams9Data);
21
- console.log(williams18Data);
24
+ console.log("rsi", rsis[rsis.length - 2]);
25
+ console.log("rsi", rsi5Data);
22
26
  })
23
27
  .catch((error) => {
24
28
  console.error(error);
@@ -28,4 +32,4 @@ function DemoDay(stockId) {
28
32
  });
29
33
  }
30
34
 
31
- DemoDay("2449");
35
+ DemoDay("2385");
@@ -3,7 +3,7 @@ export declare enum SwingExtremesType {
3
3
  Trough = "Trough"
4
4
  }
5
5
  type Index = number;
6
- export declare function findPeaksByGradient(prices: number[]): Index[];
7
- export declare function findTroughByGradient(prices: number[]): Index[];
8
- export declare function SwingExtremes(y: number[], type: SwingExtremesType): Index[];
6
+ export declare function findPeaksByGradient(prices: number[], level?: number): Index[];
7
+ export declare function findTroughByGradient(prices: number[], level?: number): Index[];
8
+ export declare function SwingExtremes(y: number[], type: SwingExtremesType, level?: number): Index[];
9
9
  export {};
@@ -6,56 +6,97 @@ var SwingExtremesType;
6
6
  SwingExtremesType["Peak"] = "Peak";
7
7
  SwingExtremesType["Trough"] = "Trough";
8
8
  })(SwingExtremesType = exports.SwingExtremesType || (exports.SwingExtremesType = {}));
9
- function findPeaksByGradient(prices) {
9
+ function findPeaksByGradient(prices, level) {
10
+ if (level === void 0) { level = 1; }
10
11
  var peaks = [];
11
12
  for (var i = 1; i < prices.length - 1; i++) {
12
- var prevGradient = prices[i] - prices[i - 1];
13
- var nextGradient = prices[i + 1] - prices[i];
14
- if (prevGradient > 0 && nextGradient < 0) {
15
- peaks.push(i);
13
+ if (level === 1) {
14
+ var prevGradient = prices[i] - prices[i - 1];
15
+ var nextGradient = prices[i + 1] - prices[i];
16
+ if (prevGradient > 0 && nextGradient < 0) {
17
+ peaks.push(i);
18
+ }
19
+ }
20
+ else if (level === 2) {
21
+ var prevGradient = prices[i] - prices[i - 1];
22
+ var prev2Gradient = prices[i] - prices[i - 2];
23
+ var nextGradient = prices[i + 1] - prices[i];
24
+ var next2Gradient = prices[i + 2] - prices[i];
25
+ if (prevGradient > 0 &&
26
+ prev2Gradient > 0 &&
27
+ nextGradient < 0 &&
28
+ next2Gradient < 0) {
29
+ peaks.push(i);
30
+ }
16
31
  }
17
32
  }
18
33
  return peaks;
19
34
  }
20
35
  exports.findPeaksByGradient = findPeaksByGradient;
21
- function findTroughByGradient(prices) {
22
- var peaks = [];
36
+ function findTroughByGradient(prices, level) {
37
+ if (level === void 0) { level = 1; }
38
+ var troughs = [];
23
39
  for (var i = 1; i < prices.length - 1; i++) {
24
- var prevGradient = prices[i] - prices[i - 1];
25
- var nextGradient = prices[i + 1] - prices[i];
26
- if (prevGradient < 0 && nextGradient > 0) {
27
- peaks.push(i);
40
+ if (level === 1) {
41
+ var prevGradient = prices[i] - prices[i - 1];
42
+ var nextGradient = prices[i + 1] - prices[i];
43
+ if (prevGradient < 0 && nextGradient > 0) {
44
+ troughs.push(i);
45
+ }
46
+ }
47
+ else if (level === 2) {
48
+ var prevGradient = prices[i] - prices[i - 1];
49
+ var prev2Gradient = prices[i] - prices[i - 2];
50
+ var nextGradient = prices[i + 1] - prices[i];
51
+ var next2Gradient = prices[i + 2] - prices[i];
52
+ if (prevGradient < 0 &&
53
+ prev2Gradient < 0 &&
54
+ nextGradient > 0 &&
55
+ next2Gradient > 0) {
56
+ troughs.push(i);
57
+ }
28
58
  }
29
59
  }
30
- return peaks;
60
+ return troughs;
31
61
  }
32
62
  exports.findTroughByGradient = findTroughByGradient;
33
- function SwingExtremes(y, type) {
63
+ function SwingExtremes(y, type, level) {
64
+ if (level === void 0) { level = 1; }
34
65
  if (type === SwingExtremesType.Peak) {
35
66
  var result = [];
36
- var indexs = findPeaksByGradient(y);
67
+ var indexs = findPeaksByGradient(y, level);
37
68
  result.push(indexs[0]);
38
69
  for (var i = 1; i < indexs.length; i++) {
39
- if (y[indexs[i]] > y[result[result.length - 1]]) {
70
+ if (y[indexs[i]] > y[result[result.length - 1]] &&
71
+ y[indexs[i]] > y[result[result.length - 2]]) {
40
72
  result[result.length - 1] = indexs[i];
41
73
  }
42
- else {
74
+ else if (y[indexs[i + 1]] < y[i] &&
75
+ y[indexs[i]] > y[result[result.length - 1]]) {
76
+ result.pop();
43
77
  result.push(indexs[i]);
44
78
  }
79
+ else
80
+ result.push(indexs[i]);
45
81
  }
46
82
  return result;
47
83
  }
48
84
  if (type === SwingExtremesType.Trough) {
49
85
  var result = [];
50
- var indexs = findTroughByGradient(y);
86
+ var indexs = findTroughByGradient(y, level);
51
87
  result.push(indexs[0]);
52
88
  for (var i = 1; i < indexs.length; i++) {
53
- if (y[indexs[i]] < y[result[result.length - 1]]) {
89
+ if (y[indexs[i]] < y[result[result.length - 1]] &&
90
+ y[indexs[i]] < y[result[result.length - 2]]) {
54
91
  result[result.length - 1] = indexs[i];
55
92
  }
56
- else {
93
+ else if (y[indexs[i + 1]] > y[i] &&
94
+ y[indexs[i]] < y[result[result.length - 1]]) {
95
+ result.pop();
57
96
  result.push(indexs[i]);
58
97
  }
98
+ else
99
+ result.push(indexs[i]);
59
100
  }
60
101
  return result;
61
102
  }
@@ -17,7 +17,7 @@ describe("test SwingExtremes", function () {
17
17
  });
18
18
  it("test SwingExtremes Peak", function () {
19
19
  var res = (0, index_1.SwingExtremes)(prices, index_1.SwingExtremesType.Peak);
20
- expect(res).toEqual([6, 10, 13]);
20
+ expect(res).toEqual([1, 6, 10, 13]);
21
21
  });
22
22
  it("test SwingExtremes Trough", function () {
23
23
  var res = (0, index_1.SwingExtremes)(prices, index_1.SwingExtremesType.Trough);
@@ -1,12 +1,14 @@
1
1
  export { default as Angle } from "./analyze/Angle/index.js";
2
2
  export { default as simpleRegressionModel } from "./analyze/Regression/simpleRegressoinModel.js";
3
3
  export { default as slope } from "./analyze/Slope/index.js";
4
- export { SwingExtremes, findPeaksByGradient, findTroughByGradient, SwingExtremesType, } from "./analyze/SwingExtremes/index.js";
4
+ export { SwingExtremes, SwingExtremesType, findPeaksByGradient, findTroughByGradient, } from "./analyze/SwingExtremes/index.js";
5
5
  export { exponentialSmoothing, movingAverages, weightMovingAverages, } from "./analyze/TimeSeries/R/index.js";
6
6
  export { calcSeasonalIndicesNoTrend } from "./analyze/TimeSeries/RS/index.js";
7
7
  export { default as Boll } from "./stockSkills/boll.js";
8
+ export type { BollResType } from "./stockSkills/boll.js";
8
9
  export { default as Ema } from "./stockSkills/ema.js";
9
10
  export { default as Gold } from "./stockSkills/gold.js";
11
+ export type { GetGoldResType } from "./stockSkills/gold.js";
10
12
  export { default as Kd } from "./stockSkills/kd.js";
11
13
  export { default as Ma } from "./stockSkills/ma.js";
12
14
  export { default as Macd } from "./stockSkills/macd.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.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.SwingExtremesType = exports.findTroughByGradient = exports.findPeaksByGradient = exports.SwingExtremes = exports.slope = exports.simpleRegressionModel = exports.Angle = 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.findTroughByGradient = exports.findPeaksByGradient = exports.SwingExtremesType = exports.SwingExtremes = exports.slope = exports.simpleRegressionModel = exports.Angle = void 0;
4
4
  /*
5
5
  請注意,在 src/index.ts 中,我的導入包含文件擴展名(.js)。
6
6
  如果需要支持 Node.js 和構建工具(ex: webpack),則不需要這樣做。 **因為commonJs默認js副檔名**
@@ -14,9 +14,9 @@ var index_js_2 = require("./analyze/Slope/index.js");
14
14
  Object.defineProperty(exports, "slope", { enumerable: true, get: function () { return index_js_2.default; } });
15
15
  var index_js_3 = require("./analyze/SwingExtremes/index.js");
16
16
  Object.defineProperty(exports, "SwingExtremes", { enumerable: true, get: function () { return index_js_3.SwingExtremes; } });
17
+ Object.defineProperty(exports, "SwingExtremesType", { enumerable: true, get: function () { return index_js_3.SwingExtremesType; } });
17
18
  Object.defineProperty(exports, "findPeaksByGradient", { enumerable: true, get: function () { return index_js_3.findPeaksByGradient; } });
18
19
  Object.defineProperty(exports, "findTroughByGradient", { enumerable: true, get: function () { return index_js_3.findTroughByGradient; } });
19
- Object.defineProperty(exports, "SwingExtremesType", { enumerable: true, get: function () { return index_js_3.SwingExtremesType; } });
20
20
  var index_js_4 = require("./analyze/TimeSeries/R/index.js");
21
21
  Object.defineProperty(exports, "exponentialSmoothing", { enumerable: true, get: function () { return index_js_4.exponentialSmoothing; } });
22
22
  Object.defineProperty(exports, "movingAverages", { enumerable: true, get: function () { return index_js_4.movingAverages; } });
@@ -3,8 +3,8 @@ type ItemType = {
3
3
  [key: string]: unknown;
4
4
  };
5
5
  type ListType = ItemType[];
6
- type ResBoll = {
7
- c: number;
6
+ export type BollResType = {
7
+ [key: string]: unknown;
8
8
  bollMa: number | null;
9
9
  bollUb: number | null;
10
10
  bollLb: number | null;
@@ -27,7 +27,7 @@ interface BollType {
27
27
  bollUb: number | null;
28
28
  bollLb: number | null;
29
29
  };
30
- getBoll: (list: ListType, type: number) => ResBoll;
30
+ getBoll: (list: ListType, type: number) => BollResType;
31
31
  }
32
32
  export default class Boll implements BollType {
33
33
  init(data: ItemType): {
@@ -54,6 +54,6 @@ export default class Boll implements BollType {
54
54
  bollUb: number;
55
55
  bollLb: number;
56
56
  };
57
- getBoll(list: ListType, type: number): ResBoll;
57
+ getBoll(list: ListType, type: number): BollResType;
58
58
  }
59
59
  export {};
@@ -1,8 +1,40 @@
1
+ type ItemType = {
2
+ c: number;
3
+ [key: string]: unknown;
4
+ };
5
+ type ListType = ItemType[];
1
6
  interface EmaType {
7
+ init: (data: ItemType, type: number) => {
8
+ dataset: ListType;
9
+ ema: number;
10
+ type: number;
11
+ };
12
+ next: (data: ItemType, preList: {
13
+ dataset: ListType;
14
+ ema: number;
15
+ type: number;
16
+ }, type: number) => {
17
+ dataset: ListType;
18
+ ema: number;
19
+ type: number;
20
+ };
2
21
  getStartEma: (list: number[], period: number) => number;
3
22
  getEma: (list: number[], period: number) => (number | null)[];
4
23
  }
5
24
  export default class Ema implements EmaType {
25
+ init(data: ItemType, type: number): {
26
+ dataset: ListType;
27
+ ema: number;
28
+ type: number;
29
+ };
30
+ next(data: ItemType, preList: {
31
+ dataset: ListType;
32
+ ema: number;
33
+ }, type: number): {
34
+ dataset: ListType;
35
+ ema: number;
36
+ type: number;
37
+ };
6
38
  getStartEma(list: number[], period: number): number;
7
39
  getEma(list: number[], period: number): (number | null)[];
8
40
  }
@@ -3,6 +3,44 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var Ema = /** @class */ (function () {
4
4
  function Ema() {
5
5
  }
6
+ Object.defineProperty(Ema.prototype, "init", {
7
+ enumerable: false,
8
+ configurable: true,
9
+ writable: true,
10
+ value: function (data, type) {
11
+ return { dataset: [data], ema: 0, type: type };
12
+ }
13
+ });
14
+ Object.defineProperty(Ema.prototype, "next", {
15
+ enumerable: false,
16
+ configurable: true,
17
+ writable: true,
18
+ value: function (data, preList, type) {
19
+ preList.dataset.push(data);
20
+ if (preList.dataset.length < type) {
21
+ return {
22
+ dataset: preList.dataset,
23
+ ema: 0,
24
+ type: type,
25
+ };
26
+ }
27
+ else if (preList.dataset.length === type) {
28
+ var sum = preList.dataset.reduce(function (pre, current) { return pre + current.c; }, 0);
29
+ return {
30
+ dataset: preList.dataset,
31
+ ema: sum / type,
32
+ type: type,
33
+ };
34
+ }
35
+ else {
36
+ if (preList.dataset.length > type) {
37
+ preList.dataset.shift();
38
+ }
39
+ var ema = (data.c * 2 + (type - 1) * preList.ema) / (type + 1);
40
+ return { dataset: preList.dataset, ema: ema, type: type };
41
+ }
42
+ }
43
+ });
6
44
  Object.defineProperty(Ema.prototype, "getStartEma", {
7
45
  enumerable: false,
8
46
  configurable: true,
@@ -3,6 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var ema_1 = require("./ema");
4
4
  var test_data_test_1 = require("./test_data.test");
5
5
  describe("test ema methods", function () {
6
+ it("test init & next", function () {
7
+ var index = test_data_test_1.default.length - 1;
8
+ var ema = new ema_1.default();
9
+ var init = ema.init(test_data_test_1.default[0], 5);
10
+ var res = init;
11
+ for (var i = 1; i <= index; i++) {
12
+ var item = test_data_test_1.default[i];
13
+ res = ema.next(item, res, 5);
14
+ }
15
+ expect(res.ema).toEqual(141.83482746491333);
16
+ });
6
17
  it("test getEma5()", function () {
7
18
  var ema = new ema_1.default();
8
19
  var res = ema.getEma(test_data_test_1.default.map(function (item) { return item.c; }), 5);
@@ -1,6 +1,4 @@
1
- type ResGoldType = {
2
- highestPointDate: number;
3
- lowestPointDate: number;
1
+ export type GetGoldResType = {
4
2
  lowestPoint: number;
5
3
  highestPoint: number;
6
4
  superStrong: number;
@@ -15,33 +13,36 @@ type ListType = {
15
13
  o: number;
16
14
  c: number;
17
15
  l: number;
16
+ [key: string]: unknown;
18
17
  }[];
19
- type ResHightestType = {
18
+ type FindHightestResType = {
20
19
  [key: string]: {
21
20
  h: number;
22
21
  t: number;
23
22
  o: number;
24
23
  c: number;
25
24
  l: number;
25
+ [key: string]: unknown;
26
26
  };
27
27
  };
28
- type ResLowestType = {
28
+ type FindLowestResType = {
29
29
  [key: string]: {
30
30
  h: number;
31
31
  t: number;
32
32
  o: number;
33
33
  c: number;
34
34
  l: number;
35
+ [key: string]: unknown;
35
36
  };
36
37
  };
37
38
  interface GoldType {
38
- findHighPoint: (list: ListType) => ResHightestType;
39
- findLowPoint: (list: ListType) => ResLowestType;
40
- getGold: (list: ListType) => ResGoldType;
39
+ findHighPoint: (list: ListType) => FindHightestResType;
40
+ findLowPoint: (list: ListType) => FindLowestResType;
41
+ getGold: (highestPoint: number, lowestPoint: number) => GetGoldResType;
41
42
  }
42
43
  export default class Gold implements GoldType {
43
- findHighPoint(list: ListType): ResHightestType;
44
- findLowPoint(list: ListType): ResLowestType;
45
- getGold(list: ListType): ResGoldType;
44
+ findHighPoint(list: ListType): FindHightestResType;
45
+ findLowPoint(list: ListType): FindLowestResType;
46
+ getGold(highestPoint: number, lowestPoint: number): GetGoldResType;
46
47
  }
47
48
  export {};
@@ -184,21 +184,8 @@ var Gold = /** @class */ (function () {
184
184
  enumerable: false,
185
185
  configurable: true,
186
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;
187
+ value: function (highestPoint, lowestPoint) {
199
188
  var res = {
200
- highestPointDate: parseInt(lastHightPointDate),
201
- lowestPointDate: parseInt(lastLowPointDate),
202
189
  lowestPoint: lowestPoint,
203
190
  highestPoint: highestPoint,
204
191
  superStrong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.191) * 100) / 100,
@@ -29,17 +29,15 @@ describe("test Gold methods", function () {
29
29
  });
30
30
  it("test getGold(", function () {
31
31
  var gold = new gold_1.default();
32
- var allGold = gold.getGold(test_data_test_1.default);
32
+ var allGold = gold.getGold(139, 89.1);
33
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,
34
+ lowestPoint: 89.1,
35
+ highestPoint: 139,
36
+ superStrong: 129.47,
37
+ strong: 119.94,
38
+ middle: 114.05,
39
+ weak: 108.16,
40
+ superWeak: 98.63,
43
41
  });
44
42
  });
45
43
  });
@@ -1,32 +1,29 @@
1
- type ListType = {
1
+ type DataType = {
2
2
  c: number;
3
- }[];
4
- type ResRsi6Type = {
5
- c: number;
6
- rsi6: number | null;
7
- }[];
8
- type ResRsi12Type = {
9
- c: number;
10
- rsi12: number | null;
11
- }[];
12
- type ResAllRsiType = {
13
- c: number;
14
- rsi6: number | null;
15
- rsi12: number | null;
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;
3
+ [key: string]: unknown;
4
+ };
5
+ type ListType = DataType[];
6
+ export default class Rsi {
7
+ init(data: DataType, type: number): {
8
+ dataset: DataType[];
9
+ rsi: number;
10
+ type: number;
11
+ avgGain: number;
12
+ avgLoss: number;
13
+ };
14
+ next(data: DataType, preList: {
15
+ dataset: ListType;
16
+ rsi: number;
17
+ type: number;
18
+ avgGain: number;
19
+ avgLoss: number;
20
+ }, type: number): {
21
+ rsi: number;
22
+ type: number;
23
+ avgGain: number;
24
+ avgLoss: number;
25
+ dataset: ListType;
26
+ };
27
+ calculateRSI(prices: ListType, period?: number): number[];
31
28
  }
32
29
  export {};