- 显示:
- 196
- 等级:
- 已发布:
- 2025.04.04 10:54
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
快速 JavaScript 版报告 库,用于通过MT4Orders 或Virtual 实现 MT4 风格的交易指令。
运行速度比 Report 快 10 倍,NTML 文件更小,可上传和显示多达 540 万行报告(截图如下)。
功能:(与报告相同)
- 显示 MT4、MT5、其测试器或虚拟 测试器执行的交易。
- 显示图表
- 在浏览器中打开包含报告的 HTML 文件(需要使用 DLL 和 #define REPORT_BROWSER 命令的权限)。
与报告的区别:
- 在 MT5 侧代码中,报告的所有数据均以数组形式立即输出到文件中,而无需用 HTML 代码组装行。这大大提高了速度并减少了文件大小。
- 统计计算、图表绘制和生成包含交易行的 HTML 代码都是在浏览器端的 JavaScript 代码中完成的。分页器可显示必要的页面。
- 图表按时间刻度显示交易,而不是按交易编号统一刻度显示。因此,我们可以看到一个智能交易系统在第 1 周进行了 1000 笔交易,并在其后的 52 周内一直处于不活跃状态。
下面是一个 5 年内有 3386 笔交易的示例:
两张图表上都显示了相同的交易。
上面的图表在交易之间设置了统一的步长(如 MetaQuotes 测试器现在显示的一样)。看起来很有希望。
下图是按时间尺度 绘制的,显示 Expert Advisor 在 5 年中只进行了几周的交易。水平方向上的 1 个像素 = 1 周。
根据下图,可以立即看出,一开始会有 2 年的不活跃期,然后 Expert Advisor 会进行几周的交易,然后又是 2.5 年的不活跃期。这样的交易并不像第一张图表给人的印象那么有趣。 - 将不含滑点、不含佣金、不含佣金和滑点的期权平衡图替换为相同期权的利润 (P/L) 图(不含平衡操作)。
- 添加了一个单独的余额图表,显示余额操作的存款/取款情况。这样您就可以分别看到盈亏表上的交易操作和余额操作的金额。
- 点击任何图表,都将打开一个交互式 Google.charts 图表。您可以放大查看交易详情。4 张 P/L 图表,100,000 笔交易,开放时间约 10 秒。
-
翻转图表被一个包含买入、卖出盈亏及其金额的图表所取代。通过这种方式,您可以了解自己的策略是看涨还是看跌。如果其中一个交易方向无利可图,您可以决定将其关闭。下面显示的是交易品种收盘价的图表,可以方便地跟踪汇率上升时买入如何获利,汇率下降时卖出如何亏损,反之亦然。如果有多个交易品种,它们的价格会显示在一起,最好通过过滤器只选择其中一个品种,以便只查看其价格。
-
添加了开盘、收盘时的滑点和累计滑点及其总和的图表,该想法来自https://www.mql5.com/ru/blogs/post/760817。
- 稍微重新排列了一下报告的列,但有一个复选框可以像 Report-e 一样重新排列。如果你更习惯于这样做的话。
- 在虚拟环境中工作时,可以多次调用 QuickReport,为每个虚拟环境(如果有多个虚拟环境)和/或 MT5 真实测试器生成报告。
使用示例:
- 简单的 MT4Orders
#include <MT4Orders.mqh> #define REPORT_BROWSER // Open report in browswer automatically. Require DLL. //#include <Report.mqh> #include <MT4Orders_QuickReport.mqh>// void OnInit(){} void OnTick(){ strategy (); } void OnDeinit(const int reason ){ QuickReport("report", true); } int TimeHour ( datetime time ){return((int)((time / 3600) % 24));}//current hour in day.每小时 3600 秒 void strategy (){ string Symb = _Symbol; MqlTick Tick; if (SymbolInfoTick(Symb, Tick)){ if(TimeHour(TimeCurrent())<23 && TimeHour(TimeCurrent())>0 ){return;} OrderSend(Symb, OP_BUY, 10, Tick.ask, 0, Tick.bid, Tick.bid, NULL, 1000); OrderSend(Symb, OP_SELL, 10, Tick.bid, 0, Tick.ask, Tick.ask, NULL, 1000); } }
- 大型测试代码
- 使用虚拟
#include <MT4Orders.mqh> #include <fxsaber\Virtual\Virtual.mqh> #define REPORT_BROWSER // Open report in browswer automatically. Require DLL. //#include <Report.mqh> #include <MT4Orders_QuickReport.mqh> double OnTester() { //or OnDeinit() for (int v = 0 ; v <= VIRTUAL::Total(); v++){if (VIRTUAL::SelectByIndex(v)){QuickReport("report_"+(string)v, true, v);}} //显示每个测试人员的报告 return(AccountInfoDouble(ACCOUNT_BALANCE)); }
- 调用参数说明
void QuickReport(string file_name, bool is_open_file_in_browser=true, int virtual_number=0, bool hide_account_and_name=false, bool common_path=false, bool fileANSI=true){...}
file_name - 用于记录的文件名
is_open_file_in_browser - 计算完成后在浏览器中自动打开文件(需要 DLL 权限)。在优化过程中,文件不会自动打开,因为可能会有数千个文件。
virtual_number -(与 Virtual 一起使用)虚拟测试器的编号(-1 - 将自动确定,0 - MT5 测试器,>0 - 虚拟测试器)
hide_account_and_name - 隐藏账号 和名称
common_path - 保存到终端的常用文件夹。为防止文件在优化过程中被其他代理覆盖,文件名中会添加代理编号(3000、3001......)。如果保存在测试人员文件夹中(假),则保存在执行计算的代理的文件夹中。
fileANSI - 以 ANSI 编码或 UNICODE 保存。UNICODE 文件的大小比 ANSI 大 2 倍,处理时间也更长,因此如果上传大量数据(例如 1 GB),使用 ANSI 会更经济。如果需要,添加 UNICODE 是为了与第三方服务兼容。
540 万笔交易的报告示例:
(在我的电脑上,虚拟报告超过 10 万行就会耗尽内存并挂起,因此我制作了 JavaScript 版本)。
该报告显示的是 Firefox 浏览器。Chrome 浏览器会挂起,因为它需要更小的文件。
一个文件可以上传超过 540 万行,但 Firefox 浏览器无法处理更多。
加载该报告时,浏览器使用了约 6GB 内存(处理时间约为 1 分钟),然后释放了内存,之后报告就显示在页面上了:(8-10 万行的报告使用了 5-6GB 内存)。
带有缩放功能的详细图表。
点击任何图表都会打开该图表的交互式图表,并可放大查看详细内容。
有两个选项:
- 默认为免费的Google.charts
- 您可以连接Highcharts,作为商业产品,它更快、更方便,但程序员只能在开发过程中免费使用;发布项目/产品时,必须购买许可证并每年更新。更多信息请点击https://shop.highcharts.com/
您可以选择Logarithmic -对数 刻度(如果余额呈指数增长,可能会有用)。对于Highcharts,您还可以选择Ordinal - 统一步长(如 MetaQuotes 测试报告)。更改这些项目后,您需要再次单击所需的图表以应用所选选项。
来自Google.chart 的示例:(使用鼠标滚轮缩放)。
来自Highcharts 的示例:(通过鼠标选择必要区域来更改缩放比例)。
已执行的 MT5 挂单
对于因触发挂单而出现的订单,类型字段以深蓝色显示挂单类型(买入限价、卖出限价、买入止损或卖出止损)、从设置到触发订单的时间(秒)以及激活订单/头寸的类型。这些信息只在 MT5 终端或测试仪上显示,虚拟测试仪或 MT4 不提供这些信息。
按小时和星期显示的盈亏图。
与 MQ 测试仪不同,盈利和亏损不是在发生时显示,而是按进入交易的时间显示。这样就更容易理解在某一小时进场大多是无利可图的,只需关闭这一小时的进场即可。
此外,还制作了买卖图表。
如果点击其中任何一个图表,就会看到按小时和天数分列的精确金额表。您还可以通过复选框禁用输入的小时和天数--图表和表格将被重建,您无需额外测试即可评估结果。它与 Fxsaber 中的BestInterval 类似,但更粗略(步长为 1 小时),且不带自动化功能。增加了 M10 间隔,以减少步长。
在这些图表中,可以看到在较小的测试期内,每小时或每天都有一些利润爆发。上图显示的是 1 个月的测试,呈上升趋势。因此买入是盈利的,卖出是亏损的。如果将测试时间延长到一年或更长,届时两个方向上的几个大趋势都会过去,所有的东西都会变得均匀,通常都是无利可图的,因此你不太可能关掉某些东西,从而获得显著的利润变化。
以下是同一策略经过 1 年测试后的结果:(几乎所有的东西都应该关掉)。
因此,它很难成为您策略的基础。
订单过滤。
添加了许多筛选器,可按不同参数显示订单。
买入、卖出、买入限价、卖出限价、买入止损、卖出止损、余额 - 您可以从报告中删除任何类型的订单。
Symbols - 将显示所有使用的工具列表,您可以只选择必要的工具。
Magic - 您可以只显示指定 Magic 的订单
Min Lot, Max Lot - 您可以选择所需手数的订单
Negative Slippage - 您可以分别显示开仓或平仓订单的负滑点
Swap - 将显示掉期 > 0 的订单。0
Min LengthTime - 持续时间超过指定时间(以天数、小时数、分钟数和秒数指定)的订单
Max LengthTime - 持续时间少于指定时间的订单
Open Time - 从指定日期开始到结束的订单开仓时间
Close Time - 从指定日期开始到结束的订单平仓时间
TP、SL - 以触发 TP 或 SL 结束的订单
Profits, Losses - 处于盈利或亏损状态的订单(不包括佣金和掉期,它们会使最终盈利为负)
Rejects - 未执行的订单。
重置按钮允许您将筛选器重置为默认值,并在不进行筛选的情况下显示所有订单。
附加选项:
- 您可以指定前向测试的开始日期,应用后将计算完整图表、指定日期前图表(BackTest) 和指定日期后图表(ForwardTest)的统计数据。图表将在该日期显示一条垂直线。
- 旧的列顺序--列顺序将按照报告库中的顺序重新排列
附注:交易评论越多,可显示的行数越少。一份有 540 万行的报告中,除了 "测试结束 "外,没有任何注释。因此,如果报告的交易量超过 400 万笔,最好不要添加注释。
附注:可在 MT5 和 MT4 中使用。感谢 fxsaber 为 MT4 所做的修改。
改进选项:
- 您可以尝试将报告卸载为二进制文件,然后在浏览器中读取,这样也许可以处理 540 万行的大数据。但由于安全限制,我们必须手动选择二进制文件。也就是说,我们无法在测试后立即自动打开报告。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/47816

基于标准指标 iCHO(柴金振荡器,CHO)和自定义指标 "CCIDualOnMA "的策略

基于 CDialog 类的面板。对当前符号进行操作。删除、设置止盈、设置一组头寸的盈亏平衡点