初学者的问题 MQL4 MT4 MetaTrader 4 - 页 102

 
STARIJ:

纵轴上的价格从下到上,横轴上的时间和条形图的编号在右边。

零条是当前可用的最后一条杠。以下是历史上存在的酒吧,但对测试者来说是不可用的。后来,当这个小节算完后,测试者将进入下一个小节,这个小节对他来说将成为零。


所以,我的理解是正确的,一旦下一栏的开盘价出现在测试器中,它就会变成null[0]。而如果该指标的制作方式是在当前[0]条之前的500条计算,这意味着测试者将在当前[0]条之前的~2年(500条D1条)计算该指标...

这就提出了以下问题。

现在,该指标是基于Start()事件处理的--古老的版本。正如你所感受到的,在测试过程中,在每次调用iCustom()时,指标都是按前500条计算的,1600次测试者的运行是计算了一个半小时。
我们可以在OnCalculate()事件处理上建立指标,这样可以在下一次OnCalculate()之前只计算未计算的条形图--但也可以在当前时间的真实数据流中进行--正如我从MQL4参考资料中了解的那样。
在测试器中,它将减少每次调用iCustom()时的计算条数?

 
MikeZv:

所以我的理解是正确的,一旦开放的下一个条形价格出现在测试器中--它就会变成null[0]。如果该指标是在当前[0]条之前的500条开始计算的,这意味着测试者将在当前[0]条之前计算该指标约2年(500条D1)。

这就提出了以下问题。

现在,该指标是基于Start()事件处理的--古老的版本。正如你所感受到的,在测试过程中,在每次调用iCustom()时,指标都是按前500条计算的,1600次测试者的运行是计算了一个半小时。
我们可以在OnCalculate()事件处理上建立指标,这样可以在下一次OnCalculate()之前只计算未计算的条形图--但也可以在当前时间的真实数据流中进行--正如我从MQL4参考资料中了解的那样。
在测试器中,它将减少每次调用iCustom()时的计算条数?


指标只是写歪了,所以很慢,我需要一个专业的重写,然后它就能读懂整个历史,而且非常快......就是这样......

 
Nikolay Ivanov:


指标就是写得歪歪扭扭的,所以很慢,你需要一个专业的改写,然后就能读懂整个故事,而且非常快......就是这样......


已经改写了...:)

 

在旧指标[onCalculate()]的基础上写了新指标[ on Start()],提出了上述问题。
我运行了一个脚本,将它们相互比较了5年(期间D1)--一比一,所有的值都吻合。
我已经将同样的ICustom()复制到Expert Advisor中,并在测试Expert Advisor 时将其输出到一个文件中。
旧的指标值显示与脚本中一样,新的指标值都是不同的!!。
为什么专家顾问中的iCustom()在Start()上输出的指标值与脚本中的相同,
,但对于OnCalculate()上的指标,专家顾问中的输出却与脚本中的输出不同?


 

大家好。

伙计们,你们能告诉我谁遇到过这种情况吗?

一些二元期权经纪商,例如Grand Capital,不是通过交易的利润来累积收入并从账户中扣除,而是作为账户余额的收入。


关于如何找出交易的结果,我有几个备选的工作方案,但最正确的方案仍然是阅读资产负债表的价值和收益/亏损的金额。

因此,问题是--如何才能做到 "当下",但在整个交易历史中做到这一点?也就是说,我对一些(包含在MQL4中的)函数感兴趣,这些函数会查看所有的余额类型记录,并读取注释和值本身。这是我在几年的编程生涯中第一次面临这样的任务。

 
MikeZv:

我在旧指标[Start()]的基础上写了一个新指标[OnCalculate()],这个问题是上面提出的。
我运行脚本,将它们相互比较了5年(期间D1)--一对一,所有的值都重合。
我把同样的ICustom()复制到Expert Advisor中,并在测试Expert Advisor 时让它显示在一个文件中。
旧的指标值显示与脚本中一样,新的指标值都是不同的!!。
为什么专家顾问中的iCustom()在Start()上的指标会输出与脚本中相同的值?
对于OnCalculate()的指标,专家顾问中的输出与脚本中的输出不同?


这可能需要很长的时间来猜测。

我会检查代码是否有错误的数据类型转换,变量名称的加倍(即在旧代码中使用的名称现在被保留了)--结果是变量没有得到它应该得到的值(首先,检查OnCalculate中使用的变量名称--开盘、高点、低点、收盘,等等。- 你可能会在旧代码中经常遇到它们)。
至于iCustom,它是最简单的变体,这里的错误很可能与错误传递的参数有关(同样,由于上面给出的原因)。

打印所有数值,或在调试模式下运行,检查哪里有差异。
 
Artyom Kuraev:

这可能需要很长的时间来猜测。

我会检查代码是否有不正确的数据类型转换,重复的变量名称(即旧的代码使用现在被保留的名称)--结果是变量获取了它应该得到的错误的值(首先检查OnCalculate中使用的变量名称--开盘、高点、低点、收盘,等等。- 你可能会在旧代码中经常遇到它们)。
至于iCustom,它是最简单的变体,这里的错误很可能与错误传递的参数有关(同样,由于上述原因)。

打印所有数值,或在调试模式下运行,检查差异的去向。
脚本中两个指标的输出是相同的。

专家与脚本中的iCustom()有合作关系的行。传递相同的参数。

 
MikeZv:

专家从脚本中复制了带有iCustom()的行。传递相同的参数。

它们被复制的事实可能导致错误。我只是提出了可能的原因和我将首先检查的内容。

第二点,这可能是最明显的答案,就是指标本身的价格过高,当应用于历史时,会给出一个数值,而在策略测试器 模式下工作时,又会给出另一个数值。我曾经写过它, 你可以 从两张图片中 看到它

我根本不坚持什么,我的回答将基于我的经验。如果你确定我建议的方案都不合适,那就等其他答案或者提供更多的背景信息吧 :)

 
Artyom Kuraev:

大家好。

伙计们,你们能告诉我谁遇到过这种情况吗?

一些二元期权经纪商,例如Grand Capital,不是通过交易的利润来收取收入并从账户中扣除,而是作为账户余额的收入。


关于如何找出交易的结果,我有几个备选的工作方案,但最正确的方案仍然是阅读资产负债表的价值和收益/亏损的金额。

因此,问题是--如何才能做到 "当下",但在整个交易历史中做到这一点?也就是说,我对一些(包含在MQL4中的)函数感兴趣,这些函数会查看所有的余额类型记录,并读取注释和值本身。这是我在几年的编程生涯中第一次面临这样的任务。


#define  OP_BALANCE 6
#define  OP_CREDIT  7

加号

OrdersHistoryTotal
StringFind(OrderComment(),txt,0)
 
Taras Slobodyanik:

谢谢你!

这一切都成功了!
原因: