ICustom函数 - 页 4

 
TheRumpledOne:
如果它是 "垃圾",那为什么还要张贴?

我有一个类似的想法....

 

关于iCustom的一个问题。

您能解释并举例说明关于iCustom命令中的Line和Shift变量吗?

谢谢你

 
matrixebiz:
关于iCustom的一个问题。

您能解释一下,并给出一些关于iCustom命令的Line和Shift变量的例子吗?

谢谢你

iCustom - MQL4 文档

模式- 线路索引。shift- 从指标 缓冲区中提取的数值的索引(相对于当前条形图的给定时间前的移动)。

使用MODE来告诉你的指标你想要什么缓冲区。 支撑阻力指标可以使用缓冲区0 ( MODE=0 ) 表示阻力,缓冲区1 ( MODE=1 ) 表示支撑。

SHIFT说要使用iCustom调用的指标Bar(SHIFT)的值。

这有帮助吗?

 
TheRumpledOne:
iCustom - MQL4 文档

mode- 线路索引。shift- 从指标 缓冲区中提取的数值的索引(相对于当前条形图的给定时间前的移动)。

使用MODE来告诉你的指标你想要什么缓冲区。 支撑阻力指标可以使用缓冲区0 ( MODE=0 ) 表示阻力,缓冲区1 ( MODE=1 ) 表示支撑。

SHIFT说要使用iCustom调用的指标Bar(SHIFT)的值。

这有帮助吗?

好吧,我明白了Shift,我必须多读一些关于Mode的书。

你会编码吗?我有这个指标,我从我的EA中调用,但不确定如何正确设置它。见图片。

它只有两条线,当蓝色变化并与另一条线对齐时,就会产生多头信号(与红色的想法相同)。

我尝试了一些不同的代码,比如我在VQ指标中使用的代码。

double Entry1 = iCustom(NULL, 0, "VQ", 24, 30....., 0, 1);

double Entry2 = iCustom(NULL, 0, "VQ", 24, 30....., 0, 2);

double Up2 = iCustom(NULL, 0, "VQ", 24, 30....., 1, 2);

double Down2 = iCustom(NULL, 0, "VQ", 24, 30....., 2, 2);

只是交易不对。

谢谢

附加的文件:
ci.jpg  66 kb
 
matrixebiz:
好的,我得到了Shift,将不得不做更多关于Mode的阅读。

你会编码吗?我有这个指标,我从我的EA中调用,但不知道如何正确设置它。见图片。

它只有两条线,当蓝色变化并与另一条线对齐时,就会产生多头信号(与红色的想法相同)。

我尝试了一些不同的代码,比如我在VQ指标中使用的代码。

double Entry1 = iCustom(NULL, 0, "VQ", 24, 30....., 0, 1);

double Entry2 = iCustom(NULL, 0, "VQ", 24, 30....., 0, 2);

double Up2 = iCustom(NULL, 0, "VQ", 24, 30....., 1, 2);

double Down2 = iCustom(NULL, 0, "VQ", 24, 30....., 2, 2);

只是交易不对。

谢谢

如果你指的是底部的指标,它似乎被命名为 "#MTF CI",那么我认为可能该指标有4个缓冲区:每条线的两种颜色各一个。你可以调出数据窗口(ctrl-D),看看指标有哪些缓冲区,以及它们的索引(iCustom调用 的MODE参数)。

 
matrixebiz:
好吧,我明白了Shift,我得多看看关于Mode的书。

你会编码吗?

谢谢

我已经知道在我的时间里编码了一两个指标(几百个)....LOL!

 
ralph.ronnquist:
如果你指的是底部的指标,它似乎被命名为 "#MTF CI",那么我认为可能该指标有4个缓冲区:每条线的两种颜色各有一个。你可以调出数据窗口(ctrl-D)来查看指标有哪些缓冲区,以及它们的索引(iCustom调用的MODE参数)。

是的,你说的对,我怎样才能定制这些并创建贸易?

对于其他两个(QQEA 4个缓冲区和VQ 2个缓冲区),我使用这个方法。

double Entry1 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 0, 1);

double Entry2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 0, 2);

double Up2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 1, 2);

double Down2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 2, 2);

double qqe0_0=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,0,1);

double qqe0_1=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,0,2);

double qqe1_0=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,1,1);

double qqe1_1=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,1,2);

//买入

qqe0_0>qqe1_0 && qqe0_1Entry2 && ....

谢谢拉尔夫

附加的文件:
data.jpg  24 kb
 
matrixebiz:
是的,你是对的,我怎样才能定制这些并创建交易?

对于其他两个(QQEA 4个缓冲区和VQ 2个缓冲区)正在工作的,我使用这个。

double Entry1 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 0, 1);

double Entry2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 0, 2);

double Up2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 1, 2);

double Down2 = iCustom(NULL, 0, "VQ", Crash,TimeFrame,Length,Method,Smoothing,Filter,RealTime,Steady,Colors,Alerts,EmailON,SignalPrice,CountBars, 2, 2);

