编码帮助......我如何让指标过滤而不是警报? - 页 2

 
Aaragorn:
我可以这样做吗?只需将缓冲指数写进指标,并像这样使用上下文,让它返回上下行的值?

没有进入指标。在EA中。(你可以用一个指标来做,但不能在它自己的代码中使用同一个指标!!!!!)

 
elihayun:
没有进入指标。在EA中。(你可以用一个指标来做,但不能在它自己的代码中使用同一个指标!!!!!)

所以我可以在EA中写一个缓冲区的索引,但它是如何从指标中获取数值的?我并不是说在它自己的代码中使用指标,那就有点傻了。请原谅我的沟通障碍。这就是编码和与他人谈论编码的问题。

 

让我向那些可能试图帮助我但发现我的帖子信息量过大的人道歉。我发了很多代码,基本上是因为我可以把两个窗口打开,一个窗口是这个主题,另一个是元编辑器,在一个窗口看一部分代码,在另一个窗口看另一部分,我这样做是为了帮助我思考我正在看的问题。我很喜欢这种方式,它能帮助我思考我正在做的和想要做的事情。我并不是说要用大量的代码来压倒任何人,让他们必须看完所有的代码。有时,我试图在发布整个EA或整个指标后,单独挑出一些片段,因为我试图在哪里和需要做什么上归零。我感谢每一个花时间看我正在做的事情并提供建设性意见的人。如果我发布的内容太多,只需过滤一下,寻找我想做的事情,不要被其他内容所困扰,这些内容只是作为我所做事情的背景。

 
Aaragorn:
所以我可以在EA中写一个缓冲指数,但它是如何从指标中获取数值的?我不是说在它自己的代码中使用指标,那就有点傻了。请原谅我的沟通障碍。这就是编码和与他人谈论编码的问题。

不用担心如何操作。让Metatrader为你做这些,你只需使用代码来获得你想要的信息。

提示:当你运行EA时,你会看到:"Trend Bands loaded succesfully",这意味着它做了你想要的事情。

 
elihayun:
不用担心怎么做。让Metatrader为你做这些,你只需使用代码来获得你想要的信息。 提示:当你运行EA时,你会看到:"趋势线成功加载",这意味着它做了你想要的事情。

我喜欢用代码来获取我喜欢的信息的声音,这就是我想学习的东西。如何使用代码来获得我喜欢的信息。

所以你认为获得趋势带的刻度值的最好方法是使用iCustome()? 而不是像我已经做的那样在EA中写代码?

出于教学目的,既然我已经在EA中写好了代码,是否有办法从那里获得数值?

 
elihayun:
编写指标是一回事,而编写EA是另一回事。不要把它们混为一谈。在指标中,你也必须处理历史,以正确绘制它。当编写EA时,你只有当前的tick,你必须计算每一个tick的值(如果你不想放松交易)。因此,为了得到当前tick的上下边缘的数值,你可以做两件事
  1. 将原始指标作为一个客户指标使用
  2. 将该指标的逻辑写在你的EA中

第一个选项并不难。你必须首先找出,用于上行和下行的缓冲指数是什么。

要找到它,你必须在指标代码中寻找。

等一下,它确实有缓冲区!我怎么会错过它们?

//+------------------------------------------------------------------+

//| Trend Bands.mq4 |

//| Dwt5 and adoleh2000 |

//| Copyright © 2005, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2005, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

#property indicator_chart_window

#property indicator_buffers 5

#property indicator_color1 Red

#property indicator_color2 Black

#property indicator_color3 Blue

#property indicator_color4 Red

#property indicator_color5 Blue

double upper[], middle1[], middle2, lower[];

double Xup[], Xdown[];

extern int period = 34;

int init()

