Python 打新股,我建议你这么来操作!
下面将讲解一下使用 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 」即可以获取
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!