关于 charting
charting 是用于生成市场数据图表的技能,面向需要查看价格走势、技术指标或资产对比的用户。它通过可独立运行的 Python 脚本和模板获取数据并绘图,涵盖加密货币、股票、外汇及大宗商品。
主要功能
- 01独立 Python 图表脚本
- 02K 线与技术指标模板
- 03支持资产对比图
- 04按周期选择数据间隔
- 05生成深色主题 PNG
适用场景
- 01查看加密货币价格走势
- 02分析价格趋势与动量指标
- 03比较不同资产的表现
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ starchild-ai-agent/ official-skills --skill charting安装后在 Claude Code 中输入/charting确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scripts/chart_comparison_template.pychart_stock_template.pychart_template.pychart_with_indicators.py详细介绍
图表绘制
⚠️ 严重:请勿调用数据工具
绝对不要在创建图表时调用 price_chart、get_coin_ohlc_range_by_id、twelvedata_time_series 或任何市场数据工具。图表脚本会在内部获取数据。调用这些工具会让上下文充斥 78KB 以上的不必要数据。
工作流(4 步):
- 从
skills/charting/scripts/读取模板 - 将脚本写入
scripts/ - 使用
bash运行脚本 - 对输出的 PNG 调用
read_file,然后使用 Markdown 图片语法展示:
你将生成 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 图片语法展示: - 脚本必须独立运行。 使用
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 证书,用于 SSLCOINGECKO_API_KEY/TWELVEDATA_API_KEY- 在代理环境中可以使用虚假值
如果缺少这些变量,这是环境配置问题,而不是脚本问题。