Skip to content

Releases: VMInsideVM/poly-marketmaker

v10.0.4

Choose a tag to compare

@VMInsideVM VMInsideVM released this 16 Oct 06:23

v10.0.4 · 「排除品类」和新市场保护不再漏掉体育等盘

修了一个会影响「排除品类」和「跳过新建市场」的问题。配置不用改,数据库也不用动。


现象

模板里设了「排除体育」,程序还是会做一部分体育盘,比如「Notre Dame Total Touchdowns」(某场橄榄球比赛的达阵数)。只给部分品类开了「跳过新建市场」的,也会有新盘漏网。

原因

程序是按品类去 Polymarket 查市场、再给市场打品类标签的。每个品类只查奖励最高的前 2000 个,可是政治、选举各有一万多个市场,体育、游戏各有四万多个。

一个市场如果从「游戏」这个品类被查到,在「体育」里却排在 2000 名之后,它就只会被标成「游戏」,漏掉「体育」。漏了这个标签,「排除体育」就认不出它。

实测大约 2 万个候选市场里,有 5249 个漏了至少一个品类标签,其中体育 2593 个、政治 2015 个。

修复

程序在核对每个市场的上线时间和结算日时,顺带向 Polymarket 取回这个市场自己的品类标签,把漏掉的补上。只补不删,不会多发请求。

实测一次补上了 4038 个市场的标签,其中 1819 个是漏标的体育盘。设了「排除体育」的模板以前会做这 1819 个盘,现在一个都不会做。


升级后可能的变化 ⚠️

  • 设了「排除品类」的模板:被补上标签的那些盘会停做,已经挂着的买单会在下一轮挂单时自动撤掉。
  • 只给部分品类开了「跳过新建市场」的模板:新市场保护覆盖得更全,有些以前能挂的新盘现在会跳过。
  • 其他设置基本不受影响。

升级说明

不需要改任何配置,数据库也不用动。

v10.0.3

Choose a tag to compare

@VMInsideVM VMInsideVM released this 16 Oct 05:11

v10.0.3 · 「距结算至少 N 天」改按市场自己的结算日判断

修了一个会影响资金的问题,外加一个显示问题。配置不用改,数据库也不用动。


1. 「距结算至少 N 天才做」拦不住明天就结算的盘 ⚠️

现象: 模板设了「至少还有 1 天(或 2 天、4 天)才结算」,程序还是会去做一些当天、甚至已经过了结算时间的市场。

原因: 程序判断结算日用的是 Polymarket 奖励接口给的日期,但这个日期是整个事件的,不是单个市场的。像「某件事会不会在 X 月 Y 日前发生」这类事件,往往一个事件下面挂着好几个日期的市场(10 月底前、11 月底前、12 月底前……),奖励接口给它们的都是事件里最晚的那个日期。

例如「Next Fable Model released by October 14」这个市场 10 月 15 日就结算,程序却以为是 12 月 31 日,于是当成还有两个多月的市场照做。实测有 105 个市场,按事件日期算「还有 1 天以上」,实际当天就结算。

结算前最后一两天,价格最容易一下子跳到 0 或 1,这正是「至少 N 天」想避开的时段。

修复: 改为向 Polymarket 查每个市场自己的结算日来判断。修复后上面那 105 个市场一个都不会放行。

升级后可能看到的变化:

  • 一些临近结算的市场不再挂单,原来挂着的买单会在下一轮挂单时自动撤掉。
  • 每次「发现市场」会多查一次 Polymarket,大约多花几秒到十几秒。

2. 历史页有些市场名字一直是空的

原因: 程序按批向 Polymarket 查市场名字,对方默认每次只返回 20 个,也不返回已经结算的市场;程序把没查到的都当成「查无此市场」记了下来,以后就再也不查。

修复: 查询要回全部结果,已经结算的市场也一起查。升级后第一次启动,会把以前记成空的名字重新查一遍。


3. 日志里新增每个钱包实际生效的配置

引擎启动时,每个钱包会在日志里打一行它实际在用的模板和设置,例如:

模板「1天跳24小时稳定」: 做市 政治、…、文化+其他; 排除 体育; 跳过新建市场 开 24h,不保护: 文化、其他; 结算至少 4 天

