# 智能切换策略EA(SmartSwitchEA)介绍文档
## 一、EA核心定位
SmartSwitchEA 是一款基于 MT5 平台的自动化交易程序,核心优势在于**自动识别市场状态(趋势/震荡)并动态切换交易策略**,通过多指标共振过滤信号,适配不同行情环境,同时内置严格的交易风控规则,实现稳健自动化交易。
## 二、核心交易策略
### 1. 市场状态识别逻辑
EA 通过三大维度综合判断市场类型,避免单一指标误判:
- **均线粘合度**:计算 MA5(快速)、MA10(中期)、MA20(慢速)三条均线的最大价差与当前价格的比例,比例越小说明市场越平稳。
- **布林带宽度**:通过布林带(周期20,标准差2)上下轨间距与中轨的比值,衡量价格波动幅度,比值越小震荡特征越明显。
- **MACD趋势强度**:以 MACD(快线12、慢线26、信号线9)主线与信号线的差值绝对值,判断趋势动能强弱。
**市场状态判定规则**:
| 市场类型 | 判定条件 | 适配策略 |
|----------|----------|----------|
| 震荡市 | 均线粘合度<0.15%(趋势阈值)且布林带宽度<1% | 均值回归策略 |
| 趋势市 | 均线粘合度>0.3%(2倍趋势阈值)且 MACD 强度>0.0005 | 趋势跟踪策略 |
| 未知状态 | 不满足上述两类条件 | 保持当前策略,暂停新信号触发 |
### 2. 分场景交易策略
#### (1)均值回归策略(震荡市专用)
- 核心逻辑:价格在震荡区间内会围绕均值(布林带中轨)波动,偏离均值过远时大概率回归。
- 开仓信号:
- 做多:价格触及布林带下轨 RSI(周期14)<30(超卖) 价格低于 BBI 指标(3、6、12、24周期均线均值)。
- 做空:价格触及布林带上轨 RSI>70(超买) 价格高于 BBI 指标。
#### (2)趋势跟踪策略(趋势市专用)
- 核心逻辑:跟随当前趋势方向交易,捕捉趋势延续行情,不逆势操作。
- 开仓信号:
- 做多:均线多头排列(MA5>MA10>MA20) MACD 金叉(主线>信号线) 价格在 BBI 之上。
- 做空:均线空头排列(MA5<MA10<MA20) MACD 死叉(主线<信号线) 价格在 BBI 之下。
### 3. 交易风控过滤规则
- 仓位控制:固定手数交易(默认0.1手,可手动调整)。
- 频率控制:两次交易间隔≥1小时,避免频繁开仓;当前有未平仓订单时,暂停新仓触发。
- 环境过滤:仅在点差≤30点、主要交易时段(1-23点)、服务器及品种允许交易的情况下执行操作。
## 三、关键参数设置
| 参数类别 | 核心参数 | 默认值 | 功能说明 |
|----------------|-------------------------|--------------|------------------------------|
| 趋势判断参数 | MA_Period1/2/3 | 5/10/20 | 三条均线周期,用于趋势识别 |
| 趋势判断参数 | TrendThreshold | 0.0015(0.15%) | 均线粘合度阈值,区分趋势/震荡 |
| 布林带参数 | BB_Period/BB_Deviation | 20/2 | 布林带周期及标准差,衡量波动 |
| MACD 参数 | FastEMA/SlowEMA/SignalSMA | 12/26/9 | MACD 指标标准参数,判断动能 |
| 交易参数 | LotSize | 0.1 | 固定交易手数 |
| 交易参数 | StopLossRatio | 0.02(2%) | 止损比例(基于当前价格) |
| 交易参数 | TakeProfitRatio | 0.04(4%) | 趋势策略止盈比例 |
| 交易参数 | MaxSpread/Slippage | 30/10 | 最大允许点差、滑点容忍度 |
## 四、止盈止损规则
### 1. 止损设置
- 统一规则:按当前价格的固定比例计算,与策略类型无关。
- 计算公式:
- 做多止损 = 当前价格 × (1 - 止损比例)
- 做空止损 = 当前价格 × (1 止损比例)
- 示例:当前价格1.2000,止损比例2%,则做多止损=1.2000×0.98=1.1760,做空止损=1.2000×1.02=1.2240。
### 2. 止盈设置
- 趋势跟踪策略:按当前价格的固定比例计算(默认4%),计算公式:
- 做多止盈 = 当前价格 × (1 止盈比例)
- 做空止盈 = 当前价格 × (1 - 止盈比例)
- 均值回归策略:固定以布林带中轨为止盈目标(价格回归均值时平仓)。
## 五、核心代码逻辑概览
### 1. 核心流程
```mql5
// 1. 初始化:创建均线、布林带、MACD、RSI 等指标句柄
int OnInit() { ... }
// 2. 每Tick触发:检查交易条件→更新市场状态→执行对应策略
void OnTick() {
if(!IsTradingAllowed()) return; // 过滤无效交易环境
UpdateMarketState(); // 识别市场状态(趋势/震荡)
ExecuteTradingLogic(); // 执行对应策略
}
// 3. 市场状态识别:综合均线、布林带、MACD 指标判断
void UpdateMarketState() { ... }
// 4. 策略执行:根据市场状态切换均值回归/趋势跟踪策略
void ExecuteTradingLogic() {
if(当前策略为均值回归) ExecuteMeanReversion();
if(当前策略为趋势跟踪) ExecuteTrendFollowing();
}
```
### 2. 关键函数说明
- `UpdateMarketState()`:核心市场识别函数,输出均线粘合度、布林带宽度、MACD强度等关键数据。
- `ExecuteMeanReversion()`:均值回归策略执行函数,包含多空信号判断、止盈止损计算、开仓逻辑。
- `ExecuteTrendFollowing()`:趋势跟踪策略执行函数,逻辑与上述函数一致,仅信号条件和止盈规则不同。
- `IsTradingAllowed()`:交易环境检查函数,过滤点差过大、非交易时段等无效场景。
风险提示:本文所述仅代表作者个人观点,不代表 Followme 的官方立场。Followme 不对内容的准确性、完整性或可靠性作出任何保证,对于基于该内容所采取的任何行为,不承担任何责任,除非另有书面明确说明。


加载失败()