2025年6月4日 星期三 乙巳(蛇)年 三月初八 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

Python 打新股,我建议你这么来操作!

时间:10-14来源:作者:点击数:23

不知道大家有没有「打新股(债)」的习惯呢?煎蛋哥就会经常参与股债打新,平均下来一年也能中几次

虽说中签几率很低,但是一旦中签大概率会捡点钱,但是偶尔也会忘记参与打新,错过一个发家致富的机会,So 我需要一个定时提醒

下面将讲解一下使用 Python 实现定时推送打新股(债)消息的完整流程

#1. 打新股/债

打新股是指,某家公司被批准上市,首次向市场出售部分股份以换取资金,个人或机构在申购日当天通过证券 App 或线下进行申购的过程

对普通投资者来说,参与打新股、新债有一定的条件

比如:需要在申购日前 2 日(申购日为 T,即:T-2 )前 20 个交易日持有对应证券交易所股票 1W 以上的股票才能参与

沪市每持有 1 万市值可以申购 1000股,深市每持有5000 市值可以申购 500 股,交易时证券 App 会有可以购买的数量提示

另外,如果要申购创业板、科创板的新股,需要去开通对应的权限

打新债是指申购最新发行的债券、基金产品

一般债券基金发行的时候价格较低,打新债一般不会破发,投资风险相比打新股更低,因此投资者更多,中签几率更低

打新债由于采用信用申购方式,我们只需要开通了证券账户,即使没有持有股票市值也可以进行申购,门槛相比打新股更低

#2. 爬取新股列表

目标对象:

aHR0cHM6Ly9kYXRhLmVhc3Rtb25leS5jb20veGcveGcvZGVmYXVsdC5odG1s

PS:由于可转债数据较少,这里以股票打新为例进行说明

首先,我们分析网页数据,发现新股列表数据直接来源于后端接口,分页大小及页码为可变参数

图片

如此就很简单了,直接请求接口,按照界面数据值分析从响应中拿到名称、股票代码、申购代码、交易所、板块、发行价、申购时间、中签公布日等数据

  • import requests
  • import json
  • def start(pageNumber, pageSize):
  •     """
  •     打新
  •     :return:
  •     """
  •     url = "https://***/api/data/v1/get?***".format(
  •         pageSize, pageNumber
  •     )
  •     resp = json.loads(requests.request("GET", url, data={}).text).get("result")
  •     data = resp.get("data")
  •     print(data)
  •     # 今天申购
  •     today_stocks = []
  •     # 未来申购
  •     future_stocks = []
  •     for item in data:
  •         name = item.get("SECURITY_NAME")  # 名称
  •         no = item.get("SECURITY_CODE")  # 股票代码
  •         buy_no = item.get("APPLY_CODE")  # 申购代码
  •         trade_market = item.get("TRADE_MARKET")  # 交易所
  •         market_type = item.get("MARKET_TYPE")  # 板块
  •         price_pre = item.get('ISSUE_PRICE'if item.get('ISSUE_PRICE'else item.get('PREDICT_ISSUE_PRICE1')  # 发行价
  •         apply_date = item.get("APPLY_DATE")  # 申购时间
  •         ballot_date = item.get("BALLOT_NUM_DATE")  # 中签公布日

接着,根据申购时间对新股进行分类,分为历史股、今日新股、未来新股

  • class TYPE(Enum):
  •     BEFORE = -1  # 昨天
  •     TODAY = 0  # 今天
  •     NEXT = 1  # 明天
  • def date_type(date_str):
  •     """
  •     判断日期类型(今天、昨天、明天)
  •     :param date_str:
  •     :return:
  •     """
  •     # 今天
  •     today = datetime.date.today()
  •     # 签售日期转为日期
  •     date_str = date_str.split(' ')[0]
  •     formatted_date_str = datetime.datetime.strptime(date_str, "%Y-%m-%d").date()
  •     if formatted_date_str > today:  # 未来
  •         __type = TYPE.NEXT
  •     elif formatted_date_str == today:  # 今天
  •         __type = TYPE.TODAY
  •     else:
  •         __type = TYPE.BEFORE  # 历史
  •     return __type
  • ...
  •   # 申购时间
  •         if date_type(apply_date) == TYPE.TODAY:
  •             today_stocks.append(
  •                 f"名称:{name},申购日:{apply_date},发行价:{price_pre},股票代码:{no},申购代码:{buy_no},交易所:{trade_market},所属板块:{market_type},中签公布日:{ballot_date}")
  •         elif date_type(apply_date) == TYPE.NEXT:
  •             future_stocks.append(
  •                 f"名称:{name},申购日:{apply_date},发行价:{price_pre},股票代码:{no},申购代码:{buy_no},交易所:{trade_market},所属板块:{market_type},中签公布日:{ballot_date}")
  •         else:
  •             # print('历史数据不展示!')
  •             pass
  • ...

#3. 数组组装及定时发送

我们将今日新股及未来新股的数据进行一次组装

  • ...
  • # 组装数据
  •     msg = '今日股票打新数据如下:\n'
  •     if len(today_stocks) == 0:
  •         msg = "无\n\n"
  •     else:
  •         for index, today_stock in enumerate(today_stocks):
  •             msg += today_stock + "\n\n"
  •     msg += '*******************************\n\n预告股票打新数据如下:\n'
  •     if len(future_stocks) == 0:
  •         msg += "无\n\n"
  •     else:
  •         for index, future_stock in enumerate(future_stocks):
  •             msg += future_stock + "\n\n"
  •     return msg
  • ...

然后,利用企业微信注册一个企业,创建一个内部群

接着,在企业微信内部群中创建一个机器人,获取其「webhook」地址,将上面组装后的数据发送出去即可

  • def send_wechat(msg):
  •     """发送信息到企业微信"""
  •     # 这里填写你的机器人的webhook链接
  •     url = '**/send?key=22714fb6-**'
  •     headers = {"Content-Type""text/plain"}
  •     data = {
  •         "msgtype""text",
  •         "text": {
  •             "content": msg
  •         }
  •     }
  •     # 发送消息
  •     requests.post(url, headers=headers, data=json.dumps(data))

最后,将源码推送到云服务器,使用 Crontab 设置定时任务即可

比如,我这里设置的是每天早上 9 点推送今日新股打新消息

图片

#4. 总结一下

通过上面的一系列操作,就可以每天自动提醒我进行打新的消息,不会错过任何一个致富的机会

当然,如果嫌弃企业微信麻烦,也可以将数据爬取部分编写成服务,通过自动化软件及 Hook 技术实现推送到微信的文件传输助手

已将文中所有源码上传:打新股源码:链接:https://pan.baidu.com/s/1h2LGwHeQ_t_n4fJRpRIr2w 提取码:yyso

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