「不保护」后面列出的,就是做了但没开新市场保护的品类。以后觉得哪个设置「没生效」,先看这一行。


升级说明

不需要改任何配置,数据库也不用动。

v10.0.2

Choose a tag to compare

@VMInsideVM VMInsideVM released this 15 Oct 15:44

v10.0.2 · 修好「文化」品类:奥斯卡、电影、网红这类盘以前全被当成「其他」

只修了一个问题,配置不用改,数据库也不用动。但它会改变部分模板的做市范围,升级前请看一眼最后一节。


现象

勾了「文化」的新市场保护,奥斯卡提名盘上线不到一天还是被挂单、成交了。实际碰到的是:

  • Cynthia Erivo 会不会获得第 99 届奥斯卡最佳女主角提名
  • Daniel Craig 会不会获得第 99 届奥斯卡最佳男配角提名

原因

程序是按品类去 Polymarket 查市场、再给市场打品类标签的。「文化」这一类用的查询名写错了,Polymarket 每次都查回 0 个市场。

于是奥斯卡、烂番茄评分、MrBeast 播放量、电影票房这类盘从来没被标成「文化」,全被当成了「其他」:

  • 配置页「文化」那一格,不管是「做市」还是「跳过新建市场」,勾不勾都不起作用;
  • 这类盘做不做、保不保护,实际看的是「其他」那一格。

所以只勾了「文化」保护、没勾「其他」保护的模板,新上线的奥斯卡盘照样会挂单。

修复

  • 「文化」改用正确的查询名,这类盘现在能正确标成「文化」。实测有 1994 个文化盘,原来被当成「其他」的 383 个市场,现在只剩 35 个。
  • 以后某个品类查回 0 个市场时,日志里会打一条警告。

升级后可能的变化 ⚠️

文化盘以后按「文化」那一格决定做不做、保不保护,不再看「其他」。

  • 「文化」和「其他」两格勾法一样的模板:基本没变化。
  • 「文化」勾了做市、「其他」没勾:以前做不到文化盘,现在会开始做。
  • 「文化」没勾做市、「其他」勾了:以前会做文化盘,现在不再做,已经挂着的买单会在下一轮挂单时自动撤掉。
  • 「跳过新建市场」同理:文化盘的新盘保护以后看「文化」那一格。

如果不想要上面的变化,升级后到配置页把「文化」那一格调成你想要的样子即可。


升级说明

不需要改任何配置,数据库也不用动,原来的勾选都保留。

v10.0.1

Choose a tag to compare

@VMInsideVM VMInsideVM released this 13 Oct 12:33

v10.0.1 · 修好「跳过新建市场」对股票/商品价位盘不生效 + 结算保护漏查

修了两个问题,配置不用改,数据库也不用动。第二个修复会让程序在进入结算的市场里更积极地撤单和清仓,升级前请看一眼。


1. 「跳过新建市场」拦不住刚加上来的股票、商品价位盘

现象: 开着「跳过新建市场」、保护期 24 小时,程序还是在上线不到 10 小时的市场里挂了单并成交。实际碰到的是这几个:

  • 美光 MU 触及 $1,020(10 月 12 日那一周)
  • Palantir PLTR 触及 $210(10 月)
  • 黄金触及 $4,200(10 月 12 日那一周、10 月)

原因: 程序以前用 Polymarket 奖励接口给的「创建时间」判断市场新不新,但这个时间其实是整个事件的创建时间,不是单个市场的。「XX 会不会触及某个价格」这类事件,价格走到边上时 Polymarket 会往老事件里追加新价位,新价位就跟着老事件的时间。比如 PLTR 那个盘 10 月 13 日凌晨才上线,程序却以为它是 9 月 25 日建的,当成 18 天的老市场照做。

修复: 现在改为向 Polymarket 查每个市场自己的上线时间来判断。

  • 只有开了「跳过新建市场」的模板才会多查这一下;没开的话不多发任何请求。
  • 实测金融类 1985 个市场里,有 149 个以前被算老了,现在都按真实时间判断。
  • 万一查询失败,退回用原来的时间,不会因此多拦或误撤单。
  • 升级后,这类盘里已经挂着的买单会在下一轮挂单时自动撤掉。

