指标问题 - 页 5

 
哦,最后一个问题

在建立可能在EA中使用的指标时,是向前计数还是向后计数更典型?

一个会不会造成更多的问题,还是说这只是一个偏好和设计的问题?

请指教

谢谢

 
时不时地看看这篇文章 https://www.mql5.com/en/articles/1456,它可能有点令人生畏,但要坚持下去,一点一点地看,一旦你理解了它,你就会了解到指标、EA和它们的区别。
 
Agent86:
哦,最后一个问题

在建立可能用于EA的指标时,是向前数还是向后数更典型呢?

一个会产生更多的问题吗,还是说这只是一个偏好和设计的问题?

通常情况下,我所看到的许多指标都是以i++来计算的,在我看来,这是错误的。当一个指标处理图表上的旧条时(这样它就可以开始处理最新的条),它不应该以一种代表它在实时数据上的工作方式来处理吗?

技术指标 不是我的强项,出于需要我不得不熟悉它们,但我对它们的经验很少,我也欢迎更有经验的人提供其他答案。

 

通常情况下,就我在实际交易中的关注而言,过去的整组条形价格是很不相关的。在任何给定的框架内,也许只有那些最近的几条。

在这方面,我宁愿把指标的逻辑 "转移 "到一些函数或库中,让EA可以直接使用,而不是调用iCustom 和读取缓冲区等。不要忘了,这可能是一个有问题的问题。

因此,对我来说,一个好的指标是能够让我做到这一点的。

 
我想我将对每个指标进行一些实验,但在我看来,我更喜欢从0开始向前递增,但标准指标是如何递增的?

如果我想在EA中使用iFractals做一些有用的事情,似乎信号是自然发生的;如果我想回到以前的iFractal,那么我将i++转移到以前的iFractal。

但是,当我看到别人的EA,在图表上出现了指标。他们是在使用iCustom指标 和他们自己添加的指标,还是将这些指标放入EA本身,当你打开EA时,这些指标会自动出现?

我正试图将其全部理清

 
RaptorUK:
时不时地看看这篇文章 https://www.mql5.com/en/articles/1456,它可能有点令人生畏,但要坚持下去,一点一点地看,一旦你理解了它,你就会了解到指标、EA和它们的区别。
我会的,谢谢。

我需要继续努力,我真的不想继续挣扎,但我更愿意学习所有关于MQL4的知识,这样我就可以编写我自己的想法,也可以为代码库做一些贡献。

我将继续阅读,再次感谢
 
你好

谁能确认我对这段代码的考虑是否正确?

我的打印语句是指以前的iFractal吗?

//maybe something like this to count back to the previous iFractal for reference
//needs work     
    for(i=0; val1==val3; i++)
      {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      val3=iFractals(NULL, 0, MODE_UPPER,0);
      if (val1 > 0)
         {
         Print (val1, " = val1");
         }
        }
这是我目前所能想到的有限的知识。

不管怎么说,如果我在这里创建的确实是iFractal,那么这个方法回到之前的iFractal有什么问题吗。

从理论上说,这似乎是正确的。

请指教

谢谢

 

当你得到一个iFractal时,其值是>0,是吗?

因此,举例来说,如果你想知道上一个和下一个iFractals的位置,只需做这样的事情 . . .

val1 = 0; val2 = 0; i = 0;

while( val1==0 && val2==0)
   {
   if (iFractals(NULL, 0, MODE_UPPER,i) > 0 && val1==0) val1 = i;
   if (iFractals(NULL, 0, MODE_LOWER,i) > 0 && val2==0) val2 = i;
   i++;
   }
Print("Last UPPER Fractal at ", val1, " Last LOWER Fractal at ", val2);
 
for(i=0; val1==val3; i++) <--- val1==val3??? This is indeed, "tricky"
       {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      val3=iFractals(NULL, 0, MODE_UPPER,0);
      if (val1 > 0)
         {
         Print (val1, " = val1");
         }
        }

说实话,这是我第一次看到这种情况,对于循环终止条件。 它是一个棘手的问题...

 

对我来说,它看起来很酷...你所要做的就是在后台测试器中测试它。我是这样做的。

void start(){
   double val1=0,val3=0;
   for(int i=0; i<=3; i++){
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      val3=iFractals(NULL, 0, MODE_UPPER,0);
      if(val1>val3){
        Print("Value_1="+val1+" TimeOf_Fractal="+TimeToStr(TimeCurrent()));
        break;
      }
   }
}

我不记得分形是如何形成的。我相信它是在第三条杠上形成的。它考虑到了前后两个条形。

将上述代码保存为EA并运行一个简短的回测。你可以把指标附在回测图上 进行确认。

这是我得到的结果。

2011.10.06 06:38:49     2011.01.02 23:00  De_Bugger EURUSD,M1: Value_1=1.33710000 TimeOf_Fractal=2011.01.02 23:00