@helloxiaohu/plugin-stock-market 0.0.2
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/README.md +134 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/market-client.d.ts +27 -0
- package/dist/lib/market-client.d.ts.map +1 -0
- package/dist/lib/market-client.js +698 -0
- package/dist/lib/market-client.js.map +1 -0
- package/dist/lib/stock-market.plugin.d.ts +10 -0
- package/dist/lib/stock-market.plugin.d.ts.map +1 -0
- package/dist/lib/stock-market.plugin.js +33 -0
- package/dist/lib/stock-market.plugin.js.map +1 -0
- package/dist/lib/stock-market.strategy.d.ts +119 -0
- package/dist/lib/stock-market.strategy.d.ts.map +1 -0
- package/dist/lib/stock-market.strategy.js +99 -0
- package/dist/lib/stock-market.strategy.js.map +1 -0
- package/dist/lib/tools/basic-info.tool.d.ts +16 -0
- package/dist/lib/tools/basic-info.tool.d.ts.map +1 -0
- package/dist/lib/tools/basic-info.tool.js +83 -0
- package/dist/lib/tools/basic-info.tool.js.map +1 -0
- package/dist/lib/tools/kline-history.tool.d.ts +26 -0
- package/dist/lib/tools/kline-history.tool.d.ts.map +1 -0
- package/dist/lib/tools/kline-history.tool.js +68 -0
- package/dist/lib/tools/kline-history.tool.js.map +1 -0
- package/dist/lib/tools/money-flow.tool.d.ts +16 -0
- package/dist/lib/tools/money-flow.tool.d.ts.map +1 -0
- package/dist/lib/tools/money-flow.tool.js +80 -0
- package/dist/lib/tools/money-flow.tool.js.map +1 -0
- package/dist/lib/tools/quote-realtime.tool.d.ts +16 -0
- package/dist/lib/tools/quote-realtime.tool.d.ts.map +1 -0
- package/dist/lib/tools/quote-realtime.tool.js +65 -0
- package/dist/lib/tools/quote-realtime.tool.js.map +1 -0
- package/dist/lib/tools/technical-indicators.tool.d.ts +16 -0
- package/dist/lib/tools/technical-indicators.tool.d.ts.map +1 -0
- package/dist/lib/tools/technical-indicators.tool.js +88 -0
- package/dist/lib/tools/technical-indicators.tool.js.map +1 -0
- package/dist/lib/tools/us-stock-search.tool.d.ts +16 -0
- package/dist/lib/tools/us-stock-search.tool.d.ts.map +1 -0
- package/dist/lib/tools/us-stock-search.tool.js +42 -0
- package/dist/lib/tools/us-stock-search.tool.js.map +1 -0
- package/dist/lib/toolset.d.ts +10 -0
- package/dist/lib/toolset.d.ts.map +1 -0
- package/dist/lib/toolset.js +31 -0
- package/dist/lib/toolset.js.map +1 -0
- package/dist/lib/types.d.ts +85 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +13 -0
- package/dist/lib/types.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 资金流向工具
|
|
3
|
+
*/
|
|
4
|
+
import { tool } from '@langchain/core/tools';
|
|
5
|
+
import { getErrorMessage } from '@xpert-ai/plugin-sdk';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { fetchMoneyFlow, detectMarket } from '../market-client.js';
|
|
8
|
+
import { MarketType } from '../types.js';
|
|
9
|
+
export function buildMoneyFlowTool() {
|
|
10
|
+
return tool(async (input) => {
|
|
11
|
+
try {
|
|
12
|
+
const code = input.code.trim();
|
|
13
|
+
if (!code) {
|
|
14
|
+
throw new Error('请提供有效的股票代码');
|
|
15
|
+
}
|
|
16
|
+
const market = detectMarket(code);
|
|
17
|
+
if (market === MarketType.US) {
|
|
18
|
+
return '资金流向数据暂不支持美股,仅支持A股';
|
|
19
|
+
}
|
|
20
|
+
if (market === MarketType.HK) {
|
|
21
|
+
return '资金流向数据暂不支持港股,仅支持A股';
|
|
22
|
+
}
|
|
23
|
+
const flow = await fetchMoneyFlow(code);
|
|
24
|
+
if (!flow) {
|
|
25
|
+
return `【资金流向 ${code}】${market === MarketType.SH ? '沪A' : '深A'}
|
|
26
|
+
|
|
27
|
+
暂未获取到实时资金流向数据。
|
|
28
|
+
可能原因:
|
|
29
|
+
- 数据源接口短时无数据
|
|
30
|
+
- 非交易时段或数据延迟
|
|
31
|
+
- 股票代码不在支持范围
|
|
32
|
+
|
|
33
|
+
建议:
|
|
34
|
+
- 稍后重试
|
|
35
|
+
- 使用 stock_quote_realtime 先确认标的可正常查询`;
|
|
36
|
+
}
|
|
37
|
+
const formatAmount = (value) => {
|
|
38
|
+
if (Math.abs(value) >= 100000000) {
|
|
39
|
+
return `${(value / 100000000).toFixed(2)}亿`;
|
|
40
|
+
}
|
|
41
|
+
return `${(value / 10000).toFixed(2)}万`;
|
|
42
|
+
};
|
|
43
|
+
const formatSign = (value) => value >= 0 ? '+' : '';
|
|
44
|
+
const marketLabel = market === MarketType.SH ? '沪A' : '深A';
|
|
45
|
+
const result = `【资金流向 ${code}】${marketLabel}
|
|
46
|
+
|
|
47
|
+
主力净流入: ${formatSign(flow.mainNetInflow)}${formatAmount(flow.mainNetInflow)} (${formatSign(flow.mainNetInflowPercent)}${flow.mainNetInflowPercent.toFixed(2)}%)
|
|
48
|
+
|
|
49
|
+
详细分类:
|
|
50
|
+
超大单: ${formatSign(flow.superLargeNetInflow)}${formatAmount(flow.superLargeNetInflow)}
|
|
51
|
+
大单: ${formatSign(flow.largeNetInflow)}${formatAmount(flow.largeNetInflow)}
|
|
52
|
+
中单: ${formatSign(flow.mediumNetInflow)}${formatAmount(flow.mediumNetInflow)}
|
|
53
|
+
小单: ${formatSign(flow.smallNetInflow)}${formatAmount(flow.smallNetInflow)}
|
|
54
|
+
|
|
55
|
+
说明:
|
|
56
|
+
- 正值表示净流入,负值表示净流出
|
|
57
|
+
- 超大单: 单笔成交额>100万
|
|
58
|
+
- 大单: 20万<单笔成交额≤100万
|
|
59
|
+
- 中单: 5万<单笔成交额≤20万
|
|
60
|
+
- 小单: 单笔成交额≤5万
|
|
61
|
+
|
|
62
|
+
更新时间: ${flow.time || 'N/A'}`;
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
throw new Error(`获取资金流向失败: ${getErrorMessage(error)}`);
|
|
67
|
+
}
|
|
68
|
+
}, {
|
|
69
|
+
name: 'stock_money_flow',
|
|
70
|
+
description: `获取A股主力资金流向数据。
|
|
71
|
+
仅支持A股市场:
|
|
72
|
+
- 上海证券交易所 (6开头)
|
|
73
|
+
- 深圳证券交易所 (0/3开头)
|
|
74
|
+
返回主力净流入、超大单、大单、中单、小单等资金流向数据。`,
|
|
75
|
+
schema: z.object({
|
|
76
|
+
code: z.string().describe('A股股票代码,如: 600519, 000001')
|
|
77
|
+
})
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=money-flow.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"money-flow.tool.js","sourceRoot":"","sources":["../../../src/lib/tools/money-flow.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 实时行情工具
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export declare function buildQuoteRealtimeTool(): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
6
|
+
codes: z.ZodString;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
codes?: string;
|
|
9
|
+
}, {
|
|
10
|
+
codes?: string;
|
|
11
|
+
}>, {
|
|
12
|
+
codes?: string;
|
|
13
|
+
}, {
|
|
14
|
+
codes?: string;
|
|
15
|
+
}, string>;
|
|
16
|
+
//# sourceMappingURL=quote-realtime.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quote-realtime.tool.d.ts","sourceRoot":"","sources":["../../../src/lib/tools/quote-realtime.tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,wBAAgB,sBAAsB;;;;;;;;;;WAoErC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 实时行情工具
|
|
3
|
+
*/
|
|
4
|
+
import { tool } from '@langchain/core/tools';
|
|
5
|
+
import { getErrorMessage } from '@xpert-ai/plugin-sdk';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { fetchRealtimeQuotes } from '../market-client.js';
|
|
8
|
+
import { MarketType } from '../types.js';
|
|
9
|
+
export function buildQuoteRealtimeTool() {
|
|
10
|
+
return tool(async (input) => {
|
|
11
|
+
try {
|
|
12
|
+
const codes = input.codes.split(',').map((c) => c.trim()).filter(Boolean);
|
|
13
|
+
if (codes.length === 0) {
|
|
14
|
+
throw new Error('请提供有效的股票代码');
|
|
15
|
+
}
|
|
16
|
+
const quotes = await fetchRealtimeQuotes(codes);
|
|
17
|
+
if (quotes.size === 0) {
|
|
18
|
+
throw new Error('未获取到股票数据,请检查股票代码是否正确');
|
|
19
|
+
}
|
|
20
|
+
const results = [];
|
|
21
|
+
quotes.forEach((quote, code) => {
|
|
22
|
+
const changeSign = quote.change >= 0 ? '+' : '';
|
|
23
|
+
const marketLabel = {
|
|
24
|
+
[MarketType.SH]: '沪A',
|
|
25
|
+
[MarketType.SZ]: '深A',
|
|
26
|
+
[MarketType.HK]: '港股',
|
|
27
|
+
[MarketType.US]: '美股'
|
|
28
|
+
}[quote.market];
|
|
29
|
+
const currency = quote.market === MarketType.HK ? '港元' :
|
|
30
|
+
quote.market === MarketType.US ? '美元' : '元';
|
|
31
|
+
const volumeStr = quote.market === MarketType.US
|
|
32
|
+
? `${(quote.volume / 1000000).toFixed(2)}百万股`
|
|
33
|
+
: `${(quote.volume / 10000).toFixed(2)}万股`;
|
|
34
|
+
const amountStr = quote.market === MarketType.US
|
|
35
|
+
? quote.amount > 0 ? `${(quote.amount / 1000000).toFixed(2)}百万美元` : 'N/A'
|
|
36
|
+
: `${(quote.amount / 100000000).toFixed(2)}亿`;
|
|
37
|
+
results.push(`【${quote.name}(${quote.code})】${marketLabel}\n` +
|
|
38
|
+
` 当前价: ${quote.price.toFixed(2)} ${currency}\n` +
|
|
39
|
+
` 涨跌额: ${changeSign}${quote.change.toFixed(2)}\n` +
|
|
40
|
+
` 涨跌幅: ${changeSign}${quote.changePercent.toFixed(2)}%\n` +
|
|
41
|
+
` 今开: ${quote.open.toFixed(2)} | 最高: ${quote.high.toFixed(2)} | 最低: ${quote.low.toFixed(2)}\n` +
|
|
42
|
+
` 昨收: ${quote.preClose.toFixed(2)}\n` +
|
|
43
|
+
` 成交量: ${volumeStr}${quote.market !== MarketType.US ? ` | 成交额: ${amountStr}` : ''}\n` +
|
|
44
|
+
` 更新: ${quote.time || 'N/A'}`);
|
|
45
|
+
});
|
|
46
|
+
return results.join('\n\n');
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new Error(`获取实时行情失败: ${getErrorMessage(error)}`);
|
|
50
|
+
}
|
|
51
|
+
}, {
|
|
52
|
+
name: 'stock_quote_realtime',
|
|
53
|
+
description: `获取A股、港股和美股的实时行情数据。
|
|
54
|
+
支持市场:
|
|
55
|
+
- 上海证券交易所 (6开头)
|
|
56
|
+
- 深圳证券交易所 (0/3开头)
|
|
57
|
+
- 香港联合交易所 (5位代码)
|
|
58
|
+
- 美国股市 (字母代码如 AAPL, TSLA, GOOGL)
|
|
59
|
+
返回实时价格、涨跌幅、成交量等信息。`,
|
|
60
|
+
schema: z.object({
|
|
61
|
+
codes: z.string().describe('股票代码,多个用逗号分隔,如: 600519,000001,00700,AAPL,TSLA')
|
|
62
|
+
})
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=quote-realtime.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quote-realtime.tool.js","sourceRoot":"","sources":["../../../src/lib/tools/quote-realtime.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 技术指标工具
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export declare function buildTechnicalIndicatorsTool(): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
6
|
+
code: z.ZodString;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
code?: string;
|
|
9
|
+
}, {
|
|
10
|
+
code?: string;
|
|
11
|
+
}>, {
|
|
12
|
+
code?: string;
|
|
13
|
+
}, {
|
|
14
|
+
code?: string;
|
|
15
|
+
}, string>;
|
|
16
|
+
//# sourceMappingURL=technical-indicators.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technical-indicators.tool.d.ts","sourceRoot":"","sources":["../../../src/lib/tools/technical-indicators.tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,wBAAgB,4BAA4B;;;;;;;;;;WA0F3C"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 技术指标工具
|
|
3
|
+
*/
|
|
4
|
+
import { tool } from '@langchain/core/tools';
|
|
5
|
+
import { getErrorMessage } from '@xpert-ai/plugin-sdk';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { fetchKlineData, calculateMA, calculateMACD, calculateRSI, calculateKDJ, detectMarket } from '../market-client.js';
|
|
8
|
+
import { MarketType } from '../types.js';
|
|
9
|
+
export function buildTechnicalIndicatorsTool() {
|
|
10
|
+
return tool(async (input) => {
|
|
11
|
+
try {
|
|
12
|
+
const code = input.code.trim();
|
|
13
|
+
if (!code) {
|
|
14
|
+
throw new Error('请提供有效的股票代码');
|
|
15
|
+
}
|
|
16
|
+
const market = detectMarket(code);
|
|
17
|
+
if (market === MarketType.US) {
|
|
18
|
+
throw new Error('暂不支持美股技术指标');
|
|
19
|
+
}
|
|
20
|
+
const klineData = await fetchKlineData(code, 'day', 100);
|
|
21
|
+
if (!klineData || klineData.data.length < 35) {
|
|
22
|
+
throw new Error('数据不足,无法计算技术指标');
|
|
23
|
+
}
|
|
24
|
+
const data = klineData.data;
|
|
25
|
+
const latest = data[data.length - 1];
|
|
26
|
+
const ma = calculateMA(data, [5, 10, 20, 30, 60]);
|
|
27
|
+
const macd = calculateMACD(data);
|
|
28
|
+
const rsi6 = calculateRSI(data, 6);
|
|
29
|
+
const rsi12 = calculateRSI(data, 12);
|
|
30
|
+
const rsi24 = calculateRSI(data, 24);
|
|
31
|
+
const kdj = calculateKDJ(data);
|
|
32
|
+
let output = `【${code}】技术指标分析\n\n`;
|
|
33
|
+
output += `均线系统 (MA):\n`;
|
|
34
|
+
Object.entries(ma).forEach(([key, value]) => {
|
|
35
|
+
const diff = latest.close - value;
|
|
36
|
+
const sign = diff >= 0 ? '+' : '';
|
|
37
|
+
output += ` ${key.toUpperCase()}: ${value.toFixed(2)} (${sign}${diff.toFixed(2)})\n`;
|
|
38
|
+
});
|
|
39
|
+
if (macd) {
|
|
40
|
+
output += `\nMACD指标:\n`;
|
|
41
|
+
output += ` DIF: ${macd.dif.toFixed(2)}\n`;
|
|
42
|
+
output += ` DEA: ${macd.dea.toFixed(2)}\n`;
|
|
43
|
+
output += ` MACD: ${macd.macd.toFixed(2)} ${macd.macd > 0 ? '(多头)' : '(空头)'}\n`;
|
|
44
|
+
}
|
|
45
|
+
if (rsi6 !== null || rsi12 !== null || rsi24 !== null) {
|
|
46
|
+
output += `\nRSI指标:\n`;
|
|
47
|
+
if (rsi6 !== null)
|
|
48
|
+
output += ` RSI(6): ${rsi6.toFixed(2)} ${rsi6 > 70 ? '(超买)' : rsi6 < 30 ? '(超卖)' : ''}\n`;
|
|
49
|
+
if (rsi12 !== null)
|
|
50
|
+
output += ` RSI(12): ${rsi12.toFixed(2)}\n`;
|
|
51
|
+
if (rsi24 !== null)
|
|
52
|
+
output += ` RSI(24): ${rsi24.toFixed(2)}\n`;
|
|
53
|
+
}
|
|
54
|
+
if (kdj) {
|
|
55
|
+
output += `\nKDJ指标:\n`;
|
|
56
|
+
output += ` K: ${kdj.k.toFixed(2)}\n`;
|
|
57
|
+
output += ` D: ${kdj.d.toFixed(2)}\n`;
|
|
58
|
+
output += ` J: ${kdj.j.toFixed(2)}\n`;
|
|
59
|
+
}
|
|
60
|
+
output += `\n价格位置:\n`;
|
|
61
|
+
output += ` 当前价: ${latest.close.toFixed(2)}\n`;
|
|
62
|
+
if (ma.ma5) {
|
|
63
|
+
const ma5Status = latest.close > ma.ma5 ? '站上' : '跌破';
|
|
64
|
+
output += ` 相对MA5: ${ma5Status} (${((latest.close / ma.ma5 - 1) * 100).toFixed(2)}%)\n`;
|
|
65
|
+
}
|
|
66
|
+
if (ma.ma20) {
|
|
67
|
+
const ma20Status = latest.close > ma.ma20 ? '站上' : '跌破';
|
|
68
|
+
output += ` 相对MA20: ${ma20Status} (${((latest.close / ma.ma20 - 1) * 100).toFixed(2)}%)\n`;
|
|
69
|
+
}
|
|
70
|
+
return output;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw new Error(`计算技术指标失败: ${getErrorMessage(error)}`);
|
|
74
|
+
}
|
|
75
|
+
}, {
|
|
76
|
+
name: 'stock_technical_indicators',
|
|
77
|
+
description: `计算股票技术指标,包括:
|
|
78
|
+
- 移动平均线 (MA5/10/20/30/60)
|
|
79
|
+
- MACD指标 (DIF/DEA/MACD)
|
|
80
|
+
- RSI指标 (6/12/24日)
|
|
81
|
+
- KDJ指标
|
|
82
|
+
返回指标数值和简单分析。`,
|
|
83
|
+
schema: z.object({
|
|
84
|
+
code: z.string().describe('股票代码,如: 600519, 00700')
|
|
85
|
+
})
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=technical-indicators.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technical-indicators.tool.js","sourceRoot":"","sources":["../../../src/lib/tools/technical-indicators.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 美股搜索工具
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
export declare function buildUSSearchTool(): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
|
|
6
|
+
keyword: z.ZodString;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
keyword?: string;
|
|
9
|
+
}, {
|
|
10
|
+
keyword?: string;
|
|
11
|
+
}>, {
|
|
12
|
+
keyword?: string;
|
|
13
|
+
}, {
|
|
14
|
+
keyword?: string;
|
|
15
|
+
}, string>;
|
|
16
|
+
//# sourceMappingURL=us-stock-search.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"us-stock-search.tool.d.ts","sourceRoot":"","sources":["../../../src/lib/tools/us-stock-search.tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,wBAAgB,iBAAiB;;;;;;;;;;WA0ChC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 美股搜索工具
|
|
3
|
+
*/
|
|
4
|
+
import { tool } from '@langchain/core/tools';
|
|
5
|
+
import { getErrorMessage } from '@xpert-ai/plugin-sdk';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
import { searchStock } from '../market-client.js';
|
|
8
|
+
export function buildUSSearchTool() {
|
|
9
|
+
return tool(async (input) => {
|
|
10
|
+
try {
|
|
11
|
+
const keyword = input.keyword.trim();
|
|
12
|
+
if (!keyword) {
|
|
13
|
+
throw new Error('请提供有效的搜索关键词');
|
|
14
|
+
}
|
|
15
|
+
const results = await searchStock(keyword);
|
|
16
|
+
if (results.length === 0) {
|
|
17
|
+
return `未找到匹配 "${keyword}" 的美股,请尝试其他关键词`;
|
|
18
|
+
}
|
|
19
|
+
const lines = [`找到 ${results.length} 个匹配 "${keyword}" 的美股:\n`];
|
|
20
|
+
for (const item of results) {
|
|
21
|
+
const typeLabel = item.type === 'ETF' ? 'ETF' : '股票';
|
|
22
|
+
lines.push(`【${item.code}】${item.name} (${typeLabel})`);
|
|
23
|
+
}
|
|
24
|
+
lines.push('\n提示: 使用股票代码查询实时行情,例如 AAPL, TSLA, GOOGL');
|
|
25
|
+
return lines.join('\n');
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
throw new Error(`美股搜索失败: ${getErrorMessage(error)}`);
|
|
29
|
+
}
|
|
30
|
+
}, {
|
|
31
|
+
name: 'stock_us_search',
|
|
32
|
+
description: `搜索美股股票代码和名称。
|
|
33
|
+
支持搜索:
|
|
34
|
+
- 美股上市公司 (如 Apple, Tesla, Google)
|
|
35
|
+
- ETF基金 (如 SPY, QQQ)
|
|
36
|
+
输入公司名称或股票代码的一部分进行搜索。`,
|
|
37
|
+
schema: z.object({
|
|
38
|
+
keyword: z.string().describe('搜索关键词,可以是公司名称或股票代码,如: Apple, Tesla, AAPL')
|
|
39
|
+
})
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=us-stock-search.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"us-stock-search.tool.js","sourceRoot":"","sources":["../../../src/lib/tools/us-stock-search.tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CACT,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;YAChC,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YAE1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,UAAU,OAAO,gBAAgB,CAAA;YAC1C,CAAC;YAED,MAAM,KAAK,GAAa,CAAC,MAAM,OAAO,CAAC,MAAM,SAAS,OAAO,UAAU,CAAC,CAAA;YAExE,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;gBACpD,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,CAAC,CAAA;YACzD,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;YAErD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,WAAW,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACtD,CAAC;IACH,CAAC,EACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE;;;;qBAIE;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACzE,CAAC;KACH,CACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 股票行情工具集
|
|
3
|
+
*/
|
|
4
|
+
import { BuiltinToolset } from '@xpert-ai/plugin-sdk';
|
|
5
|
+
export declare class StockMarketToolset extends BuiltinToolset {
|
|
6
|
+
validateCredentials(credentials: Record<string, never>): Promise<void>;
|
|
7
|
+
_validateCredentials(credentials: Record<string, never>): Promise<void>;
|
|
8
|
+
initTools(): Promise<any[]>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=toolset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolset.d.ts","sourceRoot":"","sources":["../../src/lib/toolset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAQrD,qBAAa,kBAAmB,SAAQ,cAAc;IAErC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;CAW3C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 股票行情工具集
|
|
3
|
+
*/
|
|
4
|
+
import { BuiltinToolset } from '@xpert-ai/plugin-sdk';
|
|
5
|
+
import { buildQuoteRealtimeTool } from './tools/quote-realtime.tool.js';
|
|
6
|
+
import { buildKlineHistoryTool } from './tools/kline-history.tool.js';
|
|
7
|
+
import { buildTechnicalIndicatorsTool } from './tools/technical-indicators.tool.js';
|
|
8
|
+
import { buildBasicInfoTool } from './tools/basic-info.tool.js';
|
|
9
|
+
import { buildUSSearchTool } from './tools/us-stock-search.tool.js';
|
|
10
|
+
import { buildMoneyFlowTool } from './tools/money-flow.tool.js';
|
|
11
|
+
export class StockMarketToolset extends BuiltinToolset {
|
|
12
|
+
// Keep compatibility with different SDK implementations.
|
|
13
|
+
async validateCredentials(credentials) {
|
|
14
|
+
await this._validateCredentials(credentials);
|
|
15
|
+
}
|
|
16
|
+
async _validateCredentials(credentials) {
|
|
17
|
+
// 新浪财经API无需凭证,免费使用
|
|
18
|
+
}
|
|
19
|
+
async initTools() {
|
|
20
|
+
this.tools = [
|
|
21
|
+
buildQuoteRealtimeTool(),
|
|
22
|
+
buildKlineHistoryTool(),
|
|
23
|
+
buildTechnicalIndicatorsTool(),
|
|
24
|
+
buildBasicInfoTool(),
|
|
25
|
+
buildUSSearchTool(),
|
|
26
|
+
buildMoneyFlowTool(),
|
|
27
|
+
];
|
|
28
|
+
return this.tools;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=toolset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolset.js","sourceRoot":"","sources":["../../src/lib/toolset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAE/D,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IACpD,yDAAyD;IAChD,KAAK,CAAC,mBAAmB,CAAC,WAAkC;QACnE,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;IAC9C,CAAC;IAEQ,KAAK,CAAC,oBAAoB,CAAC,WAAkC;QACpE,mBAAmB;IACrB,CAAC;IAEQ,KAAK,CAAC,SAAS;QACtB,IAAI,CAAC,KAAK,GAAG;YACX,sBAAsB,EAAE;YACxB,qBAAqB,EAAE;YACvB,4BAA4B,EAAE;YAC9B,kBAAkB,EAAE;YACpB,iBAAiB,EAAE;YACnB,kBAAkB,EAAE;SACrB,CAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 股票行情工具集类型定义
|
|
3
|
+
*/
|
|
4
|
+
export declare const StockMarketProvider = "stock-market";
|
|
5
|
+
export declare enum MarketType {
|
|
6
|
+
SH = "sh",
|
|
7
|
+
SZ = "sz",
|
|
8
|
+
HK = "hk",
|
|
9
|
+
US = "us"
|
|
10
|
+
}
|
|
11
|
+
export interface StockQuote {
|
|
12
|
+
code: string;
|
|
13
|
+
name: string;
|
|
14
|
+
market: MarketType;
|
|
15
|
+
price: number;
|
|
16
|
+
open: number;
|
|
17
|
+
high: number;
|
|
18
|
+
low: number;
|
|
19
|
+
preClose: number;
|
|
20
|
+
volume: number;
|
|
21
|
+
amount: number;
|
|
22
|
+
change: number;
|
|
23
|
+
changePercent: number;
|
|
24
|
+
time: string;
|
|
25
|
+
source?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface KlineData {
|
|
28
|
+
code: string;
|
|
29
|
+
market: MarketType;
|
|
30
|
+
period: string;
|
|
31
|
+
data: KlinePoint[];
|
|
32
|
+
}
|
|
33
|
+
export interface KlinePoint {
|
|
34
|
+
date: string;
|
|
35
|
+
open: number;
|
|
36
|
+
high: number;
|
|
37
|
+
low: number;
|
|
38
|
+
close: number;
|
|
39
|
+
volume: number;
|
|
40
|
+
amount?: number;
|
|
41
|
+
}
|
|
42
|
+
export interface TechnicalIndicators {
|
|
43
|
+
code: string;
|
|
44
|
+
market: MarketType;
|
|
45
|
+
indicators: {
|
|
46
|
+
ma?: {
|
|
47
|
+
[period: string]: number;
|
|
48
|
+
};
|
|
49
|
+
macd?: {
|
|
50
|
+
dif: number;
|
|
51
|
+
dea: number;
|
|
52
|
+
macd: number;
|
|
53
|
+
};
|
|
54
|
+
rsi?: {
|
|
55
|
+
[period: string]: number;
|
|
56
|
+
};
|
|
57
|
+
kdj?: {
|
|
58
|
+
k: number;
|
|
59
|
+
d: number;
|
|
60
|
+
j: number;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
time: string;
|
|
64
|
+
}
|
|
65
|
+
export interface StockSearchResult {
|
|
66
|
+
code: string;
|
|
67
|
+
name: string;
|
|
68
|
+
market: MarketType;
|
|
69
|
+
type?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface MoneyFlow {
|
|
72
|
+
code: string;
|
|
73
|
+
name: string;
|
|
74
|
+
market: MarketType;
|
|
75
|
+
mainNetInflow: number;
|
|
76
|
+
mainNetInflowPercent: number;
|
|
77
|
+
superLargeNetInflow: number;
|
|
78
|
+
largeNetInflow: number;
|
|
79
|
+
mediumNetInflow: number;
|
|
80
|
+
smallNetInflow: number;
|
|
81
|
+
time: string;
|
|
82
|
+
source?: string;
|
|
83
|
+
}
|
|
84
|
+
export declare const icon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNGE5MGUyIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgPHBvbHlsaW5lIHBvaW50cz0iMjIgMTIgMTggMTIgMTUgMjEgOSAzIDEyIDkgNiA5Ij48L3BvbHlsaW5lPgogIDxsaW5lIHgxPSIyIiB5MT0iMTIiIHgyPSIyMiIgeTI9IjEyIj48L2xpbmU+Cjwvc3ZnPg==";
|
|
85
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,mBAAmB,iBAAiB,CAAA;AAEjD,oBAAY,UAAU;IACpB,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;CACV;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,UAAU,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,UAAU,EAAE;QACV,EAAE,CAAC,EAAE;YAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAA;QACjC,IAAI,CAAC,EAAE;YACL,GAAG,EAAE,MAAM,CAAA;YACX,GAAG,EAAE,MAAM,CAAA;YACX,IAAI,EAAE,MAAM,CAAA;SACb,CAAA;QACD,GAAG,CAAC,EAAE;YAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAA;QAClC,GAAG,CAAC,EAAE;YACJ,CAAC,EAAE,MAAM,CAAA;YACT,CAAC,EAAE,MAAM,CAAA;YACT,CAAC,EAAE,MAAM,CAAA;SACV,CAAA;KACF,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,IAAI,2YAA2Y,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 股票行情工具集类型定义
|
|
3
|
+
*/
|
|
4
|
+
export const StockMarketProvider = 'stock-market';
|
|
5
|
+
export var MarketType;
|
|
6
|
+
(function (MarketType) {
|
|
7
|
+
MarketType["SH"] = "sh";
|
|
8
|
+
MarketType["SZ"] = "sz";
|
|
9
|
+
MarketType["HK"] = "hk";
|
|
10
|
+
MarketType["US"] = "us";
|
|
11
|
+
})(MarketType || (MarketType = {}));
|
|
12
|
+
export const icon = `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNGE5MGUyIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgPHBvbHlsaW5lIHBvaW50cz0iMjIgMTIgMTggMTIgMTUgMjEgOSAzIDEyIDkgNiA5Ij48L3BvbHlsaW5lPgogIDxsaW5lIHgxPSIyIiB5MT0iMTIiIHgyPSIyMiIgeTI9IjEyIj48L2xpbmU+Cjwvc3ZnPg==`;
|
|
13
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEjD,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,uBAAS,CAAA;IACT,uBAAS,CAAA;IACT,uBAAS,CAAA;AACX,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AA6ED,MAAM,CAAC,MAAM,IAAI,GAAG,wYAAwY,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@helloxiaohu/plugin-stock-market",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/xpert-ai/xpert-plugins"
|
|
7
|
+
},
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
"./package.json": "./package.json",
|
|
14
|
+
".": {
|
|
15
|
+
"@xpert-plugins-starter/source": "./src/index.ts",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.js",
|
|
18
|
+
"default": "./dist/index.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"!**/*.tsbuildinfo"
|
|
24
|
+
],
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"iconv-lite": "^0.7.0",
|
|
27
|
+
"tslib": "^2.3.0"
|
|
28
|
+
},
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"@xpert-ai/plugin-sdk": "^3.6.2",
|
|
31
|
+
"zod": "3.25.67",
|
|
32
|
+
"chalk": "4.1.2",
|
|
33
|
+
"@nestjs/config": "^4.0.2",
|
|
34
|
+
"@nestjs/common": "^11.1.6",
|
|
35
|
+
"@langchain/core": "0.3.72"
|
|
36
|
+
}
|
|
37
|
+
}
|