不知道大家有没有「打新股(债)」的习惯呢?煎蛋哥就会经常参与股债打新,平均下来一年也能中几次
虽说中签几率很低,但是一旦中签大概率会捡点钱,但是偶尔也会忘记参与打新,错过一个发家致富的机会,So 我需要一个定时提醒
下面将讲解一下使用 Python 实现定时推送打新股(债)消息的完整流程
打新股是指,某家公司被批准上市,首次向市场出售部分股份以换取资金,个人或机构在申购日当天通过证券 App 或线下进行申购的过程
对普通投资者来说,参与打新股、新债有一定的条件
比如:需要在申购日前 2 日(申购日为 T,即:T-2 )前 20 个交易日持有对应证券交易所股票 1W 以上的股票才能参与
沪市每持有 1 万市值可以申购 1000股,深市每持有5000 市值可以申购 500 股,交易时证券 App 会有可以购买的数量提示
另外,如果要申购创业板、科创板的新股,需要去开通对应的权限
打新债是指申购最新发行的债券、基金产品
一般债券基金发行的时候价格较低,打新债一般不会破发,投资风险相比打新股更低,因此投资者更多,中签几率更低
打新债由于采用信用申购方式,我们只需要开通了证券账户,即使没有持有股票市值也可以进行申购,门槛相比打新股更低
目标对象:
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
- ...
我们将今日新股及未来新股的数据进行一次组装
- ...
- # 组装数据
- 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 点推送今日新股打新消息
通过上面的一系列操作,就可以每天自动提醒我进行打新的消息,不会错过任何一个致富的机会
当然,如果嫌弃企业微信麻烦,也可以将数据爬取部分编写成服务,通过自动化软件及 Hook 技术实现推送到微信的文件传输助手
已将文中所有源码上传:打新股源码:链接:https://pan.baidu.com/s/1h2LGwHeQ_t_n4fJRpRIr2w 提取码:yyso