新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1283

 
MakarFX:

我如何确定一个EA给服务器带来 多大的负荷?

在每一个tick,它都会询问Ask, Bid, Spread, TICKVALUE

如果我理解正确,剖析器会有帮助。但是,我们应该明白,负载不等同于负荷。它是花费在请求执行或CPU负载上的时间。如果一个窗口上每个符号有一个专家顾问,那就可以了。但如果在一台机器的10个终端中,有120个窗口,40个符号,那么机器可能会冻结)。

 
Aleksei Stepanenko:

我不知道,你可以在战斗中试试。或者是作为一个选项INT_MAX?


是的,我就是这样计算的。

而从约会到约会,包括周末,则是另一回事。

每秒点数,是的,它是可读的。而在较低的TF上,速度更高,范围更小。

_     ;qstr7_41;_;EURUSD;_TF_;1; Имя файла ;QstrV.csv; Локальное время ;2020.10.23 15:34:25
2020.10.23 14:34:20; [i]= ;13; VTrend[i] = ;25; SumVTrend= ;97; AbsVTrend= ;341; pos= ;8;SumVTrendPos= ;339; neg= ;7; SumVTrendNeg= ;-345
2020.10.23 14:34:20; [i]= ;2; VTrend1[i] = ;272; SumVTrend1= ;17; AbsVTrend1= ;137; pos1= ;2;SumVTrendPos1= ;-84; neg1= ;2; SumVTrendNeg1= ;-84
_     ;qstr7_41;_;EURUSD;_TF_;5; Имя файла ;QstrV.csv; Локальное время ;2020.10.23 15:34:36;
 2020.10.23 14:34:31; [i]= ;15; VTrend[i] = ;414; SumVTrend= ;47; AbsVTrend= ;124; pos= ;9;SumVTrendPos= ;160; neg= ;8; SumVTrendNeg= ;-82
2020.10.23 14:34:31; [i]= ;2; VTrend1[i] = ;-32; SumVTrend1= ;63; AbsVTrend1= ;83; pos1= ;2;SumVTrendPos1= ;37; neg1= ;2; SumVTrendNeg1= ;-32
_     ;qstr7_41;_;EURUSD;_TF_;1440; Имя файла ;QstrV.csv; Локальное время ;2020.10.26 15:42:42;
2020.10.26 14:42:42; [i]= ;14; VTrend[i] = ;-26; SumVTrend= ;3; AbsVTrend= ;9; pos= ;9;SumVTrendPos= ;9; neg= ;7; SumVTrendNeg= ;-11
2020.10.26 14:42:42; [i]= ;1; VTrend1[i] = ;-7; SumVTrend1= ;-7; AbsVTrend1= ;7; pos1= ;1;SumVTrendPos1= ;0; neg1= ;2; SumVTrendNeg1= ;-7
 
Valeriy Yastremskiy:

如果我理解正确,剖析器会有帮助。但你必须明白,负载并不等同于负荷。这是花在查询执行上的时间或机器上的CPU负载。如果一个窗口上每个符号有一个专家顾问,那就可以了。而如果在一台机器的10个终端中,有120个窗口,40个符号,那么机器可能会冻结)。

我们已经讨论过如果要多次访问MQL4的终端数据,那么OrderSelecthttps://www.mql5.com/ru/forum/342989#comment_16743716

你可以用同样的方法测试获得当前的价格--我想你也可以用它来获得每格100500次,因为输出将每秒增加数百万次。


市场观察窗口中的符号越多,终端本身的负荷就越大,而且,如果你从很多不同的符号中调用数据,那么你也会得到滞后。

也就是说,如果你合理地使用终端,没有什么会被冻结--在市场观察窗口中,有十个你使用的符号


我没有检查过你可以同时打开多少个图表,但我认为如果你把历史记录限制在1000条,那么我认为终端可能会打开几十个图表窗口而没有任何问题。

 

大家好!

我已经开始研究mql5(在mql4之后)。在mql4中有一个叫做日期和时间的函数组。五个人中有同一个小组。但这组功能在五人中要比在四人中少得多。5中没有任何函数可以返回当前小时、分钟的值......。和其他功能。
例如,在第四章中有一个Hour()函数,它返回当前小时的值。五没有这样的功能。
QUESTION

五中的哪些函数与Hour() 类似,以及四中的日期和时间函数组中不在五中类似组的其他函数

谢谢你的帮助。

 
Igor Makanu:

我们已经讨论过是否有必要从MQL4中反复访问终端数据,那么OrderSelecthttps://www.mql5.com/ru/forum/342989#comment_16743716

我认为也可以在每个勾选中使用100500次,因为输出将在每秒增加数百万次。


市场观察窗口中的符号越多,终端本身的负荷就越大,而且,如果你从很多不同的符号中调用数据,那么你也会得到滞后。

也就是说,如果你合理地使用终端,没有什么会被冻结--在市场观察窗口中,有十个你使用的符号


我没有检查过你可以同时打开多少个图表,但我认为如果你把历史记录限制在1000条,那么终端可能会打开几十个图表窗口而没有任何问题。

(谢谢你的提醒))。我的意思是,在合理的请求下,一切都应该工作,即低成本(在执行时间和CPU负载方面)请求)。

 
ANDREY:

大家好!

我已经开始研究mql5(在mql4之后)。在mql4中有一个叫做日期和时间的函数组。五个人中有同一个小组。但这组功能在五人中要比在四人中少得多。5中没有任何函数可以返回当前小时、分钟的值......。和其他功能。
例如,在第四章中有一个Hour()函数,它返回当前小时的值。五没有这样的功能。
QUESTION

五中的哪些函数与Hour() 相似,以及四中的日期和时间函数组中不在五中相似组的其他函数

谢谢你的帮助。

使用https://www.mql5.com/ru/docs/dateandtime/timecurrent

第二个版本的函数调用

datetime  TimeCurrent(
   MqlDateTime&  dt_struct      // переменная типа структуры
   );
一般来说,它是https://www.mql5.com/ru/docs/dateandtime/timetostruct
 
给4K的一个提示。如何在图表上返回鼠标点击的坐标,最好是按条形编号。我只能找到抛出脚本的坐标。
 
Valeriy Yastremskiy:

谢谢,这提醒了我))))。是的,当时很多事情我都不明白)我只想说,只要有合理的请求,一切都应该是可行的。 这些是成本低廉(执行时间和CPU负载)的请求)。

如果代码是 "脏 "的,你可以搞砸任何系统

如果它被合理地使用,在每一个tick中,对Ask/Bid价格的访问甚至发生几十次,那么它将不会影响EA的性能(最多1-2%)。

即使用资源(或调用系统功能/终端环境)的逻辑应该是,如果该算法意味着每个tick访问Ask/Bid价格几千次,那么....。最有可能的是,你应该重新考虑算法本身,或者说,在计算算法之前,先记住Ask/Bid 的值。




Valeriy Yastremskiy:
请为4k提供建议。鼠标在图表上点击的坐标如何返回,最好是用一个条形号码。只找到他们投掷脚本的坐标。

可能寻找ChartXYToTimePrice https://docs.mql4.com/ru/chart_operations/chartxytotimeprice

只讨论了https://www.mql5.com/ru/forum/353726

这里是另一个也在讨论点击率的主题https://www.mql5.com/ru/forum/344607

 
Igor Makanu:

如果该算法意味着每一个tick都要参考Ask/Bid价格几千次,那么....最有可能的是,你应该重新考虑算法本身,或者说,在计算算法之前,先记住一次Ask/Bid值




也许寻找ChartXYToTimePrice https://docs.mql4.com/ru/chart_operations/chartxytotimeprice

刚刚讨论了https://www.mql5.com/ru/forum/353726

这里是另一个也在讨论点击率的主题https://www.mql5.com/ru/forum/344607

一般来说,如果我们在tick上得到了价格,我们可以用它们工作到OnTick的结束,如果不是很关键的话。和限制器,以帮助防止滑移)。

我想点击一个蜡烛图并把它的值写进一个文件。

鼠标移动

 
Valeriy Yastremskiy:

一般来说,如果我们在tick上得到了价格,我们可以用它们工作到OnTick的结束,如果不是很关键的话。和限制器,以帮助防止滑移)

我想点击一个蜡烛并把它的值保存在一个文件中。

鼠标移动

也许这就是你想确定酒吧价格和时间的方法。

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if(id == CHARTEVENT_CLICK)
   {
      int window = 0;
      datetime time;
      double   price;
      if(ChartXYToTimePrice(0, (int)lparam, (int)dparam, window, time, price))
      {
         Print("time = ", time, " ,price = ", price);
      }
   }
}
或者说,这些是在图表上的时间+价格值中的鼠标点击坐标,条形图应该通过iBarShift()定义。