PyCryptoBot / 通知与控制

一个脚本跑不起来整台PyCryptoBot 机器人:七个入口的分工与控制面

多数中文教程把 PyCryptoBot 描述成「跑一个脚本就完事」。核对仓库后会发现事实相反:pycryptobot.py 只有 21 行,是一个薄启动器,真正的PyCryptoBot 机器人逻辑在 controllers/PyCryptoBot.py;而通知、图形界面、网页门户、市场扫描各自是独立进程,需要分别启动。这一页把七个入口的分工、三种控制面的配置项与前置条件讲清楚,并给出一条「先通通知、再上自动化」的启动顺序。

依据:仓库入口脚本实测行数依据:config 样本 telegram/scanner 段依据:docs/ 官方说明文档未实机运行
本文验证环境
  • PyCryptoBot v8.2.4(main=1fa9aaef,2024-03-04)
  • Python 3.11(官方 Dockerfile 基线)
  • 交易所范围:Binance / Coinbase / KuCoin
  • 验证日期 2026-09-21
  • 本站未实机运行机器人
Telegram PyCryptoBot 机器人通知 + 远程控制,独立进程,只需启动一次
Web GUI(Dash)读 telegram_data 目录,依赖控制开关已启用
Web Portal(Flask)websvc.py / logsvc.py,四个 CLI 参数
scanner 与 screener市场扫描与筛选,各自独立进程
控制面分工示意(依据仓库根目录的入口脚本实测行数与 docs/ 内官方说明文档整理,非官方架构图)。四者都是独立进程,启动顺序会影响各自能否拿到数据。
入口清单

七个入口脚本分别负责什么

仓库根目录下可执行的东西不止一个。下表是各文件的实测行数与定位——注意第一个文件小到不像主程序,这正是「它不是单体脚本」的直接证据。

文件行数职责启动方式注意点
pycryptobot.py21PyCryptoBot 机器人本体启动器;真正逻辑在 controllers/PyCryptoBot.py容器 ENTRYPOINT 就是它教程里说的「改 pycryptobot.py 写策略」多半找错了文件
telegram_bot.py928Telegram 通知与远程控制--config / --datafolder 两个参数独立进程;官方文档写明只需启动一次
webgui.py788Dash 图形界面(控制台、市场扫描、日志页、视觉仪表盘)独立进程,可单独跑也可与 Telegram 并存它读的是 telegram_data 目录,因此依赖 Telegram 控制开关
screener.py421tradingview_ta 做标的筛选独立进程,靠 JSON 配置驱动无命令行参数;筛选结果用于挑选市场
scanner.py129扫描市场并按条件启动机器人独立进程,靠 JSON 配置驱动它会去「开机器人」,所以配置里的数量上限与开关要先确认
websvc.py57Flask 网页门户--host / --port / --quiet / --debug容器编排文件里这块是注释状态,要手动取消注释
logsvc.py57独立的日志查看服务(Flask)与网页门户相同的四个参数websvc.py 行数、参数完全一致,属同族服务
一句纠偏:「跑一个脚本」这个说法在部署层面成立(容器 ENTRYPOINT 确实只有一个),但在功能层面不成立——通知、界面、扫描是三套独立进程。你只启动机器人本体时,机器人能交易,但你看不到界面、也收不到消息。
Telegram 控制面

通知与控制怎么开:配置项、前置条件与官方五步

Telegram 在这一项目里承担两件事:把交易与状态推给你,以及在手机上远程控制机器人。它的配置项集中在 config 的 telegram 段。

配置项 / 开关作用前置条件注意点
telegram.token机器人令牌,没有它无法收发消息需要在 Telegram 侧创建机器人令牌等同口令,不要写进版本库或贴给他人
telegram.user_id限定只有你能控制机器人需要先取得自己的数字 ID官方文档建议用取 ID 的机器人查询;留空或填错等于把控制权暴露出去
telegram.client_id客户端标识字段样本中为空字符串,非必填项
telegram.datafolder多实例共享的数据目录多个机器人分处不同目录时才需要官方文档:不共享就留空;共享后才能统一查看
telegram.logger_levelTelegram 侧日志级别样本默认 DEBUG;级别越高消息越多
telegrambotcontrol启用「写供控制面读取的数据」它不是启动 Telegram 机器人,只是让机器人本体把数据写出来
disabletelegram关闭 Telegram 相关输出样本里各交易所默认为 1(即关闭)
telegramtradesonly只推送交易,不推送状态变化历史变更记录里另有「不把错误日志推送到 Telegram」的开关
  1. 先装依赖

    官方文档的第一步就是安装 requirements。预期输出:命令结束且无报错。本站未实机执行。

  2. 在 config 里打开控制开关

    给对应交易所的 config 段加 "telegrambotcontrol": 1。预期结果:机器人启动后会开始在 telegram_data 目录写数据。

  3. 填入你自己的 user_id

    官方文档的说法是:不确定自己的数字 ID 时用专门的机器人查询。预期结果:只有你的账号能下发控制指令。

  4. 按需设置 datafolder

    如果多个机器人跑在不同目录,把它们指向同一个共享目录;只跑一个就留空或删掉该键。

  5. 单独启动 telegram_bot.py

    官方文档明确写「它只需要启动一次」。预期结果:Telegram 侧开始收到状态与交易消息。

