Type something to search...
完整指南:如何免费构建一个ai驱动的股票分析器,助你掌握市场动态!!

完整指南:如何免费构建一个ai驱动的股票分析器,助你掌握市场动态!!

是否曾因股票市场数据的庞大而感到不知所措?

希望有一个私人助手来筛选噪音,并为您提供清晰、可操作的见解?好吧,您可以自己构建一个,得益于Python的强大、现成的API和一点AI,这其实非常简单(而且是免费的!)。

重要免责声明:

本项目仅用于教育和信息用途。它旨在演示如何集成各种API和AI模型。股票市场是_固有复杂且风险较高_的。请勿将本应用生成的“买入”或“卖出”信号用于实际交易决策。 在做出任何投资决策之前,深入了解金融市场、风险管理和独立研究是必不可少的。

本项目可以作为那些有兴趣探索AI与金融交集的人的基础,但它_并不是_专业财务建议的替代品。

在本教程中,我们将创建一个简单而有效的股票分析器,它可以:

  1. 获取历史股票数据: 使用免费的 Alpha Vantage API。
  2. 可视化数据: 使用 Matplotlib 创建交互式图表。
  3. 提供 AI 驱动的分析: 利用谷歌的 Gemini Flash 模型获取洞察。
  4. 在用户友好的网络应用中展示一切: 使用 Streamlit 构建。

这个项目非常适合想要学习 API 集成、数据可视化和 AI 实际应用的初学者。无需具备金融或 AI 的先前经验!

步骤 1:收集您的工具(和 API 密钥)

在我们深入代码之前,确保您拥有必要的工具:

Python: 确保您安装了 Python 3.7 或更高版本。

库: 我们将使用以下 Python 库。您可以使用 pip 安装它们:

pip install pandas matplotlib requests pytz google-generativeai streamlit

Streamlit: 使用命令 pip install streamlit 进行安装。

API 密钥: 这是“免费”魔法发生的地方!

  • Alpha Vantage: 前往 https://www.alphavantage.co/ 注册一个免费的 API 密钥。这个密钥允许我们访问他们的股票数据。请妥善保管此密钥,保持私密!
  • 谷歌 AI Studio API 密钥: 访问 Google AI Studio。点击“获取 API 密钥”。这将允许您使用 Gemini Flash 模型。请同样保密此密钥!

重要提示: 免费 API 密钥通常有使用限制(例如,每分钟或每天的请求数量)。请注意这些限制,以避免中断。Alpha Vantage 的免费套餐通常足以满足个人项目的需求。

让我们开始编码吧!

Image 2

步骤 2:获取股票数据 (stock_utility_handler.py)

让我们开始创建一个名为 stock_utility_handler.py 的文件。这个文件将处理获取和处理股票数据的任务。

import pandas as pd
import json
from datetime import datetime
import pytz
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.widgets as widgets
import requests

class StockAPI:
    def __init__(self, api_key):
        self.api_key = api_key

    def get_stock_info(self, stock, market):
        if market == 'NASDAQ':
            url = f'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol={stock}&outputsize=compact&apikey={self.api_key}'
        else:
            url = f'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol={stock}.{market}&outputsize=compact&apikey={self.api_key}'
        r = requests.get(url)
        data = r.json()
        return data

