文章目录
-
- [第六章:实战 --- 股票交易 Skill v1.0(需求与数据获取)](#第六章:实战 — 股票交易 Skill v1.0(需求与数据获取))
-
- [6.1 需求分析](#6.1 需求分析)
- [6.2 环境准备](#6.2 环境准备)
- [6.3 v1.0:数据获取 Skill](#6.3 v1.0:数据获取 Skill)
- [6.4 v1.0:Python 数据获取脚本](#6.4 v1.0:Python 数据获取脚本)
- [6.5 测试 v1.0](#6.5 测试 v1.0)
第六章:实战 --- 股票交易 Skill v1.0(需求与数据获取)
场景设定 :邀请"股票专家"和"Skill 开发专家"一起开发一个短期股票交易 Skill。
核心逻辑 :基于 A 股龙虎榜数据,分析主力动向,生成第二天买卖推荐。
数据工具:使用 AKShare(免费 Python 财经数据接口)。
6.1 需求分析
股票专家(角色 A)提出需求:
"短期交易的核心是跟庄。龙虎榜披露了每日涨幅偏离值达 7%、振幅达 15% 等异常股票的前五大买卖营业部。我们要:
- 获取当日龙虎榜数据
- 识别主力介入的股票(买入金额大、知名游资席位)
- 分析历史胜率:这个席位买入后第二天涨的概率
- 生成次日买卖推荐"
Skill 开发专家(角色 B)拆解为 Skill:
"这个需求可以拆成 3 个 Skill:
stock-data:获取龙虎榜数据stock-analysis:分析主力动向stock-signal:生成买卖信号先开发 v1.0,实现数据获取和基础分析。"
6.2 环境准备
bash
# 1. 创建项目目录
mkdir stock-trade-skill && cd stock-trade-skill
# 2. 初始化 Python 环境
python -m venv venv
source venv/bin/activate
# 3. 安装依赖
pip install akshare pandas numpy
# 4. 初始化 Claude Code 配置
mkdir -p .claude/skills
6.3 v1.0:数据获取 Skill
创建 .claude/skills/stock-data.md:
markdown
# 股票数据获取 Skill
## 描述
获取 A 股龙虎榜数据,为后续分析提供原始数据。
## 适用场景
- 用户说 "获取龙虎榜"
- 用户说 "今天哪些股票上榜"
- 用户说 "主力买了什么"
## 依赖
- Python 3.8+
- akshare
- pandas
## 执行步骤
1. 询问用户要查询的日期(默认:最近交易日)
2. 使用 akshare 获取龙虎榜数据:`ak.stock_lhb_detail_daily_sina()`
3. 清洗数据:去除空值、标准化列名
4. 保存到 `data/lhb_YYYYMMDD.csv`
5. 输出数据摘要(上榜股票数量、总买入金额、总卖出金额)
## 输出格式
龙虎榜数据获取完成
日期:2026-06-03
上榜股票:45 只
总买入金额:12.5 亿
总卖出金额:8.3 亿
净买入:4.2 亿
数据已保存至:data/lhb_20260603.csv
前 5 大净买入:
-
000001 平安银行 - 净买入 1.2 亿
-
000002 万科 A - 净买入 0.9 亿
-
...
示例
示例:获取今日龙虎榜
输入:"获取今天的龙虎榜"
输出:(如上格式)注意事项
- 交易日 16:00 后数据才完整
- 非交易日返回最近交易日数据
- AKShare 接口可能变动,需捕获异常
6.4 v1.0:Python 数据获取脚本
创建 src/fetch_lhb.py:
python
"""龙虎榜数据获取模块"""
import akshare as ak
import pandas as pd
from datetime import datetime, timedelta
import os
def get_recent_trade_date(date_str: str = None) -> str:
"""获取最近交易日"""
if date_str:
return date_str
# 简单处理:如果今天是周末,回退到周五
today = datetime.now()
weekday = today.weekday()
if weekday >= 5: # 周六或周日
days_back = weekday - 4 # 回退到周五
today = today - timedelta(days=days_back)
return today.strftime("%Y%m%d")
def fetch_lhb_data(date_str: str = None) -> pd.DataFrame:
"""
获取龙虎榜数据
Args:
date_str: 日期格式 YYYYMMDD,默认最近交易日
Returns:
DataFrame 包含龙虎榜数据
"""
date_str = get_recent_trade_date(date_str)
try:
# 获取龙虎榜详情数据
df = ak.stock_lhb_detail_daily_sina(start_date=date_str, end_date=date_str)
if df.empty:
print(f"警告:{date_str} 无龙虎榜数据")
return pd.DataFrame()
# 标准化列名
df.columns = [col.strip() for col in df.columns]
return df
except Exception as e:
print(f"获取数据失败: {e}")
return pd.DataFrame()
def save_lhb_data(df: pd.DataFrame, date_str: str):
"""保存龙虎榜数据到 CSV"""
os.makedirs("data", exist_ok=True)
filepath = f"data/lhb_{date_str}.csv"
df.to_csv(filepath, index=False, encoding="utf-8-sig")
print(f"数据已保存: {filepath}")
return filepath
def print_summary(df: pd.DataFrame, date_str: str):
"""打印数据摘要"""
if df.empty:
print("无数据")
return
# 统计
stock_count = df["代码"].nunique() if "代码" in df.columns else len(df)
print(f"\n{'='*50}")
print(f"龙虎榜数据获取完成")
print(f"日期: {date_str}")
print(f"上榜股票: {stock_count} 只")
print(f"{'='*50}\n")
# 显示前10条
print("前 10 条数据:")
print(df.head(10).to_string(index=False))
if __name__ == "__main__":
# 获取最近交易日数据
date_str = get_recent_trade_date()
print(f"正在获取 {date_str} 的龙虎榜数据...")
df = fetch_lhb_data(date_str)
if not df.empty:
save_lhb_data(df, date_str)
print_summary(df, date_str)
else:
print("未获取到数据")
6.5 测试 v1.0
bash
# 1. 激活环境
source venv/bin/activate
# 2. 运行数据获取
python src/fetch_lhb.py
# 3. 预期输出
正在获取 20260603 的龙虎榜数据...
数据已保存: data/lhb_20260603.csv
==================================================
龙虎榜数据获取完成
日期: 20260603
上榜股票: 45 只
==================================================
前 10 条数据:
代码 名称 买入金额 卖出金额 净买入 ...