很久没有给老爷们写点好玩的东西了,趁着期末考试结束的空档,来整点阳间玩意!
近日来大A交易额连续三天突破1.5万亿,而门槛较高的证券市场让不少理性的潜在投资者望而却步;确实,缺乏专业知识而只会从大流的证券投资者的确就是摇摇欲坠的“韭菜”;不过可转债作为一项在证券市场中风险较低的投资手段,倍受大家欢迎!
可转债简介
有关可转债的详细情况移步:《新手如何投资可转债,看这一篇就够了》
总的来说,可转债与传统新股申购不同的有:
- 账户内无需市值也可申购,申购时不需出资,近乎无门槛
- 几乎不会亏损,2020年所有可转债首日交易破发率为0
- 期望收益极高,后面会用2020年数据做分析
现在主流券商交易软件都内置了一键打新,但每个交易日都想着要在手机上点点点着实有点难受:以我个人使用的同花顺APP为例,参与每天的打新的流程为打开APP→点击账户→FaceID验证(不然要输入交易密码,更烦)→一键打新→提交,有一说一还是有点烦的,偶尔特别忙还会忘记...参考每天自动健康报的思路,Auto-Make-Money应运而生!(先别往下看,点个star先!)
Auto-Make-Money
在起初有这个需求时,我想着完成自动打新不要太简单,都是些调调API就能完成的活。可惜的是,由于证监会的隐性要求,各大券商几乎都没有给个人投资者开放交易API,就算要开通,要么就是高昂的手续费,要么就是对学生来说离谱的资产门槛;还好easytrader给了我一些思路:不给API,通过窗口化操作券商客户端就是一种不错的思路。
前提条件
使用Auto-Make-Money前的一些准备工作如下:
- 正常状态的沪深两市证券账户,并可以正常使用同花顺客户端登录;(开通创业板权限更佳,因近1/3的可转债会在创业板上市,个人首次开通创业板需要到券商当面签署风险提示书,之后其他证券账户的开通可以直接转签)
- 一台24小时运行的Windows VPS,配置在1C1G以上即可;
原理
这个项目原理十分容易理解:
- 首先因为同花顺PC端一键打新并没有提供可转债选项,我们需要自行到东方财富网爬取可转债信息;当然稍微研究了下,东方财富网似乎没有啥反爬手段,就一个token字段,爬数据的时候提供下即可;
- 没有API是整个项目中令人最厌烦的!不过好在pywin32包提供了直接操作同花顺下单客户端的手段,这里的代码大部分来自easytrader,而因easytrader中还有较多我们不需要的代码和依赖,在此我就直接扒出了相关模块来使用;
部署 & 使用
同花顺下单客户端提前做好以下设置,不然会导致下单时价格出错以及客户端超时锁定:
- 系统设置 > 界面设置: 界面不操作超时时间设为 0
- 系统设置 > 交易设置: 默认买入价格/买入数量/卖出价格/卖出数量 都设置为 空
同时客户端不能最小化也不能处于精简模式;
- 登录同花顺,打开委托平台,登录,按上述调整设置;
- 在config.py中配置xiadan.exe的路径,一般在同花顺可执行文件同目录下;
- (可选)在ServerChan申请SCKey并绑定微信,这样每天微信都会给你推送当日可转债申购情况啦!
- 设置每日在交易时段(9:30~15:00)自动执行main.py;
- 中签后券商会给发短信,抽签日一般是T+2,中签当日16点前保证账户有1000块余额就OK,中签后查询一下预期上市时间,经统计上市首日卖出收益最高。
未来规划
加入多账户支持;(思路很简单,就是多抓取几个按钮的句柄的问题,券商那4位数字验证码tesseract就能搞定;但注意,与申购新股类似,同一人的多个证券账户的多次申购只会有一次有效;)
算一笔账
爬虫都写好了,不如来算算2020年来的所有可转债的预期收益:
计算很简单:可转债顶格申购数量是10000张,每10张派发一个编号,1000个号中1个的概率约为中签率*1000;今年来可转债平均收益在200元,一段小代码算算:
from spider import EastSpider
spider = EastSpider('91') # 最近91支可转债 对应2020年1月至今约6个月可供申购的可转债
kzz_list = spider.get_list()
expectation = 0.0
for kzz in kzz_list:
try:
luck_rate = kzz['LUCKRATE'] * 1000 * 0.01 # 每10张对应一组配号,顶格申购是10000张,中一签的概率约为LUCKRATE*1000*0.01
expectation += luck_rate * 200
except:
continue # 最新的转债中签率未公布
print(expectation)
# 结果 约1800
好家伙,半年白捡1800块,淦,为什么我今年才知道这玩意...
支持一下
点个星星,ballball了:https://github.com/MrZilinXiao/Auto-Make-Money
39 comments
可以实现多个不同用户(我,我爸我妈)进行自动打新吗
main.py 中的:ModuleNotFoundError: No module named 'apscheduler'
不明觉厉;
您能把运行环境 例如编译器版本,库版本之类的大概列出来吗,卡主了。
参考requirements.txt文件试试看?https://github.com/MrZilinXiao/Auto-Make-Money/blob/master/requirements.txt
大佬,最近遇到一个问题,在自己电脑上都可以正常推送server酱,但是一到云主机上就会报{"message":"Custom Authentication failed: authentication information,incorrect"},检查了SCKey也没问题,不知道是啥原因
考虑云主机服务商的IP被Server酱屏蔽了...尝试过代理嘛?
请问大佬目前还在用吗~
最近没在使用了噢
大佬为啥不用了呀,是有什么风险吗?
倒没有什么风险,Windows的服务器到期罢了哈哈哈
请问下~跑第一遍的时候提示请输入申购数量 跑第二遍才成功(有entrust_no) 要怎么解决呢(已按要求设置:系统设置 > 交易设置: 默认买入价格/买入数量/卖出价格/卖出数量 都设置为空)
根据你的描述,一个简单的workaround是每次都执行两遍哈哈哈(因为具体的问题不太好远程帮您排查)
大佬,我找到了一个BUG.在调用get_bond.py的时候发现有时候没能拿到当天的可转债,如今天的"赛伍转债",在html页面上面是存在这个可转债的信息的,但是再get_bond.get_data()里面打印出data的数据(第42行代码,保存在data的数据.txt里),没有这个可转债的信息,再往上追溯,在32行打印出来js的数据(保存在js的数据.txt里)也没有这个可转债的信息.文件地址:https://pan.baidu.com/s/1OCqmZSpIapNli4xFMG_AHw 提取码:dywi
如果你发现了问题所在可以提PR的!新的爬虫是东方财富更新后临时赶制的,的确可能有问题...
抱歉评论回复不及时,您的网盘链接失效了...
大佬能否添加查询是否中签的功能,然后导出到日志文件来查阅。
最近可转债的确没啥赚头了,有空会更新的☺️
最近同花顺无法读取数据,这个估计做不了.即使是申购后读取是否确认都做不到.OωO.
尝试用老版本客户端了嘛,我这边云上的一直没更新,所以一直可用哈哈
大佬能发一下你的ths的exe文件给我不?986268320@qq.com,我用8.7的验证码搞的我头破血流
大佬,最近东财的Token都不能获取当天上市的新债哦,请问要怎么解决?
这么难过嘛 可能改了反爬机制 我有空研究下吧!
嗯嗯,谢谢大佬.
你好!已经适配东财最新API,新版API移除了所有反爬措施,给东财点赞!
修改见:https://github.com/MrZilinXiao/Auto-Make-Money/commit/7a35b01fe7ba73f09fa8b20b9dd5b2928eaf6343
先给你点赞
可以在这个基础上增加实时读取某股票,达到设定价格直接购买或者抛售了。
实际上这个是easytrader做的事情哦,我只是看在easytrader太冗余了,有很多与打新债无关的模块,所以提取出来罢了嘻嘻
因为不会python,所以目前设置通过win计划任务实现自动打新和定时自动挂单,怎么写出先你直接python main.py cron 实现用cmd 打开就可以,不用win计划任务。
是这样的哈 这个项目不支持win的计划任务,因为计划任务在后台运行时无法调用pywin32的句柄,也就无法操作窗口了...
python main.py cron之后保持挂单窗口在前台就行,到时间之后会自动执行制定操作,这是由apscheduler实现的
运行时出现以下错误:
C:Auto-Make-Money>python main.py
Traceback (most recent call last):
File "main.py", line 30, in <module>
IndexError: list index out of range
python main.py cron
执行的时候用这条命令就行啦
python main.py cron是定时模式
python main.py test是测试功能
抱歉打扰,按照指引设置好xiadan.exe的路径后仍报 Process "F:同花顺xiadan.exe" not found!怎么办呀
尝试不用中文路径?
发完帖子以后就找到原因了 确实是中文路径的问题 谢谢~
博主你好,这个情况怎么解决呢?我是小白。
我用easytrader 可正常打新,但是就是里面没有新债
easytrader里面获取的是券商给的列表,我所用的券商里面的确没有新债的,所以这个项目才有意义嘛
大佬吃肉我喝汤,已经Star了
害 邮件系统坏了 现在才回复 sorry