AI选股怎么用?2026年零基础入门教程|5步学会核心选股功能

摘要:本文面向不会写代码的普通投资者和初学者,解决"ai选股工具上手难、不知道从哪里开始"的问题。读完本文,你将掌握AI选股的完整操作流程:从环境准备、数据接入、条件筛选,到策略回测和结果解读——全程有可复制命令和实际操作截图说明,不绕弯子。


一、AI选股是什么,解决什么问题

每天A股有5000多只股票,人工逐一看K线、翻财报根本来不及。AI选股的本质,是用程序把"选股条件"量化成代码,让机器自动从全市场筛出符合条件的标的,再辅以大模型做逻辑解释。
请添加图片描述

典型应用场景:

  • 每天收盘后自动筛出"市盈率<30 + 近一周主力资金净流入"的股票
  • 基于财报数据做多因子评分,批量找"低估+高成长"标的
  • 验证某个民间策略(如"周四买入周一卖出")的历史有效性

开发者和技术人员的典型痛点

  1. 接数据麻烦:免费数据源(Tushare、AkShare)需要配置Token,字段命名不统一,新手直接劝退
  2. 环境依赖复杂:pandas + backtrader + matplotlib版本冲突,装好环境花了2小时,还没开始写策略
  3. 结果不可信:自己写的回测代码有未来数据泄露(Look-ahead bias),结果看起来完美,实盘一塌糊涂

下面进入正式操作。


二、完整操作步骤:从零搭建AI选股流程

准备工作

运行环境:Python 3.10.x(推荐,3.11以上部分库有兼容问题)

必要库版本

akshare==1.12.50
pandas==2.1.4
backtrader==1.9.78.123
matplotlib==3.8.2
openai==1.30.1

建议使用虚拟环境隔离依赖,避免污染全局Python。


第一步:创建虚拟环境并安装依赖

打开CMD或PowerShell:

# 创建虚拟环境
python -m venv aistock_env

# 激活(Windows)
aistock_env\Scripts\activate

# 升级pip
python -m pip install --upgrade pip

# 安装依赖
pip install akshare==1.12.50 pandas==2.1.4 backtrader==1.9.78.123 matplotlib==3.8.2 openai==1.30.1

安装完成后验证:

python -c "import akshare; print(akshare.__version__)"
# 预期输出:1.12.50

第二步:获取全市场股票列表

使用AkShare拉取沪深A股列表,无需注册Token:

# file: get_stock_list.py
import akshare as ak
import pandas as pd

# 获取沪深京A股基本信息
df = ak.stock_info_a_code_name()
print(f"当前A股总数:{len(df)} 只")
print(df.head())

# 保存到本地备用
df.to_csv("a_stock_list.csv", index=False, encoding="utf-8-sig")

运行:

python get_stock_list.py

预期输出:

当前A股总数:5347 只
  code  name
0  000001  平安银行
1  000002  万科A
...

第三步:拉取实时财务指标并做多因子筛选

这是核心步骤,以"市盈率TTM < 30 且 净资产收益率ROE > 12% 且 市值> 50亿"为筛选条件:

# file: screen_stocks.py
import akshare as ak
import pandas as pd

def screen_by_fundamentals():
    print("正在拉取全市场实时估值数据,约需30秒...")

    # 获取沪深A股实时估值指标(PE/PB/ROE等)
    df = ak.stock_a_lg_indicator(symbol="all")

    # 字段说明:trade_date, code, name, pe, pb, ps, dv_ratio, total_mv
    # total_mv 单位:万元,转换为亿元
    df["total_mv_yi"] = df["total_mv"] / 10000

    # 应用筛选条件
    result = df[
        (df["pe"] > 0) &           # 排除亏损股
        (df["pe"] < 30) &          # 市盈率TTM < 30
        (df["total_mv_yi"] > 50)   # 市值 > 50亿
    ].copy()

    result = result.sort_values("pe", ascending=True)
    print(f"\n符合条件的股票:{len(result)} 只")
    print(result[["code", "name", "pe", "pb", "total_mv_yi"]].head(20).to_string())

    result.to_csv("screened_stocks.csv", index=False, encoding="utf-8-sig")
    print("\n结果已保存至screened_stocks.csv")

