基于 SuperTrend 指标的加密货币交易信号系统,结合持仓量(OI)、资金费率等市场情绪指标,提供高质量的买卖信号。
本系统提供 两套独立的信号,适用于不同场景:
| 信号系统 | 最佳周期 | 核心用途 | 回测胜率 | 年化收益* |
|---|---|---|---|---|
| SuperTrend 组合策略 | 日线 (1d) | 判断大趋势方向 | 71% | +46% |
| OI 情绪信号 (SAFE) | 5分钟 | 寻找入场时机 | 71% | ~480% |
*OI 信号年化为理论值,需扣除手续费。
步骤一:日线 SuperTrend 看大方向
├── 上涨趋势 → 只做多,持有
├── 下跌趋势 → 不追多,等信号
└── 趋势转换 → 重要买卖点
步骤二:5分钟 OI 信号找入场点
├── 🟢 SAFE 信号 → 可以入场(多头离场完毕)
├── 🔴 DANGER 信号 → 别入场(空头在加仓)
└── ⏳ 无信号 → 继续观望
| 参数 | SuperTrend 日线 | OI 信号 5分钟 |
|---|---|---|
| ATR周期 | 14 | - |
| ATR乘数 | 3.0 | - |
| 价格阈值 | - | 0.1% |
| OI中等阈值 | - | 0.5% |
| OI强势阈值 | - | 2.0% |
- ETH 的 DANGER 信号不可靠(胜率仅 29%),只关注 SAFE 信号
- 短周期 SuperTrend 效果差(15m/1h 亏损),请使用日线
- 信号需结合使用:日线趋势 + 5分钟入场时机
flowchart TB
subgraph 技术指标层
ST[SuperTrend 指标]
RSI[RSI 相对强弱]
EMA[EMA 均线系统]
MACD[MACD 指标]
VOL[成交量分析]
end
subgraph 市场情绪层
OI[持仓量变化]
FR[资金费率]
end
subgraph 信号生成
ST --> BASE[基础信号]
BASE --> FILTER[多指标过滤]
RSI --> FILTER
EMA --> FILTER
MACD --> FILTER
VOL --> FILTER
FILTER --> COMBINED[组合信号]
COMBINED --> RISK[风险过滤]
OI --> RISK
FR --> RISK
RISK --> FINAL[最终集成信号]
end
1. True Range = max(High-Low, |High-PrevClose|, |Low-PrevClose|)
2. ATR = RMA(True Range, period) # 或 SMA
3. Upper Band = HL2 + (multiplier × ATR)
4. Lower Band = HL2 - (multiplier × ATR)
5. SuperTrend = 价格突破上/下轨时切换
| 信号类型 | SuperTrend | RSI | EMA | MACD | Volume |
|---|---|---|---|---|---|
| 买入 | 翻多 | < 70 | Price > EMA_fast > EMA_slow | 柱状图 > 0 或上升 | > 均值 |
| 卖出 | 翻空 | > 30 | Price < EMA_fast < EMA_slow | 柱状图 < 0 或下降 | > 均值 |
基于价格-持仓量背离和资金费率识别市场风险:
| 信号 | Emoji | 条件 | 解读 |
|---|---|---|---|
| DANGER | 🔴 | 价跌 + OI涨 | 空头加仓,谨慎抄底 |
| SAFE | 🟢 | 价跌 + OI跌 | 多头止损离场,可能见底 |
| BULLISH | 🚀 | 价涨 + OI涨 | 多头加仓,趋势健康 |
| TOPPING | 价涨 + OI跌 | 多头获利了结,警惕见顶 |
| 强度 | 条件 |
|---|---|
| STRONG | OI变化 > 10% + 资金费率极端 |
| MEDIUM | OI变化 > 3% |
| WEAK | OI变化 < 3% |
不同币种支持不同阈值,配置存储在 signal_thresholds 表:
-- 查看当前配置
SELECT * FROM signal_thresholds;
-- 添加新币种配置
INSERT INTO signal_thresholds (symbol, strong_oi_change, medium_oi_change, rsi_oversold, rsi_overbought)
VALUES ('SOLUSDT', 12.0, 4.0, 32.0, 68.0);默认配置:
| 币种 | 强 OI | 中 OI | RSI超卖 | RSI超买 |
|---|---|---|---|---|
| BTCUSDT | 10% | 3% | 35 | 65 |
| ETHUSDT | 15% | 5% | 30 | 70 |
git clone https://github.com/kuncle/supertrend-trading.git
cd supertrend-trading
# 安装依赖
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env
# 编辑 .env 填入你的配置编辑 config/config.py 或设置环境变量:
export APP_ENV=DEVNet # DEVNet / TestNet / ProdNet
export DB_HOST=localhost
export DB_PASSWORD=your_password
export TG_BOT_TOKEN=your_token
export TG_BOT_CHAT_ID=your_chat_id所有功能通过 main.py 统一入口调用:
# 查看帮助
python main.py --help
# ===== 1. 实时分析 =====
python main.py # 单次分析(默认精简输出)
python main.py analyze --symbol ETHUSDT # 分析指定交易对
python main.py analyze --verbose # 详细输出(含完整分析和建议)
# ===== 2. 状态查看 =====
python main.py status # 查看当前配置和市场状态
# ===== 3. 守护进程 =====
python main.py daemon --interval 1h # 每小时自动运行
# ===== 4. 组合分析 =====
python main.py combo --symbol BTCUSDT # 多周期组合分析(1D+4H+1H)
# ===== 5. 策略回测(SuperTrend 买卖信号)=====
# 用途:验证 SuperTrend 交易策略的盈利能力
python main.py backtest --optimize --save # 回测并优化参数
python main.py backtest -s ETHUSDT --atr 10 --mult 3.0# ===== 策略回测 =====
# 用途:验证 SuperTrend 买卖信号的收益率、胜率、夏普比率
python -m signal.strategy_backtest -s BTCUSDT
python -m signal.strategy_backtest --optimize # 参数优化
python -m signal.strategy_backtest --timeframes "1h,4h,1d" # 多周期
# ===== 市场信号回测 =====
# 用途:验证 OI 情绪信号(SAFE/DANGER)的预测准确率
python -m signal.market_signal_backtest -s BTCUSDT -p 5m
python -m signal.market_signal_backtest -s ETHUSDT --optimize精简输出(默认):
============================================================
📊 BTCUSDT | 12-22 13:32
============================================================
💰 价格: $88,823.80 | 🎯 ST: $97,020.75
🔴 趋势: 下跌(明显) | 📏 距离: 9.2%
📉 RSI: 46(偏空) | 📊 ATR: $3,134.50
⚪ 风险: 中性 | OI: -1.4%↓ | 费率: 0.003%
────────────────────────────────────────────────────────────
💡 ⏳ 观望等信号
等待SAFE信号出现
🚧 阻力: $97,020.75
============================================================
SAFE 信号出现时:
💡 🟢 可入场(止损3%,目标ST $97,020)
SAFE信号:多头离场,反弹概率高
详细输出(--verbose):包含完整的市场解读和技术分析。
| 策略 | 交易次数 | 胜率 | 收益率 | 年化收益 | 最大回撤 | 夏普比率 |
|---|---|---|---|---|---|---|
| 原始 SuperTrend | 12 | 42% | +54.3% | +20.6% | 26.7% | 0.53 |
| 组合策略 | 7 | 71% | +141.2% | +46.4% | 21.2% | 1.06 |
| 周期 | 数据范围 | 交易数 | 胜率 | 累计收益 | 推荐 |
|---|---|---|---|---|---|
| 15m | 10天 | 8 | 38% | -1.5% | ❌ |
| 1h | 41天 | 6 | 33% | -1.5% | ❌ |
| 4h | 166天 | 4 | 75% | +1.5% | |
| 1d | 2.7年 | 7 | 71% | +141% | ✅ 推荐 |
| 信号 | 次数 | 胜率 | 单次收益 | 累计收益 | 年化收益* |
|---|---|---|---|---|---|
| 🟢 SAFE | 21 | 71% | +0.11% | +2.29% | ~480% |
| 🔴 DANGER | 18 | 56% | - | - | - |
*年化收益为理论值(测试数据仅 1.7 天),实际需扣除手续费和滑点。
⚠️ 注意:ETH 的 DANGER 信号胜率仅 29%,只关注 SAFE 信号。
supertrend-trading/
├── main.py # 统一入口(分析/守护/回测/状态)
├── config/
│ ├── config.py # 配置管理(多环境支持)
│ └── model.py # SQLAlchemy 模型
├── signal/
│ ├── supertrend.py # 核心策略实现(含 PO 信号分析)
│ ├── scheduler.py # 定时任务逻辑
│ ├── strategy_backtest.py # 策略回测脚本
│ └── market_signal_backtest.py # 市场信号回测
├── utils/
│ ├── telegram_notify.py # Telegram 通知
│ ├── db_business.py # 数据库操作(含 PO 配置/状态)
│ └── logging_util.py # 日志工具
├── db.sql # 数据库表结构
├── requirements.txt # 依赖
├── Dockerfile # 容器化部署
└── README.md # 项目文档
所有配置通过 .env 文件或环境变量设置:
# 复制示例配置
cp .env.example .env
# 编辑配置
vim .env| 变量 | 说明 | 默认值 |
|---|---|---|
DB_HOST |
数据库地址 | localhost |
DB_PASSWORD |
数据库密码 | - |
TG_BOT_TOKEN |
Telegram Bot Token | - |
TG_BOT_CHAT_ID |
Telegram Chat ID | - |
ST_ATR_PERIOD |
ATR 周期 | 7 |
ST_MULTIPLIER |
ATR 乘数 | 3.0 |
MAX_DRAWDOWN_THRESHOLD |
最大回撤阈值 | 20.0 |
完整配置项见 .env.example
本系统仅供学习和研究使用,不构成投资建议。
- 🛡️ 加密货币市场波动剧烈,请合理控制仓位
- 📊 历史回测结果不代表未来表现
- 💰 始终设置止损,单次风险不超过总资金的 2%
- ⚡ SuperTrend 在震荡行情中会产生较多假信号
# 使用 nohup
nohup python main.py daemon --interval 1h > /dev/null 2>&1 &
# 使用 screen
screen -S supertrend
python main.py daemon --interval 1h
# Ctrl+A, D 离开 screen创建 /etc/systemd/system/supertrend.service:
[Unit]
Description=SuperTrend Trading Bot
After=network.target mysql.service
[Service]
Type=simple
User=your_username
WorkingDirectory=/path/to/supertrend-trading
ExecStart=/usr/bin/python3 main.py daemon --interval 1h
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target启动服务:
sudo systemctl enable supertrend
sudo systemctl start supertrend
sudo systemctl status supertrend单独运行容器:
docker build -t supertrend .
docker run -d --name supertrend --env-file .env supertrend使用 Docker Compose(推荐,包含 MySQL):
# 复制配置
cp .env.example .env
vim .env # 填入 Telegram Token 等
# 一键启动
docker-compose up -d
# 查看日志
docker-compose logs -f supertrend
# 停止
docker-compose downQ: Telegram 通知没收到?
检查
TG_BOT_TOKEN和TG_BOT_CHAT_ID是否正确配置。运行python main.py status查看配置状态。
Q: 数据库连接失败?
确保 MySQL 服务运行,检查
DB_HOST、DB_USER、DB_PASSWORD配置。
Q: API 调用失败?
检查网络连接,确认可以访问
api.binance.com。可能遇到限流,稍后重试。
Q: 如何修改策略参数?
编辑
config/config.py中的ST_ATR_PERIOD和ST_MULTIPLIER,或使用环境变量覆盖。
Q: 日志在哪里?
logs/supertrend_YYYYMMDD.log,查看命令:tail -f logs/supertrend_$(date +%Y%m%d).log
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
本项目采用 MIT 许可证 - 详见 LICENSE 文件
- Binance API - 市场数据
- pandas - 数据处理
- TradingView - SuperTrend 指标灵感