class StockAnalyzer:
    def __init__(self):
        pass

    def json_to_dataframe(self, json_data, stock_symbol, market):
        print(json_data)
        time_series_data = json_data['Time Series (Daily)']
        df_data = []

        for date_str, values in time_series_data.items():
            data_row = {'date': date_str}
            for key, value in values.items():
                new_key = key.split('. ')[1]  
                data_row[new_key] = float(value)
            df_data.append(data_row)

        df = pd.DataFrame(df_data)
        df['date'] = pd.to_datetime(df['date'])

        eastern = pytz.timezone('US/Eastern')
        ist = pytz.timezone('Asia/Kolkata')

        df['date'] = df['date'].dt.tz_localize(eastern).dt.tz_convert(ist)
        df['date'] = df['date'].dt.strftime('%Y-%m-%d %H:%M:%S')
        df['stock'] = stock_symbol
        df['market'] = market

        df = df.set_index('date')
        return df

    def plot_stock_data(self, df, stock_symbol, market, image_path):
        plt.figure(figsize=(16, 10))

        plt.subplot(3, 1, 1)
        plt.plot(pd.to_datetime(df.index), df['close'], label=f'{stock_symbol} 收盘价 ({market})', color='blue')
        plt.title(f'{stock_symbol} 股票表现 ({market})')
        plt.xlabel('日期 (IST)')
        plt.ylabel('价格')
        plt.legend()
        plt.grid(True)

        plt.subplot(3, 1, 2)
        plt.bar(pd.to_datetime(df.index), df['volume'], label=f'{stock_symbol} 成交量 ({market})', color='green', width=2)
        plt.xlabel('日期 (IST)')
        plt.ylabel('成交量')
        plt.legend()
        plt.grid(True)

        plt.subplot(3, 1, 3)
        df['MA_7'] = df['close'].rolling(window=7).mean()
        df['MA_20'] = df['close'].rolling(window=20).mean()
        plt.plot(pd.to_datetime(df.index), df['close'], label=f'{stock_symbol} 收盘价 ({market})', color='blue', alpha=0.7)
        plt.plot(pd.to_datetime(df.index), df['MA_7'], label='7日移动平均', color='orange')
        plt.plot(pd.to_datetime(df.index), df['MA_20'], label='20日移动平均', color='red')
        plt.xlabel('日期 (IST)')
        plt.ylabel('价格')
        plt.legend()
        plt.grid(True)

        for ax in plt.gcf().axes:
            ax.xaxis.set_major_locator(mdates.MonthLocator())
            ax.xaxis.set_minor_locator(mdates.WeekdayLocator(byweekday=[0]))
            ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))

        plt.gcf().autofmt_xdate()

        cursor = widgets.Cursor(plt.gca(), color='red', linewidth=1)

        plt.tight_layout()
        plt.savefig(image_path) 
        plt.show()

代码说明

**get_stock_info()**:此函数根据股票代码和市场构造 API 请求 URL。它处理 BSE 和 NASDAQ 市场。它使用 requests 库进行 API 调用,并返回 JSON 响应。

**json_to_dataframe()**:此函数将来自 Alpha Vantage 的原始 JSON 数据转换为 Pandas DataFrame。这对于数据分析和可视化至关重要。它处理:

  • 提取“时间序列(每日)”数据。
  • 清理键(去除“1. ”前缀)。
  • 将日期字符串转换为 datetime 对象。
  • 将日期从美国/东部时间转换为印度标准时间(IST),并格式化日期。
  • 将“日期”列设置为索引。

**plot_stock_data()**:此函数生成一个包含三个子图的综合图:

  • 收盘价: 显示股票的每日收盘价。
  • 成交量: 以柱状图显示交易量。
  • 移动平均: 计算并绘制 7 日和 20 日移动平均,这是常见的技术指标。

并将图形保存到指定的 image_path

步骤 3:添加 AI 见解 (ai_insights_handler.py)

现在,让我们创建 ai_insights_handler.py 来集成 Gemini Flash 模型进行 AI 驱动的分析。

import google.generativeai as genai
import PIL.Image

class AIInsights:
    def __init__(self, api_key):
        self.api_key = api_key
        genai.configure(api_key=self.api_key)
        self.model = genai.GenerativeModel(model_name="gemini-2.0-flash")

    def get_ai_insights(self, image_path, stock, market):
        image = PIL.Image.open(image_path)
        prompt = f"这是股票:'{stock}' 在市场:'{market}' 最近 100 天的股票表现图,基于成交量、收盘价和 7、20 日移动平均,提供一些关于该股票的分析和建议。该股票是否应该购买。"
        response = self.model.generate_content([prompt, image])
        return response

代码说明