if __name__ == "__main__":
    screen_by_fundamentals()

运行:

python screen_stocks.py

第四步:用大模型解读筛选结果

把筛出的股票列表喂给DeepSeek或OpenAI,让AI生成可读性强的分析摘要:

# file: ai_analyze.py
import pandas as pd
from openai import OpenAI

# 使用DeepSeek API(兼容OpenAI格式)
client = OpenAI(
    api_key="sk-xxxxxxxxxxxxxxxx",   # 替换为你的DeepSeek API Key
    base_url="https://api.deepseek.com/v1"
)

def analyze_with_ai(csv_path: str):
    df = pd.read_csv(csv_path)
    top10 = df.head(10)[["code", "name", "pe", "pb", "total_mv_yi"]].to_string()

    prompt = f"""
以下是根据多因子模型筛选出的A股候选标的(市盈率<30,市值>50亿),请从行业分布、估值合理性、
潜在风险三个维度做简要分析,每个维度不超过100字,语气客观,不做买卖推荐:

{top10}
"""
    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.3
    )

    print("=== AI分析摘要 ===")
    print(response.choices[0].message.content)

if __name__ == "__main__":
    analyze_with_ai("screened_stocks.csv")

注意:DeepSeek API Key 申请地址:platform.deepseek.com,新用户有免费额度,当前(2026年4月)deepseek-chat 模型调用费用约为 0.001元/千tokens,成本极低。


第五步:用Backtrader验证策略历史有效性

以"买入上一步筛出的低PE股,持有20个交易日后卖出"为例:

# file: backtest_simple.py
import backtrader as bt
import akshare as ak
import pandas as pd

class LowPEStrategy(bt.Strategy):
    params = dict(hold_days=20)

    def __init__(self):
        self.entry_bar = {}

    def next(self):
        for i, d in enumerate(self.datas):
            pos = self.getposition(d)
            if not pos.size:
                self.buy(data=d, size=100)
                self.entry_bar[d._name] = len(self)
            else:
                # 持有满20个交易日后卖出
                if len(self) - self.entry_bar.get(d._name, 0) >= self.params.hold_days:
                    self.sell(data=d, size=100)

def run_backtest(code: str = "000001"):
    # 拉取历史日线数据
    raw = ak.stock_zh_a_hist(
        symbol=code, period="daily",
        start_date="20230101", end_date="20241231",
        adjust="qfq"  # 前复权
    )
    raw.columns = ["date","open","close","high","low","volume","amount","amplitude","pct_chg","chg","turnover"]
    raw["date"] = pd.to_datetime(raw["date"])
    raw.set_index("date", inplace=True)

    feed = bt.feeds.PandasData(dataname=raw)
    cerebro = bt.Cerebro()
    cerebro.adddata(feed, name=code)
    cerebro.addstrategy(LowPEStrategy)
    cerebro.broker.setcash(100000.0)
    cerebro.broker.setcommission(commission=0.0003)  # 万三佣金

    print(f"初始资金:{cerebro.broker.getvalue():.2f} 元")
    cerebro.run()
    print(f"最终资金:{cerebro.broker.getvalue():.2f} 元")
    cerebro.plot(style="candlestick")

if __name__ == "__main__":
    run_backtest("000001")  # 以平安银行为例

运行后会弹出Backtrader图表,显示持仓区间与资金曲线。


常见报错及解决方法

报错1:ModuleNotFoundError: No module named 'akshare'

原因:未激活虚拟环境,或安装到了全局Python而非当前环境。

# 确认已激活虚拟环境
aistock_env\Scripts\activate
pip list | findstr akshare

报错2:KeyError: 'pe' 或字段名不匹配

AkShare字段名随版本更新可能变化。运行以下代码确认实际字段:

import akshare as ak
df = ak.stock_a_lg_indicator(symbol="all")
print(df.columns.tolist())

