mcpField
C
charting

charting

github.com/starchild-ai-agent数据与数据库304.4k 次安装6 天前更新
代码仓库

关于 charting

charting 是用于生成市场数据图表的技能,面向需要查看价格走势、技术指标或资产对比的用户。它通过可独立运行的 Python 脚本和模板获取数据并绘图,涵盖加密货币、股票、外汇及大宗商品。

主要功能

  1. 01独立 Python 图表脚本
  2. 02K 线与技术指标模板
  3. 03支持资产对比图
  4. 04按周期选择数据间隔
  5. 05生成深色主题 PNG

适用场景

  1. 01查看加密货币价格走势
  2. 02分析价格趋势与动量指标
  3. 03比较不同资产的表现

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/starchild-ai-agent/official-skills --skill charting

安装后在 Claude Code 中输入/charting确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scripts/
chart_comparison_template.py
chart_stock_template.py
chart_template.py
chart_with_indicators.py

详细介绍

图表绘制

⚠️ 严重:请勿调用数据工具

绝对不要在创建图表时调用 price_chart、get_coin_ohlc_range_by_id、twelvedata_time_series 或任何市场数据工具。图表脚本会在内部获取数据。调用这些工具会让上下文充斥 78KB 以上的不必要数据。

工作流(4 步):

  1. 从 skills/charting/scripts/ 读取模板
  2. 将脚本写入 scripts/
  3. 使用 bash 运行脚本
  4. 对输出的 PNG 调用 read_file,然后使用 Markdown 图片语法展示:![Chart description](output/filename.png)

你将生成 TradingView 质量的蜡烛图。采用深色主题、简洁布局和专业配色。每张图表都是独立的 Python 脚本,不使用内部导入。

其他规则:

  • 图表脚本在工作区中运行,无法从 core 导入内容。请直接使用 requests 库,不要使用 proxied_get()。
  • 模板包含代理自动配置。如果存在 PROXY_HOST 环境变量,脚本会自动配置 HTTP_PROXY/HTTPS_PROXY。

工具:write_file、bash、read_file

如何选择图表类型

简单价格走势 → 使用不带指标的蜡烛图。适用于“展示一下 BTC 本月走势”。 趋势分析 → 添加 EMA/SMA 叠加线。适用于“ETH 处于上升趋势吗?” 动量检查 → 添加 RSI 或 MACD 子图。适用于“SOL 是否超买?” 完整技术分析视图 → 蜡烛图 + 布林带 + RSI + MACD。适用于“全面分析一下 BTC”。 成交量分析 → 需要从 market_chart 端点单独获取数据(OHLC 端点不包含成交量)。 资产对比 → 使用折线图比较两种资产(BTC 与黄金、ETH 与 S&P500 等)。使用对比模板进行归一化或百分比对比。

如何创建图表

读取并自定义 skills/charting/scripts/ 中的模板脚本:

  • chart_template.py — 采用 TradingView 样式的基础蜡烛图(通过 CoinGecko 获取加密货币数据)
  • chart_with_indicators.py — RSI、MACD、布林带、EMA/SMA 示例(通过 CoinGecko 获取加密货币数据)
  • chart_stock_template.py — 使用 Twelve Data API 绘制股票/外汇图表
  • chart_comparison_template.py — 对比两种资产(加密货币与大宗商品、股票与加密货币等)

将相关模板复制到 scripts/,自定义配置部分(币种、天数、指标),然后运行。

模板会在内部处理所有数据获取,并包含重试逻辑和错误处理。

注意: 这些模板用于市场数据可视化(价格图表、指标)。对于回测结果图表(权益曲线、回撤、绩效仪表板),请直接在回测脚本中添加 matplotlib 绘图代码——数据已经就绪,无需重新获取数据或创建单独的文件。

TradingView 调色板

元素颜色十六进制
上涨蜡烛蓝绿色#26a69a
下跌蜡烛红色#ef5350
背景深色#131722
网格低调的点线#1e222d
文本/坐标轴浅灰色#d1d4dc
均线蓝色/橙色#2196f3 / #ff9800
RSI 线紫色#b39ddb
MACD 线蓝色#2196f3
信号线橙色#ff9800

除非用户提出要求,否则请勿偏离此调色板。

数据源 API

CoinGecko(仅加密货币)

端点: https://pro-api.coingecko.com/api/v3/coins/{coin_id}/ohlc/range 身份验证: Header x-cg-pro-api-key: {COINGECKO_API_KEY} 用途: BTC、ETH、SOL 及所有加密货币

示例:

url = f"https://pro-api.coingecko.com/api/v3/coins/{COIN_ID}/ohlc/range"
params = {"vs_currency": "usd", "from": from_ts, "to": now, "interval": "daily"}
headers = {"x-cg-pro-api-key": os.getenv("COINGECKO_API_KEY")}
resp = requests.get(url, params=params, headers=headers)
raw = resp.json()  # [[timestamp_ms, open, high, low, close], ...]
Twelve Data(股票、外汇、商品)

