UNPKG

ashare-sdk-ts

Version:

中国股市A股股票行情实时数据SDK (TypeScript/Node.js),包含日线、分时分钟线,技术指标计算等功能。

381 lines (321 loc) 28.9 kB
# Ashare SDK (TypeScript) 中国股市A股股票行情实时数据最简封装API接口,包含日线、分时分钟线,全部格式成DataFrame格式数据,可用于研究、量化分析,证券股票程序化自动化交易系统行情系统包括新浪腾讯双数据核心,自动故障切换,为量化在数据获取方面极大地减少工作量,更加专注于策略和模型的研究与实现。 python原项目地址:https://github.com/mpquant/Ashare 感谢原项目的Ashare作者 ## 安装 使用 npm 安装 SDK: ```bash npm install ashare-sdk-ts ``` ## 使用方法 ### 获取股票行情数据 ```typescript import { get_price } from 'ashare-sdk-ts'; async function fetchDataExamples() { try { // 示例 1: 获取上证指数日线数据 (使用默认参数: count=10, frequency='1d') const shIndexDefault = await get_price('sh000001'); console.log('上证指数日线 (默认):', shIndexDefault.slice(0, 3)); // 打印前3条 // 示例 2: 获取上证指数日线数据 (指定 count=5) const shIndex5 = await get_price('sh000001', '', 5); console.log('上证指数日线 (count=5):', shIndex5); // 示例 3: 获取上证指数历史日线数据 (指定 end_date count) // 注意: end_date 仅对 '1d', '1w', '1M' 有效 const shIndexHist = await get_price('000001.XSHG', '2023-12-31', 5, '1d'); console.log('上证指数历史日线 (end_date="2023-12-31", count=5):', shIndexHist); // 示例 4: 获取贵州茅台15分钟线数据 (指定 count=5, frequency='15m') const kweiChow15m = await get_price('sh600519', '', 5, '15m'); console.log('贵州茅台15分钟线 (count=5):', kweiChow15m.slice(0, 3)); // 打印前3条 } catch (error) { console.error('获取数据时发生错误:', error); } } fetchDataExamples(); ``` ### 计算技术指标 ```typescript import { get_price, BOLL, StockData } from 'ashare-sdk-ts'; // 从安装的包导入主入口函数 import { MA } from 'ashare-sdk-ts/dist/utils'; // 从包的 utils 模块导入 MA async function calculateIndicators() { try { // 1. 获取足够的数据用于计算指标 (例如,获取最近120条日线数据) const stockHistory: StockData[] = await get_price('000001.XSHG', '', 120, '1d'); if (stockHistory.length > 0) { // 2. 从获取的数据中提取所需序列 (例如,收盘价) const closePrices = stockHistory.map(item => item.close); // 3. 使用提取的序列计算指标 // 计算 MA5 MA10 const ma5 = MA(closePrices, 5); const ma10 = MA(closePrices, 10); console.log('MA5 (最后5条):', ma5.slice(-5).map(v => v?.toFixed(2))); console.log('MA10 (最后5条):', ma10.slice(-5).map(v => v?.toFixed(2))); // 计算 BOLL 指标 (默认 N=20) const [bollUp, bollMid, bollLower] = BOLL(closePrices); console.log('BOLL Upper (最后5条):', bollUp.slice(-5).map(v => v?.toFixed(2))); console.log('BOLL Mid (最后5条):', bollMid.slice(-5).map(v => v?.toFixed(2))); console.log('BOLL Lower (最后5条):', bollLower.slice(-5).map(v => v?.toFixed(2))); // 其他指标计算类似... // const kdjResult = KDJ(stockHistory.map(i=>i.close), stockHistory.map(i=>i.high), stockHistory.map(i=>i.low)); // console.log('KDJ K (最后5条):', kdjResult.K.slice(-5).map(v => v?.toFixed(2))); } else { console.log('未能获取足够的历史数据来计算指标。'); } } catch (error) { console.error('计算指标时发生错误:', error); } } calculateIndicators(); ``` ### 获取所有A股股票列表 `get_all_stocks` 函数用于获取当前所有 A 股(沪深京)上市公司的基本信息列表,包括股票代码、名称等。 ```typescript import { get_all_stocks, StockInfo } from 'ashare-sdk-ts'; async function fetchAllStocksExample() { try { console.log('正在获取所有A股股票列表...'); // 调用函数获取所有股票信息 const allStocks: StockInfo[] = await get_all_stocks(); if (allStocks && allStocks.length > 0) { console.log(`成功获取到 ${allStocks.length} 只股票的基本信息。`); console.log('前 5 只股票信息:'); // 打印前5只股票的代码和名称 allStocks.slice(0, 5).forEach(stock => { console.log(` 代码: ${stock.code}, 名称: ${stock.name}`); }); } else { console.log('未能获取到股票列表或列表为空。'); } } catch (error) { console.error('获取所有股票列表时发生错误:', error); } } fetchAllStocksExample(); ``` 上述示例代码演示了如何调用 `get_all_stocks` 函数,并处理返回的股票信息数组。它会打印获取到的股票总数以及列表中的前几只股票的代码和名称。 ## API 文档 ### `get_price(code: string, end_date: string = '', count: number = 10, frequency: '1d' | '1w' | '1M' | '1m' | '5m' | '15m' | '30m' | '60m' = '1d'): Promise<StockData[]>` 获取股票行情数据。 - `code`: 股票代码 (例如 'sh000001') - `end_date`: 结束日期 (格式 'YYYY-MM-DD'),默认为空字符串。仅对日线('1d')、周线('1w')、月线('1M')频率有效,用于获取指定日期及之前的数据。对于分钟线频率无效。 - `count`: 获取的数据条数,默认为 10 - `frequency`: 数据频率,支持 '1d'(日线), '1w'(周线), '1M'(月线), '1m', '5m', '15m', '30m', '60m'(分钟线),默认为 '1d' - 返回: `Promise<StockData[]>` 股票行情数据数组 ### 工具函数 (utils.ts) - `RD(N: number, D: number = 3): number`: 四舍五入取指定位数小数。 - `RET(S: number[], N: number = 1): number | undefined`: 返回序列倒数第N个值。 - `ABS(S: number[]): number[]`: 返回序列中每个数值的绝对值。 - `MAX(S1: number[], S2: number[]): number[]`: 返回两个序列对应位置的最大值。 - `MIN(S1: number[], S2: number[]): number[]`: 返回两个序列对应位置的最小值。 - `MA(S: number[], N: number): number[]`: 求序列的N日平均值,返回序列。 - `REF(S: number[], N: number = 1): number[]`: 对序列整体下移动N,返回序列(shift后会产生NAN)。 - `DIFF(S: number[], N: number = 1): number[]`: 前一个值减后一个值,前面会产生nan。 - `STD(S: number[], N: number): number[]`: 求序列的N日标准差,返回序列。 - `IF(S_BOOL: boolean[], S_TRUE: any[], S_FALSE: any[]): any[]`: 序列布尔判断 res=S_TRUE if S_BOOL==True else S_FALSE。 - `SUM(S: number[], N: number): number[]`: 对序列求N天累计和,返回序列。 - `HHV(S: number[], N: number): number[]`: 最近N天最高价。 - `LLV(S: number[], N: number): number[]`: 最近N天最低价。 - `EMA(S: number[], N: number): number[]`: 指数移动平均。 - `SMA(S: number[], N: number, M: number = 1): number[]`: 中国式的SMA。 - `AVEDEV(S: number[], N: number): number[]`: 平均绝对偏差 (序列与其平均值的绝对差的平均值)。 - `SLOPE(S: number[], N: number, RS: boolean = false): number | number[]`: 返回S序列N周期回线性回归斜率。 - `FORCAST(S: number[], N: number): number`: 返回S序列N周期回线性回归后的预测值。 - `CROSS(S1: number[], S2: number[]): boolean[]`: 判断穿越 CROSS(MA(C,5),MA(C,10))。 - `COUNT(S_BOOL: boolean[], N: number): number[]`: 最近N天满足S_BOO的天数 True的天数。 - `EVERY(S_BOOL: boolean[], N: number): boolean[]`: 最近N天是否都是True。 - `LAST(S_BOOL: boolean[], A: number, B: number): boolean`: 从前A日到前B日一直满足S_BOOL条件。 - `EXIST(S_BOOL: boolean[], N: number = 5): boolean[]`: n日内是否存在一天大于3000点。 - `BARSLAST(S_BOOL: boolean[]): number`: 上一次条件成立到当前的周期。 ### 技术指标函数 (indicators.ts) - `MACD(close: number[], short: number = 12, long: number = 26, mid: number = 9): { DIF: number[], DEA: number[], MACD: number[] }`: 计算 MACD 指标。 - `KDJ(close: number[], high: number[], low: number[], N: number = 9, M1: number = 3, M2: number = 3): { K: number[], D: number[], J: number[] }`: 计算 KDJ 指标。 - `RSI(close: number[], N: number = 6): number[]`: 计算 RSI 指标。 - `WR(close: number[], high: number[], low: number[], N: number = 10, N1: number = 6): number[]`: 计算 WR 指标。 - `BIAS(close: number[], N: number = 6): number[]`: 计算 BIAS 指标。 - `BOLL(close: number[], N: number = 20): { MID: number[], UPPER: number[], LOWER: number[] }`: 计算 BOLL 指标。 - `PSY(close: number[], N: number = 12): number[]`: 计算 PSY 指标。 - `CCI(close: number[], high: number[], low: number[], N: number = 14): number[]`: 计算 CCI 指标。 - `ATR(close: number[], high: number[], low: number[], N: number = 14): number[]`: 计算 ATR 指标。 - `BBI(close: number[], M1: number = 3, M2: number = 6, M3: number = 12, M4: number = 24): number[]`: 计算 BBI 指标。 - `DMI(close: number[], high: number[], low: number[], N: number = 14, M: number = 6): { PDI: number[], MDI: number[], ADX: number[], ADXR: number[] }`: 计算 DMI 指标。 - `TAQ(high: number[], low: number[], N: number = 14): number[]`: 计算 TAQ 指标。 - `TRIX(close: number[], N: number = 12, M: number = 20): { TRIX: number[], MATRIX: number[] }`: 计算 TRIX 指标。 - `VR(close: number[], volume: number[], N: number = 26, M: number = 6): { VR: number[], MAVR: number[] }`: 计算 VR 指标。 - `EMV(high: number[], low: number[], volume: number[], N: number = 14, M: number = 9): { EMV: number[], MAEMV: number[] }`: 计算 EMV 指标。 - `DPO(close: number[], N: number = 20, M: number = 6): number[]`: 计算 DPO 指标。 - `BRAR(open: number[], high: number[], low: number[], close: number[], N: number = 26): { BR: number[], AR: number[] }`: 计算 BRAR 指标。 - `DMA(close: number[], A: number = 10, B: number = 50, M: number = 10): { DMA: number[], AMA: number[] }`: 计算 DMA 指标。 - `MTM(close: number[], N: number = 12, M: number = 6): { MTM: number[], MTMMA: number[] }`: 计算 MTM 指标。 - `ROC(close: number[], N: number = 12, M: number = 6): { ROC: number[], ROCMA: number[] }`: 计算 ROC 指标。 ## 输出 ``` 开始运行 Ashare SDK TypeScript Demo... --- 上证指数日线行情 (默认) --- 数据条数: 10 3 条数据: ┌─────────┬──────────────────────────┬──────────┬──────────┬──────────┬──────────┬─────────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼──────────┼──────────┼──────────┼──────────┼─────────────┤ 0 2025-04-14T00:00:00.000Z 3251.978 3262.808 3272.72 3244.733 47137322000 1 2025-04-15T00:00:00.000Z 3260.685 3267.662 3268.985 3246.337 39666289500 2 2025-04-16T00:00:00.000Z 3267.665 3276.004 3276.005 3233.791 42953485400 └─────────┴──────────────────────────┴──────────┴──────────┴──────────┴──────────┴─────────────┘ 3 条数据: ┌─────────┬──────────────────────────┬──────────┬──────────┬──────────┬──────────┬─────────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼──────────┼──────────┼──────────┼──────────┼─────────────┤ 0 2025-04-23T00:00:00.000Z 3308.151 3296.355 3312.192 3293.063 41163321200 1 2025-04-24T00:00:00.000Z 3295.149 3297.288 3313.509 3286.236 39284474900 2 2025-04-25T00:00:00.000Z 3300.392 3295.06 3305.262 3288.755 41104319200 └─────────┴──────────────────────────┴──────────┴──────────┴──────────┴──────────┴─────────────┘ --- End --- --- 上证指数日线行情 (count=5) --- 数据条数: 5 3 条数据: ┌─────────┬──────────────────────────┬──────────┬──────────┬──────────┬──────────┬─────────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼──────────┼──────────┼──────────┼──────────┼─────────────┤ 0 2025-04-21T00:00:00.000Z 3273.138 3291.434 3298.64 3270.013 37930758800 1 2025-04-22T00:00:00.000Z 3289.166 3299.757 3311.153 3288.332 40316761500 2 2025-04-23T00:00:00.000Z 3308.151 3296.355 3312.192 3293.063 41163321200 └─────────┴──────────────────────────┴──────────┴──────────┴──────────┴──────────┴─────────────┘ 3 条数据: ┌─────────┬──────────────────────────┬──────────┬──────────┬──────────┬──────────┬─────────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼──────────┼──────────┼──────────┼──────────┼─────────────┤ 0 2025-04-23T00:00:00.000Z 3308.151 3296.355 3312.192 3293.063 41163321200 1 2025-04-24T00:00:00.000Z 3295.149 3297.288 3313.509 3286.236 39284474900 2 2025-04-25T00:00:00.000Z 3300.392 3295.06 3305.262 3288.755 41104319200 └─────────┴──────────────────────────┴──────────┴──────────┴──────────┴──────────┴─────────────┘ --- End --- --- 上证指数历史日线行情 (end_date="2023-12-31", count=5) --- 数据条数: 5 3 条数据: ┌─────────┬──────────────────────────┬──────────┬──────────┬──────────┬──────────┬─────────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼──────────┼──────────┼──────────┼──────────┼─────────────┤ 0 2023-12-25T00:00:00.000Z 2909.875 2918.813 2920.632 2903.987 22981417800 1 2023-12-26T00:00:00.000Z 2917.971 2898.879 2917.971 2892.837 22814085500 2 2023-12-27T00:00:00.000Z 2900.149 2914.614 2917.956 2890.165 24790088200 └─────────┴──────────────────────────┴──────────┴──────────┴──────────┴──────────┴─────────────┘ 3 条数据: ┌─────────┬──────────────────────────┬──────────┬──────────┬──────────┬──────────┬─────────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼──────────┼──────────┼──────────┼──────────┼─────────────┤ 0 2023-12-27T00:00:00.000Z 2900.149 2914.614 2917.956 2890.165 24790088200 1 2023-12-28T00:00:00.000Z 2913.11 2954.704 2961.648 2909.389 33921311600 2 2023-12-29T00:00:00.000Z 2950.837 2974.935 2975.032 2950.017 29067268700 └─────────┴──────────────────────────┴──────────┴──────────┴──────────┴──────────┴─────────────┘ --- End --- --- 贵州茅台15分钟线 (count=5) --- 数据条数: 5 3 条数据: ┌─────────┬──────────────────────────┬─────────┬─────────┬─────────┬─────────┬────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼─────────┼─────────┼─────────┼─────────┼────────┤ 0 2025-04-25T06:00:00.000Z 1553.74 1552.83 1555.08 1552.25 49565 1 2025-04-25T06:15:00.000Z 1553.04 1551.07 1553.04 1550 135635 2 2025-04-25T06:30:00.000Z 1551.07 1552.96 1552.96 1551.01 49950 └─────────┴──────────────────────────┴─────────┴─────────┴─────────┴─────────┴────────┘ 3 条数据: ┌─────────┬──────────────────────────┬─────────┬─────────┬─────────┬─────────┬────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼─────────┼─────────┼─────────┼─────────┼────────┤ 0 2025-04-25T06:30:00.000Z 1551.07 1552.96 1552.96 1551.01 49950 1 2025-04-25T06:45:00.000Z 1552.96 1552.13 1554.95 1552.02 71400 2 2025-04-25T07:00:00.000Z 1552.14 1550 1552.14 1550 188570 └─────────┴──────────────────────────┴─────────┴─────────┴─────────┴─────────┴────────┘ --- End --- --- 贵州茅台60分钟线 (count=6) --- 数据条数: 6 3 条数据: ┌─────────┬──────────────────────────┬─────────┬─────────┬─────────┬─────────┬────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼─────────┼─────────┼─────────┼─────────┼────────┤ 0 2025-04-24T06:00:00.000Z 1554.23 1553.34 1557.88 1552.8 208010 1 2025-04-24T07:00:00.000Z 1553.93 1552.25 1554.7 1552.25 270528 2 2025-04-25T02:30:00.000Z 1557.1 1554.18 1561.2 1552.8 535596 └─────────┴──────────────────────────┴─────────┴─────────┴─────────┴─────────┴────────┘ 3 条数据: ┌─────────┬──────────────────────────┬─────────┬─────────┬─────────┬─────────┬────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼─────────┼─────────┼─────────┼─────────┼────────┤ 0 2025-04-25T03:30:00.000Z 1554.17 1556.1 1558.03 1551.58 291569 1 2025-04-25T06:00:00.000Z 1556.89 1552.83 1557.96 1552.25 203770 2 2025-04-25T07:00:00.000Z 1553.04 1550 1554.95 1550 445555 └─────────┴──────────────────────────┴─────────┴─────────┴─────────┴─────────┴────────┘ --- End --- --- 上证指数日线行情 (count=120) --- 数据条数: 120 3 条数据: ┌─────────┬──────────────────────────┬──────────┬──────────┬──────────┬──────────┬─────────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼──────────┼──────────┼──────────┼──────────┼─────────────┤ 0 2024-10-30T00:00:00.000Z 3273.642 3266.238 3291.68 3244.806 66901809000 1 2024-10-31T00:00:00.000Z 3267.975 3279.824 3295.742 3252.39 78464909400 2 2024-11-01T00:00:00.000Z 3275.577 3272.014 3305.318 3258.735 85205532000 └─────────┴──────────────────────────┴──────────┴──────────┴──────────┴──────────┴─────────────┘ 3 条数据: ┌─────────┬──────────────────────────┬──────────┬──────────┬──────────┬──────────┬─────────────┐ (index) time open close high low volume ├─────────┼──────────────────────────┼──────────┼──────────┼──────────┼──────────┼─────────────┤ 0 2025-04-23T00:00:00.000Z 3308.151 3296.355 3312.192 3293.063 41163321200 1 2025-04-24T00:00:00.000Z 3295.149 3297.288 3313.509 3286.236 39284474900 2 2025-04-25T00:00:00.000Z 3300.392 3295.06 3305.262 3288.755 41104319200 └─────────┴──────────────────────────┴──────────┴──────────┴──────────┴──────────┴─────────────┘ --- End --- --- 提取的收盘价序列 --- 数据条数: 120 5 条数据: [ '3266.24', '3279.82', '3272.01', '3310.21', '3386.99' ] 5 条数据: [ '3291.43', '3299.76', '3296.36', '3297.29', '3295.06' ] --- End --- --- MA5 指标 --- 数据条数: 120 5 条数据: [ 'NaN', 'NaN', 'NaN', 'NaN', '3303.05' ] 5 条数据: [ '3278.43', '3284.85', '3288.92', '3292.31', '3295.98' ] --- End --- --- MA10 指标 --- 数据条数: 120 5 条数据: [ 'NaN', 'NaN', 'NaN', 'NaN', 'NaN' ] 5 条数据: [ '3244.92', '3260.34', '3271.30', '3278.66', '3284.34' ] --- End --- --- BOLL 指标 (UP, MID, LOWER) --- 指标组数量: 3 指标 1 (前 5 条): [ 'NaN', 'NaN', 'NaN', 'NaN', 'NaN' ] 指标 1 (后 5 条): [ '3442.20', '3434.18', '3425.43', '3416.41', '3405.61' ] 指标 2 (前 5 条): [ 'NaN', 'NaN', 'NaN', 'NaN', 'NaN' ] 指标 2 (后 5 条): [ '3287.79', '3284.28', '3280.60', '3277.03', '3273.09' ] 指标 3 (前 5 条): [ 'NaN', 'NaN', 'NaN', 'NaN', 'NaN' ] 指标 3 (后 5 条): [ '3133.38', '3134.38', '3135.77', '3137.64', '3140.58' ] --- End --- 正在获取所有股票列表... --- 获取所有股票列表 --- 获取到的股票总数: 8829 5 只股票: ┌─────────┬──────────┬────────────┐ (index) code name ├─────────┼──────────┼────────────┤ 0 '600000' '浦发银行' 1 '600001' '邯郸钢铁' 2 '600002' '齐鲁石化' 3 '600003' 'ST东北高' 4 '600004' '白云机场' └─────────┴──────────┴────────────┘ 5 只股票: ┌─────────┬─────────┬────────────────┐ (index) code name ├─────────┼─────────┼────────────────┤ 0 '83690' '美团-WR' 1 '86618' '京东健康-R' 2 '89618' '京东集团-SWR' 3 '89888' '百度集团-SWR' 4 '89988' '阿里巴巴-WR' └─────────┴─────────┴────────────────┘ --- End --- Ashare SDK TypeScript Demo 运行结束。 ``` ## 示例 请参考 `demo.ts` ,了解如何使用各个函数。 ## 贡献 欢迎贡献代码!请提交 Pull Request。 ## 许可证 本项目采用 MIT 许可证。