**get_ai_insights()**

  • 使用 PIL.Image.open() 打开保存的图像。
  • 为 Gemini 模型构建提示。提示清晰地描述了图像和所需的分析(基于成交量、收盘价和移动平均的买/卖建议)。
  • 调用 model.generate_content(),传入提示和图像。这是多模态交互的核心。
  • 返回模型的响应。

步骤 4:构建 Streamlit 网络应用 (marketapp.py)

收集在初始步骤中为 Google AI Studio 和 Alpha Vantage API 生成的 API 密钥。

最后,让我们创建 marketapp.py 来构建一个用户友好的界面,使用 Streamlit。

from stock_utility_handler import StockAPI, StockAnalyzer
from ai_insights_handler import AIInsights

import streamlit as st

if 'page' not in st.session_state:
    st.session_state.page = "page1"  
    st.session_state.ticker = "RELIANCE"  
    st.session_state.market = "BSE" 
    st.session_state.image_path = ""
    st.session_state.ai_insights = ""
    st.session_state.internal_results_available = False

def page1():
    st.title('股票 AI 代理')

    col1, col2 = st.columns(2)
    with col1:
        st.session_state.ticker = st.text_input("输入股票代码", value=st.session_state.ticker, key="ticker_input")  
    with col2:
        st.session_state.market = st.selectbox("选择市场", ["BSE", "NASDAQ"], index=["BSE", "NASDAQ"].index(st.session_state.market), key="market_input")

    st.sidebar.header("关于")
    st.sidebar.write("这是一个股票分析平台。")

    st.markdown("---")

    if st.button('提交'):
        st.session_state.page = "page2"  
        st.session_state.internal_results_available = False
        st.rerun()

def page2():
    st.title(f"{st.session_state.ticker} ({st.session_state.market}) 的分析")  
    stock = st.session_state.ticker
    market = st.session_state.market
    if not st.session_state.internal_results_available:
        with st.spinner('分析中... 请稍候...'):
            image_path = f"<your_image_path>/{market}_{stock}.png"
            st.session_state.image_path = image_path

            stock_api_obj = StockAPI("<your-alpha-vantage-api-key>")
            market_data = stock_api_obj.get_stock_info(stock, market)

            stock_analyzer_obj = StockAnalyzer()
            df = stock_analyzer_obj.json_to

## 最后

使用 streamlit run 运行 marketapp.py

```bash
streamlit run marketapp.py

Image 3

以下是用户界面的几个截图

Image 4

输入股票代码并选择市场。(这里我选择了 HDFCBANK 作为示例)

Image 5

您应该会看到一个显示 API 调用和数据分析进展的屏幕。

以下是图表和 AI 见解的结果。

Image 6

Image 7

Related Posts

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

AI 研究报告和论文写作 合并两个系统指令以获得两个模型的最佳效果 Perplexity AI 的 Deep Research 工具提供专家级的研究报告,而 OpenAI 的 ChatGPT-o3-mini-high 擅长推理。我发现你可以将它们结合起来生成令人难以置信的论文,这些论文比任何一个模型单独撰写的都要好。你只需要将这个一次性提示复制到 **

阅读更多
让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

Non members click here作为一名软件开发人员,多年来的一个发现总是让我感到惊讶,那就是人们还在 Excel

阅读更多
使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

10 个常见问题解答 本文是我推出的一个名为“10 个常见问题解答”的新系列的一部分。在本系列中,我旨在通过回答关于该主题的十个最常见问题来分解复杂的概念。我的目标是使用简单的语言和相关的类比,使这些想法易于理解。 图片来自 [Solen Feyissa](https://unsplash.com/@solenfeyissa?utm_source=medium&utm_medi

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

在AI军备竞赛中分辨事实与虚构 DeepSeek AI真的是它所宣传的游戏规则改变者,还是仅仅聪明的营销和战略炒作?👀 虽然一些人将其视为AI效率的革命性飞跃,但另一些人则认为它的成功建立在借用(甚至窃取的)创新和可疑的做法之上。传言称,DeepSeek的首席执行官在疫情期间像囤积卫生纸一样囤积Nvidia芯片——这只是冰山一角。 从其声称的550万美元培训预算到使用Open

阅读更多
Type something to search...