查看原文
其他

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

AirPython 2023-05-26

The following article is from 煎蛋搞钱 Author 煎蛋哥

家好,我是安果!


不知道大家有没有「 打新股(债) 」的习惯呢?煎蛋哥就会经常参与股债打新,平均下来一年也能中几次
虽说中签几率很低,但是一旦中签大概率会捡点钱,但是偶尔也会忘记参与打新,错过一个发家致富的机会,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 技术实现推送到微信的文件传输助手

我已将文中所有源码上传到下方公众号后台,关注公众号后回复关键字「 dxg 」即可以获取

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存