注意: 这次修的只是「时间算错」这一种情况。如果某个钱包绑的模板没开开关,或者开了但没勾某个品类(比如天气),那个钱包照样会做该品类的新市场,这是配置决定的,不是 bug。


2. 「市场进入结算」的保护每次有一大半市场查不到 ⚠️

现象: 程序有一道保护:市场一旦有人在 UMA 提交结算,就撤掉这个市场的买单、把持仓直接市价卖掉、下单时也跳过它。这道保护以前只对一部分市场生效。

原因: 程序是一批 50 个市场去 Polymarket 查结算状态的,但对方默认每次最多只回 20 个,剩下 30 个查不到,程序就按「没在结算」处理了。

修复: 查询时明确要回全部结果,现在每个市场都能查到。

升级后你可能会看到的变化:

  • 进入结算的市场里,买单被撤得更及时、更全。
  • 进入结算的市场里的持仓会被直接市价卖掉,可能低于成本。这是这道保护本来的设计:结算时没卖出去的那一边会归零,所以宁可现在卖掉。以前它对一大半市场没起作用,现在全都会起作用。

升级说明

不需要改任何配置,数据库也不用动。

v10.0.0

Choose a tag to compare

@VMInsideVM VMInsideVM released this 25 Aug 16:34

v10.0.0 · 冷却时间改为「清仓之后才开始算」

这一版只有一个改动,但它改的是「冷却时间」这个设置的含义,升级后你原来填的那个数字会按新口径生效,所以列为主版本,请先看完再升。


改了什么

以前「成交后冷却时间」是从买入成交那一刻开始倒数的。假设填 60 分钟:

买入 YES 成交
  ├─ 0 ~ 60 分钟:整个市场不挂新买单
  └─ 60 分钟之后:YES 侧因为还有持仓,继续不挂
                  NO  侧恢复挂单        ← 问题在这里
持仓卖光:两侧都恢复

冷却一到期,没持仓的那一侧就回来接着做了,尽管这个市场你还套着仓。「市场级冷却」名不副实。

现在改成从该市场持仓完全清空那一刻开始倒数:

买入 YES 成交
  ├─ 持仓期间:整个市场(两侧)都不挂新买单,已挂的买单一律撤掉
  └─ 卖光之后:再等 60 分钟
恢复挂单

升级前请想清楚这一点

你的离场规则是「卖单永不低于成本」——没回本的仓会一直挂在成本价等,唯一的认亏出口是亏到止损线才市价清掉。这意味着一个套住的仓可能挂好几天,这几天里那个市场完全不做。

这是新口径的必然结果,不是程序卡住了。如果你不想要这个效果,把冷却时间调小并不能解决(持仓期间的冻结与时长无关),得考虑调整止损设置让仓位不至于长期挂着。

配置页的变化

「成交后冷却时间」改名为「清仓后冷却时间」,下面加了一行说明。数值不用改,还是那个数,只是从哪一刻开始算变了。


关于程序内部的两件事(不影响使用)

冷却的续期做在监控循环里,每五秒把有持仓市场的到期时间往后推一次,卖光了自然就不再推。所以「卖光后 N 分钟」的误差最多五秒。

下单那一侧还有一道独立的检查:只要这个市场有持仓就不挂单。万一某一轮监控因为网络问题没跑成、续期断了一拍,这道仍然拦得住。


升级说明

不需要改任何配置,数据库也不用动。

唯一要做的是重新理解一下你填的那个冷却时间:它现在是「卖光之后再等多久」,不是「买入之后等多久」。

v9.2.0

Choose a tag to compare

@VMInsideVM VMInsideVM released this 25 Aug 13:06

v9.2.0 · 多钱包并行下单 + 排除品类 + 直接市价清仓

这一版有两个新开关(都默认关,不动配置升级上来行为不变),一处会让多钱包用户明显感到变化的提速,以及一个重启相关的修复。


一、多钱包不再排队下单

