intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- будем хранить время открытия текущего нулевого бараstaticdatetime currentBarTimeOpen=0;
//--- перевернем доступ к массиву time[] - сделаем как в таймсерииArraySetAsSeries(time,true);
//--- return value of prev_calculated for next callreturn(rates_total);
}
如果你对另一个指标的数据计算感兴趣,你可以通过以下方式进行。首先,我们创建另一个具有自己的数据计算方法的指标,然后我们采取这个指标的手柄(MQL5参考指南/ 技术指标/iCustom ),这个手柄用于新的指标。仔细看一下这个例子。如果你对这个例子有任何疑问
我有疑问,我还是不明白。
好吧,让我们以Custom Moving Average.mq5为基础。
将新的平滑程序MODE_MYMA添加到列表中--没有问题。
问题是如何通过另一个指标的i-cast输入数据? 好吧,让我们以第二种形式的任何指标为例(如果指标是由第一种形式的......我不知道如何取高低点......所以它意味着只有第二种形式?)
好吧,让我们宣布
int newHandl;
在onInit中定义它(抛物线,即什么都可以,主要是第二种类型,对吗? 我明白如何实现我的)。
newHandl=iCustom(_Symbol,0, "ParabolicSAR.mq5",0.02,0.2)。
然后在onCalculate中,我们用它来代替标准价格?
CalculateEMA(rate_total,prev_calculated,begin,newHandl);??
请解释一下,我不明白...。(((((
是的,我仍在使用MCL4模板。在那里,它很简单--循环,数据(任何!)取,平滑,输出。
但在这里....我不知道该抓住什么......
(如果指标是由第一种形式产生的......我不明白从哪里获取高低点......所以它意味着只由第二种形式产生?)
是的,关于高低点,它只是一个例子,如何自己处理文章。 对于第一种形式,你可以承担绘制close[i]/2线[或sqrt(close[i]/2)]的任务。一般来说,你也可以用一个数组想出一堆的变化。
好吧,让我们宣布
int newHandl;
在onInit中定义它(举个例子--抛物线。不管怎样,主要的是第二种类型,对吗? 如何实现你自己的,大致上是清楚的)
newHandl=iCustom(_Symbol,0, "ParabolicSAR.mq5",0.02,0.2)。
这很好。我现在要完成它。
如果指标句柄是正确的,这意味着我们可以向这个指标的缓冲区寻址。再看看MQL5参考/ 技术指标 /iCustom中的例子,有一条线。
现在阅读MQL5参考/ 访问时间序列和指标/ CopyBuffer(......再次强调:在逐行解析例子时,许多事情都变得清晰了)。
尝试接收你选择的任何指标缓冲区的数据。我没有终端,但在抛物线中,你可以看到哪些缓冲区被计算,以及它们的编号。
关于ArrayIsSeries() 和ArrayGetAsSeries() 函数的描述问题。
在《参考手册》中有这样一句话:"传入函数的数组反映了价格数据,即这些数组具有时间序列符号, ArrayIsSeries()函数 在检查这些数组时将返回true 。但在任何情况下,仍然 应该只用函数 ArrayGetAsSeries() 来检查索引方向 "。
从字面上看,即使ArrayIsSeries() 函数返回true(即确认被检查的数组是一个时间序列数组),仍然应该只由ArrayGetAsSeries() 函数检查索引方向。那么我就不明白为什么要引入ArrayIsSeries() 函数,如果它的结果必须被额外检查的话。这有什么意义?是否有可能该阵列是一个时间序列,但其索引方向不会与时间序列相同(AS_SERIES标志不会被设置)?
当从Mql4移植到Mql5时,出现了Lot错误。
'lot' - 常数不能被修改
如何纠正?
当从Mql4移植到Mql5时,发生了一个lot错误。
'lot' - 常数不能被修改
你如何解决这个问题?
你不能。这不是一个错误,是一个特点。:)
在mql5中输入变量是不可修改的(const)。
做一个简单的解耦。
在MQL5手册/ 数组操作/ ArraySetAsSeries部分,有 一个例子,当ArraySetAsSeries() 函数适用于每一个刻度 的 const datetime 数组&time[]时。
大家都是这样做的吗(每次打勾时 翻转数组),把数组作为一个时间序列来处理?
另一个问题:OnCalculate()使用的数组能否任意改变其索引方向?还是只要检查一次这个方向就够了?
当从Mql4移植到Mql5时,出现错误 SymbolInfoDouble:
'SymbolInfoDouble' - 没有一个重载可以应用于函数调用
我怎样才能纠正它?
当从Mql4移植到Mql5时,出现了SymbolInfoDouble错误。
'SymbolInfoDouble' - 没有一个重载可以应用于函数调用
我怎样才能纠正它?
为什么在底部有一个0?
https://www.mql5.com/ru/docs/constants/environment_state/marketinfoconstants#enum_symbol_info_double
除此以外,还要检查是否被0除以。
策略测试器的结果以图表形式显示。
你能告诉我在哪里可以找到图表上不同颜色的含义吗?
策略测试器 的结果以图表形式显示。
你能告诉我在哪里可以找到图表上不同颜色的含义吗?