继上篇公告抓取(20251019.exchange-news), 我大致完成了高频爬取和实盘部分, 实盘当然不能用 LLM 解析标题, 用正则表达式匹配是可以的, 但我心里不安, 考虑到上架公告的标题格式非常固定, 于是我提起之前自制语言时的老朋友: 词法分析+语法分析.

比如 upbit 的英文公告有四种格式, 写成 BNF 就是:

?upbit_market_support_en: upbit_market_support_en_1
	| upbit_market_support_en_2
	| upbit_market_support_en_3
	| upbit_market_support_en_4
 
?upbit_market_support_en_1: "Market Support for " upbit_asset_list _WHITESPACE* upbit_market? TRAIL?  -> upbit_market_support_en
?upbit_market_support_en_2: "Market Support for " symbol_list _WHITESPACE* upbit_market? TRAIL? -> upbit_market_support_en
 
?upbit_market_support_en_3: "New " _LIT_DIGITAL " " _LIT_ASSET "s Added to USDT Market" _WHITESPACE* "(" symbol_list ")" TRAIL? -> upbit_market_support_en
?upbit_market_support_en_4: "New " _LIT_DIGITAL " " _LIT_ASSET " on " _true_symbol_list " Market" _WHITESPACE* "(" symbol_list ")" TRAIL? -> upbit_market_support_en

虽然新格式无法直接匹配, 但这样可以完全避开假阳性, 能匹配到的绝对是正确的. 毕竟是钱的事情, 宁愿丢失一次机会, 也不能搞错.

我发布了这个库在 Github, 提供了 Python 包: xannounce-parser, 如果你安装了 uv, 可以一行命令试用:

uvx --from xannounce-parser xparser 'Market Support for Clearpool(CPOOL) (KRW, BTC, USDT Market)'

今天是首次实盘, 监控程序每 0.5s 向 Upbit 发送一次请求, 在公告发布后 6s 见到公告, 然后因为未知原因 WSL 下 的 MTU 又错了(相见: 开启mihomo-tun时wsl无法访问https), 没能发起交易:

至于延迟的 6s 我暂时没有头绪, 毕竟我是 0.5s 发一次请求的. 今天新上 Upbit 的币 ORDER 真是拉胯, 在 Binance 涨了二十多秒到顶, 然后拦腰下跌, 也不知道高点的那些 Bot 亏了多少.

其实我更想做一个全交易所币种+对应链上的监控程序, 再做一个分类器, 用交易所和链上数据来判别抓到的异常上涨是公告上涨还是普通拉盘, 前者的话就跟上. 这样的话不用扫公告了.