程序库: MT4 订单快速报告 - 页 3

 
Forester #:

什么浏览器?有多少交易?我有 100,000 笔交易,大约需要 10 秒钟思考,但还是能显示出来。

Chrome 浏览器。40K 行。从第二次点击开始,有时会出现图表。Turnover-graphics formation 对 CPU 的负荷最大。

 
Варианты улучшения:
  • 您可以尝试将报告上传到二进制文件中,然后在浏览器中读取,这样也许可以在行数较多的情况下工作。但由于安全限制,我们必须手动选择二进制文件。也就是说,我们无法在测试后立即自动打开报告。
这里是 通过文件来实现的。自动打开没有问题。

  • 我认为您不仅可以通过 MT4Orders 上传交易,还可以通过普通的 MQL5 代码上传交易。

这很困难

MQL5 Ордера истории - Извлечь цену открытия и закрытия каждой транзакции в истории сделок
MQL5 Ордера истории - Извлечь цену открытия и закрытия каждой транзакции в истории сделок
  • 2023.11.20
  • www.mql5.com
Каждая позиция имеет уникальный идентификатор, который присваивается всем сделкам. Идентификатор позиции - это уникальное число, которое присваивается каждой вновь открытой позиции и не изменяется в течение всей ее жизни. Идентификатор позиции указывается в каждом ордере , которая ее открыла
 
fxsaber #:

铬。40K 行。从第二次点击开始,有时会出现图表。成交量图形形成对 CPU 的负荷最大。

试试 Mozilla。它可以显示并增加到 100 000。我试过 700 000 - 可以显示,但不能再缩放了,它会消耗所有内存。

fxsaber#:
这里是 通过文件完成的。自动打开没有问题。

需要几天时间。如果 500 万不够,我会推迟。现在还没有关系。

fxsaber#:
这会很艰难

也在抽屉里。添加一行

#include <MT4Orders.mqh>
更容易)
 
Forester #:

如果 500 万还不够的话

为什么要使用这样的 html 声明?

 
顺便说一下,该库 90% 是跨平台的--可在 MT4 和 MT5 上运行。要使其在 MT4 上运行,还需要做一些工作。
 
无需更改该库即可获取Signals 服务 锁定账户的 html 报表。
 
fxsaber #:
顺便说一下,该库 90% 是跨平台的--可在 MT4 和 MT5 上运行。要使其在 MT4 上运行还需要做一些工作。
如果有人完成了这项工作,我将更新代码,让大家都能使用。

fxsaber#:
这里是 通过文件完成的。自动打开没有问题。

您需要创建一个 JavaScript 文本文件,从 HTML 页面调用该文件(顺便说一下,您不能将其保存到单独的文件中,而是要将其添加到页面代码中,就像我的版本一样)。
我描述了一种不是将数据保存到文本文件,而是保存到二进制文件的变体。它不能作为 JavaScript 文件自动加载,因为它不是 JS 代码,必须在光盘上选择该文件才能开始读取。也许这样就能读取超过 560 万行的数据。

fxsaber#:

为什么要这样处理 HTML 统计数据?

目前还没有必要。但如果有需要,我们会有一个计划来实现它。

fxsaber#:

没有意识到。不幸的是,google.charts 的速度非常慢,与 highcharts 相比也很不方便。

我把它换成了 highchart。结果发现效果更好:google.charts 在显示 700,000 笔交易时会冻结,而 highchart 在显示这些交易时没有特别的刹车,而且可以放大到单笔交易。

您可以选择Ordinal - 统一步长(如 MetaQuotes 测试报告),或Logarithmic -对数 刻度(如果余额呈指数增长,这将非常有用)。更改这些项目后,您需要再次点击所需的图表以应用所选选项。
 
Forester #:
如果有人最终确定了,我会更新代码,供大家使用。
#ifndef __MQL5__

#property strict

long OrderOpenTimeMsc( void ) { return(OrderOpenTime() * 1000); }
long OrderCloseTimeMsc( void ) { return(OrderCloseTime() * 1000); }

double OrderOpenPriceRequest( void ) {return(OrderOpenPrice()); }
double OrderClosePriceRequest( void ) {return(OrderClosePrice()); }

enum ENUM_ACCOUNT_MARGIN_MODE
{
  ACCOUNT_MARGIN_MODE_RETAIL_NETTING,
  ACCOUNT_MARGIN_MODE_EXCHANGE,
  ACCOUNT_MARGIN_MODE_RETAIL_HEDGING  
};

#define SYMBOL_CUSTOM (-1)

#define ACCOUNT_MARGIN_MODE (-1)
#define ACCOUNT_CURRENCY_DIGITS (-2)

long AccountInfoInteger2( const int Property )
{
  switch (Property)
  {
    case ACCOUNT_MARGIN_MODE:
      return(ACCOUNT_MARGIN_MODE_RETAIL_HEDGING);
    case ACCOUNT_CURRENCY_DIGITS:
      return(2);      
  }
  
  return(AccountInfoInteger(Property));
}

#define AccountInfoInteger AccountInfoInteger2

// string BASEPATH_ = (::TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL4\Files\\\\");

#endif // #ifndef __MQL5__

#define  REPORT_BROWSER            // 在浏览器中自动打开报告。需要 DLL。
#include <MT4Orders_QuickReport.mqh> //https://www.mql5.com/zh/code/47816

void OnStart()
{  
  QuickReport("QuickReport", true);
}
 
Forester #:

我改用了 highchart。结果发现效果更好:google.charts 在显示 700,000 笔交易时会冻结,而 highchart 在显示这些交易时没有特别的刹车,而且可以放大到单笔交易。

这很酷!

您可以选择Ordinal - 统一步长(如 MetaQuotes 测试人员报告),或Logarithmic -对数 刻度(如果余额呈指数增长,它将非常有用)。更改这些项目后,您需要再次点击所需的图表以应用所选选项。

有用。


年表似乎坏了。

 
fxsaber #:
感谢您提供的代码。已将其添加到 \MT4Orders_QuickReport.mqh
fxsaber#:
时间顺序似乎被破坏了。


只有 MQ 测试程序报告有这个问题。
我将包括限价操作在内的所有操作都放入了数组,以便绘制图表。它们不会改变平衡,因此不会造成太大干扰。

结果发现,MQ 测试仪将删除的限价订单转到存档时有延迟:

订单

99 1005 2023.05.29 00:03:59.281 2023.05.29 00:03:59.331

两个刻度之后进入故事。本应在00:03:59.331 之后,00:03:59.380 时错过,00:03:59.430 时移至历史记录。
命令

123 1005 2023.05.29 00:03:59.331 2023.05.29 00:03:59.380
1 tick 之后进入存档。上面的截图中有更多例子。


关闭时间是正确的,但显然他们在一个单独的数组中设置了限制时间,而且不是每个时间点都会处理向历史记录的转移。

在您的虚拟测试器中,一切都很清楚:(数组是共享的,并在其自己的 tick 中发送到历史记录中)

我删除了图表上的限制输出,现在这些时间错误的条形图不存在了。