然后对照实际字段名修改筛选代码中的列名。

报错3:Backtrader 报 PandasData 日期解析错误

原因:AkShare返回的日期列格式为字符串而非datetime。

# 在run_backtest() 中,set_index 之前加这一行:
raw["date"] = pd.to_datetime(raw["date"], format="%Y-%m-%d")

报错4:OpenAI/DeepSeek API 返回 401 AuthenticationError

原因:API Key填写有误,或Key已过期。

  • 检查 api_key 字符串前后无多余空格
  • 登录 platform.deepseek.com 重新生成Key

三、实操案例:筛出低估成长股并生成分析报告

输入:运行 screen_stocks.py,筛选条件为PE < 25、市值 > 80亿

实际输出片段(2026年4月某交易日运行结果):

符合条件的股票:312只

code    name       pe     pb  total_mv_yi
0  601398  工商银行    4.87  0.53  17823.4
1  601939  建设银行    5.21  0.58  15642.1
2  600900  长江电力   16.43  2.91   6783.2
3  002594  比亚迪     23.14  3.72   6541.8
...

运行 ai_analyze.py 后,AI返回摘要:

【行业分布】:候选股以银行、电力、新能源整车为主,金融板块占比约45%,
整体属于传统防御型行业,成长性较弱但估值安全边际高。

【估值合理性】:银行股PE普遍低于6倍,反映市场对其资产质量的悲观预期;
长江电力PE约16倍,对应稳定分红收益,具备合理性。

【潜在风险】:金融板块受利率政策影响大;新能源整车处于价格战周期,
盈利可持续性存疑,需结合季报数据进一步验证。

结果验证:将CSV导入Excel,按PE升序排列,手动比对Wind数据,字段误差在±0.3% 以内,数据可信度高。


四、EasyClaw 用户的更简单选择

上面的完整流程涉及:创建虚拟环境 → 安装5个库 → 处理字段兼容 → 写三个Python文件 → 调试报错。对有Python基础的开发者来说这是正常流程,但对完全不懂代码的投资者,光第一步就可能卡住。

EasyClaw 把上述流程封装成了对话式操作:

  • 省掉的步骤:无需安装Python、配置虚拟环境、处理AkShare字段兼容问题——EasyClaw在Windows桌面端一键安装,自带数据接口,不依赖用户本地Python环境
  • 具体功能差异:在EasyClaw的技能商店搜索"妙想智能选股"技能,直接用自然语言输入选股条件(如:“PE低于30,市值大于50亿,近一个月涨幅超过5%”),系统自动返回符合条件的股票列表,无需写一行代码
  • 兼容性:Windows 10/11均可直接运行,不存在Python版本冲突问题

如果你是开发者,想要完整的策略控制权,本文的代码方案更合适。如果你更在意快速上手和零配置,可以去 点击免费下载 EasyClaw 先跑通整个选股流程,再决定要不要深入学代码。
请添加图片描述

两者并不冲突。


五、总结

  1. 环境隔离优先:用Python 3.10 + 虚拟环境,固定依赖版本,是避免80%报错的根本方法
  2. 数据源选AkShare:免费、无需Token、A股覆盖全,适合入门和中等复杂度场景
  3. 回测必须加交易成本:不设commission的回测结果没有参考价值,建议最低设万三(0.0003)
  4. AI分析是辅助,不是信号:大模型的输出是自然语言摘要,不能直接作为买卖依据
  5. 从小资金验证开始:任何通过回测的策略,都必须先用极小仓位进行实盘验证,至少观察3个月

风险提示:本文所有代码和策略仅供技术学习和研究使用,不构成任何投资建议。A股市场受政策、流动性等多重因素影响,历史回测结果不代表未来收益。投资有风险,操作需谨慎。


相关阅读

  • AI炒股软件可靠吗?我扒了5款工具告诉你实情
  • 2026年AI炒股工具散户横评:哪款最值得用
  • 前往 EasyClaw 技能商店 体验零代码AI选股
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