错误、漏洞、问题 - 页 1851

 
kaus_bonus:

谢谢你的答复。

总的来说,结果就像我在帖子中显示的那样。

我一直在用一个普通的测试。

不是作弊,这两个系统的条件是一样的。


然而,MT4和MT5之间的结果几乎相差200倍(由于-必须控制与服务器数据的完全同步??和ping?).

在MT4中大约0.6ms,我还会想办法的。显然,那里的数据已经预先准备好了,因此这个数字并没有显示真实的成本。

MT4有一个相当不同的意识形态,实际上终端为每个脚本/专家在系统层面上复制了大量的数据,从MQL4代码中出来。因此,在MQL4中进行的测量通常不能证明数据接收的实际资源消耗。当然,这些费用是存在的,但它们是在另一个层面上--系统对它们负责。

很明显,当你的任务扩展到无限大的数据流(深度历史,数以万计的工具)时,MT4机制(为每个机器人创建市场数据的副本)无法应用。因此,我不得不大幅改变和改进MQL5,摆脱了Open/High/Low/Close的直接访问,改用CopyXXX函数。考虑到MT5的数据规模,专家顾问为600万个条形图建立欧元兑美元M1 副本的成本太高。

MT5/MQL5采用按需加载数据的策略,没有提前复制,这意味着有更好的机会从MQL5代码中衡量实际成本。

在113毫秒内将数据库带入内存、检查同步和准备MT5中一个复杂对象的缓存是可以接受的。

 
kaus_bonus:

例如,由于MT没有市场筛选器,我写了一个小脚本,将符号添加到市场观察中,价格只能通过CopyClose获得,既不能通过SymbolInfoDouble,也不能通过MqlTick获得,直到符号被添加到观察中,所以这个脚本在运行时数量 非常大,运行时间无限长。这只是作为一个例子。

工具不需要被添加到市场概览中,就可以获得它们的历史。对符号数据的任何引用都会触发背景数据的同步。

现在有一个问题,就是我们使用了过多的缓存,整个图表数据库被提升到了它的全部深度,即使是最新的数据被请求。这导致检查数百个图表的筛选器出现大量内存超限。

任务已经被设定为改变这一策略,并在距离请求的最远日期不超过500条的范围内提取数据。这将使市场筛选器的撰写不费吹灰之力。

 
fxsaber:

什么是正确的方式?


你问,你答:)嗯,是的,它是。
 
Алексей Тарабанов:

你问,你答:)嗯,是的,这就对了。
我从未见过简略的模板操作员电话。
 
fxsaber:
我仍然没有看到缩短后的模板操作员电话。

我已经很久没有用结构工作了。如果你需要启动整个结构数组元素,将是一个字符串操作。而你启动的那个转换后的字符串 的整数元素是正确的,这就是编译器报告的内容。如果你想启动、比较或以其他方式处理结构的数组,请问它们在MQL中是如何表示/存储的。这并不复杂,而且能大大加快工作进度。
 
Алексей Тарабанов:
我需要知道哪个语法条目是这个的简写版本
Struct.operator[]<int>(0);
 
fxsaber:
我需要知道哪个语法条目是这个的简写版本
结构[0]。
 
Комбинатор:
结构[0]。

对谁,如何
 
Комбинатор:
结构[0]。
为了不浏览页面,我将复制代码

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2017.04.12 14:27

struct STRUCT
{
  template <typename T>
  void operator []( int ) {}
};

void OnStart()
{
  STRUCT Struct;
  
  Struct.operator[]<int>(0); // Нормально
  Struct[0]<int>;            // Ошибка
}

这两个电话是不同的。

Struct.operator[]<int>(0);
Struct.operator[]<MqlTick>(0);

每个条目都应该有一个相应的缩写条目。哪一个?

 
fxsaber:
我需要知道哪个语法条目是这个的简写版本

没有条目可以提供你想要的东西。从根本上说。在语义上。