{

SetIndexStyle(0,DRAW_LINE,EMPTY,2);

SetIndexShift(0,0);

SetIndexDrawBegin(0,0);

SetIndexBuffer(0,upper);

SetIndexStyle(1,DRAW_LINE,EMPTY,2);

SetIndexShift(1,0);

SetIndexDrawBegin(1,0);

SetIndexBuffer(1,middle1);

SetIndexStyle(2,DRAW_LINE,EMPTY,2);

SetIndexShift(2,0);

SetIndexDrawBegin(2,0);

SetIndexBuffer(2,lower);

SetIndexStyle(3,DRAW_ARROW,EMPTY,2);

SetIndexArrow(3, 162);

SetIndexShift(3,0);

SetIndexDrawBegin(3,0);

SetIndexBuffer(3,Xdown);

SetIndexStyle(4,DRAW_ARROW,EMPTY,2);

SetIndexArrow(4, 162);

SetIndexShift(4,0);

SetIndexDrawBegin(4,0);

SetIndexBuffer(4,Xup);

//---- indicators

//----

return(0);

}

所以....,我看到了5个缓冲区...上、中、下和上下...。

我想我想要的信息是来自于上层和下层缓冲区......

 
 
Aaragorn:
我的意思是这是一个新的帖子,而不是对以前的帖子进行编辑,网站的操作有时还是会把我搞混...

我认为最好的方法是不使用指标。这只是最简单的方法。作为一个开始,它已经足够好了。

你看到的是我对该指标所做的修改。如果你想使用这个指标,请确保在你的代码中写入正确的名称。

只要你知道你想要的信息在哪个缓冲区,代码中存在多少个指标并不重要。

 
elihayun:
编写指标是一回事,而编写EA是另一回事。不要把它们混为一谈。在指标中,你也必须处理历史,以正确地绘制它。当编写EA时,你只有当前的tick,你必须计算每一个tick的值(如果你不想放松交易)。因此,为了得到当前tick的上下边缘的数值,你可以做两件事
  1. 将原始指标作为一个客户指标使用
  2. 将该指标的逻辑写在你的EA中

第一个选项并不难。你必须首先找出,用于上行和下行的缓冲指数是什么。

要找到它,你必须在指标代码中寻找

SetIndexBuffer(0,upper)。

SetIndexBuffer(1,middle1);

SetIndexBuffer(2,lower);

正如你所看到的,上线是索引0,中间是索引1,下线是索引2。

现在,我们有了这些信息,我们必须知道该指标有多少个参数。为了得到这个信息,我们必须寻找以外部 字开头的行。

我只找到1行

extern int period = 34。

现在,我们可以把这个指标作为一个客户使用了

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0);

double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0);

34是该指标的参数

0是缓冲指数(2为下限)。

最后一个0是条形移动(在EA中我们需要的是当前的,所以我们使用0)。

现在你有了上下限值,你可以根据价格检查它们。

希望这能让你有所收获

伊莱

嘿,这样就可以把上下线的当前值拉到EA中。

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0);

double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0);

我想我已经开始理解了,这要感谢导师......

因此,我不必在EA中编写指标代码,只需从EA....,它将返回当前线的条形值,然后我就可以使用......这太完美了! ....see 我知道有人知道如何做这个! (只是不是我)...

所以,如果我想改变指标的周期数,我会这样做......

extern double back = 300 //--我可以根据需要改变。

double upLevel = iCustome(NULL,0, "Trend Bands", back, 0, 0)。

double LowLevel = iCustome(NULL,0, "Trend Bands", back, 2, 0);

假设我想从一个比我在图表上使用的时间段更长的时间段来调用指标的值......我会这样做吗?

extern double back = 300 //----我可以根据需要改变。

extern double TF = 30 //--我可以根据需要改变。

double upLevel = iCustome(NULL,TF, "Trend Bands", back, 0, 0);

double LowLevel = iCustome(NULL,TF, "Trend Bands", back, 2, 0);

其中NULL使用当前的符号。

TF使用我指定的图表条形周期

趋势带调用该指标

back是用户定义的用于指标平均化的条数

0或2告诉它要访问哪个缓冲区

最后的0告诉它使用当前的条形图

这样能行吗?

 
Aaragorn:
这能行吗?

很好!!!!。你得到了这个想法!!!!

它将完美地工作。如果你想检查 5M和15M是否同时到达边缘,你可以从每个TF中获取数值并一起测试。

但要留给后者....

原因: