⚠️ 注册门槛:Pionex 不支持中国大陆身份证通过 KYC,需持有台湾 / 新加坡 / 马来西亚 / 美国等地有效证件。参考 Pionex 受限地区官方说明。

Claude Code 监控 Pionex 机器人

Pionex 网格机器人跑了 4 个月,最大的痛点是到达区间边沿时没有预警。价格上穿 / 下穿区间机器人会自动停,但你不知道什么时候需要手动干预(重配区间或暂停)。

解决方法:写一个小脚本监控价格,到达边沿前预警。我用 Claude Code 从零写到跑起来花了 25 分钟,把过程和最终代码都放出来。

为什么要 Claude Code 写

比起自己从头想:

  • 我不熟悉 Pionex API(Claude 查文档比我快)
  • Telegram Bot API 我记不住细节(Claude 会直接出正确代码)
  • 我倾向于过度设计,Claude 会给"最小可用"版本
  • 调试环节 Claude 看报错直接改

整个过程就是对 Claude 说人话,它输出代码 + 解释。

需求定义(我给 Claude 的)

写一个 Python 脚本:
1. 每 5 分钟查 BTC/USDT 和 XAU/USDT 的当前价格
2. 如果价格接近预设区间的上沿或下沿(10% 以内),推送 Telegram
3. 推送内容含:当前价、区间、距离边沿百分比
4. 配置放在环境变量:TG_TOKEN, TG_CHAT_ID, BOT_CONFIGS
5. BOT_CONFIGS 是 JSON,格式:
   [
     {"symbol": "BTC/USDT", "low": 60000, "high": 70000, "name": "BTC 网格"},
     {"symbol": "XAU/USDT", "low": 3400, "high": 3600, "name": "黄金网格"}
   ]
6. 用 Binance 公开 API 查价格(Pionex 用的价格源和 Binance 一致)
7. 部署到 Mac,用 launchd 每 5 分钟跑

Claude 输出的代码(几乎一稿过)

文件 1:pionex_monitor.py

import os, json, urllib.request, time
from datetime import datetime

TG_TOKEN = os.environ["TG_TOKEN"]
TG_CHAT_ID = os.environ["TG_CHAT_ID"]
BOT_CONFIGS = json.loads(os.environ.get("BOT_CONFIGS", "[]"))

# 阈值:距离边沿 10% 触发预警
ALERT_THRESHOLD = 0.10

def get_price(symbol):
    """symbol 格式 'BTC/USDT' → Binance API 'BTCUSDT'"""
    s = symbol.replace("/", "")
    url = f"https://api.binance.com/api/v3/ticker/price?symbol={s}"
    with urllib.request.urlopen(url, timeout=10) as r:
        return float(json.loads(r.read())["price"])

def send_tg(text):
    """Telegram Bot 推送"""
    url = f"https://api.telegram.org/bot{TG_TOKEN}/sendMessage"
    data = json.dumps({"chat_id": TG_CHAT_ID, "text": text}).encode()
    req = urllib.request.Request(url, data=data,
                                 headers={"Content-Type": "application/json"})
    try: urllib.request.urlopen(req, timeout=5)
    except Exception as e: print(f"TG send failed: {e}")

def check_bot(bot):
    symbol = bot["symbol"]
    low, high = bot["low"], bot["high"]
    name = bot["name"]
    try: price = get_price(symbol)
    except Exception as e:
        print(f"{symbol}: get price fail: {e}")
        return
    
    # 距离上沿的百分比
    dist_to_high = (high - price) / price
    dist_to_low = (price - low) / price
    
    # 判断是否接近边沿
    if dist_to_high < ALERT_THRESHOLD and dist_to_high > 0:
        pct = dist_to_high * 100
        send_tg(f"🟡 {name} 接近上沿\n当前: ${price:,.2f}\n上沿: ${high:,.2f}\n距离: {pct:.2f}%")
    elif dist_to_low < ALERT_THRESHOLD and dist_to_low > 0:
        pct = dist_to_low * 100
        send_tg(f"🟡 {name} 接近下沿\n当前: ${price:,.2f}\n下沿: ${low:,.2f}\n距离: {pct:.2f}%")
    elif price >= high:
        send_tg(f"🔴 {name} 已穿越上沿!\n当前: ${price:,.2f}\n上沿: ${high:,.2f}\n机器人可能已停,建议检查")
    elif price <= low:
        send_tg(f"🔴 {name} 已跌破下沿!\n当前: ${price:,.2f}\n下沿: ${low:,.2f}\n建议手动平仓或扩大区间")

if __name__ == "__main__":
    for bot in BOT_CONFIGS:
        check_bot(bot)

