MT5和速度在行动 - 页 54 1...474849505152535455565758596061...94 新评论 Slava 2020.10.12 18:34 #531 Roman:好吧,让我重新表述一下。在mql之内大致是可以的,这取决于处理器的时钟频率。 那PWM呢?-一个恒定频率和可变占空比的脉冲信号。 它不是设置了一个常数吗? 首先,阅读什么是WinAPI睡眠 函数,以及它的实际作用 PS Windows不是一个实时系统 Roman 2020.10.12 18:42 #532 Slava:首先,阅读一下什么是WinAPI睡眠函数以及它的实际作用PS Windows不是一个实时系统 咳,WinAPI睡眠与此有什么关系? 当我们谈论微秒级的滑移,对于你的处理器来说,你可以确定定时器的频率并计算出重复的次数。 所以,你可以在mql中写你自己的MicrosecondCount,但是有什么意义呢?标准的就够了。 MT5 и скорость в боевом исполнении 2020.10.10www.mql5.com MT5 - шустрая платформа. Но есть узкие горлышки, которые сводят на нет все старания быстрой торговли... Renat Fatkhullin 2020.10.12 20:30 #533 Roman:咳咳,我不好意思问,WinAPI睡眠与此有什么关系? 当我们在谈论微秒级的滑移,单独来说,对于你的处理器,你可以定义定时器的频率并计算出重复次数。 所以,你可以在mql中写你自己的MicrosecondCount,但是有什么意义呢?标准的就够了。 在没有上下文切换的情况下,你自己的待办事项将100%地吃掉你的核心。 这是一种令人毛骨悚然的编程方法。上帝不允许这样的代码泄露到市场中。 Roman 2020.10.12 20:45 #534 Renat Fatkhullin:在没有上下文切换的情况下,你的等待滑移将100%地吃掉你的核心。这是一种可怕的编程方法。上帝不允许这样的代码泄露到市场中。 也没有人否认这个硬骨头 )) 如果你展示一个上下文切换的例子,也许你可以改进? 这是µsSLEEP(µsRange)的CPU负载,在VirtualBox上,只有2个核心,4个线程。 矿工做的比这更糟糕 )) fxsaber 2020.10.13 10:57 #535 关于交易、自动交易系统和策略测试的论坛图书馆: 序列fxsaber, 2020.10.13 12:54 一个将杀死大多数VPS的EA的例子。 #include <fxsaber\Sequence.mqh> // https://www.mql5.com/ru/code/31446 #define PRINT(A) Print(#A + " = " + (string)(A)) input datetime inFrom = D'2020.09.01'; // С какой даты анализировать историю void OnInit() { SEQUENCE Sequence; // Последовательный запуск расчетов // if (Sequence.Init()) // Раскомментируйте для последовательного выполнения. { MqlTick Ticks[]; PRINT(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_ALL, (long)inFrom * 1000)); PRINT(TerminalInfoInteger(TERMINAL_MEMORY_USED)); Sleep(10000); // Ждем освобождения CopyTicks-данных. } }我正在几个不同符号的图表上运行它。我使用这个脚本,inAmount = 5 来自动完成这个动作。结果。2020.10.13 13:26:53.199 Test9 (AUDCAD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 5406953 2020.10.13 13:26:53.326 Test9 (AUDCAD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 2838 2020.10.13 13:26:53.528 Test9 (EURCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 3430958 2020.10.13 13:26:53.807 Test9 (EURCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 3144 2020.10.13 13:26:53.924 Test9 (EURUSD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 4244747 2020.10.13 13:26:54.214 Test9 (EURUSD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 3464 2020.10.13 13:26:54.344 Test9 (AUDCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 4327679 2020.10.13 13:26:54.702 Test9 (AUDCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 3797 2020.10.13 13:26:54.864 Test9 (GBPCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 5340006 2020.10.13 13:26:55.457 Test9 (GBPCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 4308 2020.10.13 13:26:55.666 Test9 (EURAUD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 7730155 2020.10.13 13:26:55.756 Test9 (EURAUD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 4316终端需要超过4Gb的内存来运行这六个专家顾问系统。请注意,它只需要用于初始化,而不是用于这些EA的操作。想象一下,你启动终端时,Expert Advisors在其中晃来晃去。如果你没有诚实的4Gb的可用内存--这几乎是一场灾难。现在让我们删除源代码中这一行的注释。 if (Sequence.Init()) // Раскомментируйте для последовательного выполнения.因此,我们已经启用了专家顾问的顺序初始化。让我们看一下结果(重新编译后)。2020.10.13 13:27:24.002 Test9 (AUDCAD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 5406980 2020.10.13 13:27:24.021 Test9 (AUDCAD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1234 2020.10.13 13:27:35.407 Test9 (EURUSD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 4244772 2020.10.13 13:27:35.422 Test9 (EURUSD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1095 2020.10.13 13:27:46.886 Test9 (GBPCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 5340072 2020.10.13 13:27:46.905 Test9 (GBPCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1224 2020.10.13 13:27:58.293 Test9 (AUDCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 4327724 2020.10.13 13:27:58.310 Test9 (AUDCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1114 2020.10.13 13:28:09.683 Test9 (EURCHF,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 3430999 2020.10.13 13:28:09.696 Test9 (EURCHF,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1015 2020.10.13 13:28:21.339 Test9 (EURAUD,H1) CopyTicksRange(_Symbol,Ticks,COPY_TICKS_ALL,(long)inFrom*1000) = 7730313 2020.10.13 13:28:21.363 Test9 (EURAUD,H1) TerminalInfoInteger(TERMINAL_MEMORY_USED) = 1519在启动专家顾问系统时,我们已经设法将终端内存消耗减少了2.5Gb以上。VPS崩溃的概率(和薄弱的家庭电脑)已经大大降低。这就是这两个运行的动态变化情况。 顺序启动拉长了整体初始化的时间,但设法使终端不消耗大量的RAM。上图和下图清楚地显示了并行的初始化过程(左边的高峰)和六个连续的初始化过程(中间的六个高峰)。SZY 在实验过程中,发现了一个与 "睡眠 "有关的令人不快的细微差别--见源代码。 我要求在使用CopyTicks后以某种方式允许强制释放内存。而不是制造这样的睡眠拐杖。 fxsaber 2020.10.13 11:19 #536 请推荐一种最便宜的消耗内存的方式来查询给定时间间隔内的tick历史。 Igor Makanu 2020.10.13 18:20 #537 fxsaber: 请推荐最便宜的方式来要求在给定的时间间隔内的蜱虫历史。 在我听来,你不是在寻找一个便宜的,而是一个快速释放内存的方法。 作为一个选项来检查。 - 将动态数组MqlTick Ticks[]包裹在类中,用new创建对象(即也是动态对象),当你不需要它时,就删除它 - 相同的,但有结构,但在本地范围内(或函数或本地块{ } - 或循环与一个迭代?),结构不像类那样好用--我重写了大部分的EA代码,远离了类,用数据结构代替了它们,优化速度明显提高--也许这是一种主观效果--也许新的构建更快。 - 试着在析构器中加入ArrayFree()。 fxsaber 2020.10.13 18:23 #538 Igor Makanu:我认为你不是在寻找一个便宜的,而是一个快速释放内存的方法。 终端不会释放内存。MQL变量与此毫无关系。 Igor Makanu 2020.10.13 18:32 #539 fxsaber:终端没有释放内存。MQL变量与此毫无关系。 如果你强制大小=1呢? 如果你做了什么^ MqlTick Tick[]; MqlTick ZeroTick[1] = {0}; ..... ArrayResize(Tick,1); ArrayCopy(Tick,ZeroTick) fxsaber 2020.10.13 18:36 #540 Igor Makanu:而如果 调用CopyTicks后,终端在内存中保留所有数据几秒钟。以防有人想重读一段蜱虫的历史。 也就是说,终端如此消耗的内存量不取决于MQL变量的大小。 任务是迫使终端机释放内存。 1...474849505152535455565758596061...94 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
好吧,让我重新表述一下。在mql之内大致是可以的,这取决于处理器的时钟频率。
那PWM呢?-一个恒定频率和可变占空比的脉冲信号。
它不是设置了一个常数吗?
首先,阅读什么是WinAPI睡眠 函数,以及它的实际作用
PS Windows不是一个实时系统
首先,阅读一下什么是WinAPI睡眠函数以及它的实际作用
PS Windows不是一个实时系统
咳,WinAPI睡眠与此有什么关系?
当我们谈论微秒级的滑移
,对于你的处理器来说,你可以确定定时器的频率并计算出重复的次数。
所以,你可以在mql中写你自己的MicrosecondCount,但是有什么意义呢?标准的就够了。
咳咳,我不好意思问,WinAPI睡眠与此有什么关系?
当我们在谈论微秒级的滑移
,单独来说,对于你的处理器,你可以定义定时器的频率并计算出重复次数。
所以,你可以在mql中写你自己的MicrosecondCount,但是有什么意义呢?标准的就够了。
在没有上下文切换的情况下,你自己的待办事项将100%地吃掉你的核心。
这是一种令人毛骨悚然的编程方法。上帝不允许这样的代码泄露到市场中。
在没有上下文切换的情况下,你的等待滑移将100%地吃掉你的核心。
这是一种可怕的编程方法。上帝不允许这样的代码泄露到市场中。
也没有人否认这个硬骨头 ))
如果你展示一个上下文切换的例子,也许你可以改进?
这是µsSLEEP(µsRange)的CPU负载,在VirtualBox上,只有2个核心,4个线程。
矿工做的比这更糟糕 ))
关于交易、自动交易系统和策略测试的论坛
图书馆: 序列
fxsaber, 2020.10.13 12:54
一个将杀死大多数VPS的EA的例子。我正在几个不同符号的图表上运行它。我使用这个脚本,inAmount = 5 来自动完成这个动作。
结果。
终端需要超过4Gb的内存来运行这六个专家顾问系统。请注意,它只需要用于初始化,而不是用于这些EA的操作。想象一下,你启动终端时,Expert Advisors在其中晃来晃去。如果你没有诚实的4Gb的可用内存--这几乎是一场灾难。
现在让我们删除源代码中这一行的注释。
因此,我们已经启用了专家顾问的顺序初始化。
让我们看一下结果(重新编译后)。
在启动专家顾问系统时,我们已经设法将终端内存消耗减少了2.5Gb以上。VPS崩溃的概率(和薄弱的家庭电脑)已经大大降低。
这就是这两个运行的动态变化情况。
顺序启动拉长了整体初始化的时间,但设法使终端不消耗大量的RAM。
上图和下图清楚地显示了并行的初始化过程(左边的高峰)和六个连续的初始化过程(中间的六个高峰)。
SZY 在实验过程中,发现了一个与 "睡眠 "有关的令人不快的细微差别--见源代码。
我要求在使用CopyTicks后以某种方式允许强制释放内存。而不是制造这样的睡眠拐杖。
请推荐最便宜的方式来要求在给定的时间间隔内的蜱虫历史。
在我听来,你不是在寻找一个便宜的,而是一个快速释放内存的方法。
作为一个选项来检查。
- 将动态数组MqlTick Ticks[]包裹在类中,用new创建对象(即也是动态对象),当你不需要它时,就删除它
- 相同的,但有结构,但在本地范围内(或函数或本地块{ } - 或循环与一个迭代?),结构不像类那样好用--我重写了大部分的EA代码,远离了类,用数据结构代替了它们,优化速度明显提高--也许这是一种主观效果--也许新的构建更快。
- 试着在析构器中加入ArrayFree()。
我认为你不是在寻找一个便宜的,而是一个快速释放内存的方法。
终端不会释放内存。MQL变量与此毫无关系。
终端没有释放内存。MQL变量与此毫无关系。
如果你强制大小=1呢?
如果你做了什么^
而如果
调用CopyTicks后,终端在内存中保留所有数据几秒钟。以防有人想重读一段蜱虫的历史。
也就是说,终端如此消耗的内存量不取决于MQL变量的大小。
任务是迫使终端机释放内存。