# crypto_monitor_binance

基于 **Flask** 的加密货币 **下单监控 / 关键位监控 / 交易复盘** 小系统，行情与实盘接口统一走 **Binance（USDT-M 永续）**，通过 **ccxt** 访问。

## 功能概要

- **关键位监控**：价格与硬条件校验、企业微信推送（可选）
- **下单监控**：本地风控（含移动保本逻辑）、触达止盈/止损后尝试市价平仓并记账
- **策略交易**：顶栏 `/strategy`（趋势回调 + 顺势加仓），见仓库根 [策略交易说明.md](../策略交易说明.md)
- **AI 复盘**：OpenAI 兼容网关（默认）或 Ollama，见 [AI复盘与模型配置说明.md](../AI复盘与模型配置说明.md)
- **实盘（可选）**：`LIVE_TRADING_ENABLED=true` 且配置 `BINANCE_API_KEY` / `BINANCE_API_SECRET` 时，支持合约开仓、平仓、余额读取与内部划转（依赖 API 权限）
- **止盈止损（Binance）**：市价成交后挂 **`STOP_MARKET`**（止损）、**`TAKE_PROFIT_MARKET`**（止盈）；双向持仓带 `positionSide`；不显式传 `reduceOnly`（避免 API `-1106`）。触发参考价由 `BINANCE_TRIGGER_WORKING_TYPE` 控制（最新价 / 标记价）

## 环境要求

- Python 3.10+（建议）
- 依赖：`flask`、`requests`、`ccxt`、`werkzeug`、`Pillow`（K 线图可选）；经 SOCKS 代理时需 **`PySocks`**

安装示例：

```bash
# 推荐在 /opt/crypto_monitor 执行仓库根目录 deploy/setup_env.sh
cd /opt/crypto_monitor/crypto_monitor_binance
source .venv/bin/activate
pip install -r ../requirements.txt
```

页面上的 **「当日资金(交易账户)」** 与 **「可开仓」可用 U** 仅统计 **Binance U 本位永续合约账户**（`fetch_balance` 的 `swap` / FAPI `assets` 中的 USDT），**不会**再用现货余额顶替。

## 配置说明（`.env.example` → `.env`）

- **`.env.example`**：模板（可提交 Git）；首次：`cp .env.example .env` 后编辑。
- **`.env`**：本机真实配置（勿提交）；`app.py` 只读此文件。`git pull` 不覆盖 `.env`；升级前可 `cp .env .env.backup.$(date +%Y%m%d)`。

与 Binance 相关的常用变量：

| 变量 | 说明 |
|------|------|
| `BINANCE_API_KEY` / `BINANCE_API_SECRET` | 币安 API（需合约等权限） |
| `LIVE_TRADING_ENABLED` | `true` 时允许真实下单；`false` 仅本地逻辑 |
| `BINANCE_MARGIN_MODE` | `cross` 全仓 / `isolated` 逐仓 |
| `BINANCE_POSITION_MODE` | `hedge` 双向（需账户开启双向持仓）/ `oneway` 单向 |
| `BINANCE_TRIGGER_WORKING_TYPE` | `CONTRACT_PRICE` 或 `MARK_PRICE`（条件单触发参考） |
| `BINANCE_SOCKS_PROXY` / `BINANCE_HTTP_PROXY` | 可选代理（与部署文档一致） |
| `EXCHANGE_DISPLAY_NAME` | 页面展示的交易所名称，默认 `Binance` |
| `BINANCE_ACCOUNT_LABEL` | 推送文案中的账户备注 |

其余变量（登录、企业微信、风控参数、**`AI_PROVIDER` / `OPENAI_*` / `OLLAMA_*`**、数据库路径等）见 **`.env.example` 内注释** 或 `app.py` 顶部默认值。

## 运行

生产环境使用 **PM2**（`ecosystem.config.cjs`）。临时调试：

```bash
cd /opt/crypto_monitor/crypto_monitor_binance
source .venv/bin/activate
python app.py
```

环境说明见 [docs/ubuntu-server.md](../docs/ubuntu-server.md)。

默认监听端口由 `.env` 的 `APP_PORT` 决定（未设置时多为 `5000`）。

## 部署（Linux / PM2 / SSH SOCKS）

详见 **[部署文档.md](./部署文档.md)**（Ubuntu + PM2 + 可选 SOCKS 访问 Binance）。

## 自检脚本

```bash
python scripts/verify_binance_funding.py
```

用于核对 Key 前缀（不含 Secret）并尝试读取资金钱包 / 合约钱包 USDT（需网络与 API 权限）。

## 数据与脚本

- 默认 SQLite：`crypto.db`（路径由 `DB_PATH` 指定）
- `scripts/fix_breakeven_labels.py`：批量修正「止损」但盈亏为正的记录标签（见部署文档附录）

## 风险与合规

实盘交易有亏损风险。请自行确认 API 权限、IP 白名单、杠杆与保证金模式与币安账户设置一致，并遵守当地法律法规与 Binance 用户协议。
