打造个人股票监控系统 实时跟踪股票价格走势

本文介绍如何构建一个每日股票监控器,该系统能够帮助非全职投资者实时跟踪股票价格,通过计算A股的M5和M10指标,当满足特定条件时发送提醒,如M5上穿M10并超过60天,或者股票在预设列表和价格区间内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每日股票监控器

对于非全职股民来说,很难日日盯盘,但又不想错过股市的赚钱机会,希望有个帮忙盯盘的小助手,因此开发个股票小助理
主要功能:

  • 下载A股每日k线数据
  • 计算每只股票的M5上穿M10时间
  • 如果股票当前是M5上穿M10 并且距离M5下穿M10大于60天 则告诉我
  • 如果股票当前是M5上穿M10 并且在我设置的股票列表中,则告诉我
  • 如果被监控的股票价格在我设置的区间 则告诉我

股票源代码类似如下所示

'''
每日20点 运行

更新当天数据 从baostock
功能列表:
如果目录不存在 下载 最近10年数据 
如果是新上市股票  则下载  最近 一年 数据

计算每只股票的 最后一个M5下穿M10的日期 

计算每只股票的 M5上穿M10 如果在监控列表则报警  
如果被监控股票的价格在设置区间,则报警  

'''


import baostock as bs
import pandas as pd
from datetime import datetime,timedelta
from datetime import date
import os 
import numpy as np
from CorpApi import CorpApi,CORP_API_TYPE
import  random 
import requests
# 保存每个股票的数据 
data_path = 'test-all'
# M5下穿M10的日期列表
file_path = r'm5-m10-last.csv'
today_file_path = r'today_m5-m10-last.csv'
nday = 60 #m5下穿m10 和m5上穿m10 间隔60天 
monitor_code_list = ['601636']

# 发送通知消息 
def send_msg(message):
    
    return response

def get_stocker_num(code):
    ret_data = {}
    try:
        url = 'https://hq.sinajs.cn/list=%s' % code 
        ret = requests.get(url)
        if ret.status_code == 200:
            data = str(ret.content,encoding='gb2312')
            for item in data.split('\n'):
                if len(item) > 10:
                    k = item.split('=')[0].replace('var hq_str_','')
                    shuzu = item.split(',')
                    if k.startswith('s_'):
                        ret_data[k] = str(shuzu[1])
                    else:
                        ret_data[k] = float(shuzu[3])
            return ret_data
    except Exception as e:
        print(str(e))
        print_except(sys._getframe().f_code.co_name, sys.exc_info(), e)
    return  None
'''
判断股票价格是否在设置的区间

'''
def start_monitor():
    # 判断今天是否是周末 
    dt = date.today() 
    nw = dt.weekday()
    if nw == 5: # 周六 
        send_mssage_alert('monitor stock is running')
        return
    elif nw == 6:
        return 

    # 周一到周五 
    # 先判断指定股票是否达到特定值 
    try:
        list_keys = 's_sz399001,s_sh000001'
        data = {}
        data['sh601636'] = '14:30'  # 旗滨集团
        data['sz002714'] = '45:100' # 牧原股份



        gplist = {}
        for k in data.keys():
            list_keys = list_keys + ',' + k
            gplist = get_stocker_num(list_keys)

        for k in data.keys():
            v = data[k]
            now_v = gplist[k]
            if now_v == 0:
                continue
            min = float(v.split(':')[0])
            max = float(v.split(':')[1])
            if now_v < float(min) or now_v > max:
                message = '上证指数:' + gplist['s_sh000001'] + '\n' + '深证成指:' + gplist['s_sz399001']
                message =  message + '\n\n股票:' + k + '\n当前价格:' + str(now_v) + '\n监控值:' + v
                message = message + '\nhttps://quote.eastmoney.com/%s.html' % str(k)
                send_mssage_alert(message)
    except Exception as e:
        print_except(sys._getframe().f_code.co_name, sys.exc_info(), e)
'''
下载 历史数据 
'''
def download_data(date,start_data,end_date):
    bs.login()

    # 获取指定日期的指数、股票数据
    stock_rs = bs.query_all_stock(date)
    stock_df = stock_rs.get_data()
    data_df = pd.DataFrame()
    for code in stock_df["code"]:
        #print("Downloading :" + code)
        if  code.startswith('bj'):
            continue 
        k_rs = bs.query_history_k_data_plus(code, "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST",
    start_date=start_data, end_date=end_date,
    frequency="d", adjustflag="3")
        data_list = []
        while (k_rs.error_code == '0') & k_rs.next():
            # 获取一条记录,将记录合并在一起
            data_list.append(k_rs.get_row_data())
        result = pd.D
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值