以前所有钱包共用一条下单流水线,一个跑完才轮到下一个。每个钱包要把候选市场逐个走一遍,市场多、代理慢的时候单个钱包就得跑八到十一分钟;七个钱包排下来,一轮六十多分钟,也就是说任何一个钱包挂完这次单,要等一个多小时才轮到它下一次。中间它既不补新单,也不撤该撤的单。

有位用户的实盘日志里,某个钱包两次挂单之间隔了 67 分钟。他看到的现象是"成交卖出之后就不挂了",其实是排队没轮到。

现在各钱包同时下单,一轮的时间等于最慢的那个钱包,不再是所有钱包相加。钱包越多,差别越大。

**这意味着挂单和撤单都会比以前频繁得多。**单个钱包的下单逻辑一个字没改,挑哪个价、挂几份、挂哪个市场,判断完全和以前一样,只是轮到它的次数多了。如果你之前是按"一小时才动一次"的节奏观察程序,升级后请重新看一眼实际频率。

二、排除品类

配置页的品类表格多了一列「排除」。勾中的品类一票否决:只要市场带这个标签就不做,哪怕它同时带着你勾了「做市」的标签。

为什么需要这个:官方品类是互相重叠的。同一位用户勾了「政治」、没勾「选举」,结果程序还是在一个巴西州长选举的市场上挂了单——那个市场在 Polymarket 那边同时挂在政治和选举两个分类下,而「做市」这一列的判断是"命中任一个勾中的品类就做",政治命中了就放行。翻他的候选池,带选举标签的 54 个市场里有 44 个同时带政治标签,占八成,靠不勾「选举」根本挡不住。

这类重叠不止选举一处,地缘政治和政治、人工智能和科技、电竞和体育都有大量重叠。要拒绝某个品类,勾「排除」。

排除优先于做市,两列在界面上互斥。「其他/未分类」那一行没有这一列——它本来就不带任何标签,没有可排除的东西,仍归「做市」列管。

**勾上之后会撤单。**被排除的市场下一轮就跌出候选,程序会撤掉这些市场上还挂着的买单(正在冷却的市场除外)。已有持仓不受影响,照常按离场规则卖出。

三、止盈方式多一个「直接市价清仓」

配置页「止盈方式」原本两个选项,现在多一个:不论盈亏,只要有持仓就立刻市价卖出,不挂单等价差、不等回本。

它跳过平时的两段式判断,成本价算不出来也照卖(正常模式下遇到这种情况会跳过并报「裸奔」警告)。盘口没有买盘时卖不出去,这时不会记一笔假成交,而是发一条警告状态行,下一轮再试。

默认仍是「挂卖一做 maker」,想用才选。

四、修复:重启引擎会留下停不掉的后台扫描

以前点「停止引擎」时,如果扫描线程正好在做市场发现(这一步要跑十几到二十几分钟),程序等三十秒等不到就放弃、把线程丢开不管了;紧接着「启动引擎」又把停止信号清掉,那条旧线程醒来一看没人让它停,就继续跑下去,直到整个程序被关闭为止。

每重启一次引擎,就多留一条这样的线程。两条线程同时下单会在同一个市场重复挂单,实际敞口翻倍,还会互相撤掉对方刚挂的单——日志里那批"already canceled"就是这么来的。

现在停止和启动引擎都会作废上一代线程,旧线程在下一个检查点会自己退出;市场发现过程本身也能被中途叫停,不用再干等它跑完。


升级说明

不需要改任何配置,两个新开关默认都是关的。

多钱包用户请留意第一条:下单频率会明显上升,这是并行带来的正常结果,不是程序出问题。

v9.1.0

Choose a tag to compare

@VMInsideVM VMInsideVM released this 15 Aug 08:59

v9.1.0 · 断层上限否决(默认关)

这一版加了一个新的风控开关,默认是关的,不动配置升级上来行为一模一样。另外修了两处显示问题,还纠正了帮助页里一条一直写反的排查建议。


一、新增「断层上限」(默认关)

配置页「悬崖探测」旁边多了一个「断层上限」。填了以后,整个买单簿的最大相邻价差一旦超过这个数(严格大于,恰好相等不算),这一侧就不挂了,也不再往下走分级选档那一套。

