@ch20026103/anysis 0.0.2 → 0.0.3-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/umd/index.js CHANGED
@@ -81,6 +81,17 @@
81
81
  return response;
82
82
  }
83
83
 
84
+ function Slope(x, y) {
85
+ // 計算 x 和 y 的平均值
86
+ var x_mean = x.reduce(function (acc, cur) { return acc + cur; }) / x.length;
87
+ var y_mean = y.reduce(function (acc, cur) { return acc + cur; }) / y.length;
88
+ // 計算斜率
89
+ var numerator = x.reduce(function (acc, cur, i) { return acc + (cur - x_mean) * (y[i] - y_mean); }, 0);
90
+ var denominator = x.reduce(function (acc, cur) { return acc + Math.pow((cur - x_mean), 2); }, 0);
91
+ var slope = numerator / denominator;
92
+ return slope;
93
+ }
94
+
84
95
  function movingAverages(arr, periods) {
85
96
  var response = new Array(periods).fill(0);
86
97
  for (var i = periods; i < arr.length; i++) {
@@ -163,16 +174,8 @@
163
174
  return nextYearForecast;
164
175
  }
165
176
 
166
- function add(a, b) {
167
- return a + b;
168
- }
169
-
170
- function minus(a, b) {
171
- return a - b;
172
- }
173
-
174
- var __assign$4 = (undefined && undefined.__assign) || function () {
175
- __assign$4 = Object.assign || function(t) {
177
+ var __assign$5 = (undefined && undefined.__assign) || function () {
178
+ __assign$5 = Object.assign || function(t) {
176
179
  for (var s, i = 1, n = arguments.length; i < n; i++) {
177
180
  s = arguments[i];
178
181
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -180,485 +183,663 @@
180
183
  }
181
184
  return t;
182
185
  };
183
- return __assign$4.apply(this, arguments);
186
+ return __assign$5.apply(this, arguments);
184
187
  };
185
- var Ma = /** @class */ (function () {
186
- function Ma() {
187
- }
188
- Object.defineProperty(Ma.prototype, "getAllMa", {
189
- enumerable: false,
190
- configurable: true,
191
- writable: true,
192
- value: function (list) {
193
- var res = [];
194
- var responseMa5 = this.getMa5(list);
195
- var responseMa10 = this.getMa10(list);
196
- var responseMa20 = this.getMa20(list);
197
- var responseBoll = this.getBoll(list);
198
- for (var i = 0; i < list.length; i++) {
199
- res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseBoll[i]);
200
- }
201
- return res;
202
- }
203
- });
204
- Object.defineProperty(Ma.prototype, "getMa5", {
205
- enumerable: false,
206
- configurable: true,
207
- writable: true,
208
- value: function (list) {
209
- var res = [];
210
- for (var i = 0; i < list.length; i++) {
211
- if (i < 4)
212
- res[i] = __assign$4(__assign$4({}, list[i]), { ma5: undefined });
213
- else {
214
- var sum = list
215
- .slice(i - 4, i + 1)
216
- .reduce(function (pre, current) { return pre + current.c; }, 0);
217
- var ma5 = Math.round((sum / 5) * 100) / 100;
218
- res[i] = __assign$4(__assign$4({}, list[i]), { ma5: ma5 });
219
- }
188
+ function addDetail(obj, list, detail) {
189
+ if (detail)
190
+ return __assign$5(__assign$5({}, obj), { detail: list });
191
+ else
192
+ return __assign$5({}, obj);
193
+ }
194
+ function getWeekLine(list, detail) {
195
+ var res = [];
196
+ var collectWeekData = [];
197
+ list.forEach(function (item, index) {
198
+ var year = item["t"]
199
+ .toString()
200
+ .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3");
201
+ var day = new Date(year).getDay();
202
+ switch (day) {
203
+ case 6:
204
+ break;
205
+ case 5: {
206
+ collectWeekData.push(item);
207
+ var obj = {
208
+ o: collectWeekData[0]["o"],
209
+ c: collectWeekData[collectWeekData.length - 1]["c"],
210
+ t: collectWeekData[collectWeekData.length - 1]["t"],
211
+ h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
212
+ l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
213
+ };
214
+ res.push(addDetail(obj, collectWeekData, detail));
215
+ collectWeekData = [];
216
+ break;
220
217
  }
221
- return res;
222
- }
223
- });
224
- Object.defineProperty(Ma.prototype, "getMa10", {
225
- enumerable: false,
226
- configurable: true,
227
- writable: true,
228
- value: function (list) {
229
- var res = [];
230
- for (var i = 0; i < list.length; i++) {
231
- if (i < 9)
232
- res[i] = __assign$4(__assign$4({}, list[i]), { ma10: undefined });
233
- else {
234
- var sum = list
235
- .slice(i - 9, i + 1)
236
- .reduce(function (pre, current) { return pre + current.c; }, 0);
237
- var ma10 = Math.round((sum / 10) * 100) / 100;
238
- res[i] = __assign$4(__assign$4({}, list[i]), { ma10: ma10 });
218
+ case 1:
219
+ if (collectWeekData.length !== 0) {
220
+ var obj = {
221
+ o: collectWeekData[0]["o"],
222
+ c: collectWeekData[collectWeekData.length - 1]["c"],
223
+ t: collectWeekData[collectWeekData.length - 1]["t"],
224
+ h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
225
+ l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
226
+ };
227
+ res.push(addDetail(obj, collectWeekData, detail));
239
228
  }
240
- }
241
- return res;
242
- }
243
- });
244
- Object.defineProperty(Ma.prototype, "getMa20", {
245
- enumerable: false,
246
- configurable: true,
247
- writable: true,
248
- value: function (list) {
249
- var res = [];
250
- for (var i = 0; i < list.length; i++) {
251
- if (i < 19)
252
- res[i] = __assign$4(__assign$4({}, list[i]), { ma20: undefined });
253
- else {
254
- var sum = list
255
- .slice(i - 19, i + 1)
256
- .reduce(function (pre, current) { return pre + current.c; }, 0);
257
- var ma20 = Math.round((sum / 20) * 100) / 100;
258
- res[i] = __assign$4(__assign$4({}, list[i]), { ma20: ma20 });
229
+ collectWeekData = [];
230
+ collectWeekData.push(item);
231
+ break;
232
+ default:
233
+ collectWeekData.push(item);
234
+ if (list.length - 1 === index) {
235
+ var obj = {
236
+ o: collectWeekData[0]["o"],
237
+ c: collectWeekData[collectWeekData.length - 1]["c"],
238
+ t: collectWeekData[collectWeekData.length - 1]["t"],
239
+ h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
240
+ l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
241
+ };
242
+ res.push(addDetail(obj, collectWeekData, detail));
259
243
  }
260
- }
261
- return res;
244
+ break;
262
245
  }
263
246
  });
264
- Object.defineProperty(Ma.prototype, "getBoll", {
247
+ return res;
248
+ }
249
+
250
+ var Gold = /** @class */ (function () {
251
+ function Gold() {
252
+ }
253
+ Object.defineProperty(Gold.prototype, "findHighPoint", {
265
254
  enumerable: false,
266
255
  configurable: true,
267
256
  writable: true,
268
257
  value: function (list) {
269
- var res = [];
258
+ var weekLine = getWeekLine(list, true);
259
+ var hightPoints = {};
270
260
  var _loop_1 = function (i) {
271
- if (i < 24)
272
- res[i] = __assign$4(__assign$4({}, list[i]), { ma25: undefined, bollUb: undefined, bollLb: undefined });
273
- else {
274
- // ma25
275
- var sumMa25 = list
276
- .slice(i - 24, i + 1)
277
- .reduce(function (pre, current) { return pre + current.c; }, 0);
278
- var ma25_1 = Math.round((sumMa25 / 25) * 100) / 100;
279
- // 標準差
280
- var sumBase = res
281
- .slice(i - 24, i + 1)
282
- .reduce(function (pre, current) {
283
- return ma25_1 !== undefined
284
- ? pre + Math.pow(current.c - ma25_1, 2)
285
- : pre;
286
- }, 0);
287
- var base = Math.round(Math.sqrt(sumBase / 25) * 100) / 100;
288
- res[i] = __assign$4(__assign$4({}, list[i]), { ma25: ma25_1, bollUb: ma25_1 + 2 * base, bollLb: ma25_1 - 2 * base });
261
+ var hightPoint = undefined;
262
+ switch (i) {
263
+ case 0:
264
+ {
265
+ var h1 = weekLine[i].h;
266
+ var h2 = weekLine[i + 1].h;
267
+ var h3 = weekLine[i + 2].h;
268
+ if (h1 > h2 && h1 > h3)
269
+ hightPoint = weekLine[i];
270
+ }
271
+ break;
272
+ case 1:
273
+ {
274
+ var h1 = weekLine[i - 1].h;
275
+ var h2 = weekLine[i].h;
276
+ var h3 = weekLine[i + 1].h;
277
+ var h4 = weekLine[i + 2].h;
278
+ if (h2 > h1 && h2 > h3 && h2 > h4)
279
+ hightPoint = weekLine[i];
280
+ }
281
+ break;
282
+ case weekLine.length - 3:
283
+ {
284
+ var h1 = weekLine[i - 2].h;
285
+ var h2 = weekLine[i - 1].h;
286
+ var h3 = weekLine[i].h;
287
+ var h4 = weekLine[i + 1].h;
288
+ var h5 = weekLine[i + 2].h;
289
+ if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
290
+ hightPoint = weekLine[i];
291
+ }
292
+ break;
293
+ case weekLine.length - 2:
294
+ {
295
+ var h1 = weekLine[i - 2].h;
296
+ var h2 = weekLine[i - 1].h;
297
+ var h3 = weekLine[i].h;
298
+ var h4 = weekLine[i + 1].h;
299
+ if (h3 > h1 && h3 > h2 && h3 > h4)
300
+ hightPoint = weekLine[i];
301
+ }
302
+ break;
303
+ case weekLine.length - 1:
304
+ {
305
+ var h1 = weekLine[i - 2].h;
306
+ var h2 = weekLine[i - 1].h;
307
+ var h3 = weekLine[i].h;
308
+ if (h3 > h2 && h3 > h1)
309
+ hightPoint = weekLine[i];
310
+ }
311
+ break;
312
+ default:
313
+ {
314
+ var h1 = weekLine[i - 2].h;
315
+ var h2 = weekLine[i - 1].h;
316
+ var h3 = weekLine[i].h;
317
+ var h4 = weekLine[i + 1].h;
318
+ var h5 = weekLine[i + 2].h;
319
+ var h6 = weekLine[i + 3].h;
320
+ if (h3 > h2 && h3 > h4 && h3 > h5 && h3 > h6)
321
+ hightPoint = weekLine[i];
322
+ if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
323
+ hightPoint = weekLine[i];
324
+ }
325
+ break;
326
+ }
327
+ if (hightPoint && hightPoint["detail"]) {
328
+ var h_1 = hightPoint.h;
329
+ var theHight = hightPoint.detail.find(function (item) { return item.h === h_1; });
330
+ delete hightPoint.detail;
331
+ if (theHight)
332
+ hightPoints[theHight === null || theHight === void 0 ? void 0 : theHight.t] = theHight;
289
333
  }
290
334
  };
291
- for (var i = 0; i < list.length; i++) {
335
+ for (var i = 0; i < weekLine.length; i++) {
292
336
  _loop_1(i);
293
337
  }
294
- return res;
338
+ return hightPoints;
295
339
  }
296
340
  });
297
- return Ma;
298
- }());
299
-
300
- var __assign$3 = (undefined && undefined.__assign) || function () {
301
- __assign$3 = Object.assign || function(t) {
302
- for (var s, i = 1, n = arguments.length; i < n; i++) {
303
- s = arguments[i];
304
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
305
- t[p] = s[p];
306
- }
307
- return t;
308
- };
309
- return __assign$3.apply(this, arguments);
310
- };
311
- var MACD = /** @class */ (function () {
312
- function MACD() {
313
- }
314
- Object.defineProperty(MACD.prototype, "getMACD", {
341
+ Object.defineProperty(Gold.prototype, "findLowPoint", {
315
342
  enumerable: false,
316
343
  configurable: true,
317
344
  writable: true,
318
345
  value: function (list) {
319
- // 首筆RSI
320
- var res = [];
321
- var EMA12 = this.getEMA12(list);
322
- var EMA26 = this.getEMA26(list);
323
- var DIF = this.getDIF(list, EMA12, EMA26);
324
- var MACD9 = this.getMACD9(list, DIF);
325
- for (var i = 0; i < list.length; i++) {
326
- res[i] = Object.assign(list[i], DIF[i], MACD9[i]);
346
+ var weekLine = getWeekLine(list, true);
347
+ var lowPoints = {};
348
+ var _loop_2 = function (i) {
349
+ var lowPoint = undefined;
350
+ switch (i) {
351
+ case 0:
352
+ {
353
+ var l1 = weekLine[i].l;
354
+ var l2 = weekLine[i + 1].l;
355
+ var l3 = weekLine[i + 2].l;
356
+ if (l1 < l2 && l1 < l3)
357
+ lowPoint = weekLine[i];
358
+ }
359
+ break;
360
+ case 1:
361
+ {
362
+ var l1 = weekLine[i - 1].l;
363
+ var l2 = weekLine[i].l;
364
+ var l3 = weekLine[i + 1].l;
365
+ var l4 = weekLine[i + 2].l;
366
+ if (l2 < l1 && l2 < l3 && l2 < l4)
367
+ lowPoint = weekLine[i];
368
+ }
369
+ break;
370
+ case weekLine.length - 3:
371
+ {
372
+ var l1 = weekLine[i - 2].l;
373
+ var l2 = weekLine[i - 1].l;
374
+ var l3 = weekLine[i].l;
375
+ var l4 = weekLine[i + 1].l;
376
+ var l5 = weekLine[i + 2].l;
377
+ if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
378
+ lowPoint = weekLine[i];
379
+ }
380
+ break;
381
+ case weekLine.length - 2:
382
+ {
383
+ var l1 = weekLine[i - 2].l;
384
+ var l2 = weekLine[i - 1].l;
385
+ var l3 = weekLine[i].l;
386
+ var l4 = weekLine[i + 1].l;
387
+ if (l3 < l1 && l3 < l2 && l3 < l4)
388
+ lowPoint = weekLine[i];
389
+ }
390
+ break;
391
+ case weekLine.length - 1:
392
+ {
393
+ var l1 = weekLine[i - 2].l;
394
+ var l2 = weekLine[i - 1].l;
395
+ var l3 = weekLine[i].l;
396
+ if (l3 < l2 && l3 < l1)
397
+ lowPoint = weekLine[i];
398
+ }
399
+ break;
400
+ default:
401
+ {
402
+ var l1 = weekLine[i - 2].l;
403
+ var l2 = weekLine[i - 1].l;
404
+ var l3 = weekLine[i].l;
405
+ var l4 = weekLine[i + 1].l;
406
+ var l5 = weekLine[i + 2].l;
407
+ var l6 = weekLine[i + 3].l;
408
+ if (l3 < l2 && l3 < l4 && l3 < l5 && l3 < l6)
409
+ lowPoint = weekLine[i];
410
+ if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
411
+ lowPoint = weekLine[i];
412
+ }
413
+ break;
414
+ }
415
+ if (lowPoint && lowPoint["detail"]) {
416
+ var l_1 = lowPoint.l;
417
+ var theLow = lowPoint.detail.find(function (item) { return item.l === l_1; });
418
+ delete lowPoint.detail;
419
+ if (theLow)
420
+ lowPoints[theLow === null || theLow === void 0 ? void 0 : theLow.t] = theLow;
421
+ }
422
+ };
423
+ for (var i = 0; i < weekLine.length; i++) {
424
+ _loop_2(i);
327
425
  }
328
- return res;
426
+ return lowPoints;
329
427
  }
330
428
  });
331
- Object.defineProperty(MACD.prototype, "getDI", {
429
+ Object.defineProperty(Gold.prototype, "getGold", {
332
430
  enumerable: false,
333
431
  configurable: true,
334
432
  writable: true,
335
- value: function (item) {
336
- return (item["h"] + item["l"] + 2 * item["c"]) / 4;
433
+ value: function (list) {
434
+ var hightPoints = this.findHighPoint(list);
435
+ var lowPoints = this.findLowPoint(list);
436
+ var lastHightPointDate = Object.keys(hightPoints).slice(-1)[0] !==
437
+ list[list.length - 1].t.toString()
438
+ ? Object.keys(hightPoints).slice(-1)[0]
439
+ : Object.keys(hightPoints).slice(-2)[0];
440
+ var lastLowPointDate = Object.keys(lowPoints).slice(-1)[0] !== list[list.length - 1].t.toString()
441
+ ? Object.keys(lowPoints).slice(-1)[0]
442
+ : Object.keys(lowPoints).slice(-2)[0];
443
+ var highestPoint = hightPoints[lastHightPointDate].h;
444
+ var lowestPoint = lowPoints[lastLowPointDate].l;
445
+ var res = {
446
+ highestPointDate: parseInt(lastHightPointDate),
447
+ lowestPointDate: parseInt(lastLowPointDate),
448
+ lowestPoint: lowestPoint,
449
+ highestPoint: highestPoint,
450
+ superStrong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.191) * 100) / 100,
451
+ strong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.382) * 100) / 100,
452
+ middle: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.5) * 100) /
453
+ 100,
454
+ weak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.618) * 100) / 100,
455
+ superWeak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.809) * 100) / 100,
456
+ };
457
+ return res;
337
458
  }
338
459
  });
339
- Object.defineProperty(MACD.prototype, "getStartEMA", {
460
+ return Gold;
461
+ }());
462
+
463
+ var __assign$4 = (undefined && undefined.__assign) || function () {
464
+ __assign$4 = Object.assign || function(t) {
465
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
466
+ s = arguments[i];
467
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
468
+ t[p] = s[p];
469
+ }
470
+ return t;
471
+ };
472
+ return __assign$4.apply(this, arguments);
473
+ };
474
+ var Kd = /** @class */ (function () {
475
+ function Kd() {
476
+ }
477
+ Object.defineProperty(Kd.prototype, "getRSV", {
340
478
  enumerable: false,
341
479
  configurable: true,
342
480
  writable: true,
343
- value: function (arr) {
344
- var _this = this;
345
- var sum = 0;
346
- arr.forEach(function (item) {
347
- var DI = _this.getDI(item);
348
- sum += DI;
349
- });
350
- return sum / arr.length;
481
+ value: function (list) {
482
+ var res = [];
483
+ for (var i = 0; i < list.length; i++) {
484
+ if (i < 8)
485
+ res[i] = __assign$4(__assign$4({}, list[i]), { rsv: undefined });
486
+ else {
487
+ var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
488
+ var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
489
+ var close_1 = list[i].c;
490
+ var rsv = ((close_1 - low) / (hight - low)) * 100;
491
+ rsv = Math.round(rsv * 100) / 100;
492
+ res[i] = __assign$4(__assign$4({}, list[i]), { rsv: rsv });
493
+ }
494
+ }
495
+ return res;
351
496
  }
352
497
  });
353
- Object.defineProperty(MACD.prototype, "getEMA12", {
498
+ Object.defineProperty(Kd.prototype, "getKD", {
354
499
  enumerable: false,
355
500
  configurable: true,
356
501
  writable: true,
357
502
  value: function (list) {
358
- var start = list.slice(0, 11);
359
- var beforeEMA12 = this.getStartEMA(start);
360
503
  var res = [];
504
+ var yesterdayK = 50;
505
+ var yesterdayD = 50;
361
506
  for (var i = 0; i < list.length; i++) {
362
- if (i < 12)
363
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA12: undefined });
507
+ if (i < 8)
508
+ res[i] = __assign$4(__assign$4({}, list[i]), { rsv: undefined, k: undefined, d: undefined, "k-d": undefined });
364
509
  else {
365
- beforeEMA12 = (beforeEMA12 * 11) / 13 + (this.getDI(list[i]) * 2) / 13;
366
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA12: beforeEMA12 });
510
+ var low = Math.min.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.l; }));
511
+ var hight = Math.max.apply(Math, list.slice(i - 8, i + 1).map(function (item) { return item.h; }));
512
+ var close_2 = list[i].c;
513
+ var rsv = ((close_2 - low) / (hight - low)) * 100;
514
+ rsv = Math.round(rsv * 100) / 100;
515
+ var k = (2 / 3) * yesterdayK + (1 / 3) * rsv;
516
+ var d = (2 / 3) * yesterdayD + (1 / 3) * k;
517
+ var k_d = k - d;
518
+ k = Math.round(k * 100) / 100;
519
+ d = Math.round(d * 100) / 100;
520
+ k_d = Math.round(k_d * 100) / 100;
521
+ res[i] = __assign$4(__assign$4({}, list[i]), { rsv: rsv, k: k, d: d, "k-d": k_d });
522
+ yesterdayK = k;
523
+ yesterdayD = d;
367
524
  }
368
525
  }
369
526
  return res;
370
527
  }
371
528
  });
372
- Object.defineProperty(MACD.prototype, "getEMA26", {
529
+ return Kd;
530
+ }());
531
+
532
+ var __assign$3 = (undefined && undefined.__assign) || function () {
533
+ __assign$3 = Object.assign || function(t) {
534
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
535
+ s = arguments[i];
536
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
537
+ t[p] = s[p];
538
+ }
539
+ return t;
540
+ };
541
+ return __assign$3.apply(this, arguments);
542
+ };
543
+ var Ma = /** @class */ (function () {
544
+ function Ma() {
545
+ }
546
+ Object.defineProperty(Ma.prototype, "getAllMa", {
373
547
  enumerable: false,
374
548
  configurable: true,
375
549
  writable: true,
376
550
  value: function (list) {
377
- var start = list.slice(0, 25);
378
- var beforeEMA26 = this.getStartEMA(start);
379
551
  var res = [];
552
+ var responseMa5 = this.getMa5(list);
553
+ var responseMa10 = this.getMa10(list);
554
+ var responseMa20 = this.getMa20(list);
555
+ var responseMa60 = this.getMa60(list);
556
+ var responseBoll = this.getBoll(list);
380
557
  for (var i = 0; i < list.length; i++) {
381
- if (i < 26)
382
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA26: undefined });
383
- else {
384
- beforeEMA26 = (beforeEMA26 * 25) / 27 + (this.getDI(list[i]) * 2) / 27;
385
- res[i] = __assign$3(__assign$3({}, list[i]), { EMA26: beforeEMA26 });
386
- }
558
+ res[i] = Object.assign(list[i], responseMa5[i], responseMa10[i], responseMa20[i], responseMa60[i], responseBoll[i]);
387
559
  }
388
560
  return res;
389
561
  }
390
562
  });
391
- Object.defineProperty(MACD.prototype, "getDIF", {
563
+ Object.defineProperty(Ma.prototype, "getMa5", {
392
564
  enumerable: false,
393
565
  configurable: true,
394
566
  writable: true,
395
- value: function (list, ResEMA12, ResEMA26) {
396
- var _a, _b;
567
+ value: function (list) {
397
568
  var res = [];
398
569
  for (var i = 0; i < list.length; i++) {
399
- if (i < 26)
400
- res[i] = __assign$3(__assign$3({}, list[i]), { DIF: undefined });
570
+ if (i < 4)
571
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma5: undefined });
401
572
  else {
402
- var EMA12 = ((_a = ResEMA12 === null || ResEMA12 === void 0 ? void 0 : ResEMA12[i]) === null || _a === void 0 ? void 0 : _a["EMA12"]) && ResEMA12[i]["EMA12"];
403
- var EMA26 = ((_b = ResEMA26 === null || ResEMA26 === void 0 ? void 0 : ResEMA26[i]) === null || _b === void 0 ? void 0 : _b["EMA26"]) && ResEMA26[i]["EMA26"];
404
- var DIF = EMA12 - EMA26;
405
- res[i] = __assign$3(__assign$3({}, list[i]), { DIF: DIF });
573
+ var sum = list
574
+ .slice(i - 4, i + 1)
575
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
576
+ var ma5 = Math.round((sum / 5) * 100) / 100;
577
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma5: ma5 });
406
578
  }
407
579
  }
408
580
  return res;
409
581
  }
410
582
  });
411
- Object.defineProperty(MACD.prototype, "getMACD9", {
583
+ Object.defineProperty(Ma.prototype, "getMa10", {
412
584
  enumerable: false,
413
585
  configurable: true,
414
586
  writable: true,
415
- value: function (list, DIF) {
587
+ value: function (list) {
416
588
  var res = [];
417
- var beforeMACD9 = 0;
418
589
  for (var i = 0; i < list.length; i++) {
419
- if (i < 26)
420
- res[i] = __assign$3(__assign$3({}, list[i]), { MACD9: undefined, OSC: undefined });
421
- else if (i === 26) {
422
- var MACD9 = DIF.slice(26, 34)
423
- .map(function (item) { return ((item === null || item === void 0 ? void 0 : item.DIF) ? item["DIF"] : 0); })
424
- .reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
425
- var OSC = DIF[i]["DIF"] - MACD9;
426
- res[26] = __assign$3(__assign$3({}, list[i]), { MACD9: MACD9, OSC: OSC });
427
- beforeMACD9 = MACD9;
428
- }
590
+ if (i < 9)
591
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma10: undefined });
429
592
  else {
430
- var MACD9 = beforeMACD9 + ((DIF[i]["DIF"] - beforeMACD9) * 2) / 10;
431
- var OSC = DIF[i]["DIF"] - MACD9;
432
- res[i] = __assign$3(__assign$3({}, list[i]), { MACD9: MACD9, OSC: OSC });
433
- beforeMACD9 = MACD9;
593
+ var sum = list
594
+ .slice(i - 9, i + 1)
595
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
596
+ var ma10 = Math.round((sum / 10) * 100) / 100;
597
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma10: ma10 });
434
598
  }
435
599
  }
436
600
  return res;
437
601
  }
438
602
  });
439
- return MACD;
440
- }());
441
-
442
- var __assign$2 = (undefined && undefined.__assign) || function () {
443
- __assign$2 = Object.assign || function(t) {
444
- for (var s, i = 1, n = arguments.length; i < n; i++) {
445
- s = arguments[i];
446
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
447
- t[p] = s[p];
448
- }
449
- return t;
450
- };
451
- return __assign$2.apply(this, arguments);
452
- };
453
- var Rsi = /** @class */ (function () {
454
- function Rsi() {
455
- }
456
- Object.defineProperty(Rsi.prototype, "getAllRsi", {
603
+ Object.defineProperty(Ma.prototype, "getMa20", {
457
604
  enumerable: false,
458
605
  configurable: true,
459
606
  writable: true,
460
607
  value: function (list) {
461
608
  var res = [];
462
- var rsi6 = this.getRsi6(list);
463
- var rsi12 = this.getRsi12(list);
464
609
  for (var i = 0; i < list.length; i++) {
465
- res[i] = Object.assign(list[i], rsi6[i], rsi12[i]);
610
+ if (i < 19)
611
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma20: undefined });
612
+ else {
613
+ var sum = list
614
+ .slice(i - 19, i + 1)
615
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
616
+ var ma20 = Math.round((sum / 20) * 100) / 100;
617
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma20: ma20 });
618
+ }
466
619
  }
467
620
  return res;
468
621
  }
469
622
  });
470
- Object.defineProperty(Rsi.prototype, "getRsi6", {
623
+ Object.defineProperty(Ma.prototype, "getMa60", {
471
624
  enumerable: false,
472
625
  configurable: true,
473
626
  writable: true,
474
627
  value: function (list) {
475
628
  var res = [];
476
- // 前5筆
477
- for (var i = 0; i < 5; i++) {
478
- res[i] = __assign$2(__assign$2({}, list[i]), { rsi6: undefined });
629
+ for (var i = 0; i < list.length; i++) {
630
+ if (i < 59)
631
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma60: undefined });
632
+ else {
633
+ var sum = list
634
+ .slice(i - 59, i + 1)
635
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
636
+ var ma60 = Math.round((sum / 60) * 100) / 100;
637
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma60: ma60 });
638
+ }
479
639
  }
480
- // 第6筆Rsi
481
- var beforeUpAvg = this.getStartUpAvg(list, 6);
482
- var beforeDownAvg = this.getStartDownAvg(list, 6);
483
- var firstRsi6 = this.getRsi(beforeUpAvg, beforeDownAvg);
484
- res[5] = __assign$2(__assign$2({}, list[5]), { rsi6: firstRsi6 });
485
- // else
486
- for (var i = 6; i < list.length; i++) {
487
- var minusU = 0;
488
- var minusD = 0;
489
- var minusC = list[i]["c"] - list[i - 1]["c"];
490
- if (minusC > 0) {
491
- minusU = minusC;
492
- }
640
+ return res;
641
+ }
642
+ });
643
+ Object.defineProperty(Ma.prototype, "getMaSelf", {
644
+ enumerable: false,
645
+ configurable: true,
646
+ writable: true,
647
+ value: function (list, self) {
648
+ var res = [];
649
+ for (var i = 0; i < list.length; i++) {
650
+ if (i < (self - 1))
651
+ res[i] = __assign$3(__assign$3({}, list[i]), { maSelf: undefined });
493
652
  else {
494
- minusD = minusC;
653
+ var sum = list
654
+ .slice(i - (self - 1), i + 1)
655
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
656
+ var maSelf = Math.round((sum / self) * 100) / 100;
657
+ res[i] = __assign$3(__assign$3({}, list[i]), { maSelf: maSelf });
495
658
  }
496
- beforeUpAvg = (beforeUpAvg * 5) / 6 + minusU / 6;
497
- beforeDownAvg = (beforeDownAvg * 5) / 6 + Math.abs(minusD) / 6;
498
- var rsi6 = this.getRsi(beforeUpAvg, beforeDownAvg);
499
- res[i] = __assign$2(__assign$2({}, list[i]), { rsi6: Math.round(rsi6 * 100) / 100 });
500
659
  }
501
660
  return res;
502
661
  }
503
662
  });
504
- Object.defineProperty(Rsi.prototype, "getRsi12", {
663
+ Object.defineProperty(Ma.prototype, "getBoll", {
505
664
  enumerable: false,
506
665
  configurable: true,
507
666
  writable: true,
508
667
  value: function (list) {
509
668
  var res = [];
510
- // 前11筆
511
- for (var i = 0; i < 11; i++) {
512
- res[i] = __assign$2(__assign$2({}, list[i]), { rsi12: undefined });
513
- }
514
- // 第12筆Rsi
515
- var beforeUpAvg = this.getStartUpAvg(list, 12);
516
- var beforeDownAvg = this.getStartDownAvg(list, 12);
517
- var firstRsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
518
- res[11] = __assign$2(__assign$2({}, list[11]), { rsi12: firstRsi12 });
519
- // else
520
- for (var i = 12; i < list.length; i++) {
521
- var minusU = 0;
522
- var minusD = 0;
523
- var minusC = list[i]["c"] - list[i - 1]["c"];
524
- if (minusC > 0) {
525
- minusU = minusC;
526
- }
669
+ var _loop_1 = function (i) {
670
+ if (i < 24)
671
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma25: undefined, bollUb: undefined, bollLb: undefined });
527
672
  else {
528
- minusD = minusC;
673
+ // ma25
674
+ var sumMa25 = list
675
+ .slice(i - 24, i + 1)
676
+ .reduce(function (pre, current) { return pre + current.c; }, 0);
677
+ var ma25_1 = Math.round((sumMa25 / 25) * 100) / 100;
678
+ // 標準差
679
+ var sumBase = res
680
+ .slice(i - 24, i + 1)
681
+ .reduce(function (pre, current) {
682
+ return ma25_1 !== undefined
683
+ ? pre + Math.pow(current.c - ma25_1, 2)
684
+ : pre;
685
+ }, 0);
686
+ var base = Math.round(Math.sqrt(sumBase / 25) * 100) / 100;
687
+ res[i] = __assign$3(__assign$3({}, list[i]), { ma25: ma25_1, bollUb: ma25_1 + 2 * base, bollLb: ma25_1 - 2 * base });
529
688
  }
530
- beforeUpAvg = (beforeUpAvg * 11) / 12 + minusU / 12;
531
- beforeDownAvg = (beforeDownAvg * 11) / 12 + Math.abs(minusD) / 12;
532
- var rsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
533
- res[i] = __assign$2(__assign$2({}, list[i]), { rsi12: Math.round(rsi12 * 100) / 100 });
689
+ };
690
+ for (var i = 0; i < list.length; i++) {
691
+ _loop_1(i);
534
692
  }
535
693
  return res;
536
694
  }
537
695
  });
538
- Object.defineProperty(Rsi.prototype, "getStartUpAvg", {
696
+ return Ma;
697
+ }());
698
+
699
+ var __assign$2 = (undefined && undefined.__assign) || function () {
700
+ __assign$2 = Object.assign || function(t) {
701
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
702
+ s = arguments[i];
703
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
704
+ t[p] = s[p];
705
+ }
706
+ return t;
707
+ };
708
+ return __assign$2.apply(this, arguments);
709
+ };
710
+ var MACD = /** @class */ (function () {
711
+ function MACD() {
712
+ }
713
+ Object.defineProperty(MACD.prototype, "getMACD", {
539
714
  enumerable: false,
540
715
  configurable: true,
541
716
  writable: true,
542
- value: function (list, count) {
543
- var start = list.slice(0, 5);
544
- var sum = 0;
545
- for (var i = 1; i < start.length; i++) {
546
- var minus = start[i]["c"] - start[i - 1]["c"];
547
- if (minus > 0) {
548
- sum += minus;
549
- }
717
+ value: function (list) {
718
+ // 首筆RSI
719
+ var res = [];
720
+ var EMA12 = this.getEMA12(list);
721
+ var EMA26 = this.getEMA26(list);
722
+ var DIF = this.getDIF(list, EMA12, EMA26);
723
+ var MACD9 = this.getMACD9(list, DIF);
724
+ for (var i = 0; i < list.length; i++) {
725
+ res[i] = Object.assign(list[i], DIF[i], MACD9[i]);
550
726
  }
551
- return sum / count;
727
+ return res;
552
728
  }
553
729
  });
554
- Object.defineProperty(Rsi.prototype, "getStartDownAvg", {
730
+ Object.defineProperty(MACD.prototype, "getDI", {
555
731
  enumerable: false,
556
732
  configurable: true,
557
733
  writable: true,
558
- value: function (list, count) {
559
- var start = list.slice(0, 5);
734
+ value: function (item) {
735
+ return (item["h"] + item["l"] + 2 * item["c"]) / 4;
736
+ }
737
+ });
738
+ Object.defineProperty(MACD.prototype, "getStartEMA", {
739
+ enumerable: false,
740
+ configurable: true,
741
+ writable: true,
742
+ value: function (arr) {
743
+ var _this = this;
560
744
  var sum = 0;
561
- for (var i = 1; i < start.length; i++) {
562
- var minus = start[i]["c"] - start[i - 1]["c"];
563
- if (minus < 0) {
564
- sum += minus;
565
- }
566
- }
567
- return Math.abs(sum / count);
745
+ arr.forEach(function (item) {
746
+ var DI = _this.getDI(item);
747
+ sum += DI;
748
+ });
749
+ return sum / arr.length;
568
750
  }
569
751
  });
570
- Object.defineProperty(Rsi.prototype, "getRsi", {
752
+ Object.defineProperty(MACD.prototype, "getEMA12", {
571
753
  enumerable: false,
572
754
  configurable: true,
573
755
  writable: true,
574
- value: function (UpAvg, DownAvg) {
575
- var res = 0;
576
- if (UpAvg + DownAvg !== 0) {
577
- res = (UpAvg / (UpAvg + DownAvg)) * 100;
756
+ value: function (list) {
757
+ var start = list.slice(0, 11);
758
+ var beforeEMA12 = this.getStartEMA(start);
759
+ var res = [];
760
+ for (var i = 0; i < list.length; i++) {
761
+ if (i < 12)
762
+ res[i] = __assign$2(__assign$2({}, list[i]), { EMA12: undefined });
763
+ else {
764
+ beforeEMA12 = (beforeEMA12 * 11) / 13 + (this.getDI(list[i]) * 2) / 13;
765
+ res[i] = __assign$2(__assign$2({}, list[i]), { EMA12: beforeEMA12 });
766
+ }
578
767
  }
579
768
  return res;
580
769
  }
581
770
  });
582
- return Rsi;
583
- }());
584
-
585
- var __assign$1 = (undefined && undefined.__assign) || function () {
586
- __assign$1 = Object.assign || function(t) {
587
- for (var s, i = 1, n = arguments.length; i < n; i++) {
588
- s = arguments[i];
589
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
590
- t[p] = s[p];
591
- }
592
- return t;
593
- };
594
- return __assign$1.apply(this, arguments);
595
- };
596
- var Williams = /** @class */ (function () {
597
- function Williams() {
598
- }
599
- Object.defineProperty(Williams.prototype, "getAllWillams", {
771
+ Object.defineProperty(MACD.prototype, "getEMA26", {
600
772
  enumerable: false,
601
773
  configurable: true,
602
774
  writable: true,
603
775
  value: function (list) {
776
+ var start = list.slice(0, 25);
777
+ var beforeEMA26 = this.getStartEMA(start);
604
778
  var res = [];
605
- var williams9 = this.getWilliams9(list);
606
- var williams18 = this.getWilliams18(list);
607
779
  for (var i = 0; i < list.length; i++) {
608
- res[i] = Object.assign(list[i], williams9[i], williams18[i]);
780
+ if (i < 26)
781
+ res[i] = __assign$2(__assign$2({}, list[i]), { EMA26: undefined });
782
+ else {
783
+ beforeEMA26 = (beforeEMA26 * 25) / 27 + (this.getDI(list[i]) * 2) / 27;
784
+ res[i] = __assign$2(__assign$2({}, list[i]), { EMA26: beforeEMA26 });
785
+ }
609
786
  }
610
787
  return res;
611
788
  }
612
789
  });
613
- Object.defineProperty(Williams.prototype, "getWilliams9", {
790
+ Object.defineProperty(MACD.prototype, "getDIF", {
614
791
  enumerable: false,
615
792
  configurable: true,
616
793
  writable: true,
617
- value: function (list) {
794
+ value: function (list, ResEMA12, ResEMA26) {
795
+ var _a, _b;
618
796
  var res = [];
619
797
  for (var i = 0; i < list.length; i++) {
620
- if (i < 9)
621
- res[i] = __assign$1(__assign$1({}, list[i]), { williams9: undefined });
798
+ if (i < 26)
799
+ res[i] = __assign$2(__assign$2({}, list[i]), { DIF: undefined });
622
800
  else {
623
- var maxList = list.slice(i - 8, i).map(function (item) { return item["h"]; });
624
- var minList = list.slice(i - 8, i).map(function (item) { return item["l"]; });
625
- var max = Math.max.apply(Math, maxList);
626
- var min = Math.min.apply(Math, minList);
627
- var close_1 = list[i]["c"];
628
- var williams9 = ((max - close_1) / (max - min)) * -100;
629
- res[i] = __assign$1(__assign$1({}, list[i]), { williams9: Math.round(williams9 * 100) / 100 });
801
+ var EMA12 = ((_a = ResEMA12 === null || ResEMA12 === void 0 ? void 0 : ResEMA12[i]) === null || _a === void 0 ? void 0 : _a["EMA12"]) && ResEMA12[i]["EMA12"];
802
+ var EMA26 = ((_b = ResEMA26 === null || ResEMA26 === void 0 ? void 0 : ResEMA26[i]) === null || _b === void 0 ? void 0 : _b["EMA26"]) && ResEMA26[i]["EMA26"];
803
+ var DIF = EMA12 - EMA26;
804
+ res[i] = __assign$2(__assign$2({}, list[i]), { DIF: DIF });
630
805
  }
631
806
  }
632
807
  return res;
633
808
  }
634
809
  });
635
- Object.defineProperty(Williams.prototype, "getWilliams18", {
810
+ Object.defineProperty(MACD.prototype, "getMACD9", {
636
811
  enumerable: false,
637
812
  configurable: true,
638
813
  writable: true,
639
- value: function (list) {
814
+ value: function (list, DIF) {
640
815
  var res = [];
816
+ var beforeMACD9 = 0;
641
817
  for (var i = 0; i < list.length; i++) {
642
- if (i < 18)
643
- res[i] = __assign$1(__assign$1({}, list[i]), { williams9: undefined });
818
+ if (i < 26)
819
+ res[i] = __assign$2(__assign$2({}, list[i]), { MACD9: undefined, OSC: undefined });
820
+ else if (i === 26) {
821
+ var MACD9 = DIF.slice(26, 34)
822
+ .map(function (item) { return ((item === null || item === void 0 ? void 0 : item.DIF) ? item["DIF"] : 0); })
823
+ .reduce(function (accumulator, currentValue) { return accumulator + currentValue; });
824
+ var OSC = DIF[i]["DIF"] - MACD9;
825
+ res[26] = __assign$2(__assign$2({}, list[i]), { MACD9: MACD9, OSC: OSC });
826
+ beforeMACD9 = MACD9;
827
+ }
644
828
  else {
645
- var maxList = list.slice(i - 17, i).map(function (item) { return item["h"]; });
646
- var minList = list.slice(i - 17, i).map(function (item) { return item["l"]; });
647
- var max = Math.max.apply(Math, maxList);
648
- var min = Math.min.apply(Math, minList);
649
- var close_2 = list[i]["c"];
650
- var williams18 = ((max - close_2) / (max - min)) * -100;
651
- res[i] = __assign$1(__assign$1({}, list[i]), { williams18: Math.round(williams18 * 100) / 100 });
829
+ var MACD9 = beforeMACD9 + ((DIF[i]["DIF"] - beforeMACD9) * 2) / 10;
830
+ var OSC = DIF[i]["DIF"] - MACD9;
831
+ res[i] = __assign$2(__assign$2({}, list[i]), { MACD9: MACD9, OSC: OSC });
832
+ beforeMACD9 = MACD9;
652
833
  }
653
834
  }
654
835
  return res;
655
836
  }
656
837
  });
657
- return Williams;
838
+ return MACD;
658
839
  }());
659
840
 
660
- var __assign = (undefined && undefined.__assign) || function () {
661
- __assign = Object.assign || function(t) {
841
+ var __assign$1 = (undefined && undefined.__assign) || function () {
842
+ __assign$1 = Object.assign || function(t) {
662
843
  for (var s, i = 1, n = arguments.length; i < n; i++) {
663
844
  s = arguments[i];
664
845
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
@@ -666,281 +847,138 @@
666
847
  }
667
848
  return t;
668
849
  };
669
- return __assign.apply(this, arguments);
850
+ return __assign$1.apply(this, arguments);
670
851
  };
671
- function addDetail(obj, list, detail) {
672
- if (detail)
673
- return __assign(__assign({}, obj), { detail: list });
674
- else
675
- return __assign({}, obj);
676
- }
677
- function getWeekLine(list, detail) {
678
- var res = [];
679
- var collectWeekData = [];
680
- list.forEach(function (item, index) {
681
- var year = item["t"]
682
- .toString()
683
- .replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3");
684
- var day = new Date(year).getDay();
685
- switch (day) {
686
- case 6:
687
- break;
688
- case 5: {
689
- collectWeekData.push(item);
690
- var obj = {
691
- o: collectWeekData[0]["o"],
692
- c: collectWeekData[collectWeekData.length - 1]["c"],
693
- t: collectWeekData[collectWeekData.length - 1]["t"],
694
- h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
695
- l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
696
- };
697
- res.push(addDetail(obj, collectWeekData, detail));
698
- collectWeekData = [];
699
- break;
852
+ var Rsi = /** @class */ (function () {
853
+ function Rsi() {
854
+ }
855
+ Object.defineProperty(Rsi.prototype, "getAllRsi", {
856
+ enumerable: false,
857
+ configurable: true,
858
+ writable: true,
859
+ value: function (list) {
860
+ var res = [];
861
+ var rsi6 = this.getRsi6(list);
862
+ var rsi12 = this.getRsi12(list);
863
+ for (var i = 0; i < list.length; i++) {
864
+ res[i] = Object.assign(list[i], rsi6[i], rsi12[i]);
700
865
  }
701
- case 1:
702
- if (collectWeekData.length !== 0) {
703
- var obj = {
704
- o: collectWeekData[0]["o"],
705
- c: collectWeekData[collectWeekData.length - 1]["c"],
706
- t: collectWeekData[collectWeekData.length - 1]["t"],
707
- h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
708
- l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
709
- };
710
- res.push(addDetail(obj, collectWeekData, detail));
711
- }
712
- collectWeekData = [];
713
- collectWeekData.push(item);
714
- break;
715
- default:
716
- collectWeekData.push(item);
717
- if (list.length - 1 === index) {
718
- var obj = {
719
- o: collectWeekData[0]["o"],
720
- c: collectWeekData[collectWeekData.length - 1]["c"],
721
- t: collectWeekData[collectWeekData.length - 1]["t"],
722
- h: Math.max.apply(Math, collectWeekData.map(function (item) { return item.h; })),
723
- l: Math.min.apply(Math, collectWeekData.map(function (item) { return item.l; })),
724
- };
725
- res.push(addDetail(obj, collectWeekData, detail));
726
- }
727
- break;
866
+ return res;
728
867
  }
729
868
  });
730
- return res;
731
- }
732
-
733
- var Gold = /** @class */ (function () {
734
- function Gold() {
735
- }
736
- Object.defineProperty(Gold.prototype, "findHighPoint", {
869
+ Object.defineProperty(Rsi.prototype, "getRsi6", {
737
870
  enumerable: false,
738
871
  configurable: true,
739
872
  writable: true,
740
873
  value: function (list) {
741
- var weekLine = getWeekLine(list, true);
742
- var hightPoints = {};
743
- var _loop_1 = function (i) {
744
- var hightPoint = undefined;
745
- switch (i) {
746
- case 0:
747
- {
748
- var h1 = weekLine[i].h;
749
- var h2 = weekLine[i + 1].h;
750
- var h3 = weekLine[i + 2].h;
751
- if (h1 > h2 && h1 > h3)
752
- hightPoint = weekLine[i];
753
- }
754
- break;
755
- case 1:
756
- {
757
- var h1 = weekLine[i - 1].h;
758
- var h2 = weekLine[i].h;
759
- var h3 = weekLine[i + 1].h;
760
- var h4 = weekLine[i + 2].h;
761
- if (h2 > h1 && h2 > h3 && h2 > h4)
762
- hightPoint = weekLine[i];
763
- }
764
- break;
765
- case weekLine.length - 3:
766
- {
767
- var h1 = weekLine[i - 2].h;
768
- var h2 = weekLine[i - 1].h;
769
- var h3 = weekLine[i].h;
770
- var h4 = weekLine[i + 1].h;
771
- var h5 = weekLine[i + 2].h;
772
- if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
773
- hightPoint = weekLine[i];
774
- }
775
- break;
776
- case weekLine.length - 2:
777
- {
778
- var h1 = weekLine[i - 2].h;
779
- var h2 = weekLine[i - 1].h;
780
- var h3 = weekLine[i].h;
781
- var h4 = weekLine[i + 1].h;
782
- if (h3 > h1 && h3 > h2 && h3 > h4)
783
- hightPoint = weekLine[i];
784
- }
785
- break;
786
- case weekLine.length - 1:
787
- {
788
- var h1 = weekLine[i - 2].h;
789
- var h2 = weekLine[i - 1].h;
790
- var h3 = weekLine[i].h;
791
- if (h3 > h2 && h3 > h1)
792
- hightPoint = weekLine[i];
793
- }
794
- break;
795
- default:
796
- {
797
- var h1 = weekLine[i - 2].h;
798
- var h2 = weekLine[i - 1].h;
799
- var h3 = weekLine[i].h;
800
- var h4 = weekLine[i + 1].h;
801
- var h5 = weekLine[i + 2].h;
802
- var h6 = weekLine[i + 3].h;
803
- if (h3 > h2 && h3 > h4 && h3 > h5 && h3 > h6)
804
- hightPoint = weekLine[i];
805
- if (h3 > h1 && h3 > h2 && h3 > h4 && h3 > h5)
806
- hightPoint = weekLine[i];
807
- }
808
- break;
809
- }
810
- if (hightPoint && hightPoint["detail"]) {
811
- var h_1 = hightPoint.h;
812
- var theHight = hightPoint.detail.find(function (item) { return item.h === h_1; });
813
- delete hightPoint.detail;
814
- if (theHight)
815
- hightPoints[theHight === null || theHight === void 0 ? void 0 : theHight.t] = theHight;
874
+ var res = [];
875
+ // 前5筆
876
+ for (var i = 0; i < 5; i++) {
877
+ res[i] = __assign$1(__assign$1({}, list[i]), { rsi6: undefined });
878
+ }
879
+ // 第6筆Rsi
880
+ var beforeUpAvg = this.getStartUpAvg(list, 6);
881
+ var beforeDownAvg = this.getStartDownAvg(list, 6);
882
+ var firstRsi6 = this.getRsi(beforeUpAvg, beforeDownAvg);
883
+ res[5] = __assign$1(__assign$1({}, list[5]), { rsi6: firstRsi6 });
884
+ // else
885
+ for (var i = 6; i < list.length; i++) {
886
+ var minusU = 0;
887
+ var minusD = 0;
888
+ var minusC = list[i]["c"] - list[i - 1]["c"];
889
+ if (minusC > 0) {
890
+ minusU = minusC;
816
891
  }
817
- };
818
- for (var i = 0; i < weekLine.length; i++) {
819
- _loop_1(i);
892
+ else {
893
+ minusD = minusC;
894
+ }
895
+ beforeUpAvg = (beforeUpAvg * 5) / 6 + minusU / 6;
896
+ beforeDownAvg = (beforeDownAvg * 5) / 6 + Math.abs(minusD) / 6;
897
+ var rsi6 = this.getRsi(beforeUpAvg, beforeDownAvg);
898
+ res[i] = __assign$1(__assign$1({}, list[i]), { rsi6: Math.round(rsi6 * 100) / 100 });
820
899
  }
821
- return hightPoints;
900
+ return res;
822
901
  }
823
902
  });
824
- Object.defineProperty(Gold.prototype, "findLowPoint", {
903
+ Object.defineProperty(Rsi.prototype, "getRsi12", {
825
904
  enumerable: false,
826
905
  configurable: true,
827
906
  writable: true,
828
907
  value: function (list) {
829
- var weekLine = getWeekLine(list, true);
830
- var lowPoints = {};
831
- var _loop_2 = function (i) {
832
- var lowPoint = undefined;
833
- switch (i) {
834
- case 0:
835
- {
836
- var l1 = weekLine[i].l;
837
- var l2 = weekLine[i + 1].l;
838
- var l3 = weekLine[i + 2].l;
839
- if (l1 < l2 && l1 < l3)
840
- lowPoint = weekLine[i];
841
- }
842
- break;
843
- case 1:
844
- {
845
- var l1 = weekLine[i - 1].l;
846
- var l2 = weekLine[i].l;
847
- var l3 = weekLine[i + 1].l;
848
- var l4 = weekLine[i + 2].l;
849
- if (l2 < l1 && l2 < l3 && l2 < l4)
850
- lowPoint = weekLine[i];
851
- }
852
- break;
853
- case weekLine.length - 3:
854
- {
855
- var l1 = weekLine[i - 2].l;
856
- var l2 = weekLine[i - 1].l;
857
- var l3 = weekLine[i].l;
858
- var l4 = weekLine[i + 1].l;
859
- var l5 = weekLine[i + 2].l;
860
- if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
861
- lowPoint = weekLine[i];
862
- }
863
- break;
864
- case weekLine.length - 2:
865
- {
866
- var l1 = weekLine[i - 2].l;
867
- var l2 = weekLine[i - 1].l;
868
- var l3 = weekLine[i].l;
869
- var l4 = weekLine[i + 1].l;
870
- if (l3 < l1 && l3 < l2 && l3 < l4)
871
- lowPoint = weekLine[i];
872
- }
873
- break;
874
- case weekLine.length - 1:
875
- {
876
- var l1 = weekLine[i - 2].l;
877
- var l2 = weekLine[i - 1].l;
878
- var l3 = weekLine[i].l;
879
- if (l3 < l2 && l3 < l1)
880
- lowPoint = weekLine[i];
881
- }
882
- break;
883
- default:
884
- {
885
- var l1 = weekLine[i - 2].l;
886
- var l2 = weekLine[i - 1].l;
887
- var l3 = weekLine[i].l;
888
- var l4 = weekLine[i + 1].l;
889
- var l5 = weekLine[i + 2].l;
890
- var l6 = weekLine[i + 3].l;
891
- if (l3 < l2 && l3 < l4 && l3 < l5 && l3 < l6)
892
- lowPoint = weekLine[i];
893
- if (l3 < l1 && l3 < l2 && l3 < l4 && l3 < l5)
894
- lowPoint = weekLine[i];
895
- }
896
- break;
908
+ var res = [];
909
+ // 前11筆
910
+ for (var i = 0; i < 11; i++) {
911
+ res[i] = __assign$1(__assign$1({}, list[i]), { rsi12: undefined });
912
+ }
913
+ // 第12筆Rsi
914
+ var beforeUpAvg = this.getStartUpAvg(list, 12);
915
+ var beforeDownAvg = this.getStartDownAvg(list, 12);
916
+ var firstRsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
917
+ res[11] = __assign$1(__assign$1({}, list[11]), { rsi12: firstRsi12 });
918
+ // else
919
+ for (var i = 12; i < list.length; i++) {
920
+ var minusU = 0;
921
+ var minusD = 0;
922
+ var minusC = list[i]["c"] - list[i - 1]["c"];
923
+ if (minusC > 0) {
924
+ minusU = minusC;
897
925
  }
898
- if (lowPoint && lowPoint["detail"]) {
899
- var l_1 = lowPoint.l;
900
- var theLow = lowPoint.detail.find(function (item) { return item.l === l_1; });
901
- delete lowPoint.detail;
902
- if (theLow)
903
- lowPoints[theLow === null || theLow === void 0 ? void 0 : theLow.t] = theLow;
926
+ else {
927
+ minusD = minusC;
904
928
  }
905
- };
906
- for (var i = 0; i < weekLine.length; i++) {
907
- _loop_2(i);
929
+ beforeUpAvg = (beforeUpAvg * 11) / 12 + minusU / 12;
930
+ beforeDownAvg = (beforeDownAvg * 11) / 12 + Math.abs(minusD) / 12;
931
+ var rsi12 = this.getRsi(beforeUpAvg, beforeDownAvg);
932
+ res[i] = __assign$1(__assign$1({}, list[i]), { rsi12: Math.round(rsi12 * 100) / 100 });
908
933
  }
909
- return lowPoints;
934
+ return res;
910
935
  }
911
936
  });
912
- Object.defineProperty(Gold.prototype, "getGold", {
937
+ Object.defineProperty(Rsi.prototype, "getStartUpAvg", {
913
938
  enumerable: false,
914
939
  configurable: true,
915
940
  writable: true,
916
- value: function (list) {
917
- var hightPoints = this.findHighPoint(list);
918
- var lowPoints = this.findLowPoint(list);
919
- var lastHightPointDate = Object.keys(hightPoints).slice(-1)[0] !==
920
- list[list.length - 1].t.toString()
921
- ? Object.keys(hightPoints).slice(-1)[0]
922
- : Object.keys(hightPoints).slice(-2)[0];
923
- var lastLowPointDate = Object.keys(lowPoints).slice(-1)[0] !== list[list.length - 1].t.toString()
924
- ? Object.keys(lowPoints).slice(-1)[0]
925
- : Object.keys(lowPoints).slice(-2)[0];
926
- var highestPoint = hightPoints[lastHightPointDate].h;
927
- var lowestPoint = lowPoints[lastLowPointDate].l;
928
- var res = {
929
- highestPointDate: parseInt(lastHightPointDate),
930
- lowestPointDate: parseInt(lastLowPointDate),
931
- lowestPoint: lowestPoint,
932
- highestPoint: highestPoint,
933
- superStrong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.191) * 100) / 100,
934
- strong: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.382) * 100) / 100,
935
- middle: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.5) * 100) /
936
- 100,
937
- weak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.618) * 100) / 100,
938
- superWeak: Math.round((highestPoint - (highestPoint - lowestPoint) * 0.809) * 100) / 100,
939
- };
941
+ value: function (list, count) {
942
+ var start = list.slice(0, 5);
943
+ var sum = 0;
944
+ for (var i = 1; i < start.length; i++) {
945
+ var minus = start[i]["c"] - start[i - 1]["c"];
946
+ if (minus > 0) {
947
+ sum += minus;
948
+ }
949
+ }
950
+ return sum / count;
951
+ }
952
+ });
953
+ Object.defineProperty(Rsi.prototype, "getStartDownAvg", {
954
+ enumerable: false,
955
+ configurable: true,
956
+ writable: true,
957
+ value: function (list, count) {
958
+ var start = list.slice(0, 5);
959
+ var sum = 0;
960
+ for (var i = 1; i < start.length; i++) {
961
+ var minus = start[i]["c"] - start[i - 1]["c"];
962
+ if (minus < 0) {
963
+ sum += minus;
964
+ }
965
+ }
966
+ return Math.abs(sum / count);
967
+ }
968
+ });
969
+ Object.defineProperty(Rsi.prototype, "getRsi", {
970
+ enumerable: false,
971
+ configurable: true,
972
+ writable: true,
973
+ value: function (UpAvg, DownAvg) {
974
+ var res = 0;
975
+ if (UpAvg + DownAvg !== 0) {
976
+ res = (UpAvg / (UpAvg + DownAvg)) * 100;
977
+ }
940
978
  return res;
941
979
  }
942
980
  });
943
- return Gold;
981
+ return Rsi;
944
982
  }());
945
983
 
946
984
  var Mode;
@@ -998,7 +1036,91 @@
998
1036
  }
999
1037
  }
1000
1038
 
1039
+ var __assign = (undefined && undefined.__assign) || function () {
1040
+ __assign = Object.assign || function(t) {
1041
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
1042
+ s = arguments[i];
1043
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
1044
+ t[p] = s[p];
1045
+ }
1046
+ return t;
1047
+ };
1048
+ return __assign.apply(this, arguments);
1049
+ };
1050
+ var Williams = /** @class */ (function () {
1051
+ function Williams() {
1052
+ }
1053
+ Object.defineProperty(Williams.prototype, "getAllWillams", {
1054
+ enumerable: false,
1055
+ configurable: true,
1056
+ writable: true,
1057
+ value: function (list) {
1058
+ var res = [];
1059
+ var williams9 = this.getWilliams9(list);
1060
+ var williams18 = this.getWilliams18(list);
1061
+ for (var i = 0; i < list.length; i++) {
1062
+ res[i] = Object.assign(list[i], williams9[i], williams18[i]);
1063
+ }
1064
+ return res;
1065
+ }
1066
+ });
1067
+ Object.defineProperty(Williams.prototype, "getWilliams9", {
1068
+ enumerable: false,
1069
+ configurable: true,
1070
+ writable: true,
1071
+ value: function (list) {
1072
+ var res = [];
1073
+ for (var i = 0; i < list.length; i++) {
1074
+ if (i < 9)
1075
+ res[i] = __assign(__assign({}, list[i]), { williams9: undefined });
1076
+ else {
1077
+ var maxList = list.slice(i - 8, i).map(function (item) { return item["h"]; });
1078
+ var minList = list.slice(i - 8, i).map(function (item) { return item["l"]; });
1079
+ var max = Math.max.apply(Math, maxList);
1080
+ var min = Math.min.apply(Math, minList);
1081
+ var close_1 = list[i]["c"];
1082
+ var williams9 = ((max - close_1) / (max - min)) * -100;
1083
+ res[i] = __assign(__assign({}, list[i]), { williams9: Math.round(williams9 * 100) / 100 });
1084
+ }
1085
+ }
1086
+ return res;
1087
+ }
1088
+ });
1089
+ Object.defineProperty(Williams.prototype, "getWilliams18", {
1090
+ enumerable: false,
1091
+ configurable: true,
1092
+ writable: true,
1093
+ value: function (list) {
1094
+ var res = [];
1095
+ for (var i = 0; i < list.length; i++) {
1096
+ if (i < 18)
1097
+ res[i] = __assign(__assign({}, list[i]), { williams9: undefined });
1098
+ else {
1099
+ var maxList = list.slice(i - 17, i).map(function (item) { return item["h"]; });
1100
+ var minList = list.slice(i - 17, i).map(function (item) { return item["l"]; });
1101
+ var max = Math.max.apply(Math, maxList);
1102
+ var min = Math.min.apply(Math, minList);
1103
+ var close_2 = list[i]["c"];
1104
+ var williams18 = ((max - close_2) / (max - min)) * -100;
1105
+ res[i] = __assign(__assign({}, list[i]), { williams18: Math.round(williams18 * 100) / 100 });
1106
+ }
1107
+ }
1108
+ return res;
1109
+ }
1110
+ });
1111
+ return Williams;
1112
+ }());
1113
+
1114
+ function add(a, b) {
1115
+ return a + b;
1116
+ }
1117
+
1118
+ function minus(a, b) {
1119
+ return a - b;
1120
+ }
1121
+
1001
1122
  exports.Gold = Gold;
1123
+ exports.Kd = Kd;
1002
1124
  exports.Ma = Ma;
1003
1125
  exports.Macd = MACD;
1004
1126
  exports.Rsi = Rsi;
@@ -1011,6 +1133,7 @@
1011
1133
  exports.minus = minus;
1012
1134
  exports.movingAverages = movingAverages;
1013
1135
  exports.simpleRegressionModel = simpleRegressionModel;
1136
+ exports.slope = Slope;
1014
1137
  exports.weightMovingAverages = weightMovingAverages;
1015
1138
 
1016
1139
  Object.defineProperty(exports, '__esModule', { value: true });