Martin Boy
- 专家
- Jie Lin Wang
- 版本: 1.1
- 激活: 5
# 马丁男孩,双向马丁格尔网格交易策略说明文档
所有参数是基于GBPJPY货币对,其他货币对参数需要另外回测验证,其他历史最高价和历史最低价是必须要输入的,否则会产生单边交易甚至不交易。
##这款专家顾问(EA)实现了一个纯数学马丁格尔交易模型,旨在实现长期稳定性和盈利能力:
25年回测稳定性:该策略设计能够在几十年的历史回测中存活而不会爆仓。
市场独立性:不依赖趋势或震荡行情;无需任何技术指标或市场状态过滤器。
有限风险控制:使用数学定义的风险管理框架来限制潜在损失,同时允许受控的风险暴露。
自适应风险收益比例:风险可以动态调整,随着风险容忍度增加,潜在收益也会按比例增长。
全自动化:EA自动管理仓位大小、风险调整和交易执行,确保严格遵循策略规则。
核心优势:
完全基于数学和系统化方法,消除人为判断错误。
可在任何市场环境下运行。
风险收益比例灵活,可适应不同账户规模和风险偏好。
设计用于实现稳健的长期表现。
## 一、策略概述
本策略是一个**双向马丁格尔网格交易系统**(Dual-Directional Martingale Grid Trading System),专为MT5对冲账户设计。策略通过结合随机振荡器(Stochastic)指标信号和动态网格间距计算,在价格波动中捕捉交易机会,并通过马丁格尔加仓机制来降低平均持仓成本。
### 核心特点
- ✅ **双向交易**:同时支持做多和做空两个方向的网格交易
- ✅ **智能网格**:根据价格位置和对手方头寸动态调整网格间距
- ✅ **动态手数**:根据账户余额、价格位置和头寸情况智能计算交易手数
- ✅ **风险控制**:多重风险限制机制,包括价格区间限制、最大手数限制等
- ✅ **灵活马丁**:根据市场情况动态调整加仓策略
---
## 二、策略原理
### 2.1 基本交易逻辑
策略采用**网格交易 + 马丁格尔**的混合模式:
1. **初始入场**:使用随机振荡器指标判断入场时机
- 做多信号:Stochastic主线上穿信号线,且信号线 > 买入区域(默认10)
- 做空信号:Stochastic主线下穿信号线,且信号线 < 卖出区域(默认90)
2. **网格加仓**:当价格向不利方向移动时,在预设的网格间距处加仓
- 每次加仓的手数按倍数递增(默认1.52倍)
- 网格间距根据订单数量和价格位置动态调整
3. **止盈平仓**:当所有同向头寸整体盈利时,达到止盈目标后全部平仓
### 2.2 网格间距计算原理
策略的核心创新在于**动态网格间距计算**,考虑了以下因素:
#### 价格位置影响
```
买入网格间距 = (当前价格/历史最高价/价格距离百分比)^步长幂次 × 基础步长
卖出网格间距 = (历史最低价/当前价格/价格距离百分比)^步长幂次 × 基础步长
```
**原理说明**:
- 当价格接近历史最高/最低价时,网格间距会缩小,增加交易频率
- 当价格远离历史极值时,网格间距会扩大,减少交易频率
- 通过幂次函数(默认3.0)放大这种效应
#### 订单数量影响
```
实际网格间距 = 基础网格步长 × (网格幂次 - 价格幂次)^(订单数 × 对手方系数) + 额外步长
```
**原理说明**:
- 随着订单数量增加,网格间距会逐渐扩大
- 考虑对手方头寸数量,动态调整系数
- 防止在极端行情下过度加仓
### 2.3 手数计算原理
#### 基础手数计算
```
买入基础手数 = (账户余额/基础手数百分比/1000) / (当前价格/历史最高价/价格乘数百分比)^手数幂次 + 0.01
卖出基础手数 = (账户余额/基础手数百分比/1000) / (历史最低价/当前价格/价格乘数百分比)^手数幂次 + 0.01
```
**原理说明**:
- 基础手数与账户余额成正比
- 当价格接近历史极值时,手数会相应减小,降低风险
- 通过幂次函数平滑调整手数变化
#### 加仓手数计算
- **初始阶段**(前N个订单):使用 `基础手数 × 初始阶段倍数`(默认1.0)
- **灵活马丁阶段**:
- 对手方头寸过强时:`上次手数 × 手数倍数 × 对手方倍数`(默认1.15)
- 对手方头寸过弱时:`上次手数 × 手数倍数`
### 2.4 灵活马丁格尔机制
策略根据对手方头寸情况,采用三种不同的加仓策略:
#### 情况1:初始阶段(订单数 ≤ 初始订单阈值)
- 使用较慢的网格间距(`初始网格慢速 × 基础网格间距`)
- 手数倍数较小(`初始阶段倍数`,默认1.0)
- 适合市场初期的小幅波动
#### 情况2:对手方头寸过强(对手方手数 ≥ 本方手数 × 分割倍数)
- 网格间距缩小(应用`对手方步长折扣`,默认0.8)
- 手数增加(应用`对手方倍数`,默认1.15)
- 快速平衡头寸,降低风险敞口
#### 情况3:对手方头寸过弱(对手方手数 < 本方手数 × 分割倍数)
- 网格间距扩大(增加`分割阈值偏移`,默认3.0)
- 手数按正常倍数递增
- 在有利方向继续加仓,扩大盈利
### 2.5 止盈机制
```
买入止盈价格 = 最后买入价格 + (买入订单数 × 止盈点数 × 点值)
卖出止盈价格 = 最后卖出价格 - (卖出订单数 × 止盈点数 × 点值)
```
**原理说明**:
- 订单数量越多,止盈目标越大
- 只有当所有同向头寸整体盈利时才会触发止盈
- 一次性平仓所有同向头寸,锁定整体利润
---
## 三、关键参数说明
### 3.1 价格区间设置
- **MaxPriceForBuy**(默认250):历史最高价,高于此价格不开买单
- **MinPriceForSell**(默认90):历史最低价,低于此价格不开卖单
**作用**:限制交易价格区间,避免在极端价格区域交易
### 3.2 基础交易设置
- **BaseGridStep**(默认2.26):基础网格步长,范围2.0~3.8
- **BaseLotPercent**(默认7500):基础手数百分比,范围4500~125000
- **LotMultiplier**(默认1.52):手数倍数,范围1.50~1.75,必须>1.35
- **GridPower**(默认1.232):网格幂次,范围1.22~1.24,必须>1
### 3.3 初始阶段设置
- **InitialOrdersThreshold**(默认2):初始订单阈值,前N个订单使用初始策略
- **InitialGridSlow**(默认2.1):初始网格慢速倍数
- **FirstPhaseMultiplier**(默认1.0):初始阶段手数倍数
### 3.4 灵活马丁设置
- **AdditionalStep**(默认2.0):额外步长值
- **OppositeSideCoefficient**(默认2.2):对手方系数
- **OppositeSidePercent**(默认0.5):对手方百分比因子
- **SplitThresholdOffset**(默认3.0):分割阈值偏移
- **OppositeSideStepDiscount**(默认0.8):对手方步长折扣
- **OppositeSideMultiplier**(默认1.15):对手方手数倍数
### 3.5 止盈设置
- **TakeProfitPoints**(默认16):止盈点数,推荐范围10~70
### 3.6 限制设置
- **BaseLotLimit**(默认3.7):基础手数限制比率
- **SplitMultiplier**(默认1.7):分割倍数阈值
- **MaxTotalLots**(默认22):最大总手数,推荐范围6~18
### 3.7 主单元设置
- **PriceDistancePercent**(默认0.7):价格距离百分比
- **PriceMultiplierPercent**(默认0.7):价格乘数百分比
- **StepPowerMultiplier**(默认3.0):步长幂次倍数
- **LotPowerMultiplier**(默认1.0):手数幂次倍数
- **PriceRangePowerPercent**(默认100):价格范围幂次百分比
### 3.8 随机振荡器设置
- **StochasticPeriodK**(默认200):%K周期
- **StochasticPeriodD**(默认20):%D周期
- **StochasticSlowing**(默认20):平滑周期
- **StochasticBuyZone**(默认10):买入区域
- **StochasticSellZone**(默认90):卖出区域
---
## 四、风险控制机制
### 4.1 价格区间限制
- 只在预设的价格区间内交易,避免极端价格风险
### 4.2 手数限制
- **BaseLotLimit**:限制单边手数不能超过对手方的N倍
- **MaxTotalLots**:限制总手数上限,防止过度加仓
### 4.3 头寸过期管理
- **PositionExpirationHours**(默认72000小时):头寸过期时间
- 到期后根据设置的平仓类型(盈利/亏损/任意)自动平仓
### 4.4 账户要求
- 仅支持**对冲账户**(Hedging Account)
- 初始化时自动检测,不符合要求则停止运行
---
## 五、交易流程
### 5.1 初始化流程
1. 检测账户类型(必须是对冲账户)
2. 初始化交易对象和指标
3. 计算基础步长和止盈点数
4. 创建随机振荡器指标句柄
### 5.2 每个Tick的处理流程
1. **检查过期头寸**:根据过期时间和盈利情况决定是否平仓
2. **计算动态参数**:
- 根据当前价格和历史极值计算网格间距
- 根据账户余额和价格位置计算基础手数
3. **统计当前头寸**:统计买卖双方的手数、订单数、盈亏
4. **网格加仓判断**:
- 检查是否满足加仓条件(价格距离、手数限制等)
- 根据订单数量和对手方情况选择加仓策略
- 计算加仓手数和价格
5. **初始入场判断**:
- 如果没有任何头寸,根据随机振荡器信号开仓
6. **止盈判断**:
- 如果所有同向头寸盈利,检查是否达到止盈目标
- 达到目标则平仓所有同向头寸
### 5.3 交易事件处理
- **OnTradeTransaction**:监听交易事件,更新最后开仓价格和手数
- 当头寸全部平仓时,重置相关变量
---
## 六、策略优势
1. **双向盈利**:可以同时从上涨和下跌中获利
2. **智能调整**:根据价格位置和市场情况动态调整参数
3. **风险可控**:多重限制机制,防止过度加仓
4. **适应性强**:灵活的马丁格尔机制,适应不同市场环境
5. **自动化程度高**:全自动交易,无需人工干预
---
## 七、使用注意事项
### 7.1 账户要求
- ⚠️ **必须使用对冲账户**,否则策略无法运行
### 7.2 参数调整建议
- 根据交易品种的波动特性调整网格步长
- 根据账户资金量调整基础手数百分比
- 根据风险承受能力调整最大总手数
- 根据历史价格区间设置价格限制
### 7.3 风险提示
- 马丁格尔策略在趋势行情中可能面临较大回撤
- 建议在震荡市场中运行
- 需要充足的账户资金以应对连续加仓
- 建议先在模拟账户中测试参数
### 7.4 监控要点
- 定期检查总手数是否接近上限
- 关注价格是否接近历史极值
- 监控账户保证金使用情况
- 观察随机振荡器信号是否正常
---
## 八、技术实现细节
### 8.1 关键函数说明
- **TotalPositions()**:统计当前所有头寸的手数、订单数和盈亏
- **LotCheck()**:检查并规范化交易手数,确保符合交易商要求
- **RefreshRates()**:刷新价格数据
- **iStochasticGet()**:获取随机振荡器指标值
- **CloseAllBuy()/CloseAllSell()**:平仓所有买单/卖单
### 8.2 计算精度处理
- 自动识别3位和5位小数品种,调整点值计算
- 手数规范化处理,符合交易商的步长要求
---
## 九、总结
本策略是一个**高度智能化的双向马丁格尔网格交易系统**,通过动态调整网格间距和手数,在控制风险的同时追求稳定收益。策略特别适合在震荡市场中运行,能够有效利用价格波动获取利润。
**核心优势**:
- 智能化的参数动态调整
- 完善的风险控制机制
- 灵活的马丁格尔策略
- 全自动化交易执行
**适用场景**:
- 震荡市场
- 对冲账户
- 有充足资金的交易者
- 能够承受一定回撤的投资者
---
*策略版本:1.001*
*文档更新日期:2024年*