网页界面

Web GUI 与 Web Portal 有什么区别?

名字接近,实现与依赖却完全不同。最容易踩的坑是:图形界面并不是独立数据源,它读的是 Telegram 控制面写出来的目录。

对比项Web GUI(webgui.pyWeb Portal(websvc.py / logsvc.py
技术栈Dash + dash_daq + dash_bootstrap_componentsFlask
代码位置根目录 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启动机器人所用的终端命令模板与你的运行环境(裸机 / 容器)强相关
两个与安全相关的机制:一是例外名单——历史记录显示扫描器在启动与停止机器人时都会检查例外名单,避免把你手动保留的标的停掉;二是数量上限——maxbotcountexchange_bot_count 同时生效,这是防止一次扫描起太多实例的主要闸门。
启动顺序

为什么要把通知跑通再谈自动化?

正确的顺序能让你在每一步只面对一个问题。下面五步全部以「先不碰实盘」为前提。

  1. 确认机器人本体能在非实盘模式下跑起来

    配置里 live 保持 0,先把一个币对跑通。预期输出:日志里出现指标与状态,且没有任何下单动作。

  2. 打开 telegrambotcontrol,让机器人开始写数据

    预期结果:工作目录下出现 telegram_data 之类的数据目录,并且内容随时间更新。

  3. 单独启动 telegram_bot.py 并验证只响应你

    填入 tokenuser_id 后启动。预期结果:你的账号能收到消息并能下发指令;他人账号无响应。

  4. 在所有机器人都启动之后,再启动图形界面

    预期结果:界面首次加载需要几秒,之后自动刷新;如果空白,先回到上一步检查数据目录是否有内容。

  5. 最后才考虑 scanner / screener

    先把 maxbotcountexchange_bot_countenableleverage 三个上限确认一遍,再决定是否打开 autostart

FAQ

关于通知与控制面的高频问题

以下内容依据仓库入口脚本、两份 config 样本与 docs/ 内官方说明文档整理;本站未实机运行,运行期行为请以你自己的日志为准。

必须装 Telegram 才能用这个机器人吗?

不是必须。配置里有 disabletelegramtelegrambotcontrol 两个独立开关,关掉后机器人本体仍可运行,只是你收不到推送。但要注意连锁影响:图形界面读的是 Telegram 控制面写出的数据目录,所以如果你关掉 telegrambotcontrol,界面很可能显示不出内容。

会不会被别人控制我的机器人?

官方配置里有 telegram.user_id 这个字段,它的用途就是限定只有指定账号能控制。如果留空或填错,任何人都能对机器人下发指令。这也是本站把「先填 user_id 再启动」列为固定顺序的原因——它不是可选项。

同时跑多个机器人,界面上怎么区分?

官方说明里的做法是给多个机器人设置同一个共享的 datafolder;如果只跑一个机器人,把该键留空或删除即可。共享目录之后,控制面才能在一次视图里看到全部实例。

网页界面能改配置吗?

仓库的 pages/ 目录里确实存在配置页与 Telegram 配置页,说明界面侧有配置相关入口。但本站没有实机验证这些页面能改哪些键、改完是否需要重启,因此不给出「可以在网页里改配置」的结论。稳妥做法仍是改配置文件再重启对应进程。

打开 scanner 会不会自己开实盘?

这是最容易误解的一点:autostart 控制的只是「控制面启动时要不要顺带启动扫描」,它不等于「开实盘」。真正决定是否真实下单的是各交易所配置段里的 live。所以在打开 autostart 之前,请先逐个确认对应配置的 live 仍为 0,并确认 maxbotcountexchange_bot_count 这两个上限。

本站对这些控制面验证到什么程度?

本站只做了源码级核对:统计各入口脚本的实测行数、读取两份 config 样本中的真实键名、阅读 docs/ 内的官方说明文档。没有安装运行、没有创建 Telegram 机器人、没有启动界面、没有连接交易所、没有下单。凡涉及运行期行为(消息长什么样、界面刷新的实际频率、扫描器选中哪些市场)本站都不给结论。

下一步:怎么把机器人长期安全地跑下去?

通知跑通只是起点。真正决定成败的是进程守护、权限最小化、状态恢复与应急停止这几件事——它们都不在教程的演示范围里。