EA-51877 · 辅助工具
Maximum Trade Volume
这是一个工具型EA,在图表上显示一个对话框面板,展示基于当前可用保证金的最大可开仓手数,包括买入、卖出、挂单买入和挂单卖出四种情况。它本身不执行任何交易,仅计算并向交易者展示基于保证金的仓位信息。
打开交互版(权益曲线、切换品种)基本信息
回测结果(H1,约 1 年)
暂未回测:这个 EA 还没能自动转换。
策略分析
该EA并非交易策略,而是一个保证金计算工具。其核心概念是根据账户可用保证金和当前市场价格,计算各订单类型(买入、卖出、挂单买入、挂单卖出)的最大可开仓手数。入场条件和出场条件不适用于此工具,因为它不执行交易。仓位管理方面,它使用OrderCalcMargin函数计算1手所需保证金,然后用可用保证金除以每手保证金得出最大手数,并通过MathFloor向下取整到合法步长。资金管理方面,它使用AccountInfoDouble(ACCOUNT_MARGIN_FREE)获取可用保证金作为计算基础,并使用SymbolInfoDouble获取品种的最小手数、最大手数和手数步长进行规范化。然而,该工具存在一个严重BUG:在LotCheckPendingBuy和LotCheckPendingSell中使用了'||'运算符连接两个订单类型枚举值,这会执行按位或运算产生无效的枚举值,而非逻辑选择。此外,计算结果未与SYMBOL_VOLUME_MAX上限做比较,可能返回超过经纪商允许的最大手数。
优势
- 提供直观的GUI面板显示各订单类型的最大可开仓手数,方便交易者快速决策
- 使用了OrderCalcMargin函数进行保证金计算,这是MQL5官方推荐的计算方式,准确性较高
- 手数规范化处理考虑了最小手数和手数步长,避免出现不合法的下单手数
- 覆盖了买入、卖出、挂单买入、挂单卖出四种常见订单类型,信息全面
劣势
- LotCheckPendingBuy和LotCheckPendingSell中使用'||'运算符连接枚举值,执行的是按位或运算而非逻辑选择,产生无效的OrderCalcMargin调用
- 计算的最大手数未与SYMBOL_VOLUME_MAX做上限比较,可能返回超过经纪商允许的最大手数
- 对话框中显示的数值只在面板创建时计算一次,不会随行情或保证金变化自动更新
- static关键字在lotSize变量上的使用没有必要,且所有四个LotCheck函数逻辑高度重复,未做代码复用
- 定时器功能(pause变量)被创建但未实际用于任何逻辑,属于无用代码
改进建议
- 修复OrderCalcMargin调用中的枚举值BUG:挂单买入应使用ORDER_TYPE_BUY_STOP,挂单卖出应使用ORDER_TYPE_SELL_STOP(或分别计算两种挂单类型)
- 添加SYMBOL_VOLUME_MAX上限检查,确保计算结果不超过经纪商允许的最大手数
- 实现定时器驱动的自动刷新功能,利用已有的OnTimer和pause变量定期更新面板显示的数值
- 将四个重复的LotCheck函数重构为一个带参数的通用函数,减少代码冗余
风险评估
总体风险: 安全
- 挂单保证金计算使用了按位或产生的无效枚举值,OrderCalcMargin可能返回错误结果,导致显示的最大手数不准确
- 未与SYMBOL_VOLUME_MAX做上限比较,显示值可能误导交易者尝试下超出限制的订单
评估得分
代码质量2.0
策略逻辑1.0
风险管理3.0
稳健性2.0
创新性2.0
文档1.0
综合1.8
参数
| 参数 | 默认值 | 说明 |
|---|---|---|
INDENT_LEFT | 11 | 左侧缩进像素值 |
INDENT_TOP | 11 | 顶部缩进像素值 |
INDENT_RIGHT | 11 | 右侧缩进像素值 |
INDENT_BOTTOM | 11 | 底部缩进像素值 |
CONTROLS_GAP_X | 5 | 控件水平间距像素值 |
CONTROLS_GAP_Y | 5 | 控件垂直间距像素值 |
BUTTON_WIDTH | 100 | 按钮宽度像素值 |
BUTTON_HEIGHT | 20 | 按钮高度像素值 |
EDIT_HEIGHT | 20 | 编辑框高度像素值 |
GROUP_WIDTH | 150 | 分组宽度像素值 |
LIST_HEIGHT | 179 | 列表高度像素值 |
RADIO_HEIGHT | 56 | 单选框高度像素值 |
CHECK_HEIGHT | 93 | 复选框高度像素值 |
pause | true | 暂停标志,定时器切换状态 |
同类 EA:辅助工具
回测是历史模拟,不代表未来收益,不构成投资建议。