86 lines
2.3 KiB
Markdown
86 lines
2.3 KiB
Markdown
# TradingView Alert Dispatcher
|
||
|
||
接收 TradingView webhook alert,按 `timeframe / symbol / strategy` 等条件路由到飞书 webhook,并提供管理控制台。
|
||
|
||
## Run Locally
|
||
|
||
```bash
|
||
python3 -m app
|
||
```
|
||
|
||
默认地址:`http://localhost:8000`
|
||
|
||
默认登录:
|
||
|
||
- 用户名:`admin`
|
||
- 密码:`change-me-now`
|
||
|
||
首次启动会把 `ADMIN_PASSWORD` 写入数据库并保存为哈希。之后请在管理台的「账号安全」页面修改密码;修改后环境变量不会覆盖数据库中的新密码。
|
||
|
||
## Docker
|
||
|
||
```bash
|
||
docker compose up --build
|
||
```
|
||
|
||
Compose 会启动两个服务:`dispatcher` 负责 Web/API/管理台,`worker` 负责周期性处理失败重试。
|
||
|
||
## TradingView Payload
|
||
|
||
```json
|
||
{
|
||
"timeframe": "5m",
|
||
"symbol": "BTCUSDT",
|
||
"strategy": "breakout",
|
||
"action": "buy",
|
||
"price": 68000
|
||
}
|
||
```
|
||
|
||
发送到:
|
||
|
||
```text
|
||
POST /webhook/tradingview
|
||
Content-Type: application/json
|
||
```
|
||
|
||
如果设置了 `WEBHOOK_TOKEN`,TradingView 需要使用以下任一方式携带 token:
|
||
|
||
```text
|
||
POST /webhook/tradingview?token=your-shared-secret
|
||
X-Webhook-Token: your-shared-secret
|
||
```
|
||
|
||
`docker-compose.yml` 默认已经设置了占位 token,生产使用前请替换;本地临时调试如果不想校验 token,可以把 `WEBHOOK_TOKEN` 置为空。
|
||
|
||
## Feishu Message Templates
|
||
|
||
路由规则统一发送飞书 interactive card。
|
||
|
||
标题和正文模板支持 `{{field}}` 占位符,字段来自 TradingView alert JSON。嵌套字段可以写成 `{{order.id}}`。
|
||
|
||
每条路由规则通过「发送到」下拉框选择一个飞书 Webhook。`timeframe`、`symbol`、`strategy` 至少填写一个,空字段表示不限。例如只填 `symbol=BTCUSDT` 会匹配所有 BTCUSDT 信号。需要同一个信号发到多个群时,可以建多条匹配条件相同、目标不同的规则,并用优先级控制命中顺序;当前默认路由逻辑只发送最高优先级命中的规则。
|
||
|
||
示例正文模板:
|
||
|
||
```text
|
||
**品种**: {{symbol}}
|
||
**周期**: {{timeframe}}
|
||
**策略**: {{strategy}}
|
||
**动作**: {{action}}
|
||
**价格**: {{price}}
|
||
```
|
||
|
||
## Environment
|
||
|
||
- `ADMIN_USERNAME`
|
||
- `ADMIN_PASSWORD`
|
||
- `SESSION_SECRET`
|
||
- `WEBHOOK_TOKEN`
|
||
- `DATABASE_PATH`
|
||
- `RETENTION_DAYS`
|
||
- `MAX_DELIVERY_ATTEMPTS`
|
||
- `RETRY_BACKOFF_SECONDS`
|
||
- `FEISHU_TIMEOUT_SECONDS`
|
||
- `WORKER_INTERVAL_SECONDS`
|