首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何利用AI大模型对股票池个股进行打分

如何利用AI大模型对股票池个股进行打分

作者头像
子晓聊技术
发布2026-04-23 15:58:18
发布2026-04-23 15:58:18
1390
举报
文章被收录于专栏:子晓AI量化子晓AI量化

今天星球同学问我, 怎么对 策略选出来的几只个股进行打分,因为竞价选出来个股较多,希望选择优质的个股进行交易, 时间短看不过来,希望有个评分。

可能一些同学也有这样的想法。但每个人的个股评分感觉不一样, 那这里采用AI大模型来实现。

为什么用AI模型分析K线图?

在传统股票分析中,投资者需要手动查看K线图、计算技术指标、判断趋势形态,这个过程不仅耗时耗力,还容易受到主观情绪的影响。而AI分析系统可以:

  1. 1.快速处理海量数据:在几秒钟内分析多只股票
  2. 2.客观评估:避免情绪化决策
  3. 3.多维度评分:综合考虑趋势、形态、量价等关键因素
  4. 4.可视化展示:自动生成K线图和技术指标图表

大概分为这几个模块

1. 数据获取模块

系统使用akshare库获取股票历史数据,虽然交易用没那么稳定,做分析还是可以的。

代码语言:javascript
复制
def fetch_stock_data(self, stock_codes: List[str], period: str = "daily") -> Dict:
    """
    获取股票最近一年的历史数据
    """
    # 计算日期范围(最近一年)
    end_date = datetime.now()
    start_date = end_date - timedelta(days=365)
    end_date_str = end_date.strftime("%Y%m%d")
    start_date_str = start_date.strftime("%Y%m%d")
    print(f"获取数据时间范围: {start_date_str} 到 {end_date_str}")
    for code in stock_codes:
        try:
            # 获取股票数据
            stock_df = ak.stock_zh_a_hist(
                symbol=code,
                period=period,
                start_date=start_date_str,
                end_date=end_date_str,
                adjust="qfq"
            )
            if stock_df is not None and len(stock_df) > 0:
                stock_df['代码'] = code
                self.stock_data[code] = stock_df
                print(f"成功获取 {code} 的数据,共 {len(stock_df)} 条记录")
            else:
                print(f"获取 {code} 数据失败: 未获取到数据")
        except Exception as e:
            print(f"获取 {code} 数据失败: {e}")
    return self.stock_data

自动获取最近一年的股票数据,包括开盘价、收盘价、最高价、最低价和成交量等关键信息。

2. 技术指标计算

系统自动计算多种技术指标,为后续分析提供技术支持

代码语言:javascript
复制
def calculate_technical_indicators(self, df: pd.DataFrame) -> pd.DataFrame:
    """
    计算技术指标
    """
    # 确保日期索引
    df = df.set_index('日期')
    df.index = pd.to_datetime(df.index)
    df = df.sort_index()
    # 计算移动平均线
    df['MA5'] = df['收盘'].rolling(window=5).mean()
    df['MA20'] = df['收盘'].rolling(window=20).mean()
    df['MA60'] = df['收盘'].rolling(window=60).mean()
    # 计算MACD
    exp12 = df['收盘'].ewm(span=12, adjust=False).mean()
    exp26 = df['收盘'].ewm(span=26, adjust=False).mean()
    df['MACD'] = exp12 - exp26
    df['MACD_Signal'] = df['MACD'].ewm(span=9, adjust=False).mean()
    df['MACD_Histogram'] = df['MACD'] - df['MACD_Signal']
    # 计算RSI
    delta = df['收盘'].diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=14).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(window=14).mean()
    rs = gain / loss
    df['RSI'] = 100 - (100 / (1 + rs))
    # 计算布林带
    df['BB_Middle'] = df['收盘'].rolling(window=20).mean()
    bb_std = df['收盘'].rolling(window=20).std()
    df['BB_Upper'] = df['BB_Middle'] + (bb_std * 2)
    df['BB_Lower'] = df['BB_Middle'] - (bb_std * 2)
    # 计算成交量变化率
    df['Volume_Change'] = df['成交量'].pct_change() * 100
    return df
    

系统计算的关键技术指标包括:

  • ∙移动平均线(MA5、MA20、MA60)
  • ∙指数平滑移动平均线(MACD)
  • ∙相对强弱指标(RSI)
  • ∙布林带(Bollinger Bands)
  • ∙成交量变化率

3. K线图可视化

使用matplotlib自动生成专业的K线图:

代码语言:javascript
复制
def generate_kline_chart(self, df: pd.DataFrame, stock_code: str,
                         save_path: str = None) -> str:
    """
    生成K线图并保存
    """
    # 确保目录存在
    if save_path:
        import os
        os.makedirs(save_path, exist_ok=True)
    fig, axes = plt.subplots(2, 1, figsize=(12, 10),
                             gridspec_kw={'height_ratios': [3, 1]})
    # 绘制K线图
    dates = df.index
    opens = df['开盘']
    highs = df['最高']
    lows = df['最低']
    closes = df['收盘']
    volumes = df['成交量']
    # 绘制价格和移动平均线
    axes[0].plot(dates, closes, label='收盘价', linewidth=1, color='black')
    axes[0].plot(dates, df['MA5'], label='5日均线', linewidth=1)
    axes[0].plot(dates, df['MA20'], label='20日均线', linewidth=1)
    axes[0].plot(dates, df['MA60'], label='60日均线', linewidth=1)
    # 填充布林带
    axes[0].fill_between(dates, df['BB_Upper'], df['BB_Lower'],
                         alpha=0.2, label='布林带')
    # 标记价格和移动平均线的交叉点
    golden_cross = (df['MA5'] > df['MA20']) & (df['MA5'].shift(1) <= df['MA20'].shift(1))
    death_cross = (df['MA5'] < df['MA20']) & (df['MA5'].shift(1) >= df['MA20'].shift(1))
    axes[0].scatter(dates[golden_cross], df['MA5'][golden_cross],
                    color='red', marker='^', s=100, label='金叉')
    axes[0].scatter(dates[death_cross], df['MA5'][death_cross],
                    color='green', marker='v', s=100, label='死叉')
    axes[0].set_title(f'{stock_code} K线图与技术指标')
    axes[0].set_ylabel('价格')
    axes[0].legend()
    axes[0].grid(True, linestyle='--', alpha=0.7)
    # 绘制成交量
    axes[1].bar(dates, volumes, color=['red' if close >= open else 'green'
                                       for close, open in zip(closes, opens)],
                alpha=0.7)
    axes[1].set_ylabel('成交量')
    axes[1].grid(True, linestyle='--', alpha=0.7)
    plt.tight_layout()
    if save_path:
        plt.savefig(f"{save_path}/{stock_code}_kline.png", dpi=300, bbox_inches='tight')
        print(f"K线图已保存至: {save_path}/{stock_code}_kline.png")
    plt.close()
    # 返回图像路径
    return f"{save_path}/{stock_code}_kline.png" if save_path else None
    

生成的K线图包含:

  • ∙价格走势和移动平均线
  • ∙布林带区域
  • ∙金叉死叉标记
  • ∙成交量柱状图

4. AI智能评分系统

这是整个系统的核心,使用LangChain框架和大语言模型进行多维度评分

代码语言:javascript
复制
# 定义提示词模板
template = """
你是一名专业的股票分析师。请根据以下技术分析数据对{stock_code}进行评分。
技术分析数据:
- 当前价格: {latest_price}
- 价格变化: {price_change}
- 价格变化百分比: {price_change_percent}
- 近期最高价: {high_price}
- 近期最低价: {low_price}
- 平均成交量: {avg_volume}
- 5日与20日均线关系: {trend_5_20}
- 20日与60日均线关系: {trend_20_60}
- 布林带位置: {bb_position}
- RSI值: {rsi_value} - {rsi_status}
- MACD趋势: {macd_trend}
- 成交量变化: {volume_change}
请按照以下五个维度进行评分(总分100分):
1. 趋势强度 (25分): 评估上涨趋势是否明确且稳定
2. 形态质量 (25分): 评估K线形态是否完整且符合看涨特征
3. 量价配合 (20分): 评估价格上涨是否得到成交量支持
4. 关键位置 (20分): 评估价格是否处于关键支撑位或刚突破阻力位
5. 动量指标 (10分): 评估RSI、MACD等动量指标是否健康
请以JSON格式返回结果,包含以下字段:
- trend_score: 趋势强度得分 (0-25)
- pattern_score: 形态质量得分 (0-25)
- volume_price_score: 量价配合得分 (0-20)
- key_position_score: 关键位置得分 (0-20)
- momentum_score: 动量指标得分 (0-10)
- total_score: 总分 (0-100)
- analysis: 简要分析说明
- suggestion: 投资建议 (买入/增持/中性/减持/卖出)
"""
# 创建提示词模板
prompt = PromptTemplate(
    input_variables=[
        "stock_code", "latest_price", "price_change", "price_change_percent",
        "high_price", "low_price", "avg_volume", "trend_5_20", "trend_20_60",
        "bb_position", "rsi_value", "rsi_status", "macd_trend", "volume_change"
    ],
    template=template
)
# 创建LLM链
llm = ChatOpenAI(
    temperature=0.95,
    model=Config.LLM_MODEL,
    openai_api_key=Config.LLM_API_KEY,
    openai_api_base=Config.LLM_API_BASE
)
chain = LLMChain(llm=llm, prompt=prompt)
# 初始化输出解析器
output_parser = JSONOutputParser()

系统会从五个维度对股票进行评分:

  1. 1.趋势强度(25分):评估上涨趋势是否明确且稳定
  2. 2.形态质量(25分):评估K线形态是否完整且符合看涨特征
  3. 3.量价配合(20分):评估价格上涨是否得到成交量支持
  4. 4.关键位置(20分):评估价格是否处于关键支撑位或刚突破阻力位
  5. 5.动量指标(10分):评估RSI、MACD等动量指标是否健康

大体就这样,完整的代码放在星球了。 其实自己也可以借助AI实现。 这里不得不说,用AI编程辅助写代码也耗费token,烧的也是钱。

如果我的分享对你投资有所帮助,不吝啬给个点赞关注呗。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 子晓聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么用AI模型分析K线图?
  • 大概分为这几个模块
    • 1. 数据获取模块
    • 2. 技术指标计算
    • 3. K线图可视化
    • 4. AI智能评分系统
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档