文章 "连续前行优化 (第八部分): 程序改进和修复" - 页 2

 
Andrey Azatskiy:

关于 "没有数据可创建 "的错误,您确定 EA 中包含了自动上传和报告生成功能吗?这里有两种选择,一种是您没有在 EA 代码中包含自动卸载和生成报告的功能,另一种是 EA 的交易结果没有通过您设置的优化过滤器。

根据我的理解,我已经连接了卸载功能,并在智能交易系统中添加了行:

#include<Trade\Trade.mqh>
#define  CUSTOM_ON_TICK // 告诉上传系统我们自己实现了 OnTick 回调
#include <History manager/AutoUpLoader2.mqh> // 包括 CAutoUploader

#define  TESTER_ONLY
一切都按照参数运行。优化结果在测试仪中可视化,智能交易系统将结果写入文件。但只是历史记录。前向传递没有记录。优化结果窗口中也没有任何记录。
 
Good Beer:

根据我的理解,我连接了卸载,在 EA 中添加了字符串:

一切都按照参数运行。优化在测试仪中可视化,EA 将结果写入文件。但只是历史记录。前向传递没有记录。优化结果窗口中什么都没有。

如果使用了 "CUSTOM_ON_TICK",则需要在 OnTick 方法中(最开始)添加以下代码:

CAutoUploader2::OnTick(); // 如果定义了 CUSTOM_ON_TICK

将 OnTick 重命名为 MyOnTick 或其他名称,并在 OnInit 中写入连接 :

CAutoUploader2::SetCallback(MyOnTick, ENUM_CALLBACK_TYPE::CB_ON_TICK);
 
Good Beer:

你搞错了。你的优化时间是 12:00 到 12:00。我还没找到可以更改的地方。

正因为如此,我们失去了历史第一天的 12 个小时,而优化了远期的 12 个小时。正因为如此,远期被提前了一天,因为这一天被历史记录占用了。

由于一周有 7 天,因此优化期必须分为 7 天。历史进程在周一 0:00 结束,而远期在周一 0:00 开始。事实证明,我们在周一并不进行测试,而是进行前瞻。没有时间机器

时间以外国格式(MM.DD.YYYY HH:MM)显示,但以我们的格式(DD.MM.YYYY)设置。
时间不是 12:00 pm = 00:00。

由于我们指定的时间波等于 DD.MM.YYYY.00:00:00,如果我们指定相同的时间,测试仪将无法理解我们需要从下一个日期开始测试,相反,它将从同一日期开始测试,我们将得到相同的时间机器。这就是我们回溯一天的原因。不过,你可以重写设置时间的逻辑,只需修改位于类 "AutoFrame "中的方法"public void Calculate(DateTime From,DateTime Till,uint history,uint forward) "即可。该方法位于类 "AutoFillInDateBordersM"中。该类的描述文件路径为 "MetaTrader-Auto-Optimiser/Metatrader Auto Optimiser/Model/AutoFillInDateBordersM.cs"。

在当前版本中是这样实现的:
public void Calculate(DateTime From, DateTime Till, uint history, uint forward)
        {
            if (From >= Till)
                throw new ArgumentException("Date From must be less then date Till");

            List<KeyValuePair<OptimisationType, DateTime[]>> data = new List<KeyValuePair<OptimisationType, DateTime[]>>();

            OptimisationType type = OptimisationType.History;

            DateTime _history = From;
            DateTime _forward = From.AddDays(history + 1);

            DateTime CalcEndDate()
            {
                return type == OptimisationType.History ? _history.AddDays(history) : _forward.AddDays(forward);
            }

            while (CalcEndDate() <= Till)
            {
                DateTime from = type == OptimisationType.History ? _history : _forward;
                data.Add(new KeyValuePair<OptimisationType, DateTime[]>(type, new DateTime[2] { from, CalcEndDate() }));

                if (type == OptimisationType.History)
                    _history = _history.AddDays(forward + 1);
                else
                    _forward = _forward.AddDays(forward + 1);

                type = type == OptimisationType.History ? OptimisationType.Forward : OptimisationType.History;
            }

            if (data.Count == 0)
                throw new ArgumentException("Can`t create any date borders with setted In sample (History) step");

            DateBorders?.Invoke(data);
        }
 
Nguyen Tien Duong:

您好,您的系列文章 我很有帮助,我不擅长 c#,所以我正试着从您的课程中学习。

我下载了第 4 至第 7 部分的附件,但我无法创建 "Metatrade Auto Optimiser "项目:


这是我第一次看到你的 程序界面,当优化模式被禁用时,它能成功启动 mt5,而当我打开它时,却 出现了 如图所示的 错误



请帮我解决这个问题,谢谢



您需要在专家中添加上传选项。要做到这一点,请使用文件"/Data/MQL5/Experts/Test Expert/New uploading variant/SimpleMA.mq5 "作为示例,或编译它并用于测试。

 
Andrey Azatskiy:

如果您使用了 "CUSTOM_ON_TICK",则需要在 OnTick 方法中(最开始)添加以下代码 :

很抱歉我的愚钝;您能不能不要使用标准的 "OnTick()"?

 
Andrey Azatskiy:

时间以国外格式显示

当然,我会尝试重写。不是时间格式的问题,而是向前的句号偏右了。也许是我的终端设置为 24 小时格式,导致了错误。

 
Good Beer:

请原谅我的愚钝;是否可以使用标准的 "OnTick()"?

一切都可以自定义。研究一下文件 "History manager/AutoUpLoader2.mqh"(历史记录管理器/AutoUpLoader2.mqh)和一个使用新数据上传格式的示例,一切都会变得更加清晰。

如果在您的信息中描述了"CUSTOM_ON_TICK"--这意味着您说的 OnTick 是标准的,但也意味着您必须注意 OnTick 开头的代码字符串

CAutoUploader2::SetCallback(MyOnTick, ENUM_CALLBACK_TYPE::CB_ON_TICK);

在 OnTick 方法的开头。

 

您好、


非常感谢你的这个项目。我相信它会非常有用。

我刚刚开始使用它,但在 "Metatrader Auto Optmiser .exe "上选择货币时遇到了问题。是否可以使用另一种货币来代替默认货币?

除了现有的选项(卢布、美元、欧元、瑞士法郎)之外,没有写入新货币的选项。


谢谢。

 
Marinho10:

你好


非常感谢你的这个项目。我相信它会非常有用。

我刚刚开始使用它,在 "Metatrader Auto Optmiser .exe "上选择货币时遇到了一个问题。是否可以使用另一种货币来代替默认货币?

除了可用的选项(卢布、美元、欧元、瑞士法郎)之外,没有写入新货币的选项。


谢谢。

您好。

您必须编辑自动优化程序的代码并重新编译。
1. 在Visual Studio 中打开程序。
2. 打开文件 "AutoOptimiserVM.cs"
3. 在第 41 行 - 以下代码负责收集货币。编辑它

new OptimiserSetting( " Currency", new []{ " RUR", " USD", " EUR", "GBP", " CHF"}),
4. 重新编译程序,您就会看到 "AutoOptimiserVM.cs"文件。重新编译程序,您将在组合框中看到您的货币。

 
我要求作者录制一段视频,展示该项目的 不同用途。