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

 

测试器中的专家顾问有一个问题。我正在对1分钟的数据进行测试。我自己用分钟数据计算较高TF的随机数。

自2001年以来,会议记录的历史已被下载。在 "图表 "选项卡中设置历史中的最大条数,并显示。

图表上的整个历史是滚动的。

问题是,正如调试打印所显示的那样,无论我从哪一天开始测试,最大的条数都是

在测试的第一条杠上的Bars变量(开始时)总是1001或1002。Bars的值在每一个下一个条形图中增加1。

因此,在开始时不可能计算出更高的TF。

有一个解决方案。我们应该在Bars达到理想值之前增加一个禁止交易的规定。

我们能否以另一种方式解决这个问题?测试器中Bars的这个起始值是否以某种方式增加?

 
Igor733:

测试器中的专家顾问有一个问题。我正在对1分钟的数据进行测试。我自己用分钟数据计算较高TF的随机数。

自2001年以来,会议记录的历史已被下载。在 "图表 "选项卡中设置历史中的最大条数,并显示。

图表上的整个历史是滚动的。

问题是,正如调试打印所显示的那样,无论我从哪一天开始测试,最大的条数都是

在测试的第一条杠上的Bars变量(开始时)总是1001或1002。Bars的值在每一个下一个条形图中增加1。

因此,在开始时不可能计算出更高的TF。

有一个解决方案。我们应该在Bars达到理想值之前增加一个禁止交易的规定。

我们能否以另一种方式解决这个问题?测试器中Bars的这个起始值是否以某种方式增加?

不,它没有。使用你自己的解决方案。
 
可能是什么问题。在编写EA时,我必须多次测试以跟踪变化。在随机的测试次数之后,策略测试员不接受对代码所做的修改。它有时会到了荒谬的地步。你可以简单地删除一段代码,猫头鹰就会按照前面写的算法在测试器中工作。在将计算结果解析为CSV时也会发生同样的情况。 在经过一定数量的测试后,一些随机的垃圾被解析为CSV。

P.S. 我按下了编译按钮。
 

我真的需要了解计算平滑移动平均线的算法。 有几个原因导致iMA函数不适合。

正如我从https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma#smma 中所理解的信息

第一个要素的计算方法是收盘价之和除以周期。

以下是根据公式SMMA(i)=(SMMA(i-1)*(N-1)+CLOSE(i))/N 计算

让我们以5为周期,从2017年2月24日19:00到2017年2月24日23:00(GMT+2)即最后5根蜡烛的欧元/美元H1的收盘价为例

收盘价为1.05681;1.05702;1.05639;1.05612;1.05592。

相应地,第一元素 - 1.056452;第二元素 - 1.056852 第三元素 - 1.05676 第四元素 - 1.056632 第五元素 -1.056489

但在SMMA 5图表上,收盘价是1.05706,也就是说,差值已经是第三位数了

我算错了什么?

我应该如何正确计算才能得到1.05706?

 
zsu1970:

我真的需要了解计算平滑移动平均线的算法。 有几个原因导致iMA函数不适合。

正如我从https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma#smma 中所理解的信息

第一个要素的计算方法是收盘价之和除以周期。

以下是根据公式SMMA(i)=(SMMA(i-1)*(N-1)+CLOSE(i))/N 计算

让我们把周期等于5,欧元/美元H1的收盘价从2017年2月24日19:00到2017年2月24日23:00(GMT+2),即最后5根蜡烛的价格。

收盘价为1.05681;1.05702;1.05639;1.05612;1.05592。

相应地,第一元素 - 1.056452;第二元素 - 1.056852 第三元素 - 1.05676 第四元素 - 1.056632 第五元素 -1.056489

但在SMMA 5图表上,收盘价是1.05706,也就是说,差值已经是第三位数了

我算错了什么?

我应该如何正确计算才能得到1.05706?

研究一下指标 本身,会更有意义。
 
Aleksey Maryaskin:
开发人员先生们!大家好。我对一个问题感兴趣,就是在创建专家顾问模板(脚本)时如何创建。是否可以在某个地方进行编辑,如何进行编辑?
这里的直接链接可能无法获得通过......你可以在谷歌上搜索 "我将在这个线程中发布MQL4课程"(不带引号)。 搜索 "模板"(我想它在第二页)。
 
Vitaly Muzichenko:
看一下指标 本身,会更有意义。
看了一下,与我给的链接中的内容相同。

double SMMA(int period)
{

//用收盘价填充数组
int k=period。
for(int i=1; i<=period; i++)
{
H1_Close[i]=Close[k];
// Print("H1_Close [",i,"] " ,H1_Close[i], " Close [",k,"] " ,Close[k])。
k--;
}
//计算第一个元素为平均收盘价
double Summ=0。
for (int i=1; i<=period;i++)
Summ=Summ+H1_Close[i]; //SUM1 = SUM(CLOSE, N)
double TmpSMMA=Summ/period; //SMMA1 = SUM1/N
//计算第i个元素:SMMA(i)=(SMMA(i-1)*(N-1)+CLOSE(i))/N
for(int i=2;i<=period;i++)
TmpSMMA=(TmpSMMA*(period-1)+H1_Close[i])/period。
}
其结果仍然与终端的指标数据有很大不同。为什么?
 
zsu1970:

我真的需要了解计算平滑移动平均线的算法。 有几个原因导致iMA函数不适合。

正如我从https://www.metatrader5.com/ru/terminal/help/indicators/trend_indicators/ma#smma 中所理解的信息

第一个要素的计算方法是收盘价之和除以周期。

以下是根据公式SMMA(i)=(SMMA(i-1)*(N-1)+CLOSE(i))/N 计算

让我们以5为周期,从2017年2月24日19:00到2017年2月24日23:00(GMT+2)即过去5根蜡烛的欧元/美元H1的收盘价为例

收盘价为1.05681;1.05702;1.05639;1.05612;1.05592。

相应地,第一元素 - 1.056452;第二元素 - 1.056852 第三元素 - 1.05676 第四元素 - 1.056632 第五元素 -1.056489

但在SMMA 5图表上,收盘价是1.05706,也就是说,差值已经是第三位数了

我算错了什么?

我应该如何正确计算才能得到1.05706?

因此,在包容尼克中有一个计算算法。

 
Alexey Viktorov:
嵌合器中有一个计算算法。

因此,我似乎做了计算中的一切,但结果却没有出来。第4天,我搞不清楚了。
我写了Vitaly Muzichenko 答案中的函数代码,但我不知道错误在哪里
 
zsu1970:
所以我似乎在做计算中的一切,但结果却没有出来。我坐在这里已经是第四天了,但还是想不明白。
我写了Vitaly Muzichenko 答案中的函数代码,但我不知道错误在哪里
你是马上把价格放进去,还是拿到价格后再粘贴到计算中?
原因: