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

yizhihongxing

请看下面的攻略。

使用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模块itsdangerous简单介绍

    python模块itsdangerous简单介绍 itsdangerous是一个用于安全地处理数据的Python库。它主要用于在Web应用程序中生成、解析和验证安全标记。这些安全标记可以用于密码重置令牌、电子邮件确认令牌等。在这篇文章中,我们将简单介绍itsdangerous并且提供两个示例。 安装 在终端中,使用pip命令安装itsdangerous: p…

    python 2023年6月2日
    00
  • python 识别登录验证码图片功能的实现代码(完整代码)

    实现自动识别登录验证码图片功能的代码主要依赖于机器学习和图像处理技术。以下是一个完整代码实现的攻略: 1. 安装依赖库 需要安装的库:numpy、pillow、scikit-image和tensorflow。你可以使用pip安装这些库: pip install numpy pip install pillow pip install scikit-image…

    python 2023年5月18日
    00
  • 创建一个充满所有零的Numpy数组

    创建一个充满所有零的Numpy数组的完整攻略如下: 步骤1:导入Numpy库 在使用Numpy创建数组之前,需要导入Numpy库。 import numpy as np 步骤2:使用np.zeros()函数创建全零数组 使用np.zeros()函数可以创建一个全零数组,函数的参数可以指定数组的形状,可以是一个整数,也可以是一个元组。 # 创建一个长度为5的全…

    python-answer 2023年3月25日
    00
  • Python使用Selenium自动进行百度搜索的实现

    下面是详细的“Python使用Selenium自动进行百度搜索的实现”的攻略: 简介 Selenium是一个自动化测试工具,也可以用来模拟浏览器的操作行为。通过Selenium,可以让Python程序自动实现一些常见的网页操作,比如登录、搜索、翻页等。而本次攻略主要就是介绍如何使用Selenium来实现通过Python自动进行百度搜索。 环境准备 在使用Se…

    python 2023年5月19日
    00
  • 在Python中操作时间之tzset()方法的使用教程

    下面我将详细讲解在Python中操作时间之tzset()方法的使用教程。 1. 什么是tzset()方法? tzset()方法是Python中time模块提供的一个函数,用于设置时区信息。该方法可以加载系统配置文件中的时区信息,或者手动指定时区信息。通过使用该方法,可以让Python程序正确地处理不同时区的时间,进行时区转换等操作。 2. 如何使用tzset…

    python 2023年6月2日
    00
  • Python数据结构列表

    Python中的列表是一种常见的数据结构,用于存储一组有序的元素。本文将详细讲解Python中列表的定义、访问、添加、删除、排序和遍历等操作,包括使用索引、切片、append()、insert()、remove()、sort()、reverse()、for循环等。 定义列表 在Python,可以使用方括号 [] 定义一个列表,其中的元素用逗号 , 分隔。下面…

    python 2023年5月13日
    00
  • python 内置函数-range()+zip()+sorted()+map()+reduce()+filter()

    下面是对这些 Python 内置函数的详细讲解: range() 函数 range() 函数通常被用来生成一串数字,其参数可以指定生成数字的个数。 示例1:输出0到9这10个数字: nums = range(10) for num in nums: print(num) zip() 函数 zip() 函数可以将多个序列(列表、元组等)对应元素进行打包,返回一…

    python 2023年5月14日
    00
  • Visual Studio code 配置Python开发环境

    下面是详细的Visual Studio Code配置Python开发环境的完整攻略。 环境准备 首先,需要在本地电脑上安装Visual Studio Code(简称VS Code)和Python。 下载并安装VS Code 首先需要前往VS Code官网下载页面(https://code.visualstudio.com/download),选择适合自己操作…

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