Все предопределенные периоды графиков имеют уникальные идентификаторы. Идентификатор PERIOD_CURRENT означает текущий период графика, на котором запущена mql5-программа.
//--- создадим хэндл индикатораif(type==Call_iRSI)
handle=iRSI(name,period,ma_period,applied_price);
//--- индикаторный буферdouble rsi_buffer[];
//--- заполняем часть массива iRSIBuffer значениями из индикаторного буфера под индексом 0if(CopyBuffer(ind_handle,0,0,amount,rsi_buffer)<0)
{
//--- если копирование не удалось, сообщим код ошибкиPrintFormat("Не удалось скопировать данные из индикатора iRSI, код ошибки %d",GetLastError());
//--- завершим с нулевым результатом - это означает, что индикатор будет считаться нерассчитаннымreturn(false);
}
我对它进行了一些重新设计
(最好不要这样使用宏;)
我对它进行了一些重新设计
(所以最好不要使用宏;)
在测试时,我尽可能地混淆代码,以防止优化器抛出空循环。
你有
// for(int i = 0; i < 5; i++) sum += u.param[i];MQL执行的优化可能会提前终止第一个循环,因为计算出的值没有被使用,所以必须在SpeedTest()之后用结果做一些事情 - 这个循环
我用注释的循环检查了它,我没有扔掉它,但在另一个测试中我可能会崩溃。
宏是一个品味问题,我已经测试了很多次,它是有效的,我不认为用手写同样的东西有什么意义。
UPD: 找到了我读到的现代编译器现在如何工作的地方,信息量相当大
https://habr.com/ru/post/431688/
https://habr.com/ru/post/47878/
代码给出了手柄的iRSI 值,tp 总是只有10,但价格和图形也在变化。
iRSI(_Symbol,PERIOD_H1,14,PRICE_CLOSE)
构建2652
代码给出了手柄的iRSI 值,tp 总是只有10,但价格和图形也在变化。
iRSI(_Symbol,PERIOD_H1,14,PRICE_CLOSE)
构建2652
你已经得到了指示器手柄,它是10
接下来,你需要得到右边栏上的数值
阅读帮助,或在论坛上搜索答案--他们有很多。
你已经得到了指示器手柄,它是10
接下来,你需要得到右边栏上的数值
阅读帮助,或在论坛上搜索答案--有很多这样的答案。
明白了。我将研究缓冲器。这很奇怪,我有一种感觉,一切都应该按原样工作,也许我把它和mql4混淆了。
奇怪的是,我在谷歌上搜索,在mql5中找不到它,无法获得指标的数据。
啊哈,根据你的例子,正如我所理解的那样,指标RSI的值最终是在一个如下形式的变量中
检查了。
2020.10.15 21:48:01.401 SpeedTst (EURUSD,H1) tst 1 : : loops=10000000000 ms=10864370
2020.10.15 21:48:12.264 SpeedTst (EURUSD,H1) tst 2 : : loops=10000000000 ms=10862287
差异并不显著,如果我们以相反的顺序进行测试,结果很可能会相反。
不重要
在测试中包括rand()是不对的,因为这个函数比其他命令消耗的资源多得多。
我认为这将是一个更正确的测试。
结果。
幸运的是,我毕竟把它放在了错误的马身上。工会的速度要快一些。它们在工作中更方便,代码也更易读。
在测试中包括rand()几乎是不正确的,因为这个函数比其他命令的资源密集程度高一个数量级。
不太重要
rand()的执行时间是恒定的,很可能是一个普通的C++函数,谷歌 "rand c++源代码"
你必须初始化它,但如果你用常数初始化它,你可能会遇到优化问题
总的来说,我不理解对rand()的反感。
一个选择是用类似这样的方法来初始化。
将是快速的。
运行了你的脚本,我认为不正确。
主要的时间是将代码加载到高速缓存中,然后再加载到处理器中。
并加上系统定时器的 离散性
我们得到...几乎是一个随机数。
你需要长时间的测试,大约100500次,我认为。
在测试中包括rand()不太可能是正确的,因为这个函数消耗的资源要比其他命令多一个数量级。
我认为这将是一个更正确的测试。
结果。
幸运的是,我还是赌错了马。工会的速度要快一些。它们在工作中更方便,而且代码更易读。
一次为一次,而且是在第一场胜利的距离,(就像第一种方法已经删除了从短到长的转换线)。
不太重要
rand()的执行时间是恒定的,很可能是一个普通的C++函数,谷歌 "rand c++源代码"
你必须初始化它,但如果你用常数初始化它,你可能会遇到优化问题
总的来说,我不明白为什么不喜欢rand()。
作为一个变体,以类似这样的方式进行初始化。
将是快速的重点是,你应该准确地测量你需要测量的东西,而不是任何无关紧要的东西。
关键是要准确地测量所需的内容,没有任何额外的东西。
不
如果有重复的代码片段,你就会得到优化测试!
rand()执行多长时间有什么区别?
让它执行2/3的测试时间,主要的是rand()的时间应该是不变的。
您的MQL代码将使用系统的MQL-函数,对吗?- 测试一个完美的代码有什么意义?