double qqe0_0=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,0,1);

double qqe0_1=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,0,2);

double qqe1_0=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,1,1);

double qqe1_1=iCustom(Symbol(),0,"QQEA",QQEA_SF,RSI_Period,DARFACTOR,1,2);

//Buy

qqe0_0>qqe1_0 && qqe0_1Entry2 && ....

谢谢你,拉尔夫

一般来说,当你看到一条有多种颜色的指示线时,那么通常是由多个缓冲区实现的;每种颜色一个。你可以从数据窗口中找出缓冲区的索引,其中最上面的缓冲区的索引为0,并向下递增。缓冲区在有数值时就会被绘制出来(如果是LINE绘图风格,则需要两个或两个以上的连续数值才能被绘制出来)。

如果你有指标的源代码,有时更容易窥视它,并从SetIndexBuffer函数调用 中了解缓冲区的索引。

顺便提一下:一个指标也可以在显示屏上绘制 "对象",而这些对象不能通过iCustom调用获得。相反,你需要知道 "对象名称",并能读出其属性。

因此,你总是需要清楚地知道要从哪个指标缓冲区读出,并使用该索引作为iCustom的第二个最后参数。

例如,VQ指标的使用似乎不太正确,因为(根据我看到的资料),它的缓冲区[1]和[2]分别用于绿线和红线,而且从来没有出现过它们都不空的情况。也就是说,"Up2==Down2 "总是假的,除非两者都是 "空 "的时候,那就是VQ线既不是绿色也不是红色,而是黄色。

除此以外,我认为你做事的方式是正确的。当然,人们可以讨论变量名称的选择,但这是学术性的。要走的路是使用iCustom调用选择感兴趣的值,然后在交易条件中表达特定的所需值关系。

 
ralph.ronnquist:
一般来说,当你看到一条有多种颜色的指标线时,通常是由多个缓冲区实现的;每种颜色一个。你可以从数据窗口中找出缓冲区的索引,其中最上面的缓冲区的索引为0,并向下递增。当缓冲区有一个值时,它就会被绘制出来(或者如果是LINE绘图风格,它需要两个或更多的连续值才能被绘制出来)

如果你有指标的源代码,有时更容易窥视它,并从SetIndexBuffer函数调用中了解缓冲区的索引。

顺便提一下:一个指标也可能在显示屏上绘制 "对象",而这些对象不能通过iCustom调用获得。相反,你需要知道 "对象名称",并能读出其属性。

因此,你总是需要清楚地知道要从哪个指标缓冲区读出,并使用该索引作为iCustom的第二个最后参数。

例如,VQ指标的使用似乎不太正确,因为(根据我看到的资料),它的缓冲区[1]和[2]分别用于绿线和红线,而且从来没有出现过它们都不空的情况。也就是说,"Up2==Down2 "总是假的,除非两者都是 "空的",那就是当VQ线既不是绿色也不是红色,而是黄色。

除此以外,我认为你的做法是正确的。当然,人们可以讨论变量名称的选择,但这是学术性的。要走的路是使用iCustom调用选择感兴趣的值,然后在交易条件中表达特定的所需值关系。

不幸的是,我没有上面提到的三个指标的源代码。如果我想让它们只在每个指标同时变色的时候检查 买入或卖出条件,你会如何编写这些代码?

谢谢

 

缺少来源不是问题。让我们关注一下你图片中的指标窗口2,它显示了一个有4个缓冲区的指标。如果你在指标上左右移动鼠标,你可以算出哪个缓冲区用于哪个颜色。

让我假设第一个缓冲区([0])用于顶行的蓝色指示,第二个缓冲区([1])用于顶行的红色指示,同样,[2]和[3]是底行 的蓝色和红色。然后你可以按以下方式读出指标。

double top_is_blue = iCustom( ..., 0, 1 );

double top_was_blue = iCustom( ..., 0, 2 );

double top_is_red = iCustom( ..., 1, 1 );

double top_was_red = iCustom( ..., 1, 2 );

double bot_is_blue = iCustom( ..., 2, 1 );

double bot_was_blue = iCustom( ..., 2, 2 );

double bot_is_red = iCustom( ..., 3, 1 );

double bot_was_red = iCustom( ..., 3, 2 );

[/PHP]

Then you can summarise them as follows:

[PHP]bool top_goes_blue = ( top_is_blue == top_was_red );

bool top_goes_red = ( top_is_red == top_was_blue );

bool bot_goes_blue = ( top_is_blue == top_was_red );

bool bot_goes_red = ( top_is_red == top_was_blue );

bool both_go_blue = ( top_goes_blue && bot_goes_blue );

bool both_go_red = ( top_goes_red && bot_goes_red );

如何做到这一点,取决于你在寻找什么。特别是。

如果你想结合两条线的非同步读数,可能会变得更多的编码。例如,布尔变量 "both_go_blue "指的是两条线的同时读数,并没有捕捉到 "一条线变蓝,另一条线稍后变蓝"。