欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

Balance_Reset - MetaTrader 5 库

author emer | 580 人阅读 | 0 人评论 |

Balance_Reset - library for MetaTrader 5

Balance_Reset - library for MetaTrader 5

Balance_Reset - library for MetaTrader 5

Balance_Reset - library for MetaTrader 5

Balance_Reset - library for MetaTrader 5

Balance_Reset - library for MetaTrader 5

Balance_Reset - library for MetaTrader 5

我对此库进行了重大更新,我用它来优化我的专家顾问。此版本经过简化,但您可以轻松扩展它以包含您可能想要自动化的日常任务。例如,您可以在自营公司挑战失败后添加交易限制,或者在挑战成功或失败后在周一恢复交易。

代码末尾概述了对该库的所有更改和添加。该框架非常灵活,可以适应您的特定需求,无论是添加更复杂的交易限制逻辑、安排交易,还是根据优化结果微调性能。

请随意根据您的日常任务进一步定制它!

该库专为测试 MetaTrader 5 中的 Expert Advisor (EA) 而设计,特别关注专有公司交易要求。目标是模拟交易环境,交易者必须满足一定的盈利和亏损阈值才能通过公司的挑战。每当达到指定的损益百分比时,EA 都会通过将账户余额重置为初始值来调整账户余额,这模​​仿了许多自营公司的规则。

以下是使用 BalanceReset.mqh 库的 EA 交易的完整结构。此设置将余额重置逻辑直接集成到 EA 中,同时通过#包括指示:

#include   // 包含余额重置库

//+------------------------------------------------------------------+
//|专家初始化函数                                   |
//+------------------------------------------------------------------+
整数 初始化时()
{
    初始化平衡();  // 初始化起始余额    返回 初始化成功;
}//+------------------------------------------------------------------+
//|专家勾选功能                                            |
//+------------------------------------------------------------------+
空白 勾选()
{
    检查余额并重置();  // 根据阈值检查并重置余额}//+------------------------------------------------------------------+
//|专家去初始化函数                                 |
//+------------------------------------------------------------------+
空白 解初始化常量 整数原因)
{
    PrintBalanceResetResults();  // 将余额重置结果输出到日志}


可调整的损益阈值

输入 双倍的利润阈值 =8.0;  // 利润阈值,默认8%
输入 双倍的损失阈值 = -6.0;  // 损失阈值,默认为-6%

Balance_Reset - library for MetaTrader 5

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,重置之间的天数);
    }
}

Balance_Reset - library for MetaTrader 5

该库有助于模拟符合常见自营交易公司要求的交易环境。通过在达到预定义的盈亏阈值时重置余额,交易者可以更有效地测试其策略并根据自营公司规则分析 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”,重置差异);

    // 返回差异作为测试器的结果    返回重置差异;
}

Balance_Reset - library for MetaTrader 5

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

Balance_Reset - library for MetaTrader 5

增强功能在 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],
                重置之间的天数);
}

Balance_Reset - library for MetaTrader 5

目的:该函数现在不仅输出重置次数,还详细说明每个重置事件,包括日期、状态和重置之间的天数。这提供了更全面的重置活动日志。

变量初始化和使用:

初始余额检查:

如果(初始余额==0)
{
    初始余额=当前余额;
}

目的:确保在第一个价格变动时正确设置initial_balance。

利润百分比计算:

双倍的利润百分比 = (当前余额 - 初始余额) / 初始余额 *100.0;

补充摘要:

控制优化过程:

增强的日志记录和跟踪:

通过 OnTester() 与优化器集成:


附件下载

📎 balancereset.mq5 (2.19 KB)

📎 balancereset.mqh (12.34 KB)

Source: MQL5 #52163

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录