只有 40 行。

怎么部署(Mac 本机)

1. 保存为 ~/scripts/pionex_monitor.py

2. 建 Telegram Bot:找 @BotFather 发 /newbot → 拿到 Token

3. 拿 Chat ID:自己的 Bot 发消息后访问

https://api.telegram.org/bot<TOKEN>/getUpdates

JSON 里的 chat.id。

4. LaunchAgent:~/Library/LaunchAgents/com.as.pionex-monitor.plist

<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
    <key>Label</key><string>com.as.pionex-monitor</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/python3</string>
        <string>/Users/YOU/scripts/pionex_monitor.py</string>
    </array>
    <key>StartInterval</key><integer>300</integer>
    <key>EnvironmentVariables</key>
    <dict>
        <key>TG_TOKEN</key><string>YOUR_TOKEN</string>
        <key>TG_CHAT_ID</key><string>YOUR_CHAT_ID</string>
        <key>BOT_CONFIGS</key><string>[{"symbol":"BTC/USDT","low":60000,"high":70000,"name":"BTC 网格"}]</string>
    </dict>
    <key>StandardOutPath</key><string>/tmp/pionex_monitor.log</string>
    <key>StandardErrorPath</key><string>/tmp/pionex_monitor.log</string>
</dict>
</plist>

5. 加载:

launchctl load ~/Library/LaunchAgents/com.as.pionex-monitor.plist

每 5 分钟自动跑一次。

加强版(Claude 二轮补充)

一稿跑通后我让 Claude 加了这些:

去重:同一警报 2 小时内不重复推

def should_alert(key, window_sec=7200):
    """用 /tmp 里的 marker 文件去重"""
    import os
    marker = f"/tmp/.pionex_alert_{key}"
    if os.path.isfile(marker) and time.time() - os.path.getmtime(marker) < window_sec:
        return False
    open(marker, "w").close()
    return True

每日摘要:每天早 8 点无条件发一条当前价格的报告

扩展监控项:除了价格,也监控 Pionex 账户总余额变化(需要 Pionex API key)

Claude Code 写这东西的节奏

从需求到部署的实际对话:

  1. 我:需求描述(上面那段)
  2. Claude:给出第一版代码 + 解释
  3. 我:跑一下 → 报错"KeyError: ‘price’"
  4. Claude:分析 API 返回 + 修正
  5. 我:再跑 → TG 推送消息一直重复
  6. Claude:加去重机制
  7. 我:换 launchd 部署,plist 格式问个问题
  8. Claude:给出完整 plist + 验证命令
  9. 我:launchctl load 报错
  10. Claude:一眼看出 PATH 问题,给 EnvironmentVariables 补 PATH

典型情况下 20-40 分钟可以从需求到部署跑起来,主要工作是对着 Claude 描述、试跑、反馈报错,不用自己从零写代码。

类似的量化小工具思路

用 Claude Code 写这种量化辅助脚本的场景:

脚本用途典型代码量
监控资金费率 > 某阈值时推送(套利机会)50 行
对比 Pionex 账户浮盈 vs Grafana 记录80 行
检查所有开仓是否有止损,没设则警报35 行
每天汇总 AFF 点击(接 CF Worker API)40 行

典型都在 50 行以下,用 Claude Code 半小时就能搞定。

为什么选 Claude Code 做这类

替代选项:

  • ChatGPT 网页版:每次复制粘贴代码太累
  • Cursor:好用但要订阅且偶尔改文件不太细
  • Copilot:补全型,不擅长从头设计
  • Claude Code:直接在终端里让它改你本地文件,改完跑测试反馈给它

如果你在 Mac 上做量化 / 运维,强烈推荐。

→ Claude Code 省钱指南 · Claude 双通道切换

组合起来的价值

现在我的 Pionex 监控 + 实盘数据 + 期现套利 三个策略分别跑,出现边沿时 Telegram 2 秒内收到。

使用起来典型效果:

  • 每周通常会触发 2-3 次预警,其中 1-2 次值得手动干预(上穿或下破前及时调整)
  • 一次正确的"上穿前手动止盈"能帮你多赚一些浮盈(几美金到几十美金不等,取决于仓位)
  • 跟完全不监控相比,净 APY 通常能高 3-5 个百分点(取决于行情波动和你的响应速度)

工具不是最赚钱的那个,降低情绪干预 = 让你纪律更强 = 长期复利。

→ Pionex 新用户注册

总结

  • 用 Claude Code 写量化监控,30 分钟就能跑起来
  • 代码量 40 行
  • 关键是"需求定义清楚",不是写代码技巧
  • 长期 APY 提升 3-5% 看似不多但复利惊人

延伸阅读: