AUDCAD : real ticks begin from 2020.07.1500:00:002020.07.1500:01:09 buy limit 1 AUDCAD at 0.84993 (0.94914 / 0.94993)
2020.07.1500:01:09 market buy 1 AUDCAD (0.94914 / 0.94993)
2020.07.1500:01:09 deal #2 buy 1 AUDCAD at 0.94993 done (based on order #3)
2020.07.1500:01:09 deal performed [#2 buy 1 AUDCAD at 0.94993]
2020.07.1500:01:09 order performed buy 1 at 0.94993 [#3 buy 1 AUDCAD at 0.94993]
2020.07.1523:59:58 position closed due end of test at 0.94646 [#3 buy 1 AUDCAD 0.94993]
2020.07.1523:59:58 deal #3 sell 1 AUDCAD at 0.94646 done (based on order #4)
2020.07.1523:59:58 deal performed [#3 sell 1 AUDCAD at 0.94646]
2020.07.1523:59:58 order performed sell 1 at 0.94646 [#4 sell 1 AUDCAD at 0.94646]
2020.07.1523:59:58 order canceled due end of test [#2 buy limit 1 AUDCAD at 0.84993]
final balance 99999653.00 pips
2020.07.1523:59:58 CheckTicket(4) = true2020.07.1523:59:58 CheckTicket(3) = true2020.07.1523:59:58CheckTicket(2) = false
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
厌倦了 对快照的调试。终于使它变得完美。一个顾问,什么都没有。二--完美。20 - 灾难:CPU低于100%。HistorySelect滞后很多毫秒。
似乎MT5并不打算同时操作许多专家顾问。
你是在写一个压力测试 还是写一个通常的专家顾问?
最有可能的是正是在一个基地的多线程压力测试。所以我再重复一遍。
关于交易、自动交易系统和交易策略测试的论坛
MT5和速度在行动
Renat Fatkhullin, 2020.09.16 12:47
如果我理解正确,这不是一个EA,而是每个符号的压力测试器。这就完全改变了情况。而且它显示了对初始条件的隐藏。
也就是说,在8(4+HT)个CPU上,16个线程(+N个工作终端线程并行)不停地、无延迟地闯入一个同步的符号数据库对象。读/写锁被混在一起,因为有不断的勾选写入。
通常在这样的情况下,根据处理器的陡峭度和它对线程的掌握程度,每个线程可以花60%到80%的时间等待。
而且这与任务的类型无关。
如果你真的在20个线程中为一个资源不停地战斗,有几个选择。
仔细阅读盒子。如果N个线程击中一个同步对象,空等待将达到60-80%。
而多线程效率的极限将是8-12个线程左右。随着线程数的增加,采样率会下降。在2600k上,效率限制甚至更低。
你是在写压力测试 还是写普通的专家工作?
普通
相反,它是一个多线程的压力测试,在一个基础上。所以我再重复一遍。
如果事实上你正在为20个线程中的单一资源做不间断的战斗,有几个选择。
仔细阅读盒子。如果N个线程击中一个同步对象,空等待将达到60-80%。
而多线程效率的极限将是8-12个线程左右。随着线程数的增加,采样率会下降。在2600k上,效率限制甚至更低。
完全缓存历史。但即使这样也需要调用HistorySelect(0, INT_MAX)。
作为一个实验,我削减了交易逻辑所需的所有对历史的调用。CPU上的负载已经减少了很多。
一般来说,如果有20个机器人,在历史上到处调用它们,意味着你只用一个终端就可以造成一场灾难。关于几个终点站,我们甚至不能谈论。
而且感觉同步对象不仅是历史。看来,SymbolInfoTick、CopyTicks和其他东西。
总之,我甚至不能让五个终端机运行,每个终端机上有十几个机器人。
看了看刹车剖面图,很无奈。
普通
完全缓存的历史。但即使这样也需要调用HistorySelect(0, INT_MAX)。
作为一个实验,我切断了交易逻辑所需的所有历史调用。CPU上的负载已经减少了很多。
一般来说,如果有20个机器人,那么在历史上到处调用它们,意味着你只用一个终端就能造成灾难。关于几个终点站,我们甚至不能谈论。
而且感觉同步对象不仅是历史。看来,SymbolInfoTick、CopyTicks和其他东西。
总之,我甚至不能让五个终端机运行,每个终端机上有十几个机器人。
看了看刹车剖面图,很无奈。
没有证据,也没有数字数据。
1) 每个EA每秒进行多少次HistorySelect查询?
2)到底是哪些功能变慢了?
3)日志?
4)机器人的原理是什么?
总而言之,如果有20个机器人,那么解决他们身上的故事,就是只用一个终端就能造成一场灾难。多个终端是不可能的。
也许恰恰相反--每个终端将支持自己的同步对象,而且不会有20个EA的队列给它?
尝试在1个终端上运行1个机器人,看看结果会很有趣。
也许恰恰相反--每个终端将支持自己的同步对象,不会有20个EA的队列给它?
尝试在1个终端上运行1个机器人,看看结果很有意思。
不幸的是,这个实验的结果不会回答这个问题,该怎么做?
不幸的是,这个实验的结果不会回答这个问题,该怎么做?
重新考虑交易机器人的概念
添加
我有3个真实终端+1个演示终端,我在其中工作
每个终端有42个机器人,使用3到4个字符的OnBoorEvent。
加上每0.5秒的定时器触发+每个机器人访问终端的全局变量。
而且它使用了8.34GB的32GB内存和6.7%的CPU
而且,除了交易时段开始时的TM5服务器外,没有任何东西会变慢。
没有证据,也没有任何数字数据。
1)每位专家每秒进行多少次HistorySelect查询?
2)到底是哪些功能变慢了?
3)日志?
4)机器人背后的原理是什么?
我很难回答这些问题,因为即使是我自己也无法掌握什么是慢下来的。剖析器甚至没有运行。他们的测量是在作弊,因为滞后已经来自CPU。不幸的是,通过快照和缓存减少对环境函数的访问,并没有带来预期的效果。我正在等待一个剖析器,它将能够编译专家顾问。
在我忙碌的时候,我发现策略测试器中的交易历史如此混乱。
其结果是
我几乎没有注意到这个错误,并且已经尝试写了一个多小时的回放。这段代码很白痴,但它显示了这个问题。我不知道是否有类似的东西不在测试器里,而在终端里,我不知道。
搜索字符串:Oshibka 013。
ZS b2626 - 固定。
重新考虑交易机器人的概念
只有一个机器人可以交易所有的符号?
只有一个机器人可以交易所有的符号?
不同的机器人,但都大致建立在相同的模式上。
一个码头同时有42个工作,在三个码头上,126个大约是400个符号。
添加
要重复(我)
每个机器人使用3到4个字符的OnBoorEvent。
加上每0.5秒触发一个计时器+每个机器人访问 终端的全局变量。
8.34 GB的32GB内存和6.7%的CPU使用率
而除了TM5服务器(或Openreach硬件)在交易时段开始时,没有任何东西会变慢。
不同的机器人,但都大致按照相同的方案建造。
一次有42个工作涉及到一个终端,而在三个终端上--126个大约是400个字符
添加
要重复(我)。
每个机器人使用3到4个字符的OnBoorEvent。
加上每0.5秒触发一个计时器+每个机器人访问 终端的全局变量。
8.34 GB的32GB内存和6.7%的CPU使用率
而且,除了TM5服务器(或Open的铁器)在交易时段开始时,没有任何东西会变慢。
奇怪的是,对我来说,情况恰恰相反。
我的设备有4个终端,我已将专家顾问的数量减少到约200个,我已切断所有的OnBooks,切换回OnTick并更新了我的硬件,但问题与fxsaber相同。
但我的开放者在早上已经很久没有出现滞后现象了。而他们曾经是什么!?有时长达75秒 :)