Balance_Reset - MetaTrader 5 库







我对此库进行了重大更新,我用它来优化我的专家顾问。此版本经过简化,但您可以轻松扩展它以包含您可能想要自动化的日常任务。例如,您可以在自营公司挑战失败后添加交易限制,或者在挑战成功或失败后在周一恢复交易。
代码末尾概述了对该库的所有更改和添加。该框架非常灵活,可以适应您的特定需求,无论是添加更复杂的交易限制逻辑、安排交易,还是根据优化结果微调性能。
请随意根据您的日常任务进一步定制它!
该库专为测试 MetaTrader 5 中的 Expert Advisor (EA) 而设计,特别关注专有公司交易要求。目标是模拟交易环境,交易者必须满足一定的盈利和亏损阈值才能通过公司的挑战。每当达到指定的损益百分比时,EA 都会通过将账户余额重置为初始值来调整账户余额,这模仿了许多自营公司的规则。
以下是使用 BalanceReset.mqh 库的 EA 交易的完整结构。此设置将余额重置逻辑直接集成到 EA 中,同时通过#包括指示:
#include// 包含余额重置库 //+------------------------------------------------------------------+ //|专家初始化函数 | //+------------------------------------------------------------------+ 整数 初始化时() { 初始化平衡(); // 初始化起始余额 返回 初始化成功; }//+------------------------------------------------------------------+ //|专家勾选功能 | //+------------------------------------------------------------------+ 空白 勾选() { 检查余额并重置(); // 根据阈值检查并重置余额}//+------------------------------------------------------------------+ //|专家去初始化函数 | //+------------------------------------------------------------------+ 空白 解初始化(常量 整数原因) { PrintBalanceResetResults(); // 将余额重置结果输出到日志}
可调整的损益阈值
输入 双倍的利润阈值 =8.0; // 利润阈值,默认8% 输入 双倍的损失阈值 = -6.0; // 损失阈值,默认为-6%
2.初始余额初始化
空白初始化余额() { 初始余额 =帐户信息双(账户余额); // 存储初始余额}
3. 平衡重置逻辑
空白检查余额并重置() { 双倍的当前余额=帐户信息双(账户余额); 如果(初始余额==0){ 初始余额=当前余额;// 第一个勾号,存储初始余额 } 双倍的利润百分比 = (当前余额 - 初始余额) / 初始余额 *100.0; 如果(利润百分比 >= 利润阈值) { 双倍的提款金额 = 当前余额 - 初始余额; 如果(测试者提款(提款金额)) { 成功重置++; 数组调整大小(重置次数,数组大小(重置次数) +1); 重置次数[数组大小(重置次数)-1] =时间当前(); 打印(“利润已达,余额已重置为初始值。”); } } 如果(利润百分比 <= 损失阈值) { 双倍的存款金额=初始余额-当前余额; 如果(测试者存款(存款金额)) { 不成功的_重置++; 数组调整大小(重置次数,数组大小(重置次数) +1); 重置次数[数组大小(重置次数)-1] =时间当前(); 打印(“损失已达。余额已重置为初始值。”); } } }
4.结果记录
空白打印余额重置结果() { 打印格式(“成功重置利润的次数:%d”,成功重置); 打印格式(“成功重置丢失次数:%d”,不成功的重置); 为了(整数我=1;我 <数组大小(重置次数);我++) { 整数days_ Between_resets = (重置时间[i] - 重置时间[i-1]) /86400;// 一天 86400 秒 打印格式(“重置 %d 和重置 %d 之间的天数:%d 天”, 我, 我 +1,重置之间的天数); } }

该库有助于模拟符合常见自营交易公司要求的交易环境。通过在达到预定义的盈亏阈值时重置余额,交易者可以更有效地测试其策略并根据自营公司规则分析 EA 的性能。
代码更改和添加的说明:
与旧代码相比,新代码包括多项增强和添加。以下是新增和修改内容的详细说明:
新输入参数:
最大损失和最小赢得:
输入 双倍的最大损失=1; // 最大损失 输入 双倍的分钟_韩元=1; // 最小赢
目的:这些输入参数允许您设置最大允许损失 ( max_loss ) 和所需的成功利润重置的最小次数 ( min_won )。它们提供了对优化条件的更多控制。
附加变量:
重置状态[]:
细绳重置状态[];// 存储每次复位状态的数组
目的:添加了一个数组来存储每个余额重置事件的状态(“利润重置”或“损失重置”)。
停止优化:
布尔值停止优化 =错误的;
目的:用于指示何时应根据某些条件停止优化的标志。
布尔值坏结果 =错误的;// 指示错误优化结果的标志
目的: 将优化结果标记为不利的标志,可用于影响 OnTester() 中的结果。
CheckBalanceAndReset() 中的修改:
录音重置状态:
数组调整大小(重置状态,数组大小(重置状态)+1);// 调整数组大小以记录重置状态重置状态[数组大小(重置状态)-1] =“利润重置”;// 记录状态
目的:当利润重置发生时,状态会记录在reset_status[]数组中。
使用优化停止条件处理损失重置:
如果(测试者存款(存款金额)) { 不成功的_重置++; // 增加失败重置的计数器 // 记录复位时间和状态 数组调整大小(重置状态,数组大小(重置状态)+1); 重置状态[数组大小(重置状态)-1] =「损失重置」; { 停止优化 =真的; 检查停止条件(); // 检查是否应该停止优化 } 打印格式(“损失已达。余额已重置为初始值。”); }
目的:丢失重置后,代码现在递增 unsuccessful_resets ,记录状态,将 stopOptimization 设置为 true ,并调用 CheckStopCondition() 以确定是否应停止优化。
新功能检查停止条件():
空白检查停止条件() { 如果(停止优化) { 打印(“停止当前优化过程”); 坏结果 =真的; // 将结果标记为坏 测试器停止(); } }
目的:此函数检查 stopOptimization 是否为 true,如果是,则将结果标记为错误并使用 TesterStop() 停止当前优化过程。
新功能OnTester():
双倍的 测试仪() { // 如果成功重置的次数小于所需的最小值或设置了 badResult 如果(successful_resets < min_won || badResult) { 打印(“优化失败:返回非常不利的结果。”); // 返回一个非常不利的结果来破坏优化过程 返回-999999; } // 计算成功和不成功重置之间的差异 整数重置差异=成功重置-不成功重置; // 检查差值是否为负数 如果(重置差异<0) { 打印(“成功和不成功的重置之间存在负差异。返回非常不利的结果。”); // 如果差值为负,则返回非常不利的结果 返回-999999; } // 将差异输出到日志 打印格式(“重置成功和失败之间的差异:%d”,重置差异); // 返回差异作为测试器的结果 返回重置差异; }

目的:此功能为优化过程提供自定义标准。它检查成功重置的次数是否满足最低要求或者结果是否不好。它计算成功和不成功重置之间的差异,并返回该值,除非差异为负,在这种情况下,它会返回一个非常不利的结果来影响优化器。

增强功能在 PrintBalanceResetResults() 中:
// 输出每次重置的日期以及它们之间的天数 为了(整数我=1;我 <数组大小(重置次数);我++) { // 计算重置之间的天数 整数days_ Between_resets = (重置时间[i] - 重置时间[i-1]) /86400;// 一天 86400 秒 // 打印重置日期、状态以及它们之间的天数 打印格式(“重置 %d:%s (%s),重置 %d:%s (%s),间隔天数:%d 天”, 我,字符串时间(重置时间[i-1],TIME_DATE), 重置状态[i-1], 我+1,字符串时间(重置时间[i],TIME_DATE), 复位状态[i], 重置之间的天数); }
目的:该函数现在不仅输出重置次数,还详细说明每个重置事件,包括日期、状态和重置之间的天数。这提供了更全面的重置活动日志。
变量初始化和使用:
初始余额检查:
如果(初始余额==0) { 初始余额=当前余额; }
目的:确保在第一个价格变动时正确设置initial_balance。
利润百分比计算:
双倍的利润百分比 = (当前余额 - 初始余额) / 初始余额 *100.0;
补充摘要:
控制优化过程:
增强的日志记录和跟踪:
通过 OnTester() 与优化器集成:
附件下载
📎 balancereset.mq5 (2.19 KB)
📎 balancereset.mqh (12.34 KB)
Source: MQL5 #52163
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
