专门为MR4外汇黄金 (XAUUSD) 设计对冲EA,模拟
黄金对冲EA (GoldHedgingEA) 说明文档
简介
本EA (Expert Advisor) 是一个基于MetaTrader 4 (MT4) 平台的自动化交易程序,专门为黄金 (XAUUSD) 设计,50美元(0.01手)即可开始。
- EA目的: 主要目标是通过执行对冲策略来管理黄金交易中的风险,而非追求单一方向的趋势利润。
- 基本策略: 在没有持仓时,同时开立一个买单 (Buy) 和一个卖单 (Sell),形成对冲。当持仓的总净盈亏达到预设目标时,进行相应的平仓操作。如果因止损/止盈导致只有单边持仓,EA会尝试重新开立另一方向的订单以恢复对冲状态。
重要提示
请在使用本EA前仔细阅读以下提示:
- 模拟测试: 务必在模拟账户上进行充分测试3个月后,了解其在不同市场环境下的行为和潜在风险。
- 风险评估: 高盈利目标通常伴随高风险,请谨慎评估自身的风险承受能力。
下载链接:https://aifx66.com/content/uploadfile/202504/d6981745826457.zip
安装与加载
请按照以下步骤在您的MetaTrader 4平台中安装并加载本EA:
- 复制EA文件: 将
GoldHedgingEA.mq4
文件复制到MT4的数据文件夹下的MQL4\Experts
目录中。- 您可以通过在MT4中点击
文件 (File)
->打开数据文件夹 (Open Data Folder)
来找到此目录。
- 您可以通过在MT4中点击
- 刷新导航器: 返回MT4平台,在“导航器 (Navigator)”窗口中找到“EA交易 (Expert Advisors)”列表。右键点击并选择“刷新 (Refresh)”。您应该能在列表中看到
GoldHedgingEA
。 - 加载到图表: 打开您希望运行EA的黄金 (XAUUSD) 图表。从导航器窗口将
GoldHedgingEA
拖拽到该图表上。 - 参数设置: 在弹出的EA属性窗口中,检查并根据需要调整“输入参数 (Inputs)”选项卡中的各项参数。确保“常用 (Common)”选项卡中的“允许实时自动交易 (Allow live trading)”已被勾选。
- 确认运行: 点击“确定 (OK)”。如果一切设置正确,您应该能在图表的右上角看到EA名称和一个笑脸图标 (😊),表示EA正在运行。
图表时间周期建议
- 推荐周期: 建议将EA加载到 M1 (1分钟) 图表上。因为EA的核心逻辑在
OnTick()
函数中执行,M1图表能提供最频繁的价格更新,确保EA能及时响应市场变化并执行开平仓逻辑。 - 其他周期: 虽然推荐M1,但您也可以在其他时间周期(如M5, M15等)上进行测试。请注意,在较高时间周期图表上,
OnTick()
的触发频率会降低,可能影响EA对快速市场波动的反应速度以及平仓条件的判断时机。
输入参数详解
用户可以在EA加载到图表时设置以下参数:
LotSize
: 交易手数 (默认: 0.01)MaxSpread
: 最大允许点差 (点) (默认: 30)Slippage
: 最大允许滑点 (点) (默认: 3)MagicNumber
: EA魔术数字 (默认: 12345)SymbolName
: 交易品种 (默认: "XAUUSD")StopLossPoints
: 止损点数 (默认: 500)TakeProfitPoints
: 止盈点数 (默认: 1000)CloseNetProfit
: 平仓净盈利 (账户货币单位) (默认: 20.0)CloseNetLoss
: 平仓净亏损 (账户货币单位, 负数) (默认: -10.0)SecureProfitTrailingStopPoints
: 盈利保护追踪止损距离 (点) (默认: 200, 0=禁用)。当单边持仓盈利达到SecureProfitMinProfitPoints
时,激活此追踪止损。SecureProfitMinProfitPoints
: 激活盈利保护追踪止损的最小盈利点数 (点) (默认: 100)。RecoverLossCloseProfitPoints
: 弥补亏损后关闭剩余订单的盈利点数 (点) (默认: 100, 0=禁用)。当单边持仓盈利达到此点数时,直接平仓。
核心工作逻辑
EA的主要逻辑在 OnTick()
函数中执行,每次市场价格变动时触发:
- 检查: 检查交易是否允许、是否有足够历史数据、点差是否过大。
- 获取持仓状态: 检查当前是否有由本EA管理的买单 (
hasOpenBuy
) 和卖单 (hasOpenSell
)。 - 决策分支:
- Case 1: 无持仓 (
!hasOpenBuy && !hasOpenSell
): 调用OpenHedgingPosition()
开立初始对冲仓位(一个买单和一个卖单)。 - Case 2: 双边持仓 (
hasOpenBuy && hasOpenSell
): 调用ManageHedgingPositions()
管理现有对冲仓位(检查整体盈亏目标)。 - Case 3: 单边持仓 (
hasOpenBuy != hasOpenSell
): 调用ManageSinglePosition()
尝试智能管理剩余的单个订单。- 如果
ManageSinglePosition()
未执行任何操作(例如相关功能被禁用或未达到触发条件),则EA会尝试重新开立另一方向的订单以恢复对冲状态(行为类似旧版本)。
- 如果
- Case 1: 无持仓 (
OpenHedgingPosition()
函数
- 计算基于当前买卖价的止损和止盈价格。
- 使用
OrderSend()
函数分别发送一个买单和一个卖单。
ManageHedgingPositions()
函数
- 计算当前所有由本EA管理的持仓的总净盈亏 (
totalNetProfit
)。 - 重要检查: 如果当前持仓少于2个(即不是完整的对冲状态),则直接返回,不执行此函数的盈亏平仓逻辑(交由
ManageSinglePosition
处理)。 - 盈利平仓: 如果
totalNetProfit >= CloseNetProfit
,则遍历所有持仓,只关闭那些当前处于盈利状态的订单。 - 亏损平仓: 如果
totalNetProfit <= CloseNetLoss
,则调用CloseAllPositions()
函数,强制关闭所有由本EA管理的持仓。
ManageSinglePosition()
函数 (新增逻辑)
此函数在 OnTick()
检测到只有单边持仓时被调用,用于智能管理剩余的那个订单:
- 找到订单: 定位那个单独存在的买单或卖单。
- 计算盈利: 计算该订单当前的盈利点数。
- 弥补亏损平仓 (Recover Loss): 检查
RecoverLossCloseProfitPoints
是否大于0。如果当前订单盈利点数达到或超过此值,则立即平仓该订单。如果成功平仓,函数返回true
,阻止后续的重新对冲。 - 盈利保护追踪止损 (Secure Profit Trailing Stop): 如果上述平仓逻辑未触发,检查
SecureProfitTrailingStopPoints
是否大于0 且当前订单盈利点数达到或超过SecureProfitMinProfitPoints
。- 计算新的追踪止损位 (盈利方向回撤
SecureProfitTrailingStopPoints
点)。 - 条件: 只有当新的止损位优于当前止损位(更高对于买单,更低对于卖单)并且已经越过开仓价(即保证盈利)时,才会尝试修改订单的止损位。
- 修改: 如果满足条件且新止损位与当前止损位差异大于1个点,则修改订单止损。修改成功或无需修改(因为变化太小或新SL不优)时,函数返回
true
,表示已接管此订单管理,阻止后续的重新对冲。
- 计算新的追踪止损位 (盈利方向回撤
- 返回
false
: 如果以上所有智能管理条件都不满足或相关功能被禁用,函数返回false
。这会使得OnTick()
函数继续执行,尝试开立另一方向的订单以重新建立对冲。
CloseAllPositions()
函数
- 遍历所有订单,找到属于本EA的订单(通过
MagicNumber
和SymbolName
识别),并使用OrderClose()
函数逐一平仓。
风险提示与优化建议
- 回测与优化: 至关重要! 使用MT4的策略测试器,选择XAUUSD,测试不同的参数组合(特别是
StopLossPoints
,TakeProfitPoints
,CloseNetProfit
,CloseNetLoss
, 以及新增的SecureProfitTrailingStopPoints
,SecureProfitMinProfitPoints
,RecoverLossCloseProfitPoints
),找到在历史数据上表现稳健的参数设置。 - 市场适应性: 对冲策略在震荡市场中可能表现较好,但在强烈的单边趋势市场中可能因不断重新对冲而产生亏损。新增的单边订单管理功能旨在改善趋势行情下的表现,但仍需仔细测试。
- 成本考虑: 交易成本(点差、手续费、隔夜利息)对对冲策略的盈利能力有显著影响,尤其是在持仓时间较长的情况下。
- 参数调整: 根据回测结果和个人风险偏好,仔细调整各项输入参数。特别注意新增参数之间的相互影响。
- 模拟先行: 在投入真实资金前,务必在模拟账户上运行足够长的时间,观察其实际表现。
免责声明: 本文档及EA仅供研究和学习使用,不构成任何投资建议。交易有风险,入市需谨慎。开发者不对使用本EA可能造成的任何损失负责。