端点: https://api.twelvedata.com/time_series 身份验证: 查询参数 apikey={TWELVEDATA_API_KEY} 用途: 股票(AAPL、MSFT)、外汇(EUR/USD)、商品(黄金对应的 XAU/USD)

常见符号:

  • 股票:AAPL、MSFT、GOOGL、TSLA、SPY
  • 外汇:EUR/USD、GBP/JPY、USD/CHF
  • 商品:XAU/USD(黄金)、XAG/USD(白银)、CL/USD(原油)

时间间隔: 1min、5min、15min、30min、1h、4h、1day、1week、1month

示例:

url = "https://api.twelvedata.com/time_series"
params = {
    "symbol": "XAU/USD",  # Gold spot price
    "interval": "1day",
    "outputsize": 90,  # Number of candles
    "apikey": os.getenv("TWELVEDATA_API_KEY")
}
resp = requests.get(url, params=params)
data = resp.json()
# data["values"] = [{"datetime": "2024-01-01", "open": "2050.00", "high": "2060.00", ...}, ...]

重要: Twelve Data 返回的数据按时间倒序排列(最新数据在前)。创建 DataFrame 前,务必反转列表:

values = data["values"][::-1]  # Reverse to oldest-first

时间间隔选择策略

现在,模板会自动选择最佳时间间隔,以尽量减少数据量,同时保持视觉效果:

时间范围自动选择的时间间隔理由
≤31 天每小时为短期分析提供高粒度数据
32-365 天每日细节充足,数据量较小
>365 天每日每日数据最适合观察长期趋势

覆盖设置: 在配置中设置 INTERVAL = "daily" 或 INTERVAL = "hourly",即可覆盖自动选择。

重要注意事项

  • savefig 的背景色:必须在 savefig 中设置 facecolor='#131722' 和 edgecolor='#131722',否则保存的 PNG 背景会恢复为白色。
  • 标题间距:在标题前加上 \n,以增加标题与顶部边缘的间距。
  • returnfig=True:需要在绘图后进行自定义(价格格式、注释)时使用。使用时,请手动调用 fig.savefig(),不要将 savefig 传给 mpf.plot()。
  • OHLC 中没有成交量:CoinGecko OHLC 端点仅返回 [timestamp_ms, open, high, low, close]。请使用 volume=False,或从 coin_chart 端点单独获取成交量。
  • 面板比例:添加指标子图时,设置 panel_ratios。例如,蜡烛图 + 成交量 + 一个指标可设为 (4, 1, 2),两个指标可设为 (5, 1, 2, 2)。
  • 图表尺寸:默认为 (14, 8)。添加子图时,增大为 (14, 10) 或 (14, 12)。

规则

  • 路径相对于工作区。 写入 scripts/foo.py,而不是 workspace/scripts/foo.py。bash 的当前工作目录已是工作区。
  • 始终保存到 output/ 目录。 使用 os.makedirs("output", exist_ok=True)。
  • 始终通过 bash("python3 scripts/<name>.py") 运行脚本,以验证其是否正常工作。
  • 始终对生成的 PNG 调用 read_file,然后使用 Markdown 图片语法展示: ![Chart](output/filename.png)
  • 脚本必须独立运行。 使用 requests + os.getenv()。不要使用内部导入,也不要使用 dotenv。
  • 关键:图表脚本中不要使用 proxied_get()。 图表脚本是独立的,在工作区中运行——无法从 core.http_client 导入内容。请始终直接使用 requests.get() 和 requests.post()。这是 PLATFORM.md 代理规则的例外,因为这些脚本在主 Star Child 进程之外执行。模板展示了正确模式。
  • 环境变量会被继承。 可直接使用 os.getenv("COINGECKO_API_KEY")。
  • 默认使用深色主题,除非用户要求浅色主题。
  • 文件名应描述图表内容。 例如,btc_30d_candles.png、eth_7d_rsi_macd.png。
  • 数据来源: 加密货币(BTC、ETH 等)使用 CoinGecko API。股票、外汇和商品(AAPL、EUR/USD、黄金对应的 XAU/USD)使用 Twelve Data API。不要混用 API——每个脚本只使用一个数据来源。
  • 考虑要衡量的内容: 创建图表前,先问自己:“用户想要解答什么问题?”将起点归一化为 100 的图表能显示相对趋势,但会隐藏实际收益幅度。如果用户想知道“哪个涨得更多”,或要比较投资表现,就需要显示实际倍数(例如 50 倍与 10 倍),而不只是看起来相似的线条。

故障排除

401 未授权错误

模板会根据 PROXY_HOST/PROXY_PORT 环境变量自动配置代理。如果出现 401 错误:

检查环境:

bash("env | grep -E 'PROXY|REQUESTS_CA'")

预期变量:

  • PROXY_HOST / PROXY_PORT - 代理地址(模板使用这些变量设置 HTTP_PROXY/HTTPS_PROXY)
  • REQUESTS_CA_BUNDLE - 代理 CA 证书,用于 SSL
  • COINGECKO_API_KEY / TWELVEDATA_API_KEY - 在代理环境中可以使用虚假值

如果缺少这些变量,这是环境配置问题,而不是脚本问题。

评论

支持 Markdown