
智能交易系统参数(输入)
智能交易系统提供多个外部参数,用户可以修改这些参数来控制其行为:
一般参数
| 参数 | 类型 | 说明 |
| 魔数 | int | EA 交易的唯一标识符。 |
| 初始手数 | 双 | 系列中第一笔交易的起始手数。 |
| 允许买入 | bool | 允许 EA 开启买入交易(初始交易和马丁格尔交易)的标志。 |
| 允许卖出 | bool | 允许 EA 打开卖出交易(初始和马丁格尔)的标志。 |
| 获利 | int | 以点/点为单位的固定止盈,用于下挂单(但不用于市场执行)。 |
| 查找高点低点回档 | int | 用于确定初始挂单的最高价和最低价的回溯数。 |
| 重置后条数 | 整数 | 删除初始挂单并重新评估(如果未建立头寸)的条数。 |
马丁格尔策略
| 参数 | 类型 | 说明 |
| 反向马丁格尔 | bool | 如果为 true,随后的马丁格尔交易将与系列中最后一笔交易的方向相反(这通常是一种反马丁格尔或对冲方法,但如果为 false,代码将以相同方向开仓)。当前的逻辑建议,如果 ReverseMartingale 为假,则以相同 方向开仓。 |
| 手数乘数 | 双 | 亏损系列下一笔交易的手数乘以的系数(例如, 2.0 表示手数翻倍)。 |
| SecureProfitMartingaleTarget(安全盈利目标 | 双倍 | 总浮动利润(账户货币),整个系列未平仓交易的平仓点。 |
| 距离定价点数 | 整数 | 在开始新的马丁格尔交易前,价格与上一笔交易的开仓价之间的移动距离(以点为单位)。 |
| 系列中最大交易次数 | 无 | 单个马丁格尔系列允许的最大交易次数。 |
时间策略
| 参数 | 类型 | 说明 |
| 允许星期一...允许星期五 | bool | 用于启用或禁用一周中特定日期交易的标志。 |
| 禁止日期 | 字符串 | 以逗号分隔的禁止交易日期列表(格式为 YYYY.MM.DD)。 |
核心函数概述
OnInit()(初始化)
设置 EA 的 MagicNumber、保证金模式和偏差。它将马丁格尔状态变量(s_currentLot、s_totalTradesInSeries 等)重置 为初始值,为重新开始做准备。
OnDeinit()(退出初始化)
一个简单的清理函数,在 EA 停止或删除时打印一条信息。
IsTradingDateAllowed() 和 IsTradingDayAllowed() (交易过滤器)
这些函数根据用户定义的输入(AllowMonday to AllowFriday 和 ForbiddenDates)检查当前日期,以确定是否允许交易。
OpenTradeLogic(ENUM_ORDER_TYPE type, string tradeComment) (市场执行)
该函数处理开立新市场头寸(买入或卖出)。
-
它根据经纪商规定的最小、最大和步长验证并规范手数。
-
使用 CheckMargin() 检查是否有足够的自由保证金。
-
执行无固定止盈或止损的 交易(tp_calculated 为 0)。
-
它会更新全局马丁格尔状态变量:s_currentLot , s_lastOpenPrice , s_seriesType 和 s_totalTradesInSeries。
关闭所有头寸
遍历所有当前未结头寸,并关闭此 EA 开立的任何头寸(与 MagicNumber 匹配)。
PendingOrders(ENUM_ORDER_TYPE type, double price, double lotSize, string comment) (挂单下达)
该函数用于下达限价买入 或限价卖出 订单:
-
它验证手数并检查是否有足够的保证金。
-
根据经纪商的最小距离 ( SYMBOL_TRADE_STOPS_LEVEL ) 验证进入价格。
-
根据止盈输入计算固定止盈 ( tp )。
-
发送交易请求。注意: UpdateHighLowAndOrders(更新高低限价和订单)函数会调用 此功能来放置初始买入限价订单和卖出限价订单。
UpdateHighLowAndOrders() (初始入市逻辑)
这是未开仓时的初始入市机制:
-
它回溯 FindHighLowBackBars 找到最高价 和最低价。
-
计算 priceSellLimit(最高价 + 1 tick)和 priceBuyLimit(最低价 - 1 tick)。
-
它会检查是否已经存在具有 EA MagicNumber 的限价买单和限价卖单。
-
它会使用 InitialLot(初始手数)在最近的最高点上方放置一个初始限价卖出 订单,在最近的最低点下方放置一个限价买入 订单。
OnTick()(主要逻辑)
EA 执行逻辑的核心:
-
时间检查: 防止在同一刻度上进行冗余计算。
-
过滤检查: 如果当天/日期不允许交易,则删除所有挂单。
-
盈利目标检查(系列退出): 如果 eaHasOpenPositions 为 true 且 totalFloatingProfit 为≥ SecureProfitMartingaleTarget,则调用 CloseAllPositions() 并重置所有 Martingale 状态变量,以启动新系列。
-
初始下单: 如果!eaHasOpenPositions 且允许交易,则重置马丁格尔状态 并检查是否已形成新的条形图。
-
如果形成了新的条形图,则检查 barsCount 是否≥ ResetAfterBars 。如果是,则删除挂单并调用 UpdateHighLowAndOrders() 下达新的初始订单。如果不是,则只调用 UpdateHighLowAndOrders() 。
-
-
马丁格尔步骤逻辑: 如果 eaHasOpenPositions 为 true 且 s_totalTradesInSeries 为 $< MaxTradesInSeries`:
-
它会检查 totalFloatingProfit 是否为负值,以及价格是否与上一笔未平仓交易的价格相差至少 DistanceMartingalePips 。
-
如果这两个条件都满足,则通过将 s_currentLot 乘以 LotMultiplier 来计算下一手。
-
确定订单开仓方向(根据 ReverseMartingale 确定与系列相同的方向或相反的方向)。
-
它调用 OpenTradeLogic() 打开新的倍增仓位,继续马丁格尔系列。
-
策略摘要
Babi Ngepet "EA实施了一种风险大但潜在回报高的马丁格尔策略,并结合了突破/区间反转初始入场:
-
初始进入: EA 设下初始买入限价(低于近期低点)和卖出限价(高于近期高点)。这表明初始假设为区间行为-- 当价格跌至低点时买入,当价格涨至高点时卖出。
-
交易管理: 如果其中一笔初始交易被触发,头寸出现累计亏损(负浮动利润),且价格继续与未平仓头寸保持一定距离,则 EA 会以更大的手数(马丁格尔)在同一方向开立新头寸。
-
退出策略: 系列交易继续增加手数,直到系列中所有交易的总浮动利润达到 SecureProfitMartingaleTarget(安全盈利马丁格尔目标),此时关闭所有仓位,并重置 EA 以建立新的系列。
警告: 马丁格尔策略以高回撤和高资本损失风险著称,因为每一步亏损后,手数都会增加。
由MetaQuotes Ltd译自英文
原代码: https://www.mql5.com/en/code/64444
Trap News MT5
高影响力陷阱新闻脚本
KopierMaschineMT5
KopierMaschine 是一款本地复制器,可在一台电脑上以任何方向复制不同 MetaTrader 4 和 MetaTrader 5 账户之间的交易,界面直观。
外汇概率论智能交易系统
概率论顾问
Breakout Strategy with Prop Firm Helper Functions
这是 "简单而有效的突破策略 "的更新。在这段代码中,我为道具公司的挑战添加了一些辅助函数。