
最近黄金和白银的波动确实有点大,不少关注盘面的朋友估计都在反复刷新行情软件。作为一个能用代码解决就绝不动手的人,我给自己捣鼓了一个实时监控脚本。
其实市面上的行情 App 很多,但总觉得差点意思:要么推送有延迟,要么就是没法精准计算“开盘跳空”。这次我把几个关键的痛点给解决了,今天把其中的逻辑分享出来,大家可以参考这个思路。
这个脚本不是死板地每隔几分钟抓一次数据,它会根据交易状态自动调整:
动态交易状态:它会自动解析接口里的 status 字段。如果交易所下班了(休市或已收盘),它就进入低频轮询模式;一旦检测到开盘,立刻切换到高频监控。
# 状态逻辑片段演示
if status == '开盘':
# 交易中,进入高频监控逻辑
wait_time = ACTIVE_INTERVAL
else:
# 已收盘或休市,降低请求频率
wait_time = IDLE_INTERVAL大家知道国内金价(元/克)和国际美元价(美元/盎司)之间有换算差。很多脚本直接用固定的汇率,这在开盘瞬间极其不准。
我在开盘的一瞬间,引入了 Wise(原 TransferWise) 的实时汇率进行校准。
# 无论开盘还是收盘,都更新一次汇率
new_rate = self.get_wise_rate()
# 使用 Wise 汇率折算昨收人民币价
last_close_rmb = (last_close_usd * self.current_exchange_rate) / OZ_TO_GRAM
jump_rate = (open_price_rmb - last_close_rmb) / last_close_rmb
这样算出来的“昨收价格”和“今开价格”才是对齐的。开盘到底是跳涨还是跳空,差一分钱脚本都能抓得清清楚楚。
我用了 Bark 方案把通知直接推送到手机上。为了保证接收体验,我重构了推送函数:
URL 全编码:之前推送的消息偶尔会乱码,或者换行符失效。现在对标题和内容做了严格的编码处理,手机收到的通知排版非常整齐。
safe_title = urllib.parse.quote(str(title))
safe_msg = urllib.parse.quote(str(message))并发推送:如果我想把行情同步给身边的朋友,传统的排队推送太慢了。脚本现在支持多线程并发,所有人都能在同一秒收到警报。
# 并发推送逻辑片段
with ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(push_to_user, uid, title, msg) for uid in USER_IDS]如果你还不了解如何部署自己的推送服务器,可以参考这篇文章:
iOS中的Bark及Bark Server搭建、安装和使用全指南
为了防止被垃圾信息骚扰,脚本设定了两层过滤:
ASSETS_CONFIG = {
"黄金": {
"name": "现货黄金",
"step_rate": 0.005, # 0.5% 步进提醒
"limit_rate": 0.03 # 3% 熔断提醒
}
}
这个小工具纯粹是为了提高信息获取效率,不用再时刻盯着红绿图看。
最后还是要啰嗦一句:行情瞬息万变,工具只是辅助。 黄金白银属于高风险投资品种,脚本报警只代表波动发生,不构成任何投资建议。市场有风险,入场需谨慎,大家一定要理性对待盈亏。
如果你也对类似的自动化监控逻辑感兴趣,欢迎在评论区留言交流。