风险管理(第五部分):将风险管理系统集成到 EA 中·进阶篇
◍ EA 参数骨架与订单区块识别配置
在 MT5 里从模板新建 EA 时,只勾选 OnTradeTransaction 事件就够了,其余定时器、Tick 事件先留空,避免无谓开销。随后要定义一套与订单区块指标对齐的参数,让 EA 能独立识别并绘制区块矩形。 先落通用参数:Magic 设 545244 用于区分其他策略订单;timeframe_order_block 默认 PERIOD_M5 决定区块检测周期;Rango_universal_busqueda=500 表示向历史回看 500 根 K 线寻找潜在区块。Witdth_order_block=1 控制矩形边框粗细,Back_order_block 与 Fill_order_block 开关背景和填充,涨跌区块分别用 clrRed / clrGreen。 止盈止损有两种算法,由枚举 ENUM_TP_SL_STYLE 切换:ATR 模式用 Atr_Multiplier_1=1.5、Atr_Multiplier_2=2.0 乘波动率;POINT 模式直接读 TP_POINT 与 SL_POINT,默认都是 1000 点。手数方面 Lote_Type 默认 Dinamico,固定手数时才用 lote=0.1。 下面这段代码就是上述参数的 MQL5 声明,注意 sinput group 仅作面板分组、不进优化。外汇与贵金属杠杆高,参数回看范围过大会拖慢 MT5 每次报价的计算,实盘前建议先缩小 Rango_universal_busqueda 到 200 测帧率。
enum ENUM_TP_SL_STYLE { ATR = class="num">0, POINT = class="num">1 }; input class="type">ulong Magic = class="num">545244; class=class="str">"cmt">//Magic number input ENUM_TIMEFRAMES timeframe_order_block = PERIOD_M5; class=class="str">"cmt">//Order block timeframe sinput group "-- Order Block --" input class="type">int Rango_universal_busqueda = class="num">500; class=class="str">"cmt">//search range of order blocks input class="type">int Witdth_order_block = class="num">1; class=class="str">"cmt">//Width order block input class="type">bool Back_order_block = true; class=class="str">"cmt">//Back order block? input class="type">bool Fill_order_block = true; class=class="str">"cmt">//Fill order block? input class="type">class="kw">color Color_Order_Block_Bajista = clrRed; class=class="str">"cmt">//Bearish order block class="type">class="kw">color input class="type">class="kw">color Color_Order_Block_Alcista = clrGreen; class=class="str">"cmt">//Bullish order block class="type">class="kw">color sinput group "-- Strategy --" input ENUM_TP_SL_STYLE tp_sl_style = POINT;class=class="str">"cmt">//tp and sl style sinput group "- ATR " input class="type">class="kw">double Atr_Multiplier_1 = class="num">1.5;class=class="str">"cmt">//Atr multiplier class="num">1 input class="type">class="kw">double Atr_Multiplier_2 = class="num">2.0;class=class="str">"cmt">//Atr multiplier class="num">2 sinput group "- POINT " input class="type">int TP_POINT = class="num">1000; class=class="str">"cmt">//TL in Points input class="type">int SL_POINT = class="num">1000; class=class="str">"cmt">//SL in Points input ENUM_LOTE_TYPE Lote_Type = Dinamico; class=class="str">"cmt">//Lote Type input class="type">class="kw">double lote = class="num">0.1; class=class="str">"cmt">//lot size(only for fixed lot)
「EA 风控参数的分组输入逻辑」
这段 MQL5 输入段把账户风控拆成了几组独立开关:先选风险模式(个人户 or Prop Firm),再决定手数怎么算,后面紧跟 ML / MWL / MDL 三组最大亏损限额。 ML、MWL、MDL 三组都用了同样的字段结构:percentage_or_money_xxx_input 填 0 即不启用该限额;mode_calculation_xxx 选按百分比还是金额;applied_percentages_xxx 指定百分比基于余额还是净值。外汇与贵金属杠杆高,实盘前务必确认这三组限额不会在同一笔回撤里叠加击穿账户。 GMLPO 是单笔总亏损上限,mode_gmlpo 给了三种动态模式枚举。DYNAMIC_GMLPO_FULL_CUSTOM 下用 str_percentages_to_be_reviewed="2,5,7,9" 和 str_percentages_to_apply="1,0.7,0.5,0.33" 做阈值联动:权益跌破 2% 阈值后,后续单笔风险自动降到原比例的 1,跌破 5% 降到 0.7,以此类推。revision_type_gmlpo 控制是平仓时还是每个 tick 检查,默认平仓时检查更省算力。 开 MT5 把这段代码贴进 EA 输入区,改 prop_firm_balance=1000 与百分比串,就能直接验证动态降险是否在回测里按预期触发。
input ENUM_MODE_RISK_MANAGEMENT risk_mode = personal_account;class=class="str">"cmt">//type of risk management mode input ENUM_GET_LOT get_mode = GET_LOT_BY_STOPLOSS_AND_RISK_PER_OPERATION; class=class="str">"cmt">//How to get the lot input class="type">class="kw">double prop_firm_balance = class="num">1000; class=class="str">"cmt">//If risk mode is Prop Firm FTMO, then put your ftmo account balance sinput group "- ML/Maxium loss/Maxima perdida -" input class="type">class="kw">double percentage_or_money_ml_input = class="num">0; class=class="str">"cmt">//percentage or money(class="num">0 => not used ML) input ENUM_RISK_CALCULATION_MODE mode_calculation_ml = percentage; class=class="str">"cmt">//Mode calculation Max Loss input ENUM_APPLIED_PERCENTAGES applied_percentages_ml = Balance; class=class="str">"cmt">//ML percentage applies to: sinput group "- MWL/Maximum weekly loss/Perdida maxima semanal -" input class="type">class="kw">double percentage_or_money_mwl_input = class="num">0; class=class="str">"cmt">//percentage or money(class="num">0 => not used MWL) input ENUM_RISK_CALCULATION_MODE mode_calculation_mwl = percentage; class=class="str">"cmt">//Mode calculation Max weekly Loss input ENUM_APPLIED_PERCENTAGES applied_percentages_mwl = Balance;class=class="str">"cmt">//MWL percentage applies to: sinput group "- MDL/Maximum daily loss/Perdida maxima diaria -" input class="type">class="kw">double percentage_or_money_mdl_input = class="num">0; class=class="str">"cmt">//percentage or money(class="num">0 => not used MDL) input ENUM_RISK_CALCULATION_MODE mode_calculation_mdl = percentage; class=class="str">"cmt">//Mode calculation Max daily loss input ENUM_APPLIED_PERCENTAGES applied_percentages_mdl = Balance;class=class="str">"cmt">//MDL percentage applies to: class=class="str">"cmt">//--- Enumeration of the types of dynamic operational risk enum ENUM_OF_DYNAMIC_MODES_OF_GMLPO { DYNAMIC_GMLPO_FULL_CUSTOM, class=class="str">"cmt">//Customisable dynamic risk per operation DYNAMIC_GMLPO_FIXED_PARAMETERS,class=class="str">"cmt">//Risk per operation with fixed parameters NO_DYNAMIC_GMLPO class=class="str">"cmt">//No dynamic risk for risk per operation }; class=class="str">"cmt">//--- Enumeration to determine when to review a decrease in the initial balance to modify the risk per operation enum ENUM_REVISION_TYPE { REVISION_ON_CLOSE_POSITION, class=class="str">"cmt">//Check GMLPO only when closing positions REVISION_ON_TICK class=class="str">"cmt">//Check GMLPO on all ticks }; sinput group "- GMLPO/Gross maximum loss per operation/Porcentaje a arriesgar por operacion -" input ENUM_OF_DYNAMIC_MODES_OF_GMLPO mode_gmlpo = DYNAMIC_GMLPO_FULL_CUSTOM; class=class="str">"cmt">//Select GMLPO mode: input ENUM_REVISION_TYPE revision_type_gmlpo = REVISION_ON_CLOSE_POSITION; class=class="str">"cmt">//Type revision input class="type">class="kw">double percentage_or_money_gmlpo_input = class="num">1.0; class=class="str">"cmt">//percentage or money(class="num">0 => not used GMLPO) input ENUM_RISK_CALCULATION_MODE mode_calculation_gmlpo = percentage; class=class="str">"cmt">//Mode calculation Max Loss per operation input ENUM_APPLIED_PERCENTAGES applied_percentages_gmlpo = Balance;class=class="str">"cmt">//GMPLO percentage applies to: sinput group "-- Optional GMLPO settings, Dynamic GMLPO" sinput group "--- Full customizable dynamic GMLPO" input class="type">class="kw">string note1 = "subtracted from your total balance to establish a threshold."; class=class="str">"cmt">//This parameter determines a specific percentage that will be input class="type">class="kw">string str_percentages_to_be_reviewed = "class="num">2,class="num">5,class="num">7,class="num">9"; class=class="str">"cmt">//percentages separated by commas. input class="type">class="kw">string note2 = "a new risk level will be triggered on your future trades: "; class=class="str">"cmt">//When the current balance(equity) falls below this threshold input class="type">class="kw">string str_percentages_to_apply = "class="num">1,class="num">0.7,class="num">0.5,class="num">0.33"; class=class="str">"cmt">//percentages separated by commas. input class="type">class="kw">string note3 = "class="num">0 in both parameters => do not use dynamic risk in gmlpo"; class=class="str">"cmt">//Note: sinput group "--- Fixed dynamic GMLPO with parameters" sinput group "- class="num">1 -"
阶梯式回撤触发的风险参数与OB捕捉设定
这段输入参数把「账户回撤深度」和「单笔风险百分比」绑成了一条阶梯曲线。当净值回撤触及 2%、5%、7%、9% 这四个阈值时,GMLPO 风险系数会分别从基准被改写成 1.0%、0.7%、0.5%、0.33%——越亏越收手,逻辑上倾向降低连亏放大。 外汇与贵金属属高杠杆品种,这类自动降险参数只是概率层面的缓冲,不保证避免爆仓。MDP(单日最大盈利)模块默认严格模式开启,percentage_or_money_mdp_input 设为 0 表示暂不限制日内利润封顶,交易者可按自己资金曲线手动填百分比或金额。 交易时段被钉在 16:30 至 18:00(服务器时),Order Block 逻辑跑在 M5 周期,Magic 号固定 545244。OB 搜索跨度给到 500 根 K 线,块宽 1 根,允许回画与填充,熊块标红。开 MT5 把这段直接贴进 EA 输入区,改 Rango_universal_busqueda 到 200 看 OB 识别密度变化,是验证参数敏感度的快办法。
input class="type">class="kw">string note1_1 = "subtracted from your total balance to establish a threshold."; class=class="str">"cmt">//This parameter determines a specific percentage that will be input class="type">class="kw">double inp_balance_percentage_to_activate_the_risk_1 = class="num">2.0; class=class="str">"cmt">//percentage class="num">1 that will be exceeded to modify the risk separated by commas input class="type">class="kw">string note2_1 = "a new risk level will be triggered on your future trades: "; class=class="str">"cmt">//When the current balance(equity) falls below this threshold input class="type">class="kw">double inp_percentage_to_be_modified_1 = class="num">1.0;class=class="str">"cmt">//new percentage class="num">1 to which the gmlpo is modified sinput group "- class="num">2 -" input class="type">class="kw">double inp_balance_percentage_to_activate_the_risk_2 = class="num">5.0;class=class="str">"cmt">//percentage class="num">2 that will be exceeded to modify the risk separated by commas input class="type">class="kw">double inp_percentage_to_be_modified_2 = class="num">0.7;class=class="str">"cmt">//new percentage class="num">2 to which the gmlpo is modified sinput group "- class="num">3 -" input class="type">class="kw">double inp_balance_percentage_to_activate_the_risk_3 = class="num">7.0;class=class="str">"cmt">//percentage class="num">3 that will be exceeded to modify the risk separated by commas input class="type">class="kw">double inp_percentage_to_be_modified_3 = class="num">0.5;class=class="str">"cmt">//new percentage class="num">3 to which the gmlpo is modified sinput group "- class="num">4 -" input class="type">class="kw">double inp_balance_percentage_to_activate_the_risk_4 = class="num">9.0;class=class="str">"cmt">//percentage class="num">4 that will be exceeded to modify the risk separated by commas input class="type">class="kw">double inp_percentage_to_be_modified_4 = class="num">0.33;class=class="str">"cmt">//new percentage class="num">4 class="num">1 to which the gmlpo is modified sinput group "- MDP/Maximum daily profit/Maxima ganancia diaria -" input class="type">bool mdp_is_strict = true; class=class="str">"cmt">//MDP is strict? input class="type">class="kw">double percentage_or_money_mdp_input = class="num">0; class=class="str">"cmt">//percentage or money(class="num">0 => not used MDP) input ENUM_RISK_CALCULATION_MODE mode_calculation_mdp = percentage; class=class="str">"cmt">//Mode calculation Max Daily Profit input ENUM_APPLIED_PERCENTAGES applied_percentages_mdp = Balance;class=class="str">"cmt">//MDP percentage applies to: sinput group "--- Session ---" input class="type">char hora_inicio = class="num">16;class=class="str">"cmt">//start hour to operate(class="num">0-class="num">23) input class="type">char min_inicio = class="num">30;class=class="str">"cmt">//start minute to operate(class="num">0-class="num">59) input class="type">char hora_fin = class="num">18;class=class="str">"cmt">//end hour to operate(class="num">1-class="num">23) input class="type">char min_fin =class="num">0;class=class="str">"cmt">//end minute to operate(class="num">0-class="num">59) sinput group "--- Order Block EA settings ---" input class="type">ulong Magic = class="num">545244; class=class="str">"cmt">//Magic number input ENUM_TIMEFRAMES timeframe_order_block = PERIOD_M5; class=class="str">"cmt">//Order block timeframe sinput group "-- Order Block --" input class="type">int Rango_universal_busqueda = class="num">500; class=class="str">"cmt">//search range of order blocks input class="type">int Witdth_order_block = class="num">1; class=class="str">"cmt">//Width order block input class="type">bool Back_order_block = true; class=class="str">"cmt">//Back order block? input class="type">bool Fill_order_block = true; class=class="str">"cmt">//Fill order block? input class="type">class="kw">color Color_Order_Block_Bajista = clrRed; class=class="str">"cmt">//Bearish order block class="type">class="kw">color
◍ EA 参数面板里的风控与止损逻辑
这段输入变量定义了 MT5 EA 在加载时的外部配置,核心落在订单块颜色、止盈止损算法和三层风控阈值。看懂这些 input/sinput 分组,你才能在策略测试器里不盲调。
input class="type">class="kw">color Color_Order_Block_Alcista = clrGreen; class=class="str">"cmt">// 看涨订单块绘制颜色,默认绿 input ENUM_TP_SL_STYLE tp_sl_style = POINT; class=class="str">"cmt">// 止盈止损计算方式,默认按点数 input class="type">class="kw">double Atr_Multiplier_1 = class="num">1.5; class=class="str">"cmt">// ATR 止损倍数一,取 class="num">1.5 倍 input class="type">class="kw">double Atr_Multiplier_2 = class="num">2.0; class=class="str">"cmt">// ATR 止盈倍数二,取 class="num">2.0 倍 input class="type">int TP_POINT = class="num">1000; class=class="str">"cmt">// 点数模式下的止盈距离,class="num">1000 点 input class="type">int SL_POINT = class="num">1000; class=class="str">"cmt">// 点数模式下的止损距离,class="num">1000 点 input ENUM_LOTE_TYPE Lote_Type = Dinamico; class=class="str">"cmt">// 仓位类型,默认动态 input class="type">class="kw">double lote = class="num">0.1; class=class="str">"cmt">// 固定仓位的手数,仅固定模式生效 input ENUM_MODE_RISK_MANAGEMENT risk_mode = personal_account; class=class="str">"cmt">// 风控模式,默认个人账户 input class="type">class="kw">double prop_firm_balance = class="num">1000; class=class="str">"cmt">// 若走 FTMO 等 prop firm 模式填账户余额 input class="type">class="kw">double percentage_or_money_ml_input = class="num">0; class=class="str">"cmt">// 最大总亏损阈值,class="num">0 表示不限制 input class="type">class="kw">double percentage_or_money_mdl_input = class="num">0; class=class="str">"cmt">// 最大日亏损阈值,class="num">0 表示不限制 input class="type">class="kw">double percentage_or_money_mwl_input = class="num">0; class=class="str">"cmt">// 最大周亏损阈值,class="num">0 表示不限制 input class="type">class="kw">double percentage_or_money_gmlpo_input = class="num">1.0; class=class="str">"cmt">// 单笔最大亏损占余额比,默认 class="num">1% input class="type">class="kw">string str_percentages_to_be_reviewed = "class="num">2,class="num">5,class="num">7,class="num">9"; class=class="str">"cmt">// 动态降险触发线:回撤 class="num">2/class="num">5/class="num">7/class="num">9% 时换挡
input class="type">class="kw">color Color_Order_Block_Alcista = clrGreen; class=class="str">"cmt">//Bullish order block class="type">class="kw">color sinput group "-- Strategy --" input ENUM_TP_SL_STYLE tp_sl_style = POINT;class=class="str">"cmt">//tp and sl style sinput group "- ATR " input class="type">class="kw">double Atr_Multiplier_1 = class="num">1.5;class=class="str">"cmt">//Atr multiplier class="num">1 input class="type">class="kw">double Atr_Multiplier_2 = class="num">2.0;class=class="str">"cmt">//Atr multiplier class="num">2 sinput group "- POINT " input class="type">int TP_POINT = class="num">1000; class=class="str">"cmt">//TL in Points input class="type">int SL_POINT = class="num">1000; class=class="str">"cmt">//SL in Points sinput group "--- Risk Management ---" input ENUM_LOTE_TYPE Lote_Type = Dinamico; class=class="str">"cmt">//Lote Type input class="type">class="kw">double lote = class="num">0.1; class=class="str">"cmt">//lot size(only for fixed lot) input ENUM_MODE_RISK_MANAGEMENT risk_mode = personal_account;class=class="str">"cmt">//type of risk management mode input ENUM_GET_LOT get_mode = GET_LOT_BY_STOPLOSS_AND_RISK_PER_OPERATION; class=class="str">"cmt">//How to get the lot input class="type">class="kw">double prop_firm_balance = class="num">1000; class=class="str">"cmt">//If risk mode is Prop Firm FTMO, then put your ftmo account balance sinput group "- ML/Maxium loss/Maxima perdida -" input class="type">class="kw">double percentage_or_money_ml_input = class="num">0; class=class="str">"cmt">//percentage or money(class="num">0 => not used ML) input ENUM_RISK_CALCULATION_MODE mode_calculation_ml = percentage; class=class="str">"cmt">//Mode calculation Max Loss input ENUM_APPLIED_PERCENTAGES applied_percentages_ml = Balance; class=class="str">"cmt">//ML percentage applies to: sinput group "- MWL/Maximum weekly loss/Perdida maxima semanal -" input class="type">class="kw">double percentage_or_money_mwl_input = class="num">0; class=class="str">"cmt">//percentage or money(class="num">0 => not used MWL) input ENUM_RISK_CALCULATION_MODE mode_calculation_mwl = percentage; class=class="str">"cmt">//Mode calculation Max weekly Loss input ENUM_APPLIED_PERCENTAGES applied_percentages_mwl = Balance;class=class="str">"cmt">//MWL percentage applies to: sinput group "- MDL/Maximum daily loss/Perdida maxima diaria -" input class="type">class="kw">double percentage_or_money_mdl_input = class="num">0; class=class="str">"cmt">//percentage or money(class="num">0 => not used MDL) input ENUM_RISK_CALCULATION_MODE mode_calculation_mdl = percentage; class=class="str">"cmt">//Mode calculation Max daily loss input ENUM_APPLIED_PERCENTAGES applied_percentages_mdl = Balance;class=class="str">"cmt">//MDL percentage applies to: sinput group "- GMLPO/Gross maximum loss per operation/Porcentaje a arriesgar por operacion -" input ENUM_OF_DYNAMIC_MODES_OF_GMLPO mode_gmlpo = DYNAMIC_GMLPO_FULL_CUSTOM; class=class="str">"cmt">//Select GMLPO mode: input ENUM_REVISION_TYPE revision_type_gmlpo = REVISION_ON_CLOSE_POSITION; class=class="str">"cmt">//Type revision input class="type">class="kw">double percentage_or_money_gmlpo_input = class="num">1.0; class=class="str">"cmt">//percentage or money(class="num">0 => not used GMLPO) input ENUM_RISK_CALCULATION_MODE mode_calculation_gmlpo = percentage; class=class="str">"cmt">//Mode calculation Max Loss per operation input ENUM_APPLIED_PERCENTAGES applied_percentages_gmlpo = Balance;class=class="str">"cmt">//GMPLO percentage applies to: sinput group "-- Optional GMLPO settings, Dynamic GMLPO" sinput group "--- Full customizable dynamic GMLPO" input class="type">class="kw">string note1 = "subtracted from your total balance to establish a threshold."; class=class="str">"cmt">//This parameter determines a specific percentage that will be input class="type">class="kw">string str_percentages_to_be_reviewed = "class="num">2,class="num">5,class="num">7,class="num">9"; class=class="str">"cmt">//percentages separated by commas. input class="type">class="kw">string note2 = "a new risk level will be triggered on your future trades: "; class=class="str">"cmt">//When the current balance(equity) falls below this threshold
「GMLPO 动态降险与时段参数的实盘接法」
这段输入参数定义了 GMLPO 策略在净值回撤时逐级收缩风险的机制。核心思路是:当账户权益较初始余额下跌到特定百分比阈值以下,后续订单的手数风险比例自动调低,而不是死扛原始仓位。 str_percentages_to_apply 默认给的是 "1,0.7,0.5,0.33",对应四级风险档位。inp_balance_percentage_to_activate_the_risk_1 到 _4 分别是 2.0、5.0、7.0、9.0,意思是权益比初始余额低 2% 触发第一档(风险降到 1.0),低 5% 触发第二档(0.7),低 7% 第三档(0.5),低 9% 第四档(0.33)。若两个相关参数都填 0,则不使用动态风险,按原比例跑。 最大日盈利(MDP)模块里 percentage_or_money_mdp_input 设为 0 即不限制;非 0 时按 Balance 或 Equity 计算,mode_calculation_mdp 选 percentage 就以百分比封顶。外汇与贵金属波动剧烈,这类自动降险只能降低概率性爆仓风险,不保证不亏。 交易时段由 hora_inicio=16、min_inicio=30、hora_fin=18、min_fin=0 锁死,只在 16:30–18:00 之间下单。你打开 MT5 把这几行贴进 EA 输入区,改改百分比和时段,就能验证自己的经纪商点差下触发逻辑是否如预期。
input class="type">class="kw">string str_percentages_to_apply = "class="num">1,class="num">0.7,class="num">0.5,class="num">0.33"; class=class="str">"cmt">//percentages separated by commas. input class="type">class="kw">string note3 = "class="num">0 in both parameters => do not use dynamic risk in gmlpo"; class=class="str">"cmt">//Note: sinput group "--- Fixed dynamic GMLPO with parameters" sinput group "- class="num">1 -" input class="type">class="kw">string note1_1 = "subtracted from your total balance to establish a threshold."; class=class="str">"cmt">//This parameter determines a specific percentage that will be input class="type">class="kw">double inp_balance_percentage_to_activate_the_risk_1 = class="num">2.0; class=class="str">"cmt">//percentage class="num">1 that will be exceeded to modify the risk separated by commas input class="type">class="kw">string note2_1 = "a new risk level will be triggered on your future trades: "; class=class="str">"cmt">//When the current balance(equity) falls below this threshold input class="type">class="kw">double inp_percentage_to_be_modified_1 = class="num">1.0;class=class="str">"cmt">//new percentage class="num">1 to which the gmlpo is modified sinput group "- class="num">2 -" input class="type">class="kw">double inp_balance_percentage_to_activate_the_risk_2 = class="num">5.0;class=class="str">"cmt">//percentage class="num">2 that will be exceeded to modify the risk separated by commas input class="type">class="kw">double inp_percentage_to_be_modified_2 = class="num">0.7;class=class="str">"cmt">//new percentage class="num">2 to which the gmlpo is modified sinput group "- class="num">3 -" input class="type">class="kw">double inp_balance_percentage_to_activate_the_risk_3 = class="num">7.0;class=class="str">"cmt">//percentage class="num">3 that will be exceeded to modify the risk separated by commas input class="type">class="kw">double inp_percentage_to_be_modified_3 = class="num">0.5;class=class="str">"cmt">//new percentage class="num">3 to which the gmlpo is modified sinput group "- class="num">4 -" input class="type">class="kw">double inp_balance_percentage_to_activate_the_risk_4 = class="num">9.0;class=class="str">"cmt">//percentage class="num">4 that will be exceeded to modify the risk separated by commas input class="type">class="kw">double inp_percentage_to_be_modified_4 = class="num">0.33;class=class="str">"cmt">//new percentage class="num">4 class="num">1 to which the gmlpo is modified sinput group "- MDP/Maximum daily profit/Maxima ganancia diaria -" input class="type">bool mdp_is_strict = true; class=class="str">"cmt">//MDP is strict? input class="type">class="kw">double percentage_or_money_mdp_input = class="num">0; class=class="str">"cmt">//percentage or money(class="num">0 => not used MDP) input ENUM_RISK_CALCULATION_MODE mode_calculation_mdp = percentage; class=class="str">"cmt">//Mode calculation Max Daily Profit input ENUM_APPLIED_PERCENTAGES applied_percentages_mdp = Balance;class=class="str">"cmt">//MDP percentage applies to: sinput group "--- Session ---" input class="type">char hora_inicio = class="num">16;class=class="str">"cmt">//start hour to operate(class="num">0-class="num">23) input class="type">char min_inicio = class="num">30;class=class="str">"cmt">//start minute to operate(class="num">0-class="num">59) input class="type">char hora_fin = class="num">18;class=class="str">"cmt">//end hour to operate(class="num">1-class="num">23) input class="type">char min_fin =class="num">0;class=class="str">"cmt">//end minute to operate(class="num">0-class="num">59)
EA 全局变量的落地声明
把风险与下单逻辑收口到全局变量,是这套 EA 跑起来的前提。我们直接引自己写的 Risk_Management.mqh,而不是调用平台默认风控,这样仓位计算能按 prop_firm_balance 与 risk_mode 走自定义规则。 CTrade 负责发单,CRiskManagemet 的实例在构造时就要喂入 mdp_is_strict、get_mode、Magic、risk_mode、prop_firm_balance 五个参数,顺序错一个就会编译报错。 指标句柄分两个:order_block_indicator_handle 接订单区块,hanlde_ma 接 EMA;注意原文把 handle 拼成了 hanlde_ma,复制代码时最好顺手改回,不然后期维护容易看走眼。 tp1/tp2/sl1/sl2 四个 double 数组用来承接指标缓冲区的止盈止损价,日线周线和订单区块周期的收盘时间戳则落在 TiempoBarraApertua、TiempoBarraApertua_1、prev_vela 三个 datetime 变量上。 布尔量 opera 初始为 true,用来在浮亏触限后一键禁交易;start_sesion 与 end_sesion 框定信号扫描的时段。外汇与贵金属杠杆高,这类全局开关最好在策略测试器里先跑几周 tick 数据验证再上实盘。
class="macro">#include <Risk_Management.mqh> CTrade trade; CRiskManagemet risk(mdp_is_strict, get_mode, Magic, risk_mode, prop_firm_balance); class=class="str">"cmt">//--- Handles class="type">int order_block_indicator_handle; class="type">int hanlde_ma; class="type">class="kw">double tp1[]; class="type">class="kw">double tp2[]; class="type">class="kw">double sl1[]; class="type">class="kw">double sl2[]; class=class="str">"cmt">//--- class="type">class="kw">datetime TiempoBarraApertua; class="type">class="kw">datetime TiempoBarraApertua_1; class="type">class="kw">datetime prev_vela; class=class="str">"cmt">//--- class="type">bool opera = true; class="type">class="kw">datetime start_sesion; class="type">class="kw">datetime end_sesion;