精英指标 :) - 页 183

[删除]  

DTosc消息...

Mladen,

我在Expers文件夹中得到一条信息,说....... "Array Maximum函数 的起始位置10148不正确"--不过指标似乎表现得很好。

有什么解释吗?

预先感谢你。

 

ValeoFX

在不知道是哪个指标的情况下,它通常是这样的 找到确定限制的地方,然后把它改成这样的。

limit=MathMin(Bars-counted_bars,Bars-1);

这个表达式中的第二个参数(Bars-1)在这种情况下确保极限不大于图表上的条数

但是,正如你已经注意到的,这是一个 "良性 "错误:它只发生一次(当指标被加载或时间框架被改变时),而且,与其他一些错误不同,它不会停止指标的计算,所以所有其余的计算都是正确的,数值也被正确计算。

问候

mladen

ValeoFX:
Mladen。

我在Expers文件夹中得到一条信息,说....... "Array Maximum函数的起始位置10148不正确"--但指标似乎表现完美。

有什么解释吗?

先谢谢你了。
[删除]  

谢谢...

mladen:
ValeoFX

不知道是关于哪个指标的,通常是这样的 找到确定限制的地方,然后把它改成这样的。

limit=MathMin(Bars-counted_bars,Bars-1);

在这种情况下,该表达式的第二个参数(Bars-1)确保限制不大于图表上的条数。

但是,正如你已经注意到的,这是一个 "良性 "错误:它只发生一次(当指标被加载或时间框架被改变时),而且,与其他一些错误不同,它不会停止指标的计算,所以所有其余的计算都是正确的,数值也被正确计算。

问候

mladen

======================

对不起,Mladen,我在 "标题 "窗口中有指标的名称(DTOsc),没有想到要再重复一遍。不过,谢谢你的解释--我会立即查看的。

在第124行我发现。

limit = MathMax(limit,MathMin(Bars,iCustom(NULL,timeFrame,IndicatorFileName, "getBarsCount",0,0)*timeFrame/Period())。

由于它与你的建议不同,你能不能详细说明我应该怎么做来纠正它,谢谢?

非常感谢。

 

ValeoFX

我没有注意到信息的副标题,抱歉

总之,如果你使用的是这个帖子中的那个:https://www.mql5.com/en/forum/general,那么你就会收到这个信息。

另一方面,如果你使用的是这个帖子中的那个:https://www.mql5.com/en/forum/general(较新的那个),那么你就不会收到这个信息。

我不记得我到底是什么时候做的第一个帖子里的那个,但后来我改变了一些编码风格(因此没有那个错误信息),坦率地说,以前我并不太关心那个错误信息,因为它真的没有改变什么。在那之后,我干脆决定不给任何最终的错误留下任何空间,因此在确定极限时进行了 "安全检查"

____________________________________

PS:该行在多时间框架模式下工作。它 "询问 "目标时间段内有多少条变化,以便能够重新计算当前时间段内需要的确切条数。因此,该线只有在多时间框架模式下才有效。

[删除]  

mladen,

我是编码方面的新手。这很难。但如果我只有CodersGuru的书来做EA.......,那是不够的。

见我的帖子第183页

 

Tradefx1

你想找到的每日趋势:你需要重新定义它(重写它)。现在它是这样写的。

int GetDailyTrend (int res){

double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);

double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);

double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);

double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);

if (MA5_1 MA8_0) res =1;//Cross up

if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down

BarCount=Bars;

return (res);

}[/php]and you are calling it like this :

if (GetDailyTrend(1) && ...) Order = SIGBNAL_BUY;

if (GetDailyTrend(2) && ...) Order = SIGNAL_SELL;

