您当前的位置:首页 > 计算机 > 编程开发 > Python

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

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

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

虽说中签几率很低,但是一旦中签大概率会捡点钱,但是偶尔也会忘记参与打新,错过一个发家致富的机会,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

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