使用 JavaScript / TypeScript 进行技术分析的技术指标与叠加工具。
“trading-signals” 库为常见技术指标提供了 TypeScript 实现。它非常适合算法交易,让开发者能够为自动化交易策略执行信号计算。
所有指标都可以通过将数据(价格或 K 线)流式传输到 add 方法来进行实时更新。某些指标还提供 static 批处理方法,以便在回测或历史数据导入时一次性提供数据,从而进一步提升性能。你可以通过运行提供的 演示脚本 并输入 npm start 来尝试流式输入数据,该脚本使用键盘输入流。
npm install trading-signals
CommonJS:
const {SMA} = require('trading-signals');
ESM:
import {SMA} from 'trading-signals';
示例:
import {SMA} from 'trading-signals';
const sma = new SMA(3);
// 可以逐个添加数值:
sma.add(40);
sma.add(30);
sma.add(20);
// 也可以一次性添加多个数值:
sma.updates([20, 40, 80]);
// 可以替换之前的某个值(适用于实时图表):
sma.replace(40);
// 可以检查指标是否已稳定:
console.log(sma.isStable); // true
// 如果指标已稳定,可以获取其结果:
console.log(sma.getResult()); // 50.0003
// 还可以在不使用可选链的情况下获取结果:
console.log(sma.getResultOrThrow()); // 50.0003
// 同样支持多种精度:
console.log(sma.getResultOrThrow().toFixed(2)); // "50.00"
console.log(sma.getResultOrThrow().toFixed(4)); // "50.0003"
// 每个指标还包含便捷功能,例如生命周期内的“最低”和“最高”值:
console.log(sma.lowest?.toFixed(2)); // "23.33"
console.log(sma.highest?.toFixed(2)); // "53.33"
add(...)?要输入数据,你需要调用指标的 add 方法。根据是否已达到该区间所需的最小输入数据量,add 方法可能会也可能不会返回指标的结果。
getResultOrThrow()?你可以随时调用 getResultOrThrow(),但如果指标尚未收到最少数据量,它会抛出错误。如果在指标收到所需数量的输入值之前调用 getResultOrThrow(),将抛出 NotEnoughDataError。
示例:
import {SMA} from 'trading-signals';
// 我们的周期是 3,因此需要 3 个输入值
const sma = new SMA(3);
// 我们提供了 2 个输入值
sma.add(10);
sma.add(40);
try {
// 这里会抛出一个错误,因为最少需要 3 个输入值
sma.getResultOrThrow();
} catch (error) {
console.log(error.constructor.name); // "NotEnoughDataError"
}
// 我们提供第 3 个输入值
sma.add(70);
// 现在,我们可以得到正确的结果
console.log(sma.getResultOrThrow()); // 40
大多数情况下,所需的最小数据量取决于所使用的周期/时间范围。如果不确定,可以查看指标的测试文件,了解正确用法的示例。
实用方法:
JavaScript 使用双精度浮点运算。例如,0.1 + 0.2 会得到 0.30000000000000004,这是由于二进制浮点表示造成的。

虽然这并不完全精确,但在实际应用中通常无关紧要,因为指标通常使用平均值,已经平滑了精度误差。在测试用例中,你可以使用 Vitest 的 toBeCloseTo 断言来控制精度。
本库的早期版本(直到版本 6)使用 big.js 进行任意精度运算,但这使得计算速度平均慢了约 100 倍。因此,从版本 7 开始移除了对 big.js 的支持。
trading-signals 的信息和出版物不构成财务建议、投资建议、交易建议或任何形式的建议。所有来自 trading-signals 的结果仅用于信息目的。
在根据您自身个人情况做出任何投资之前,进行自己的分析非常重要。如果您需要财务建议或其他一般建议,建议您在自己的司法管辖区寻找一位具备相关资质的个人为您提供相应建议。
此软件包由 Benny Code 构建。查看我的 TypeScript 课程,成为编程摇滚明星!
本项目采用 MIT 许可证。