系统交易 게시글

Babi Ngepet - 一款适用于MetaTrader 5的交易专家顾问

첨부파일
64444.zip (7.11 KB, 다운로드 0회)

专家顾问参数设置

这款EA提供了多个可调节的外部参数,用户可以根据需要修改这些参数以控制其行为:

通用参数

参数 类型 描述
MagicNumber 整型 EA交易的唯一标识符。
InitialLot 双精度 一系列交易中第一笔交易的起始手数。
AllowBuy 布尔型 允许EA开启买入交易的标志(初始交易和马丁格尔交易)。
AllowSell 布尔型 允许EA开启卖出交易的标志(初始交易和马丁格尔交易)。
TakeProfit 整型 用于下挂限单的固定止盈点数(市场执行时不适用)。
FindHighLowBackBars 整型 用于确定初始挂单时查找最高点和最低点的回溯条数。
ResetAfterBars 整型 在没有持仓的情况下,经过多少根K线后删除初始挂单并重新评估。

马丁格尔策略

参数 类型 描述
ReverseMartingale 布尔型 如果为真,后续马丁格尔交易将与系列中最后一笔交易的方向相反(这通常是反马丁格尔或对冲策略,但如果为假,代码将以相同方向开仓)。
LotMultiplier 双精度 在亏损系列中的下一笔交易中,手数乘以的因子(例如,2.0表示翻倍手数)。
SecureProfitMartingaleTarget 双精度 在该总浮动盈利(以账户货币计)下,关闭所有开放交易的目标。
DistanceMartingalePips 整型 在最后一笔交易开仓价相反移动多少点(点数)后,才会开启新的马丁格尔交易。
MaxTradesInSeries 整型 单个马丁格尔系列中允许的最大交易数量。

时间策略

参数 类型 描述
AllowMonday... AllowFriday 布尔型 启用或禁用特定星期几交易的标志。
ForbiddenDates 字符串 禁止交易的日期(格式YYYY.MM.DD)的逗号分隔列表。

核心功能概述

OnInit()(初始化)

设置EA的MagicNumber、保证金模式和偏差。它重置马丁格尔状态变量(s_currentLot、s_totalTradesInSeries等)为初始值,为新的开始做准备。

OnDeinit()(去初始化)

一个简单的清理函数,当EA停止或移除时打印消息。

IsTradingDateAllowed()和IsTradingDayAllowed()(交易过滤器)

这些函数检查当前日期和时间是否符合用户定义的输入(AllowMonday至AllowFriday和ForbiddenDates),以决定是否允许交易。

OpenTradeLogic(ENUM_ORDER_TYPE type, string tradeComment)(市场执行)

此函数处理新市场仓位的开仓(买入或卖出)。

  1. 验证并标准化手数,以符合经纪商的最小、最大和步进要求。

  2. 使用CheckMargin()检查是否有足够的可用保证金

  3. 没有固定的止盈或止损的情况下执行交易(tp_calculated为0)。

  4. 更新全局马丁格尔状态变量:s_currentLot、s_lastOpenPrice、s_seriesType和s_totalTradesInSeries。

CloseAllPositions()

遍历所有当前开放的仓位,关闭由该EA(匹配MagicNumber)开设的所有仓位。

PendingOrders(ENUM_ORDER_TYPE type, double price, double lotSize, string comment)(挂单设置)

此函数放置买入限价单卖出限价单

  1. 验证手数并检查保证金是否足够。

  2. 确认入场价格与经纪商的最小距离(SYMBOL_TRADE_STOPS_LEVEL)是否符合。

  3. 基于TakeProfit输入计算固定的止盈(tp)。

  4. 发送交易请求。注意:UpdateHighLowAndOrders函数调用此函数放置初始的买入限价单和卖出限价单。

UpdateHighLowAndOrders()(初始入场逻辑)

当没有持仓时,这是初始入场机制

  1. 回溯FindHighLowBackBars,查找最高点最低点

  2. 计算priceSellLimit(最高点 + 1 tick)和priceBuyLimit(最低点 - 1 tick)。

  3. 检查是否已经存在带有EA的MagicNumber的买入限价单和卖出限价单。

  4. 在最近最高点之上放置初始的卖出限价单,在最近最低点之下放置初始的买入限价单, 每个单子使用InitialLot。

OnTick()(主逻辑)

EA执行逻辑的核心:

  1. 时间检查:防止在同一tick上进行重复计算。

  2. 过滤检查:如果不允许某天/日期交易,则删除所有挂单。

  3. 盈利目标检查(系列退出):如果eaHasOpenPositions为真且totalFloatingProfit大于等于SecureProfitMartingaleTarget,则调用CloseAllPositions()并重置所有马丁格尔状态变量以开始新的系列。

  4. 初始订单放置:如果!eaHasOpenPositions且允许交易,则重置马丁格尔状态并检查是否形成了新K线。

    • 如果形成了新K线,检查barsCount是否大于等于ResetAfterBars。如果是,则删除挂单并调用UpdateHighLowAndOrders()放置新的初始订单。如果不是,则仅调用UpdateHighLowAndOrders()。

  5. 马丁格尔步骤逻辑:如果eaHasOpenPositions为真且s_totalTradesInSeries小于MaxTradesInSeries:

    • 检查totalFloatingProfit是否为负数且价格是否相对于最后一笔开仓交易移动了至少DistanceMartingalePips。

    • 如果两个条件都满足,则计算下一笔手数,通过s_currentLot乘以LotMultiplier。

    • 确定orderToOpen的方向(根据ReverseMartingale决定与系列相同或相反的方向)。

    • 调用OpenTradeLogic()以开设新的、乘以手数的仓位,继续马丁格尔系列。


策略总结

"Babi Ngepet" EA实施了一种高风险但潜在高回报的马丁格尔策略,结合了突破/区间反转的初始入场:

  1. 初始入场:EA在最近低点下方放置初始的买入限价单,在最近高点上方放置初始的卖出限价单。这暗示着初始假设为区间行为——当价格下跌到低点时买入,价格上涨到高点时卖出。

  2. 交易管理:如果初始交易之一被触发,且持仓出现整体亏损(负浮动盈利),并且价格继续朝着开放仓位的方向移动到定义的距离,EA将在相同方向上以更大的手数(马丁格尔)开设新仓位

  3. 退出策略:交易系列将继续增加手数,直到所有交易的整体浮动盈利达到SecureProfitMartingaleTarget,此时所有持仓将被关闭,EA将重置以准备新的系列。

警告:马丁格尔策略以其高回撤和高资本损失风险而闻名,因为每次亏损后手数都会增加。


연관 포스트

댓글 (0)