[/php]The way it is used and called now expressions GetDailyTrend(1) and GetDailyTrend(2) are always true (in metatrader any value not equal to 0 is considered a true.

_________________________

Redefine the GetDailyTrend() to something like this:

[php]int GetDailyTrend ()

{

int res = 0;

double MA5_1 = double iMA(NULL,1440,5,0,1,0,1);

double MA5_0 = double iMA(NULL,1440,5,0,1,0,0);

double MA8_1 = double iMA(NULL,1440,8,0,1,0,1);

double MA8_0 = double iMA(NULL,1440,8,0,1,0,0);

if (MA5_1 MA8_0) res =1;//Cross up

if (MA5_1 > MA8_1 && MA5_0 < MA8_0) res =2;//Cross down

return (res);

}

And then use it this way :

[php]if (GetDailyTrend()==1 && ...) Order = SIGBNAL_BUY;

if (GetDailyTrend()==2 && ...) Order = SIGNAL_SELL;

_________________________

关于书本和编码:我一直认为学习编码的最好方法是从实例和工作程序中学习。信不信由你,但微软的人是很好的学习对象(他们确实统一地写代码(这意味着他们有坚定的团队规则,代码应该如何写),非常干净,他们试图使代码尽可能地高效)。

在精英部分有很多例子和工作中的EA,任何人都可以使用(我可以向你推荐这个https://www.mql5.com/en/forum/180383),原因我已经在那条线上说过了,我认为它很容易被用作其他EA的 "框架"。但是,也有很多其他非常有用的EA,可以用来学习和制作有效的EA。

请永远记住一件事:编码语言就是:"语言"。这意味着它是一个简单的谈话,就像其他的谈话一样。只是要小心你 "告诉 "电脑的内容,因为电脑不像人,不会质疑你告诉它的内容,而是简单地执行它(有时它不是我们想要的 ),然后,经过一段时间,你会习惯于与电脑 "对话",然后一切都变得更容易。

 

以防万一...

如果有人想知道adxvma指标背后的基本逻辑是什么,这里是它的一个中间步骤,可能和指标本身一样有用。(在这一步之后还有其他的步骤,所以不要比较这两个指标,但这一步似乎特别有趣)

如果有人觉得它很熟悉,答案是 "是"。它似乎是动力趋势指标("真正的 "动力趋势,而不是那些被张贴和公布的动力趋势--对此我不是100%确定(我从 "真正的 "动力趋势看到的只是它的图片),但它肯定看起来很像它)
附加的文件:
[删除]  
mladen:
ValeoFX

我没有注意到信息的副标题,抱歉

总之,如果你使用的是这个帖子中的那个:https://www.mql5.com/en/forum/general,那么你就会收到这个信息。

另一方面,如果你使用的是这个帖子中的:https://www.mql5.com/en/forum/general(较新的那个),那么你就不会得到这个信息。

我不记得我到底是什么时候做的第一个帖子里的那个,但后来我改变了一些编码风格(因此没有那个错误信息),坦率地说,以前我并不太关心那个错误信息,因为它真的没有改变什么。在那之后,我干脆决定不给任何最终的错误留下任何空间,因此在确定极限时进行了 "安全检查"

____________________________________

PS:该行在多时间框架模式下工作。它 "询问 "目标时间段内有多少条变化,以便能够重新计算当前时间段内需要的确切条数。所以该线只有在多时间框架模式下才有效。

=========================================================

非常感谢你的解释。非常感谢,也帮助我更好地理解了编码。

我将立即下载第二版。

最好的祝愿。

 

adxvma

mladen,

我要求你发布Tradestation的版本,会不会太过分了?

mladen:
伙计们,我注意到指标中有一个不合逻辑的地方(第一步是如何计算adx部分),我确实用tradestation指标作为模型,似乎其中有一个错误,我没有想到就继承了 。在这些中,这个错误得到了纠正。甚至这样的结果也更好。
这个计算方法更接近于公共部分的计算方法(所以公共部分的计算方法是一个相当正确的指标),99%的时间内代码更快,而且还有专门针对精英部分发布的额外内容。因此,如果你从以前的帖子中下载了指标,请用这些指标代替。在 "常规 "版本中还增加了一个选项:MultiColorMod-- 如果设置为false,则只用一种颜色来显示adxvma(如果想用几个adxvma来检查交叉点作为信号,则很有用)。

问候

姆拉登
 

雷。

在这里,它是。该指标:

inputs:

Price (close),

length (14);

vars:

av (0);

av = ADXVMA(Price, length);

Plot1(av, "Rising");

Plot2(av, "Falling");

Plot3(av, "Neutral");

Plot4(av, "ADXVMA", iff(av = av[1], GetPlotColor(3), iff(av > av[1], GetPlotColor(1), GetPlotColor(2))));

NoPlot(1);

NoPlot(2);

NoPlot(3); [/php]and the adxvma function

[php]inputs:

Price (NumericSeries),

Length (NumericSimple);

vars:

TR(0),

DI_Diff(0),

DI_Sum(0),

ma(0),

pdm(0),

mdm(0),

pdi(0),

mdi(0),

DI_Factor(0),

VI(0),

diff(0),

HHV(0),

LLV(0),

WeightDM(Length),

WeightDI(Length),

WeightDX(Length),

ChandeEMA(Length),

out(0),

j(0);

once ma=Price;

//

// in order to make it right the "pdm=0; mdm=0;" must be added (it does not

// exist in original and that is an error, tradestation inherits values fom

// a previous loop and they must be zeroed before these calculations)

//

pdm=0; mdm=0;

if(Price>Price[1]) then pdm=Price-Price[1] else mdm=Price[1]-Price;

pdm=((WeightDM-1)*pdm[1] + pdm)/WeightDM;

mdm=((WeightDM-1)*mdm[1] + mdm)/WeightDM;

TR=pdm+mdm;

if (TR>0) then begin pdi=pdm/TR; mdi=mdm/TR; end

else begin

pdi=0;

mdi=0;

end;

pdi=((WeightDI-1)*pdi[1] + pdi)/WeightDI;

mdi=((WeightDI-1)*mdi[1] + mdi)/WeightDI;

DI_Diff=pdi-mdi;

if (DI_Diff<0) then DI_Diff= -DI_Diff;

DI_Sum=pdi+mdi;

DI_Factor=0;

if (DI_Sum>0) then out=DI_Diff/DI_Sum else out=0;

out=((WeightDX-1)*out[1] + out)/WeightDX;

if (out>out[1]) then begin HHV=out; LLV=out[1]; end

else begin

HHV=out[1];

LLV=out;

end;

for j = 1 to Length-1 begin

if(out[j+1]>HHV)then HHV=out[j+1];

if(out[j+1]<LLV) then LLV=out[j+1];

end;

diff = HHV - LLV;

VI=0;

if (diff>0) then VI=(out-LLV)/diff;

ma=((ChandeEMA-VI)*ma[1]+VI*Price)/ChandeEMA;

ADXVMA = ma;

增加了注释 和一个代码更正,在原版中不存在(这是我对它做的唯一改动)。一些变量名称有误导性:在任何步骤中都没有EMA计算。那是在中间平滑步骤中使用的平滑移动平均线,而不是EMA。另外,你会注意到,即使基本的计算逻辑来自于ADX,它实际上也不是ADX,但在这个 "混合 "指标的情况下,它足够接近于值得这个名字。

问候

姆拉登

traderduke:
mladen。

如果我要求你发布Tradestation版本,会不会太过分了?