错误、漏洞、问题 - 页 1850 1...184318441845184618471848184918501851185218531854185518561857...3184 新评论 fxsaber 2017.04.11 16:01 #18491 这是一个错误吗?struct STRUCT { int a; STRUCT() {} // Если закомментировать, ошибка пропадает }; void OnStart() { STRUCT Struct = {1}; // cannot be initialized with initializer list } kaus_bonus 2017.04.11 18:19 #18492 在使用造型器时 出现了一个错误?让我们假设我们是用标签写的。//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2012, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ input int x=0; #define TWO_DIM (10000) //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- double massive[][TWO_DIM]; } //+------------------------------------------------------------------+ 没有错误。然后我们使用造型器,我们得到//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2012, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ input int x=0; #define TWO_DIM(10000) //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- double massive[][TWO_DIM]; } //+------------------------------------------------------------------+ '10000' - unexpected in macro formal parameter list bug.mq5 7 17 '[' - invalid index value bug.mq5 13 25 即,打字员擦除TWO_DIM(10000) 之间的空格。 fxsaber 2017.04.12 06:08 #18493 编译错误template <typename T> struct STRUCT { template <typename T1> STRUCT( T1 Value ) {} // 'STRUCT<int><int>' - declaration without type }; void OnStart() { STRUCT<int> Struct(0); // 'STRUCT<int>' - cannot to apply function template } fxsaber 2017.04.12 06:38 #18494 一个小小的提示。绕过赋值运算符template <typename T> struct STRUCT_COPY { T Value; STRUCT_COPY( const T& tValue) { this = (STRUCT_COPY)tValue; } }; struct STRUCT { int i; void operator =( const STRUCT& ) { this.i = 5; } }; #define PRINT(A) ::Print(#A + " = " + (string)(A)); void OnStart() { STRUCT Struct; Struct.i = 1; PRINT(Struct.i); STRUCT StructCopy1 = Struct; PRINT(StructCopy1.i); // Обходим void STRUCT::operator=(const STRUCT&) STRUCT_COPY<STRUCT> StructCopy2(Struct); PRINT(StructCopy2.Value.i); }结果Struct.i = 1 StructCopy1.i = 5 StructCopy2.Value.i = 1 fxsaber 2017.04.12 12:27 #18495 什么是正确的方式?struct STRUCT { template <typename T> void operator []( int ) {} }; void OnStart() { STRUCT Struct; Struct.operator[]<int>(0); // Нормально Struct[0]<int>; // Ошибка } kaus_bonus 2017.04.12 15:38 #18496 另一个问题 - 我知道,在MT5中,第一次复制缓冲区CopyClose 的时间取决于。1.如果之前你根本没有收到某个股票的报价,没有打开图表等。(取决于ping、网速、硬盘、Bases/Broker/history/ticker/cache/文件的准备情况)2017.04.11 11:27:38.828 время копирования буфера (EURUSD,M1) проход = 0 время= 8355581 2017.04.11 11:27:38.828 время копирования буфера (EURUSD,M1) проход = 1 время= 10832. 如果之前已经收到了报价,然后终端被重新加载,只要没有打开过这个股票的图表(准备文件Bases/Broker/History/Ticker/Cache/)。2017.04.11 11:29:14.672 время копирования буфера (EURUSD,M1) проход = 0 время= 599396 2017.04.11 11:29:14.734 время копирования буфера (EURUSD,M1) проход = 1 время= 259 ///////////////////////////// 2017.04.12 19:32:46.489 время копирования буфера (FULT,M5) проход = 0 время= 98167 2017.04.12 19:32:46.557 время копирования буфера (FULT,M5) проход = 1 время= 155 2017.04.12 19:32:46.557 время копирования буфера (FULT,M5) проход = 2 время= 14时间比P.1少10-15倍用于比较МТ4的访问时间,根据第2点,即在终端复位后2017.04.12 19:30:38.831 время копирования буфера EURUSD,M1: проход = 2 время= 276 2017.04.12 19:30:38.831 время копирования буфера EURUSD,M1: проход = 1 время= 434 2017.04.12 19:30:38.831 время копирования буфера EURUSD,M1: проход = 0 время= 2260 2017.04.12 19:30:38.816 время копирования буфера EURUSD,M1: initialized 2017.04.12 19:30:38.666 время копирования буфера EURUSD,M1 inputs: Pair=USDCAD;也就是说,MT4终端重启后的时间要少几个数量级。这一次,我检查了Windows上的所有内容,没有发现SSD!这让我很高兴。如果我得到引号,终端没有重启,数据被访问了2017.04.11 11:35:30.648 время копирования буфера (EURUSD,M1) проход = 0 время= 89 2017.04.11 11:35:30.648 время копирования буфера (EURUSD,M1) проход = 1 время= 42我没有理解错吧,加载缓存后,终端在进一步请求时需要的时间大大减少(从第二个请求开始)?我们能否以某种方式减少终端重启后第一次调用的时间,使其与MT4一样?代码是在https://www.mql5.com/ru/forum/1111/page1870#comment_4856899 Ошибки, баги, вопросы www.mql5.com Форум алго-трейдеров MQL5 Renat Fatkhullin 2017.04.12 16:45 #18497 kaus_bonus:我还有一个问题 - 我知道在MT5上,同一个CopyClose缓冲区的第一次复制时间取决于。你有一个非常肮脏的测试方法,因为根本就没有环境和播放方法的描述。未说明。窗口中的条形限制终端数据库中的实际数据量到底是哪台服务器,数据库在磁盘上吗? 所有数据必须保证在磁盘上。测试的平台和比特率(在葡萄酒下? 需要详细说明)。开窗没有这一点,结论是没有根据的。 例如,看看欧元兑美元M1- MT5有超过600万条(如果在图表的无限模式),但MT4有多少?实际数据库中的几万个M1条? kaus_bonus 2017.04.12 17:20 #18498 Renat Fatkhullin:你的测试方法非常混乱,因为根本没有对环境和播放方法的描述。未说明。窗口中的条数限制终端数据库的实际数据量服务器到底是什么,基数是在磁盘上吗? 所有的数据必须保证在磁盘上。测试的平台和比特率(在葡萄酒下? 需要详细说明)。开放窗口的可用性没有这一点,结论是没有根据的。 我的帖子中的大部分问题都被问到了,没问题,我现在就把所有的数据给你。首先是对какой точно сервер, находятся ли базы на диске? все данные обязаны быть гарантированно на диске.在MQ-demo服务器上,数据被加载,正如我们在上一篇文章中谈到的第2点和第3点。关于第1点,一切都很清楚,没有任何问题--正如它所写的--数据被加载,在指定的路径上形成缓存。лимиты баров в окнеMT4MT5фактические объемы данных в базах терминаловMT4MT5платформа и битность тестирования (под вайном? нужно указывать детально)win XP 32bit,MT的所有版本均为最新版本。наличие открытых оконMT4 - 打开1个图表,用另一个符号检查MT5 - 打开1个图表,用另一个符号检查重复,重新加载终端,将脚本发送到图表上,选择其他符号,在重新加载终端之前,已经加载了该符号的数据。MT42017.04.12 21:18:31.575 время копирования буфера EURUSD,M1: проход = 2 время= 36 2017.04.12 21:18:31.575 время копирования буфера EURUSD,M1: проход = 1 время= 282 2017.04.12 21:18:31.575 время копирования буфера EURUSD,M1: проход = 0 время= 1871 2017.04.12 21:18:31.575 время копирования буфера EURUSD,M1: initialized 2017.04.12 21:18:31.405 время копирования буфера EURUSD,M1 inputs: Pair=GBPUSD; MT52017.04.12 21:19:47.735 время копирования буфера (EURUSD,H1) проход = 0 время= 303951 2017.04.12 21:19:47.735 время копирования буфера (EURUSD,H1) проход = 1 время= 29 2017.04.12 21:19:47.735 время копирования буфера (EURUSD,H1) проход = 2 время= 25 Renat Fatkhullin 2017.04.12 18:47 #18499 这是我的测试,更详细,更准确。 条件描述 MetaTrader 4 build 1065MetaTrader 5 x64 build 1580硬件和操作系统 Windows 10 Pro x64, Intel Xeon E5-2690 v3 @ 2.60GHz, RAM: 32 Gb, SSD Disk贸易服务器MetaQuotes-DemoMetaQuotes-Demo设置中的图表限制条10 00010 000历史设置中的限制条 10 000 000没有限制欧元兑美元的实际条数,M1 338.2万653.8万核实的符号和周期欧元兑美元,M1欧元兑美元,M1开放式图表GBPUSD,只有M1,脚本也被扔在上面只有英镑兑美元,M1,同样的脚本被扔在上面。结果是冷的,在终端开始后#0 pass, 1000 records in 680 msc #1 pass, 1000 records in 2 msc #2 pass, 1000 records in 2 msc #0 pass, 1000 records in 113497 msc #1 pass, 1000 records in 3 msc #2 pass, 1000 records in 3 msc 结果是温暖的,第一次运行后立即进行第二次运行#0 pass, 1000 records in 13 msc #1 pass, 1000 records in 2 msc #2 pass, 1000 records in 2 msc #0 pass, 1000 records in 14 msc #1 pass, 1000 records in 2 msc #2 pass, 1000 records in 2 msc 测试文件附在后面,所有的时间都是以微秒为单位(不是毫秒,1毫秒=1000微秒)。现在是结论。唯一的区别是图表缓存的初始化速度 - MT4为0.6毫秒,MT5为113毫秒 这里没有问题--提升总是要花费资源的。 特别是当使用概念上不同的架构时:MT5有更复杂的缓存(cache\*.hc文件是由原始的*.hcc建立的),以便于扩展+强制与服务器数据完全同步控制(二进制*.hcc块)。重复的请求显示出相同的速度--每次数据复制2-3微秒。 在这两个终端的实施中没有出现任何故障,一切都工作得很快。 附加的文件: TestCopyClose.mq4 2 kb TestCopyClose.mq5 3 kb Errors, bugs, questions kaus_bonus 2017.04.12 19:07 #18500 谢谢你的答复。总的来说,结果就像我在帖子中显示的那样。我一直在用一个普通的测试。然而,MT4和MT5之间的结果几乎相差200倍(由于-必须控制与服务器数据的完全同步??和ping?).我在这里发帖之前已经习惯了,这可能是终端的一个特点。我甚至可以忍受它,但在某些时候是很困难的。例如,由于MT中没有市场扫描器,我写了一个小脚本,将符号添加到市场观察中,但价格只能通过CopyClose获得,在符号被添加到观察中之前,它们不能通过SymbolInfoDouble或MqlTick获得,所以当 用很大的赌注运行时, 这个脚本会 "无限 "长。这只是一个例子。 1...184318441845184618471848184918501851185218531854185518561857...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在使用造型器时 出现了一个错误?
让我们假设我们是用标签写的。
没有错误。
然后我们使用造型器,我们得到
即,打字员擦除TWO_DIM(10000) 之间的空格。
结果
什么是正确的方式?
1.如果之前你根本没有收到某个股票的报价,没有打开图表等。(取决于ping、网速、硬盘、Bases/Broker/history/ticker/cache/文件的准备情况)
2. 如果之前已经收到了报价,然后终端被重新加载,只要没有打开过这个股票的图表(准备文件Bases/Broker/History/Ticker/Cache/)。
时间比P.1少10-15倍
用于比较МТ4的访问时间,根据第2点,即在终端复位后
也就是说,MT4终端重启后的时间要少几个数量级。
这一次,我检查了Windows上的所有内容,没有发现SSD!这让我很高兴。
如果我得到引号,终端没有重启,数据被访问了
我没有理解错吧,加载缓存后,终端在进一步请求时需要的时间大大减少(从第二个请求开始)?
我们能否以某种方式减少终端重启后第一次调用的时间,使其与MT4一样?
代码是在https://www.mql5.com/ru/forum/1111/page1870#comment_4856899
你有一个非常肮脏的测试方法,因为根本就没有环境和播放方法的描述。
未说明。
没有这一点,结论是没有根据的。
例如,看看欧元兑美元M1- MT5有超过600万条(如果在图表的无限模式),但MT4有多少?实际数据库中的几万个M1条?
你的测试方法非常混乱,因为根本没有对环境和播放方法的描述。
未说明。
窗口中的条数限制
没有这一点,结论是没有根据的。
我的帖子中的大部分问题都被问到了,没问题,我现在就把所有的数据给你。
首先是对
在MQ-demo服务器上,数据被加载,正如我们在上一篇文章中谈到的第2点和第3点。关于第1点,一切都很清楚,没有任何问题--正如它所写的--数据被加载,在指定的路径上形成缓存。
MT4
MT5
MT4
MT5
win XP 32bit,MT的所有版本均为最新版本。
MT4 - 打开1个图表,用另一个符号检查
MT5 - 打开1个图表,用另一个符号检查
重复,重新加载终端,将脚本发送到图表上,选择其他符号,在重新加载终端之前,已经加载了该符号的数据。
MT4
MT5
这是我的测试,更详细,更准确。
测试文件附在后面,所有的时间都是以微秒为单位(不是毫秒,1毫秒=1000微秒)。
现在是结论。
这里没有问题--提升总是要花费资源的。
特别是当使用概念上不同的架构时:MT5有更复杂的缓存(cache\*.hc文件是由原始的*.hcc建立的),以便于扩展+强制与服务器数据完全同步控制(二进制*.hcc块)。
在这两个终端的实施中没有出现任何故障,一切都工作得很快。
谢谢你的答复。
总的来说,结果就像我在帖子中显示的那样。
我一直在用一个普通的测试。
然而,MT4和MT5之间的结果几乎相差200倍(由于-必须控制与服务器数据的完全同步??和ping?).
我在这里发帖之前已经习惯了,这可能是终端的一个特点。我甚至可以忍受它,但在某些时候是很困难的。例如,由于MT中没有市场扫描器,我写了一个小脚本,将符号添加到市场观察中,但价格只能通过CopyClose获得,在符号被添加到观察中之前,它们不能通过SymbolInfoDouble或MqlTick获得,所以当 用很大的赌注运行时, 这个脚本会 "无限 "长。这只是一个例子。