@ch20026103/anysis 0.0.19-alpha → 0.0.19-beta
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/demo/main.js +2 -2
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/stockSkills/dmi.d.ts +28 -0
- package/dist/cjs/stockSkills/dmi.js +206 -0
- package/dist/cjs/stockSkills/dmi.test.d.ts +1 -0
- package/dist/cjs/stockSkills/dmi.test.js +71 -0
- package/dist/cjs/stockSkills/ichimoku.d.ts +35 -0
- package/dist/cjs/stockSkills/ichimoku.js +96 -0
- package/dist/cjs/stockSkills/ichimoku.test.d.ts +1 -0
- package/dist/cjs/stockSkills/ichimoku.test.js +158 -0
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/stockSkills/dmi.d.ts +28 -0
- package/dist/esm/stockSkills/dmi.js +204 -0
- package/dist/esm/stockSkills/dmi.test.d.ts +1 -0
- package/dist/esm/stockSkills/dmi.test.js +69 -0
- package/dist/esm/stockSkills/ichimoku.d.ts +35 -0
- package/dist/esm/stockSkills/ichimoku.js +94 -0
- package/dist/esm/stockSkills/ichimoku.test.d.ts +1 -0
- package/dist/esm/stockSkills/ichimoku.test.js +156 -0
- package/dist/umd/index.js +73 -34
- package/package.json +1 -1
- package/dist/cjs/stockSkills/ad.d.ts +0 -17
- package/dist/cjs/stockSkills/ad.js +0 -57
- package/dist/esm/stockSkills/ad.d.ts +0 -17
- package/dist/esm/stockSkills/ad.js +0 -55
package/dist/umd/index.js
CHANGED
|
@@ -1214,7 +1214,7 @@
|
|
|
1214
1214
|
};
|
|
1215
1215
|
return __assign$3.apply(this, arguments);
|
|
1216
1216
|
};
|
|
1217
|
-
var __spreadArray
|
|
1217
|
+
var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {
|
|
1218
1218
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
1219
1219
|
if (ar || !(i in from)) {
|
|
1220
1220
|
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
@@ -1254,7 +1254,7 @@
|
|
|
1254
1254
|
obv -= currentVolume;
|
|
1255
1255
|
}
|
|
1256
1256
|
return {
|
|
1257
|
-
dataset: __spreadArray
|
|
1257
|
+
dataset: __spreadArray(__spreadArray([], preList.dataset, true), [data], false),
|
|
1258
1258
|
obv: obv,
|
|
1259
1259
|
preClose: currentClose,
|
|
1260
1260
|
};
|
|
@@ -1869,59 +1869,98 @@
|
|
|
1869
1869
|
return Mfi;
|
|
1870
1870
|
}());
|
|
1871
1871
|
|
|
1872
|
-
var
|
|
1873
|
-
|
|
1874
|
-
if (ar || !(i in from)) {
|
|
1875
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
1876
|
-
ar[i] = from[i];
|
|
1877
|
-
}
|
|
1878
|
-
}
|
|
1879
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
1880
|
-
};
|
|
1881
|
-
var Ad = /** @class */ (function () {
|
|
1882
|
-
function Ad() {
|
|
1872
|
+
var Ichimoku = /** @class */ (function () {
|
|
1873
|
+
function Ichimoku() {
|
|
1883
1874
|
}
|
|
1884
|
-
Object.defineProperty(
|
|
1875
|
+
Object.defineProperty(Ichimoku.prototype, "init", {
|
|
1885
1876
|
enumerable: false,
|
|
1886
1877
|
configurable: true,
|
|
1887
1878
|
writable: true,
|
|
1888
1879
|
value: function (data) {
|
|
1889
|
-
|
|
1890
|
-
var ad = this.calcAD(data);
|
|
1880
|
+
var dataset = [data];
|
|
1891
1881
|
return {
|
|
1892
|
-
dataset:
|
|
1893
|
-
|
|
1894
|
-
preClose: data.c,
|
|
1882
|
+
dataset: dataset,
|
|
1883
|
+
ichimoku: this.calcIchimoku(dataset, dataset.length - 1),
|
|
1895
1884
|
};
|
|
1896
1885
|
}
|
|
1897
1886
|
});
|
|
1898
|
-
|
|
1887
|
+
/**
|
|
1888
|
+
* 優化說明:
|
|
1889
|
+
* 如果 preList.dataset 是一個可變陣列,我們直接 push 以達到最佳效能 O(1)。
|
|
1890
|
+
* 如果你的框架 (如 React state) 強制要求 immutable,則需要改回 [...prev, data] 的寫法。
|
|
1891
|
+
* 下面的寫法假設可以 Mutation (這在 Class 內部運算或 Backend 處理很常見)。
|
|
1892
|
+
*/
|
|
1893
|
+
Object.defineProperty(Ichimoku.prototype, "next", {
|
|
1899
1894
|
enumerable: false,
|
|
1900
1895
|
configurable: true,
|
|
1901
1896
|
writable: true,
|
|
1902
1897
|
value: function (data, preList) {
|
|
1903
|
-
//
|
|
1904
|
-
var
|
|
1898
|
+
// 強制轉型以進行 push (避免 typescript 報錯 readonly)
|
|
1899
|
+
var mutableDataset = preList.dataset;
|
|
1900
|
+
mutableDataset.push(data);
|
|
1901
|
+
// 只需要計算最後一筆
|
|
1902
|
+
var currentResult = this.calcIchimoku(mutableDataset, mutableDataset.length - 1);
|
|
1905
1903
|
return {
|
|
1906
|
-
dataset:
|
|
1907
|
-
|
|
1908
|
-
preClose: data.c,
|
|
1904
|
+
dataset: mutableDataset,
|
|
1905
|
+
ichimoku: currentResult,
|
|
1909
1906
|
};
|
|
1910
1907
|
}
|
|
1911
1908
|
});
|
|
1912
|
-
//
|
|
1913
|
-
Object.defineProperty(
|
|
1909
|
+
// 核心計算邏輯
|
|
1910
|
+
Object.defineProperty(Ichimoku.prototype, "calcIchimoku", {
|
|
1914
1911
|
enumerable: false,
|
|
1915
1912
|
configurable: true,
|
|
1916
1913
|
writable: true,
|
|
1917
|
-
value: function (
|
|
1918
|
-
var
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1914
|
+
value: function (dataList, i) {
|
|
1915
|
+
var currentData = dataList[i];
|
|
1916
|
+
// 優化:直接傳入 index 與 list,不產生新陣列
|
|
1917
|
+
var tenkanVal = this.getMidPrice(dataList, i, 9);
|
|
1918
|
+
var kijunVal = this.getMidPrice(dataList, i, 26);
|
|
1919
|
+
var senkouBVal = this.getMidPrice(dataList, i, 52);
|
|
1920
|
+
var senkouAVal = null;
|
|
1921
|
+
if (tenkanVal !== null && kijunVal !== null) {
|
|
1922
|
+
senkouAVal = (tenkanVal + kijunVal) / 2;
|
|
1923
|
+
}
|
|
1924
|
+
return {
|
|
1925
|
+
tenkan: tenkanVal,
|
|
1926
|
+
kijun: kijunVal,
|
|
1927
|
+
senkouA: senkouAVal,
|
|
1928
|
+
senkouB: senkouBVal,
|
|
1929
|
+
chikou: currentData.c,
|
|
1930
|
+
};
|
|
1931
|
+
}
|
|
1932
|
+
});
|
|
1933
|
+
/**
|
|
1934
|
+
* 優化:
|
|
1935
|
+
* 1. 移除 .slice(),避免產生 Garbage Collection。
|
|
1936
|
+
* 2. 使用反向迴圈 (i--),通常在 JS 引擎中微幅快一點,且語意上是「從現在往回看」。
|
|
1937
|
+
*/
|
|
1938
|
+
Object.defineProperty(Ichimoku.prototype, "getMidPrice", {
|
|
1939
|
+
enumerable: false,
|
|
1940
|
+
configurable: true,
|
|
1941
|
+
writable: true,
|
|
1942
|
+
value: function (list, currentIndex, periods) {
|
|
1943
|
+
if (currentIndex < periods - 1) {
|
|
1944
|
+
return null;
|
|
1945
|
+
}
|
|
1946
|
+
// 計算視窗的起始 index
|
|
1947
|
+
var start = currentIndex - (periods - 1);
|
|
1948
|
+
// 初始化最大最小
|
|
1949
|
+
// 小技巧:直接拿第一個值當初始值,避免 Infinity 的比較
|
|
1950
|
+
var maxH = list[start].h;
|
|
1951
|
+
var minL = list[start].l;
|
|
1952
|
+
// 從 start + 1 開始遍歷到 currentIndex
|
|
1953
|
+
for (var j = start + 1; j <= currentIndex; j++) {
|
|
1954
|
+
var _a = list[j], h = _a.h, l = _a.l;
|
|
1955
|
+
if (h > maxH)
|
|
1956
|
+
maxH = h;
|
|
1957
|
+
if (l < minL)
|
|
1958
|
+
minL = l;
|
|
1959
|
+
}
|
|
1960
|
+
return (maxH + minL) / 2;
|
|
1922
1961
|
}
|
|
1923
1962
|
});
|
|
1924
|
-
return
|
|
1963
|
+
return Ichimoku;
|
|
1925
1964
|
}());
|
|
1926
1965
|
|
|
1927
1966
|
function add(a, b) {
|
|
@@ -1960,11 +1999,11 @@
|
|
|
1960
1999
|
return devices;
|
|
1961
2000
|
}
|
|
1962
2001
|
|
|
1963
|
-
exports.Ad = Ad;
|
|
1964
2002
|
exports.Angle = TwoPointAngle;
|
|
1965
2003
|
exports.Boll = Boll;
|
|
1966
2004
|
exports.Ema = Ema;
|
|
1967
2005
|
exports.Gold = Gold;
|
|
2006
|
+
exports.Ichimoku = Ichimoku;
|
|
1968
2007
|
exports.Kd = Kd;
|
|
1969
2008
|
exports.Ma = Ma;
|
|
1970
2009
|
exports.Macd = MACD;
|
package/package.json
CHANGED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { StockListType, StockType } from "./types";
|
|
2
|
-
type NewStockType = Required<Pick<StockType, "v">> & StockType;
|
|
3
|
-
export type AdResType = {
|
|
4
|
-
dataset: StockListType;
|
|
5
|
-
ad: number;
|
|
6
|
-
preClose: number;
|
|
7
|
-
};
|
|
8
|
-
interface AdType {
|
|
9
|
-
init: (data: NewStockType) => AdResType;
|
|
10
|
-
next: (data: NewStockType, preList: AdResType) => AdResType;
|
|
11
|
-
}
|
|
12
|
-
export default class Ad implements AdType {
|
|
13
|
-
init(data: NewStockType): AdResType;
|
|
14
|
-
next(data: NewStockType, preList: AdResType): AdResType;
|
|
15
|
-
private calcAD;
|
|
16
|
-
}
|
|
17
|
-
export {};
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
3
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
4
|
-
if (ar || !(i in from)) {
|
|
5
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
6
|
-
ar[i] = from[i];
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
var Ad = /** @class */ (function () {
|
|
13
|
-
function Ad() {
|
|
14
|
-
}
|
|
15
|
-
Object.defineProperty(Ad.prototype, "init", {
|
|
16
|
-
enumerable: false,
|
|
17
|
-
configurable: true,
|
|
18
|
-
writable: true,
|
|
19
|
-
value: function (data) {
|
|
20
|
-
// AD 初始值
|
|
21
|
-
var ad = this.calcAD(data);
|
|
22
|
-
return {
|
|
23
|
-
dataset: [data],
|
|
24
|
-
ad: ad,
|
|
25
|
-
preClose: data.c,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
Object.defineProperty(Ad.prototype, "next", {
|
|
30
|
-
enumerable: false,
|
|
31
|
-
configurable: true,
|
|
32
|
-
writable: true,
|
|
33
|
-
value: function (data, preList) {
|
|
34
|
-
// AD 累加
|
|
35
|
-
var ad = preList.ad + this.calcAD(data);
|
|
36
|
-
return {
|
|
37
|
-
dataset: __spreadArray(__spreadArray([], preList.dataset, true), [data], false),
|
|
38
|
-
ad: ad,
|
|
39
|
-
preClose: data.c,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
// AD 計算公式
|
|
44
|
-
Object.defineProperty(Ad.prototype, "calcAD", {
|
|
45
|
-
enumerable: false,
|
|
46
|
-
configurable: true,
|
|
47
|
-
writable: true,
|
|
48
|
-
value: function (data) {
|
|
49
|
-
var h = data.h, l = data.l, c = data.c, v = data.v;
|
|
50
|
-
if (h === l)
|
|
51
|
-
return 0; // 避免除以零
|
|
52
|
-
return ((c - l - (h - c)) / (h - l)) * v;
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
return Ad;
|
|
56
|
-
}());
|
|
57
|
-
exports.default = Ad;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { StockListType, StockType } from "./types";
|
|
2
|
-
type NewStockType = Required<Pick<StockType, "v">> & StockType;
|
|
3
|
-
export type AdResType = {
|
|
4
|
-
dataset: StockListType;
|
|
5
|
-
ad: number;
|
|
6
|
-
preClose: number;
|
|
7
|
-
};
|
|
8
|
-
interface AdType {
|
|
9
|
-
init: (data: NewStockType) => AdResType;
|
|
10
|
-
next: (data: NewStockType, preList: AdResType) => AdResType;
|
|
11
|
-
}
|
|
12
|
-
export default class Ad implements AdType {
|
|
13
|
-
init(data: NewStockType): AdResType;
|
|
14
|
-
next(data: NewStockType, preList: AdResType): AdResType;
|
|
15
|
-
private calcAD;
|
|
16
|
-
}
|
|
17
|
-
export {};
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
-
if (ar || !(i in from)) {
|
|
4
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
-
ar[i] = from[i];
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
-
};
|
|
10
|
-
var Ad = /** @class */ (function () {
|
|
11
|
-
function Ad() {
|
|
12
|
-
}
|
|
13
|
-
Object.defineProperty(Ad.prototype, "init", {
|
|
14
|
-
enumerable: false,
|
|
15
|
-
configurable: true,
|
|
16
|
-
writable: true,
|
|
17
|
-
value: function (data) {
|
|
18
|
-
// AD 初始值
|
|
19
|
-
var ad = this.calcAD(data);
|
|
20
|
-
return {
|
|
21
|
-
dataset: [data],
|
|
22
|
-
ad: ad,
|
|
23
|
-
preClose: data.c,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
Object.defineProperty(Ad.prototype, "next", {
|
|
28
|
-
enumerable: false,
|
|
29
|
-
configurable: true,
|
|
30
|
-
writable: true,
|
|
31
|
-
value: function (data, preList) {
|
|
32
|
-
// AD 累加
|
|
33
|
-
var ad = preList.ad + this.calcAD(data);
|
|
34
|
-
return {
|
|
35
|
-
dataset: __spreadArray(__spreadArray([], preList.dataset, true), [data], false),
|
|
36
|
-
ad: ad,
|
|
37
|
-
preClose: data.c,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
// AD 計算公式
|
|
42
|
-
Object.defineProperty(Ad.prototype, "calcAD", {
|
|
43
|
-
enumerable: false,
|
|
44
|
-
configurable: true,
|
|
45
|
-
writable: true,
|
|
46
|
-
value: function (data) {
|
|
47
|
-
var h = data.h, l = data.l, c = data.c, v = data.v;
|
|
48
|
-
if (h === l)
|
|
49
|
-
return 0; // 避免除以零
|
|
50
|
-
return ((c - l - (h - c)) / (h - l)) * v;
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
return Ad;
|
|
54
|
-
}());
|
|
55
|
-
export default Ad;
|