Repository navigation
v8.2.1
v8.2.1 · 撤单更快,修一批实盘查出来的问题
用 SOCKS5 代理的人尤其要更新,见倒数第二节。
挂单多的时候,撤单不再拖那么久
程序每 5 秒检查一轮在挂的买单,看盘口价差变没变、奖励掉没掉、价格漂出区间没有,该撤的撤掉。检查之前要先把每个买单所在市场的盘口拉回来,以前是一个买单问一次服务器。
挂 5 个单的时候没什么感觉,挂到 50 多个就很明显了。实盘日志里,挂单超过 50 个时光这一步就要 10 秒以上,最坏的一轮花了 46 秒。而撤单的判断本身只要几毫秒,时间全耗在等服务器逐个回话。
现在改成一次问完所有盘口。实测拉 20 个市场的盘口,以前要 10.5 秒,现在 0.56 秒。
三个地方都换了:撤单检查、持仓离场检查、找市场时的盘口刷新。最后那个对开机后多久挂上第一单也有帮助。
挂什么价、什么时候止损、卖单永不低于成本,这些判断一个字没改。
修复:0.1 分的市场卖不出去
有些市场的最小报价单位是 0.1 分(而不是常见的 1 分)。程序发市价卖单时漏传了这个单位,服务器直接拒收,卖单根本没发出去。
影响的是三条卖出路径:止损、市场结算前清仓、余额不足时清仓。它们都会每 5 秒重试一次,然后每次都被拒。持仓在这期间一直没有保护。7 月 29 日的日志里能看到一个仓被拒了 385 次、10 个小时没卖出去。限价卖单一直是正常的,只有市价卖有这个问题。
修复:网络抖一下就误报「持仓裸奔」
程序算持仓成本要先拉成交记录。拉失败的时候,以前直接判定「成本算不出」,跳过这个仓并弹一条
问题是走代理的网络抖动很常见。7 月 29 日那天 810 次裸奔警告里,789 次(97%)都紧跟着一次取数失败。也就是说绝大部分警告是假的,仓其实好好的。
现在取数失败会自己重试一次,重试也失败才认成本未知。真正算不出成本时照样跳过并警告,这条保护一点没放松,变的只是不再把一次网络抖动当成一段无保护窗口报出来。
修复:读余额失败会掀翻一整轮下单
下单前要读一次钱包余额。这个调用以前没有容错,代理抖一下整轮就中断了。
坏处不只是这一轮没下成单。市场是按竞争度固定排序的,排在后面的那些永远等不到,既不下单也不撤单。每次中断饿死的都是同一批市场。那份日志里这样的中断有 159 次,每次前面一行都是同一个钱包的余额读取失败。
现在只跳过读不到余额的那个市场,其余照常走完。
修复:安装包里一直缺 SOCKS5 支持
代理有 HTTP 和 SOCKS5 两种,程序保存代理时会自动探测是哪种。但打出来的 Windows 安装包里从来没装过 SOCKS5 需要的组件,从有代理功能那天起就缺。
后果是:配 SOCKS5 代理的钱包,在安装包里请求根本发不出去。用源码跑的人不受影响,因为源码环境装了这个组件。
同一批还修了另一个漏进安装包的东西。一个加密签名库少打了一个文件,导致建立 API 连接时报 CoinCurveECCBackend requires the coincurve library,那份日志里出现了 644 次。
这两个都验证过了:重新打包后确认组件齐全、报错消失。
修复:预算吃满的市场,买单等不到复查
程序有个「悬崖」判断:奖励区间下沿往下一小段里如果一个买档都没有,说明这个价位下面是空的,不该在这儿挂单。
以前这个判断只在下单的时候做。问题是当一个市场的预算被持仓吃满时,下单轮会整个跳过它,那市场里已经挂着的买单就再也没人复查了。现在每 5 秒的复查里也加了这一条,撤掉就不再重挂。
顺带把下单和复查两处的悬崖判断抽成了同一个函数,口径不会各走各的。
v8.2.0 · 可以部署到服务器上跑了
主要是能装到 Linux 服务器上了。在自己电脑上用的人也有收益:撤单和止损反应更快了。
撤单和止损反应更快了
以前程序检查持仓要不要卖的时候,是一个仓一个仓挨着问服务器,问完一个才问下一个。持仓多的时候这一轮就拖得长,而撤单和止损都得等这一轮跑完才轮得上。现在改成一批一起问。
持仓越多,差别越明显。做市的判断逻辑一个字没改:什么价挂、什么时候止损、卖单永不低于成本,全都和以前一样,变的只是问服务器的方式。
日志里每轮会多记一行 [tick],写明这一轮各步花了多少秒。排查「反应慢」的时候有用,平时不用管它。
新增:部署到 Linux 服务器
现在可以把程序装到一台 Linux VPS 上,通过自己的域名用 https 访问,不用自己电脑一直开着。
部署步骤见 deploy/README.md。
几点先说清楚:
- 必须配域名并走 https。 用裸 IP 加 http 访问的话,私钥在提交时是明文穿过公网的,
中间任何一个节点都能抓到。部署脚本会自动申请证书,你只要把域名解析指过来。 - 进程重启后要重新登录。 私钥是用登录密码加密的,密钥只存在内存里,重启就没了,
引擎不会自动恢复。这是有意的——把密码存在服务器上等于取消加密。 - 更新按钮在服务器上照常能用,点一下会拉最新版本并自动重启。失败会自动回滚,
不会把服务搞挂。跟本地一样,引擎运行中不让更新。
两个安全改动(本地版也生效)
- 「应用更新」这个接口以前不需要登录就能调用,本地只监听自己电脑时没影响,但既然现在能
部署到公网,这里补上了登录检查。「检查更新」(登录页底部那个链接用的)继续保持免登录——
它只是去 GitHub 读一下最新版本号,带 30 分钟缓存,不改任何状态也不会泄露钱包信息。
你不会有任何感知。 - 新安装时密码最短要求从 6 位提到 12 位。 已经设过密码的不受影响,程序没有改密码的功能。
v8.1.0 · 可以跳过刚上架的新市场
新增:跳过最近 N 小时内创建的市场
刚上架的市场盘口薄、价格还没定型,奖励参数也可能过几天就调,在上面做市比在成熟市场上风险高。这一版让你自己决定「市场创建满多少小时之后才做」。
配置页的「策略参数」区多了两项:
- 跳过新建市场:勾选框,默认不勾。不勾就跟以前完全一样。
- 新市场保护期(小时):默认 24。想改成 48、72 都行,填 0 等于不筛。
这两项跟单价区间、结算天数一样是按模板配的,所以不同钱包可以用不同的时长。
判断用的是市场的创建时间,这个数据本来就在奖励接口的返回里,不用额外发请求,不会拖慢开机后的第一单。
有两件事得先说清楚:
盈亏台账往前补了 45 天
「盈亏台账」页的起点从 7 月 1 号往前挪到了 5 月 17 号,也就是这个程序第一次写出来的那天。更新后第一次开机,程序会把这段历史一次补齐(在后台跑,不影响下单和止损)。没有交易的日子就是一排 0。
周报里「累计净利润(自 …)」那个日期也跟着变。
周报推送换了通道
程序每周会把做市盈亏汇总发给作者一份。原来那条通道的凭证泄露了(被人从公开仓库里扒走盗用),已经作废,这一版换成了新的。
你不用做任何配置,更新完就继续正常工作。
但旧版本的推送从现在起会一直失败,用的是已经作废的凭证。对你的交易没有任何影响(推送本来就跟下单、止损没关系,失败也只是在日志里记一行),但作者那边收不到你的数据了。所以如果你暂时不打算更新,跟作者说一声。
升级说明
直接更新,钱包数据和配置都不动。新加的「跳过新建市场」默认关着,不管它就是原来的行为。