PyCryptoBot / 通知与控制
一个脚本跑不起来整台PyCryptoBot 机器人:七个入口的分工与控制面
多数中文教程把 PyCryptoBot 描述成「跑一个脚本就完事」。核对仓库后会发现事实相反:pycryptobot.py 只有 21 行,是一个薄启动器,真正的PyCryptoBot 机器人逻辑在 controllers/PyCryptoBot.py;而通知、图形界面、网页门户、市场扫描各自是独立进程,需要分别启动。这一页把七个入口的分工、三种控制面的配置项与前置条件讲清楚,并给出一条「先通通知、再上自动化」的启动顺序。
- PyCryptoBot v8.2.4(main=1fa9aaef,2024-03-04)
- Python 3.11(官方 Dockerfile 基线)
- 交易所范围:Binance / Coinbase / KuCoin
- 验证日期 2026-09-21
- 本站未实机运行机器人
docs/ 内官方说明文档整理,非官方架构图)。四者都是独立进程,启动顺序会影响各自能否拿到数据。七个入口脚本分别负责什么
仓库根目录下可执行的东西不止一个。下表是各文件的实测行数与定位——注意第一个文件小到不像主程序,这正是「它不是单体脚本」的直接证据。
| 文件 | 行数 | 职责 | 启动方式 | 注意点 |
|---|---|---|---|---|
pycryptobot.py | 21 | PyCryptoBot 机器人本体启动器;真正逻辑在 controllers/PyCryptoBot.py | 容器 ENTRYPOINT 就是它 | 教程里说的「改 pycryptobot.py 写策略」多半找错了文件 |
telegram_bot.py | 928 | Telegram 通知与远程控制 | --config / --datafolder 两个参数 | 独立进程;官方文档写明只需启动一次 |
webgui.py | 788 | Dash 图形界面(控制台、市场扫描、日志页、视觉仪表盘) | 独立进程,可单独跑也可与 Telegram 并存 | 它读的是 telegram_data 目录,因此依赖 Telegram 控制开关 |
screener.py | 421 | 用 tradingview_ta 做标的筛选 | 独立进程,靠 JSON 配置驱动 | 无命令行参数;筛选结果用于挑选市场 |
scanner.py | 129 | 扫描市场并按条件启动机器人 | 独立进程,靠 JSON 配置驱动 | 它会去「开机器人」,所以配置里的数量上限与开关要先确认 |
websvc.py | 57 | Flask 网页门户 | --host / --port / --quiet / --debug | 容器编排文件里这块是注释状态,要手动取消注释 |
logsvc.py | 57 | 独立的日志查看服务(Flask) | 与网页门户相同的四个参数 | 与 websvc.py 行数、参数完全一致,属同族服务 |
通知与控制怎么开:配置项、前置条件与官方五步
Telegram 在这一项目里承担两件事:把交易与状态推给你,以及在手机上远程控制机器人。它的配置项集中在 config 的 telegram 段。
| 配置项 / 开关 | 作用 | 前置条件 | 注意点 |
|---|---|---|---|
telegram.token | 机器人令牌,没有它无法收发消息 | 需要在 Telegram 侧创建机器人 | 令牌等同口令,不要写进版本库或贴给他人 |
telegram.user_id | 限定只有你能控制机器人 | 需要先取得自己的数字 ID | 官方文档建议用取 ID 的机器人查询;留空或填错等于把控制权暴露出去 |
telegram.client_id | 客户端标识字段 | — | 样本中为空字符串,非必填项 |
telegram.datafolder | 多实例共享的数据目录 | 多个机器人分处不同目录时才需要 | 官方文档:不共享就留空;共享后才能统一查看 |
telegram.logger_level | Telegram 侧日志级别 | — | 样本默认 DEBUG;级别越高消息越多 |
telegrambotcontrol | 启用「写供控制面读取的数据」 | — | 它不是启动 Telegram 机器人,只是让机器人本体把数据写出来 |
disabletelegram | 关闭 Telegram 相关输出 | — | 样本里各交易所默认为 1(即关闭) |
telegramtradesonly | 只推送交易,不推送状态变化 | — | 历史变更记录里另有「不把错误日志推送到 Telegram」的开关 |
先装依赖
官方文档的第一步就是安装 requirements。预期输出:命令结束且无报错。本站未实机执行。
在 config 里打开控制开关
给对应交易所的 config 段加
"telegrambotcontrol": 1。预期结果:机器人启动后会开始在telegram_data目录写数据。填入你自己的 user_id
官方文档的说法是:不确定自己的数字 ID 时用专门的机器人查询。预期结果:只有你的账号能下发控制指令。
按需设置 datafolder
如果多个机器人跑在不同目录,把它们指向同一个共享目录;只跑一个就留空或删掉该键。
单独启动 telegram_bot.py
官方文档明确写「它只需要启动一次」。预期结果:Telegram 侧开始收到状态与交易消息。
Web GUI 与 Web Portal 有什么区别?
名字接近,实现与依赖却完全不同。最容易踩的坑是:图形界面并不是独立数据源,它读的是 Telegram 控制面写出来的目录。
| 对比项 | Web GUI(webgui.py) | Web Portal(websvc.py / logsvc.py) |
|---|---|---|
| 技术栈 | Dash + dash_daq + dash_bootstrap_components | Flask |
| 代码位置 | 根目录 webgui.py(788 行)+ pages/ 目录 | websvc/app/ 与 logsvc/ 内的 Flask 应用 |
| 页面构成 | pages/ 下有配置页、控制页、Telegram 配置页、终端页 | 网页门户与日志查看服务 |
| 数据来源 | 读 telegram_data 目录,因此依赖 telegrambotcontrol 已启用并已产生数据 | 自身进程直接读取 |
| 启动时机 | 官方说明:在所有机器人启动之后再启动,首次加载需要几秒 | 随时可起,参数自定 |
| 刷新节奏 | 官方说明给出的是数秒级自动刷新 | 随请求刷新 |
| 命令行参数 | 无(靠配置文件与目录) | --host / --port / --quiet / --debug |
| 容器编排现状 | 未提供现成 service 块 | 编排文件里这块是注释状态,取消注释后映射端口 |
telegrambotcontrol 没开、telegram_data 目录里没有数据。官方说明里的启动顺序是「先起机器人、再起界面」,这个顺序不是建议,而是依赖关系。scanner 与 screener 怎么让机器人自己选市场?
官方文档坦承:社区里最常被问的问题就是「怎么选交易对」。这两个脚本就是为这件事准备的,但它们也最需要先把上限配好。
| 配置项 | 作用 | 样本默认值 | 注意点 |
|---|---|---|---|
atr72_pcnt | 用波动指标阈值筛选市场 | 1.0 | 阈值越低纳入的市场越多 |
use_default_scanner | 是否使用默认扫描策略 | 1 | 关掉需自备筛选逻辑 |
maxbotcount | 同时运行的机器人数上限 | 标准样本 6 / 进阶样本 5 | 两份样本取值不同,别以为只有一个标准值 |
exchange_bot_count | 单个交易所上的机器人数上限 | 3 | 与总数上限是两个维度,都要设 |
exitaftersell | 卖出后是否退出该机器人 | 1 | 影响扫描器的循环行为 |
enable_buy_next | 是否启用买入接力 | 1 | 与资金分配有关,改前先想清楚 |
enableleverage | 是否允许杠杆机器人 | 0 | 默认关闭;历史记录显示扫描器会对杠杆机器只提示一次跳过 |
autostart | 控制面启动时是否顺带启动扫描 | 0 | 设为 1 才自动跑;它决定的是「扫不扫」,不是「开不开实盘」 |
autoscandelay | 扫描间隔控制 | 0 | 频繁扫描会放大接口调用量 |
terminal_start_process | 启动机器人所用的终端命令模板 | 空 | 与你的运行环境(裸机 / 容器)强相关 |
maxbotcount 与 exchange_bot_count 同时生效,这是防止一次扫描起太多实例的主要闸门。为什么要把通知跑通再谈自动化?
正确的顺序能让你在每一步只面对一个问题。下面五步全部以「先不碰实盘」为前提。
确认机器人本体能在非实盘模式下跑起来
配置里
live保持 0,先把一个币对跑通。预期输出:日志里出现指标与状态,且没有任何下单动作。打开
telegrambotcontrol,让机器人开始写数据预期结果:工作目录下出现
telegram_data之类的数据目录,并且内容随时间更新。单独启动
telegram_bot.py并验证只响应你填入
token与user_id后启动。预期结果:你的账号能收到消息并能下发指令;他人账号无响应。在所有机器人都启动之后,再启动图形界面
预期结果:界面首次加载需要几秒,之后自动刷新;如果空白,先回到上一步检查数据目录是否有内容。
最后才考虑 scanner / screener
先把
maxbotcount、exchange_bot_count、enableleverage三个上限确认一遍,再决定是否打开autostart。
关于通知与控制面的高频问题
以下内容依据仓库入口脚本、两份 config 样本与 docs/ 内官方说明文档整理;本站未实机运行,运行期行为请以你自己的日志为准。
必须装 Telegram 才能用这个机器人吗?
不是必须。配置里有 disabletelegram 与 telegrambotcontrol 两个独立开关,关掉后机器人本体仍可运行,只是你收不到推送。但要注意连锁影响:图形界面读的是 Telegram 控制面写出的数据目录,所以如果你关掉 telegrambotcontrol,界面很可能显示不出内容。
会不会被别人控制我的机器人?
官方配置里有 telegram.user_id 这个字段,它的用途就是限定只有指定账号能控制。如果留空或填错,任何人都能对机器人下发指令。这也是本站把「先填 user_id 再启动」列为固定顺序的原因——它不是可选项。
同时跑多个机器人,界面上怎么区分?
官方说明里的做法是给多个机器人设置同一个共享的 datafolder;如果只跑一个机器人,把该键留空或删除即可。共享目录之后,控制面才能在一次视图里看到全部实例。
网页界面能改配置吗?
仓库的 pages/ 目录里确实存在配置页与 Telegram 配置页,说明界面侧有配置相关入口。但本站没有实机验证这些页面能改哪些键、改完是否需要重启,因此不给出「可以在网页里改配置」的结论。稳妥做法仍是改配置文件再重启对应进程。
打开 scanner 会不会自己开实盘?
这是最容易误解的一点:autostart 控制的只是「控制面启动时要不要顺带启动扫描」,它不等于「开实盘」。真正决定是否真实下单的是各交易所配置段里的 live。所以在打开 autostart 之前,请先逐个确认对应配置的 live 仍为 0,并确认 maxbotcount 与 exchange_bot_count 这两个上限。
本站对这些控制面验证到什么程度?
本站只做了源码级核对:统计各入口脚本的实测行数、读取两份 config 样本中的真实键名、阅读 docs/ 内的官方说明文档。没有安装运行、没有创建 Telegram 机器人、没有启动界面、没有连接交易所、没有下单。凡涉及运行期行为(消息长什么样、界面刷新的实际频率、扫描器选中哪些市场)本站都不给结论。