它跟已有的两个断层阈值不是一回事。「宽断层」「中断层」拿断层去分级,决定这个市场用哪一套选档门槛;断层上限拿断层去一票否决,判定排在分级之前。

下单前判一次,挂出去之后监控每 5 秒还会复查在挂的买单,超了就撤且不重挂(历史页记「撤单(断层过宽)」)。两处共用同一份计算,不会出现下单侧放行、监控侧撤单的来回空转。

填之前请先看清楚这一点。 断层量的是整个买单簿,而低价区那些零散挂单会把这个数撑得很大,价格越高的市场撑得越狠。举两个真实形状的簿:

  • 一个健康的高价市场,买档 0.50 / 0.48 / 0.46 挨得很密,簿底有人挂了一笔 0.02。最大断层是 0.46 到 0.02 那一段,44¢。
  • 一个危险的低价市场,买档只有 0.19 / 0.18,下面直接砸到 0.02。最大断层是 0.18 到 0.02,16¢。

密集的那个 44¢,真空的那个 16¢。所以拿一个上限一刀切,先被拦掉的反而是高价的健康市场。建议去「市场发现」页展开几个你实际在做的市场,看一眼「最大断层」的真实数值,照着定。


二、两条关于「悬崖探测」的澄清

这两点都不是这一版改的行为,是原本就那样、但一直没讲清楚的。

这个数越大越宽松,越小越严格。 它查的是「奖励区间下沿往下这一段里有没有买档」,段越宽就越容易找到人,也就越不容易判成悬崖。填 0.5 意味着只有紧贴下沿半美分内有档才算数,几乎所有市场都会被否掉。帮助页里原本写着「被悬崖否了就把悬崖探测调小或设 0」,方向是反的,已经改成「调大」并说明了原因。

悬崖探测本身就是按深度否决。 「下沿往下 2¢ 内一个档都没有」和「下沿到下面第一个买档的距离超过 2¢」是同一句话。想要「缺口超过 5 美分就不挂」,把悬崖探测填 5 就是了,不需要用上面那个新参数。新参数的区别在于它量的是全簿任意位置的最大缺口,而悬崖只量下沿紧邻的那一段。


三、修了两处显示问题

跳过记录会整条丢失。 一个市场被归级前的闸门否掉时,那些还没算出来的中间值全是空的,而拼「价格依据」那段文字没考虑这种情况,会直接抛异常。异常被日志吞掉,结果就是历史页上什么都不写,你只看到单没挂,一个字的解释都没有。悬崖否决走的是另一条分支,没受影响;这次的新闸门会踩到,一并修了。

预演页的规则标签会自相矛盾。 悬崖或断层上限否决时,市场还没归级,标签兜底写的是「无区间档」,可这两种情况奖励区间里明明是有买档的,跟同一行显示的「最大断层 15¢」对不上。现在统一显示「未归级」,真实原因看下面那行跳过说明。


升级说明

不需要改任何配置。想用新功能就去配置页填「断层上限」,想保持原样就别管它。

v9.0.0

Choose a tag to compare

@VMInsideVM VMInsideVM released this 15 Aug 05:19

v9.0.0 · 断层分级改看整个买单簿;v1.0.15 的老策略回来了

这一版会改变挂单行为,升级后你大概会看到挂单变少。 这是有意的,原因见下面第一节。另外两个新功能默认都是关的,不动配置就不会生效。


一、断层分级现在看整个买单簿(行为改变)

有用户报了一个市场:买单簿是 21¢ 挂 236 份、19¢ 挂 120 份,再往下直接掉到 8¢。奖励区间是 19.5¢ 到 27.5¢,程序照样在 21¢ 挂了单。

查下来是分级的取值范围有问题。以前判断「断层」只看奖励区间里面的买档,而这个市场区间里只剩 21¢ 一档,算不出任何价差,于是被当成最平稳的「密盘」处理,规则1 那道厚度闸门根本没机会执行。19¢ 往下那个 11¢ 的深坑,全程没进入判断。

更要命的是,这不是这一个市场的巧合。奖励区间的宽度等于 max_spread 的两倍,所以按旧口径,只要你的「买卖价差上限」配成 5 美分或更小,规则1 就永远不可能触发,那道厚度闸门从配上去那天起就是死的。

现在改成看整个买单簿:分级和高位厚度都在全簿上算(包括奖励区间外的档,区间下方的深坑正是要防的东西),挂单价仍然只在奖励区间内选。上面那个市场现在会被正确判成「宽断层」,并因为上方厚度不够而整个不挂。

你会感觉到的变化:真实买单簿的低价区(1 到 8 美分那一带)通常比较稀疏,很容易冒出超过 10 美分的断层,所以大部分市场现在会归到规则1。这意味着:

  • 挂单量会下降,因为以前漏判的危险市场现在被拦住了。
  • 规则1 的两个参数(选档系数门槛、高位系数和门槛)从此是主力,调参先调它们。规则2、规则3 的门槛虽然还能配,但触发机会不多。

二、规则2 和规则3 也可以设厚度闸门了(默认关)

以前只有规则1 有「高位系数和门槛」这道市场级闸门:断层上方到买一那一段的风险系数之和不够,整个市场就不挂。现在规则2、规则3 各有自己的一个,在档位模块里逐档配。

默认都是 0,也就是不拦,所以不动配置的话行为完全不变。

如果你把某一级的门槛从 0 调上去,那些不再合格的市场,它们上面已经挂着的买单会在下一轮被撤掉。这跟停用一个档位模块时的行为一致,属正常。


三、v1.0.15 的老策略回来了,可以随时切换(默认关)

v1.0.15 那套「找厚墙、挂在墙下面一档」的挂单策略,现在作为一个可选模式移植了回来,在「配置 → 挂单参数 → 挂单模式」里切换。默认仍是现行的断层单档,不动配置就用不到它。

它是按模板生效的,所以你可以让一部分钱包跑老策略、另一部分跑现行策略,跑几天后到「盈亏」页对比收益。

移植回来的只有挑价和挂几份这两件事,其余一律沿用现在的程序:选品筛选、品类白名单、预算与敞口封顶、离场止损、每钱包代理、盈亏台账和周报都不受影响。

切之前请看帮助页的「两种挂单模式 · 怎么选、怎么切」,那里有完整的操作步骤和 7 条注意点。最要紧的三条先摆在这里:

  1. 默认阈值 2000 / 6000 可能对现在的盘口偏高。 那是 v1.0.15 年代的数值。上面提到的那个市场,最厚的一档只有 236 份,按 2000 的阈值会被判「无档达到阈值」而整个不挂。切之前先去「市场发现」页展开几个市场,看看预演表里盘口量是什么量级,再定阈值。 阈值定得比盘口高,结果就是一单也挂不出去。
  2. 老策略下档位模块只剩「档位值」和「启用」有用,用来圈定做哪些份额档的市场;它的挂单份数、各项门槛、金额数值表全部不生效。所以切过去之后仍然要至少启用一个档位模块。
  3. 「挂单份数」选「按美元上限」的话必须填金额,留 0 等于一单都不挂。

老策略不是百分之百还原 v1.0.15:监控侧的悬崖复查、实时奖励复查、盘口价差复查仍然生效,它们是独立风控,跟用哪套定价无关。想要纯原版行为,把「悬崖探测」配成 0。


四、修了 7 个问题

配置页清空数字输入框会让这个钱包停止交易(重要)

策略参数里任何一个数字框,如果你把它清空再保存,这个钱包接下来每一轮下单都会失败,而界面上看不出任何异常,只有日志里有一行记录。这个问题不只影响新功能,「宽断层阈值」「单市场最大敞口」这些老参数一样中招。

现在清空的框会被当作「这一项不改」,保存后保持原值;后端也加了一层兜底。(唯一的例外是「最长结算天数」,那一项留空的意思仍然是「不限」。)

其余六个

  • 老策略在「按美元上限 / 全额余额」份数模式下,历史记录里写的份数不是实际挂出去的份数(会写成未经预算封顶的理论值)。
  • 历史页把老策略的跳过记录标成了「断层单档·判定不挂」,标签改成中性的「策略判定不挂」,具体哪套策略看「原因」列。
  • 老策略在余额较小时,余额稍有变动就会把在挂买单全撤重挂,反复丢失队列位置。
  • 老策略挂单成功时会把整个买单簿写进历史记录(几十档、上千字符),现在只记命中的那堵墙和实际挂的那一档。
  • 悬崖否决时,预演页会对 0.1 美分盘错误地显示「厚墙(1 美分盘)」。
  • 逐档挂量带小数而累计值取整,并排显示时相加对不上。

五、文档

README 和帮助页都补了「两种挂单模式怎么切、切之前要注意什么」,含操作步骤、7 条注意点、两个使用场景,以及一份「切了老策略却一单不挂」的排查对照表(按历史页「原因」列的文字对号入座)。


升级方式

程序启动时会自动检测新版本并提示,确认后下载、校验、静默安装并重启。也可以到 Releases 页手动下载安装包覆盖安装。运行数据(数据库、配置、私钥)不受影响。

v8.3.0

Choose a tag to compare

@VMInsideVM VMInsideVM released this 31 Jul 05:45

v8.3.0 · 新市场保护可以按品类勾选了

升级后行为不变。 新增的品类勾选默认全选,跟你现在的设置完全等价;要不要缩小范围,是你主动去点的事。

「跳过新建市场」不再是一刀切

以前这个开关一开,就对你做市的所有品类生效。但不同品类的新市场不是一回事:体育这类市场天生创建即交易、生命周期以小时计,一律等 24 小时等于不做;而政治、加密这类新市场盘口薄、价格未定型,正是这个保护要针对的。

配置页的「做市品类」现在是一张表,每个品类两个勾选框:

做市品类(只做勾选的)                    刷新计数
☑ 跳过新建市场    保护期 [ 24 ] 小时

 品类            计数    做市    跳过新市场
 政治            123      ☑        ☑
 经济             45      ☑        ☐
 体育              0      ☐        ·(置灰)
 其他/未分类      78      ☑        ☐

「跳过新建市场」的总开关和保护期小时数也一并挪到了这里,一个功能的配置不再散在页面两处。没勾「做市」的品类,它的保护框会自动置灰——你不做的品类,保护它没有意义。

一个市场可能同时属于多个品类。判定口径是任一命中:只要它的某个品类在你勾中的保护名单里,保护就生效。

两件事跟 v8.1.0 说过的一样,这次没变:实际生效可能比你填的时长晚一个「市场发现间隔」(默认 4 小时,方向上偏保守);新勾上某个品类的保护时,已经挂在那些新市场上的买单会被撤掉(只撤单,持仓不动)。反过来,取消某个品类的保护不会撤任何单,只是那些市场重新可做。

配置页每个钱包后面显示余额

钱包表加了一列余额。这个数原本就在查,只是没显示出来,所以不多花时间。

两个在代码评审里被揪出来的问题

保护判定会随「其他/未分类」这个无关设置翻面。 程序给市场打品类标签时只按你的做市名单打(这是 v5.0.0 为了省网络做的优化),所以不勾「其他」的时候,市场的标签是残缺的。而新加的保护判定读的正是这份残缺标签——同样的意图,勾不勾「其他」结果会相反。现在保护判定只在你做市的品类上生效,跟那个设置解耦了,也没有把省下来的网络吐回去。

品类表还在「刷新中…」的时候点保存,会把勾选全清空。 清空之后做市品类是空的、「其他」也没勾,等于你的钱包下一次启动一单都不挂,而且不会有任何报错。现在这种时候点保存会被拦下来,提示稍候再存。

v8.2.1 · 撤单更快,修一批实盘查出来的问题

⚠️ 这一版请务必更新。 全部改动都是修复,做市的判断逻辑没有任何改动,但其中几个问题一直在悄悄影响你的持仓保护和代理,源头是一份 11 小时的实盘日志(93.7 万行,4 万多条报错)。

用 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 等于不筛。

这两项跟单价区间、结算天数一样是按模板配的,所以不同钱包可以用不同的时长。

判断用的是市场的创建时间,这个数据本来就在奖励接口的返回里,不用额外发请求,不会拖慢开机后的第一单。

有两件事得先说清楚:

⚠️ 实际生效可能比你填的时长晚一点。 如果你所有模板都开了这个开关,判断会提前到「市场发现」那一步做,而市场发现默认 4 小时才跑一轮。所以填 24 小时,实际可能是 24 到 28 小时之间才开始做。方向上偏保守,多等一会儿而已。只要还有任何一个模板没开这个开关,就没有这个延迟。

⚠️ 勾上的那一刻,已经挂在新市场上的买单会被撤掉。 这些市场会从可下单名单里掉出去,下一轮下单时程序会撤掉它们的买单(只撤单,持仓不动)。把 24 调大成 72 也是同理。反过来不用担心:时间只会往前走,市场只会越来越老,不会重新变「新」。

盈亏台账往前补了 45 天

「盈亏台账」页的起点从 7 月 1 号往前挪到了 5 月 17 号,也就是这个程序第一次写出来的那天。更新后第一次开机,程序会把这段历史一次补齐(在后台跑,不影响下单和止损)。没有交易的日子就是一排 0。

周报里「累计净利润(自 …)」那个日期也跟着变。

周报推送换了通道

程序每周会把做市盈亏汇总发给作者一份。原来那条通道的凭证泄露了(被人从公开仓库里扒走盗用),已经作废,这一版换成了新的。

你不用做任何配置,更新完就继续正常工作。

但旧版本的推送从现在起会一直失败,用的是已经作废的凭证。对你的交易没有任何影响(推送本来就跟下单、止损没关系,失败也只是在日志里记一行),但作者那边收不到你的数据了。所以如果你暂时不打算更新,跟作者说一声。

升级说明

直接更新,钱包数据和配置都不动。新加的「跳过新建市场」默认关着,不管它就是原来的行为。

v8.2.1

Choose a tag to compare

@VMInsideVM VMInsideVM released this 29 Jul 17:07

v8.2.1 · 撤单更快,修一批实盘查出来的问题

⚠️ 这一版请务必更新。 全部改动都是修复,做市的判断逻辑没有任何改动,但其中几个问题一直在悄悄影响你的持仓保护和代理,源头是一份 11 小时的实盘日志(93.7 万行,4 万多条报错)。

用 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 等于不筛。

这两项跟单价区间、结算天数一样是按模板配的,所以不同钱包可以用不同的时长。

判断用的是市场的创建时间,这个数据本来就在奖励接口的返回里,不用额外发请求,不会拖慢开机后的第一单。

有两件事得先说清楚:

⚠️ 实际生效可能比你填的时长晚一点。 如果你所有模板都开了这个开关,判断会提前到「市场发现」那一步做,而市场发现默认 4 小时才跑一轮。所以填 24 小时,实际可能是 24 到 28 小时之间才开始做。方向上偏保守,多等一会儿而已。只要还有任何一个模板没开这个开关,就没有这个延迟。

⚠️ 勾上的那一刻,已经挂在新市场上的买单会被撤掉。 这些市场会从可下单名单里掉出去,下一轮下单时程序会撤掉它们的买单(只撤单,持仓不动)。把 24 调大成 72 也是同理。反过来不用担心:时间只会往前走,市场只会越来越老,不会重新变「新」。

盈亏台账往前补了 45 天

「盈亏台账」页的起点从 7 月 1 号往前挪到了 5 月 17 号,也就是这个程序第一次写出来的那天。更新后第一次开机,程序会把这段历史一次补齐(在后台跑,不影响下单和止损)。没有交易的日子就是一排 0。

周报里「累计净利润(自 …)」那个日期也跟着变。

周报推送换了通道

程序每周会把做市盈亏汇总发给作者一份。原来那条通道的凭证泄露了(被人从公开仓库里扒走盗用),已经作废,这一版换成了新的。

你不用做任何配置,更新完就继续正常工作。

但旧版本的推送从现在起会一直失败,用的是已经作废的凭证。对你的交易没有任何影响(推送本来就跟下单、止损没关系,失败也只是在日志里记一行),但作者那边收不到你的数据了。所以如果你暂时不打算更新,跟作者说一声。

升级说明

直接更新,钱包数据和配置都不动。新加的「跳过新建市场」默认关着,不管它就是原来的行为。