使用Python写一个量化股票提醒系统

请看下面的攻略。

使用Python写一个量化股票提醒系统

  • 目的
  • 准备工作
  • 基本思路
  • 代码实现

目的

本文的目的是介绍如何使用Python编写一个量化股票提醒系统,可以实现根据股票价格涨跌幅度提醒用户,以及灵活的设置提醒条件。

准备工作

在开始编写代码之前,需要完成以下准备工作:

  1. 安装Python环境,推荐使用Python 3.x版本。
  2. 安装tushare库,可使用pip命令进行安装,命令为pip install tushare
  3. 注册一个tushare账号并获取api_token,在tushare官网注册即可。

基本思路

本提醒系统的基本思路如下:

  1. 使用tushare库获取股票实时行情数据。
  2. 对于每只股票,计算其当前价格相对于前一天收盘价涨跌的百分比。
  3. 如果当前价格上涨超过了用户设定的阈值,则发送提醒邮件给用户。
  4. 设定轮询时间,定时执行以上操作。

代码实现

下面是示例代码,其中包含了两个示例,一个是根据涨跌幅度提醒,另一个是根据股票代码提醒。

首先,需要导入tushare库和smtplib库,以及设置相关参数:

import tushare as ts
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from datetime import datetime, timedelta

# 设置tushare账号api_token
ts.set_token(api_token)

# 登录tushare接口
pro = ts.pro_api()

# 发送邮件的设置,这里以QQ邮箱为例
smtp_server = 'smtp.qq.com'
smtp_port = 465
mail_user = 'your@qq.com'  # 发送邮件的邮箱地址
mail_pwd = 'yourpassword'  # 发送邮件的邮箱密码或授权码
receivers = ['someone@qq.com']  # 接收邮件的邮箱地址,可设置多个

1. 根据涨跌幅度提醒

下面是代码,其中可自定义的参数为:

  • codes:待查询的股票代码列表
  • threshold:触发提醒的涨跌幅度阈值,例如0.03表示股票上涨3%或下跌3%时提醒用户
  • interval:轮询时间间隔,单位为秒,默认为600秒(即10分钟)
  • start_time:开始轮询的时间,格式为"hh:mm:ss",默认为下一个整10分钟时刻
def send_email(content):
    # 发送邮件
    message = MIMEMultipart()
    message['Subject'] = '股票涨跌幅提醒'
    message['From'] = mail_user
    message['To'] = ','.join(receivers)
    text = MIMEText(content)
    message.attach(text)
    smtpobj = smtplib.SMTP_SSL(smtp_server, smtp_port)
    smtpobj.login(mail_user, mail_pwd)
    smtpobj.sendmail(mail_user, receivers, message.as_string())
    smtpobj.quit()

def main1(codes=['002594.SZ'], threshold=0.03, interval=600, start_time=None):
    # 获取当前时间,并计算下一个整10分钟时刻
    now = datetime.now()
    if start_time is None:
        start_time = datetime(now.year, now.month, now.day, now.hour, now.minute, 0) + timedelta(minutes=10)
    else:
        start_time = datetime(now.year, now.month, now.day, *map(int, start_time.split(':'))) + timedelta(days=(now.time() > datetime.strptime(start_time, '%H:%M:%S').time()))
    print("提醒时间为:", start_time.strftime('%Y-%m-%d %H:%M:%S'))

    # 开始轮询
    while True:
        # 计算当前时间距离开始时间的秒数
        delta = (start_time - datetime.now()).total_seconds()
        if delta > 0:
            time.sleep(delta)

        # 查询股票价格
        df = pro.daily(ts_code=','.join(codes), start_date=datetime.now().strftime('%Y%m%d'), end_date=datetime.now().strftime('%Y%m%d'))
        df = df.set_index('ts_code')

        # 计算涨跌幅度
        df['change_pct'] = (df['close'] - df['pre_close']) / df['pre_close']

        # 过滤涨跌幅超过阈值的股票
        alarms = df[abs(df['change_pct']) > threshold]
        if not alarms.empty:
            content = ""
            for index, row in alarms.iterrows():
                content += f"{index} 当前价格 {row['close']:.2f}  相对于前一个交易日收盘价 {row['pre_close']:.2f} 的涨跌幅为 {row['change_pct']:.2%}\n"
            send_email(content)

        # 等待下一次轮询
        start_time += timedelta(seconds=interval)

运行示例:

if __name__ == '__main__':
    main1()

2. 根据股票代码提醒

下面是代码,其中可自定义的参数为:

  • codes:待查询的股票代码列表
  • interval:轮询时间间隔,单位为秒,默认为600秒(即10分钟)
  • start_time:开始轮询的时间,格式为"hh:mm:ss",默认为下一个整10分钟时刻
