jjalww-algo/algotrading-bot
GitHub: jjalww-algo/algotrading-bot
一个生产级的自动化外汇交易机器人,通过结构性模式识别和严格纪律规则解决外汇市场交易中的风险控制与执行一致性问题。
Stars: 0 | Forks: 0
# ForexAI 机器人 — 自动化外汇交易系统
一个生产级的外汇市场算法交易机器人,基于Python构建并集成OANDA。在5分钟时间框架上交易XAU/USD(黄金)和EUR/USD。
该项目经历了两个完整迭代:最初采用基于LightGBM的机器学习方法,随后根据实际交易数据的洞察,围绕结构性模式识别进行了重构。
## 核心亮点
- **市场状态感知执行** — 通过ADX分类自适应趋势与震荡行情
- **多时间框架趋势对齐** — 入场需D1 + H1 + M5三者共振
- **3种确定性设置模式** — 回调延续、突破、均值回归
- **全面风险管理** — 仓位控制、回撤暂停、每日亏损限制
- **7项交易纪律规则** — 避免隔夜利息、周末锁仓、重大新闻屏蔽、连亏冷却
- **实时警报** — 通过Telegram通知每笔交易、被阻止的入场及规则激活
- **生产环境日志** — CSV交易记录、每周摘要生成、全面的错误处理
- **OANDA集成** — 通过v20 API支持实盘和模拟账户
## 系统架构
```
ForexAI_Bot/
├── main.py # Main trading loop, decision orchestration
├── strategy.py # Structural pattern detection (3 setups)
├── features.py # Technical indicators (18 features: ADX, RSI, MACD, BB, etc.)
├── rules.py # 7 trading discipline rules
├── risk_manager.py # Position sizing, drawdown tracking, order execution
├── news_filter.py # Session checks, spread guard, volatility halts
├── data_feed.py # OANDA API wrapper
├── alerts.py # Telegram notifications
├── trade_logger.py # CSV logging + weekly summary
├── logger.py # Application logging
├── analyze_oanda_log.py # Post-hoc performance analyzer
├── model_training.py # (Legacy) LightGBM training script
├── backtest.py # Backtesting framework
├── config.json # Configuration
└── requirements.txt
```
## 运作机制
每60秒,机器人通过决策流程评估每个交易品种:
1. **获取M5 K线数据**(从OANDA)
2. **计算特征** — 包括ADX、RSI、随机指标、布林带、ATR在内的18项技术指标
3. **新闻与点差过滤** — 在高影响事件或异常点差期间阻止交易
4. **检测市场状态** — 趋势(ADX > 25)、震荡(ADX < 20)或过渡期
5. **获取D1 + H1趋势偏向** — 缓存以提高性能
6. **寻找设置** — 三种结构性模式之一
7. **应用7条规则** — 隔夜利息窗口、周末、每日限制、新闻屏蔽等
8. **风险检查** — 回撤、每日亏损限制、仓位相关性
9. **计算仓位大小** — 基于结构性止损距离
10. **下单** — 在结构关键位设置止损/止盈
## 3种交易设置
### 1. 回调延续(最高优先级)
在确认的上升趋势中逢低买入,在确认的下降趋势中逢高卖出。
- D1和H1趋势必须一致
- 价格在EMA21的0.5%范围内
- 具有适当影线的拒绝K线
- RSI冷却但未衰竭(买入时35-55)
- 止损:低于近期波段低点 | 止盈:2倍风险
### 2. 突破
交易突破盘整区间的动能。
- 收盘价突破20根K线的波段高/低点
- 强实体K线(超过区间范围的60%)
- 成交量高于20根K线均值的1.2倍
- 布林带扩张(波动率增加)
- 需要D1趋势对齐
- 止损:在突破位 | 止盈:1.5倍风险
### 3. 均值回归
在区间极端位置逆向交易衰竭信号(仅限震荡市状态)。
- 价格触及布林带极端位置
- RSI确认衰竭(>70或<30)
- 前一根K线显示影线拒绝
- 止损:在拒绝影线之外 | 止盈:1倍风险
## 7项纪律规则
| 规则 | 目的 |
|------|------|
| 隔夜利息前平仓 | 每日UTC凌晨5点隔夜利息前清空仓位 |
| 禁止周末持仓 | 周五市场收盘前平掉所有仓位 |
| 最大连续亏损 | 某品种连亏3次后冷却2小时 |
| 每日最大交易次数 | UTC日硬性上限15笔交易 |
| 新闻屏蔽 | 在计划事件前15分钟/后30分钟阻止交易 |
| 部分止盈 | 达到50%目标时平一半仓位,止损移至盈亏平衡 |
| 交易时段开盘跳过 | 跳过伦敦/纽约开盘前30分钟(点差大) |
## 风险管理
- 每笔交易账户风险0.75%
- 每日亏损限制3%(自动暂停)
- 10%回撤暂停(系统全面停止)
- 盈利仓位使用移动止损
- 点差保护(点差超过2.5倍ATR基准时暂停入场)
- 多时间框架趋势过滤(防止逆势入场)
## 安装设置
```
# 克隆
git clone
cd ForexAI_Bot
# 安装
pip install -r requirements.txt
# 配置 (填写 API keys)
cp config.json.example config.json
# 编辑: OANDA API_KEY, ACCOUNT_ID, ENVIRONMENT (practice 或 live)
# 可选: Telegram BOT_TOKEN, CHAT_IDS, Finnhub API_KEY
# 运行
python main.py
```
旧版机器学习版本:
```
python model_training.py # train models on historical data
python main.py # uses ML predictions
```
结构化版本:
```
python main.py # uses strategy.py, no model needed
```
## 绩效分析
机器人将每笔交易记录到`trade_log.csv`。使用OANDA交易导出进行事后分析:
```
# 导出 OANDA 交易历史为 CSV,保存为 oanda_export.csv
python analyze_oanda_log.py
```
输出:胜率、风险回报比、边际计算、按品种分解、每日盈亏、最大盈利/亏损交易。
## 项目历程与经验教训
本项目经历了两个完整迭代:
**v1 — 基于机器学习(LightGBM)**
- 18项技术特征输入梯度提升分类器
- 对5000根历史K线进行时间加权训练
- 按市场状态设置特定置信阈值
- **结果:** ~54%胜率,但0.65:1的风险回报比使其在数学上仍无利可图(低于盈亏平衡点约10%)
**v1关键洞察:**
- 5分钟机器学习无论特征工程如何,精度上限约50-57%
- 小账户的点差成本吞噬每笔盈利的10-15%
- 部分止盈降低了平均盈利至低于平均亏损
- 多时间框架过滤显著减少了错误方向交易
**v2 — 结构化模式(当前版本)**
- 完全移除机器学习模型
- 用三种确定性的图表模式替代黑箱预测
- 每周交易5-15次,而非60-100次
- 每次入场都有清晰、书面的依据
- 降低交易频率 → 减少点差成本消耗 → 更佳的单位经济性
## 技术栈
- **Python 3.9+**
- **OANDA v20 API**(oandapyV20)
- **pandas / numpy** — 数据处理
- **ta** — 技术指标
- **LightGBM**(仅v1)— 机器学习分类器
- **scikit-learn** — 模型评估
- **python-telegram-bot** — 警报通知
- **Finnhub API** — 经济新闻
## 免责声明
这是一个教育项目。算法外汇交易存在重大亏损风险。此代码按原样提供,不作任何保证。切勿使用您无法承受损失的真实资金进行运行。过去表现不代表未来结果。
## 许可证
MIT
标签:ADX 指标, Apex, LightGBM, OANDA API, Python, Telegram 机器人, 交易策略, 交易纪律, 回撤交易, 均值回归, 外汇交易, 外汇交易系统, 多时间框架分析, 实时警报, 无后门, 机器学习, 生产级系统, 突破交易, 算法交易, 结构性模式识别, 自动化交易, 趋势分析, 逆向工具, 量化交易, 金融科技