def main2(codes=['002594.SZ'], interval=600, start_time=None):
    # 获取当前时间,并计算下一个整10分钟时刻
    now = datetime.now()
    if start_time is None:
        start_time = datetime(now.year, now.month, now.day, now.hour, now.minute, 0) + timedelta(minutes=10)
    else:
        start_time = datetime(now.year, now.month, now.day, *map(int, start_time.split(':'))) + timedelta(days=(now.time() > datetime.strptime(start_time, '%H:%M:%S').time()))
    print("提醒时间为:", start_time.strftime('%Y-%m-%d %H:%M:%S'))

    # 开始轮询
    while True:
        # 计算当前时间距离开始时间的秒数
        delta = (start_time - datetime.now()).total_seconds()
        if delta > 0:
            time.sleep(delta)

        # 查询股票价格
        df = pro.daily(ts_code=','.join(codes), start_date=datetime.now().strftime('%Y%m%d'), end_date=datetime.now().strftime('%Y%m%d'))
        df = df.set_index('ts_code')

        # 过滤股票价格低于10元的股票
        alarms = df[df['close'] < 10.0]
        if not alarms.empty:
            content = ""
            for index, row in alarms.iterrows():
                content += f"{index} 当前价格为 {row['close']:.2f}\n"
            send_email(content)

        # 等待下一次轮询
        start_time += timedelta(seconds=interval)

运行示例:

if __name__ == '__main__':
    main2(codes=['600036.SH', '600519.SH'])

在以上示例代码中,使用了tushare库获取实时股票行情数据,通过计算涨跌幅度或价格,判断是否需要触发提醒,并通过smtplib库发送邮件提醒用户。用户可以自定义股票代码、提醒阈值、轮询时间等参数来达到自己的需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python写一个量化股票提醒系统 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • python实现文件分片上传的接口自动化

    实现文件分片上传的接口自动化是一个比较复杂的过程,需要考虑到很多细节。下面是一个基于 Python 的完整攻略: 1. 确定请求参数及接口地址 在使用 Python 实现文件分片上传的接口自动化之前,需要先了解这个接口的请求参数及接口地址,通常这些信息都可以在接口文档中找到。需要注意的是,在文件分片上传的过程中,涉及到的请求参数比较复杂,需要特别关注这些参数…

    python 2023年6月3日
    00
  • 详解Python各大聊天系统的屏蔽脏话功能原理

    详解Python各大聊天系统的屏蔽脏话功能原理 概述 随着社交网络的兴起,聊天系统也成为人们最常用的沟通工具之一。然而,有时候人们在聊天时会使用一些不恰当或带有侮辱性的词汇,这会影响其他用户的体验,并可能引起纠纷。为了解决这个问题,聊天系统一般都会提供屏蔽脏话的功能。屏蔽脏话是利用计算机程序自动屏蔽文本中带有脏话的部分。 本文将从 Python 编程语言的角…

    python 2023年6月5日
    00
  • 使用Python webdriver图书馆抢座自动预约的正确方法

    针对使用Python webdriver图书馆抢座自动预约的正确方法,我准备提供如下的完整攻略: 1.准备工作 在进行使用Python webdriver图书馆抢座自动预约前,需要完成如下准备工作: 1.1 安装Python和selenium 在本地装好Python开发环境以及Python的selenium库。 具体安装方法如下: 安装Python:进入官网…

    python 2023年5月23日
    00
  • Python常用配置文件ini、json、yaml读写总结

    下面是Python常用配置文件ini、json、yaml读写总结的详细攻略。 1. 概述 在编写Python程序时,有时需要读取一些配置文件来获取程序执行需要的参数和数据。常见的配置文件格式有ini、json和yaml。在Python中,我们可以使用标准库或第三方库来读取和写入这些文件。本文将介绍如何使用Python标准库和第三方库来读写这三种常见的配置文件…

    python 2023年6月3日
    00
  • python3 生成器表达式

    在 Python3 中,生成器表达式是一种语言结构,它可以快速地创建一个可迭代对象。生成器表达式类似于列表推导式,但使用圆括号而不是方括号,并且返回的是一个生成器对象而不是一个列表。 在 Python3 中,生成器表达式有两种类型:生成器函数和生成器表达式。 生成器函数: 生成器函数是一种特殊的函数,在函数中使用 yield 语句来生成一个值,然后暂停函数执…

    python 2023年5月1日
    00
  • Python模拟登录网易云音乐并自动签到

    下面是Python模拟登录网易云音乐并自动签到的攻略: 步骤一:分析登录过程 我们首先需要分析网易云音乐的登录过程,以便用Python进行模拟登录。打开网易云音乐官网,随便点击一首歌曲,然后点击登录按钮,在弹出的登录框中填写手机号和密码,点击登录后,打开开发者工具(Chrome按F12),找到Network选项卡,再次点击登录按钮,可以看到在Network面…

    python 2023年6月3日
    00
  • 基于python3抓取pinpoint应用信息入库

    基于Python3抓取Pinpoint应用信息入库的完整攻略 本攻略将介绍如何使用Python3抓取Pinpoint应用信息并将其存储到数据库中。以下是一个示例代码,演示如何使用Python3和requests库抓取Pinpoint应用信息: import requests import json # Pinpoint API URL url = ‘http…

    python 2023年5月15日
    00
  • Python 中enum的使用方法总结

    以下是关于“Python 中enum的使用方法总结”的完整攻略。 什么是 enum Enum是一个枚举类,其实就是定义几个有固定值的变量。在程序中,经常会使用一些固定的参数或者变量,比如星期几、颜色、状态等等,这些参数是不能随便改变的,都必须是预先定义好的。英文单词 ENUM 是枚举的意思。Python 中,枚举类型是一个类,用于定义一组有名字的常量,可以降…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部