指标问题 - 页 2

 
1代表真,0代表假,对吗?

我明天再想一想,看看能不能把这个问题搞清楚。
 
Agent86:
1为真,0为假,对吗?<----,这是正确的,但

,我明天再想一想,看看是否能弄清楚。


英国更多指的是你的MACD 值。
 
faster和slower是双数,而不是bool ......从它的初始值开始,通过循环工作,也许会有3次迭代,所以对于Bars、Bars-1、Bars-2的值......更快和更慢的值是什么?
 
//+------------------------------------------------------------------+
//|                                   
//+------------------------------------------------------------------+


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 White

//---- buffers
double v1[];
double v2[];
double v3[];
double val1;
double val2;
double val3;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
//----
   IndicatorBuffers(3);

   SetIndexArrow(0, 111);
   SetIndexStyle(0,DRAW_ARROW,STYLE_DOT,1,Blue);
   SetIndexBuffer(0, v1);
   SetIndexLabel(0,"Resistance");
   

   SetIndexArrow(1, 111);
   SetIndexStyle(1,DRAW_ARROW,STYLE_DOT,1,Red);
   SetIndexBuffer(1, v2);
   SetIndexLabel(1,"Support");
  
   
   SetIndexArrow(2, 111);
   SetIndexStyle(2,DRAW_ARROW,STYLE_DOT,1,White);
   SetIndexBuffer(2, v3);
   SetIndexLabel(2,"High A");
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   
   int i=Bars;
   
   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL        
  
    for(i=Bars; i>=0; i--)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0)
         {                             
          v1[i]=High[i]; 
                         
          Print ("v1[", i, "]= ", v1[i], " if");
          Print ("i=",i, " faster=", faster);
          Print ("i=",i, " slower=",slower);
          }    
               
      else          
         {
         //v1[i]=v1[i+1];
         //Print ("v1[", i, "]= ", v1[i], " else");
         }
      
      val2=iFractals(NULL, 0, MODE_LOWER,i);
      if (val2 > 0)
         {
          v2[i]=Low[i];
          
          Print ("v2[", i, "]= ", v2[i], " if");
         }
          
      else          
         {
         //v2[i]=v2[i+1]; 
         //Print ("v2[", i, "]= ", v2[i], " else");         
         }
      }

   
     
//----
   return(0);
  }
//+------------------------------------------------------------------+




2011.09.28 16:43:30 sup_res EURUSD,M5: i=411 faster=-0.0005

2011.09.28 16:43:30 sup_res EURUSD,M5: v1[411]=1.3522 如果
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[414]= 1.3495 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=414 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=414 faster=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[414]=1.3527 如果
2011.09.28 16:43:30 sup_res EURUSD,M5: i=417 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=417 faster=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[417]= 1.3528 if
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[419]=1.3506 if
2011.09.28 16:43:30 sup_res EURUSD,M5: i=420 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=420 faster=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[420]=1.3523 如果
2011.09.28 16:43:30 sup_res EURUSD,M5: i=426 slower=-0.0007
2011.09.28 16:43:30 sup_res EURUSD,M5: i=426 faster=-0.0005
2011.09.28 16:43:30 sup_res EURUSD,M5: v1[426]=1.3522 如果
2011.09.28 16:43:30 sup_res EURUSD,M5: v2[429]=1.3481 if


当运行指示器时,会打印出这个信息

但同样的代码在EA中却没有打印出数组

2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=227 faster=-0.0015
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v1[227]=0 if
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v2[230]=0 if
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=232 slower=-0.0013
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: i=232 faster=-0.0015
2011.09.28 16:43:48 2011.01.02 18:42 Agent86_5min EURUSD,M5: v1[232]=0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=825 faster=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[825]=0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=829 slower=-0.0008
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=829 faster=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[829]=0 if
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=832 slower=-0.0008
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: i=832 faster=-0.0015
2011.09.28 16:43:47 2011.01.02 18:28 Agent86_5min EURUSD,M5: v1[832]=0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=240 faster=-0.0011
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v1[240]=0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[241]=0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[245]=0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=245 slower=-0.0003
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: i=245 faster=-0.0011
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v1[245]=0 if
2011.09.28 16:43:46 2011.01.02 18:13 Agent86_5min EURUSD,M5: v2[249]=0 if


我不知道为什么它又求助于不打印数组,因为它和指标的代码完全一样。
不管怎么说,我现在先在指标上下功夫。

这些数值似乎从4位数的小数到负4位数的小数都有。

如果我把iMACD移位改为i,那么更快和更慢=0,一直如此

 
Agent86:

我试着在代码的不同区域插入if(faster > slower),只是为了玩玩这个想法。通常情况下,这些想法在EA中会起作用,但在指标中不会。

IEif(v1 > 0 && faster > slower)

但这导致了指标的消失。

试试这个变化
//   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN
//            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL        
  
    for(i=Bars-1; i>=0; i--)
     {
   double   faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); //MODE_SIGNAL        
 
Agent86:


我不知道为什么它又诉诸于不打印数组,因为它和指标的代码完全一样


你不能在EA 中使用 指标 缓冲区......这解释了:https://www.mql5.com/en/articles/1456

在整个循环过程中,快和慢都是相同的值,而 i 的值在不断变化,这是你想要和需要的吗?

 
RaptorUK:

你不能在EA 中使用 指标 缓冲区......这解释了:https://www.mql5.com/en/articles/1456

在整个循环过程中,快和慢都是相同的值,而 i 的值在不断变化,这是你想要和需要的吗?


好的,谢谢你的链接。我忘了这一点。这对我来说是个很大的信息量。无知的障碍,大笑。

所以无论如何,我试图使高分形只在另一个条件发生时形成,如iMACD交叉,或EMA交叉或其他一些指标交叉。
这样,只有当所有条件都满足时,分形才会显示在指标上。
然后,我也会在类似条件下对低位分形进行处理。

我可能也会尝试添加更复杂的条件,只是为了学习如何去做。我的意思是,它可能不是iFractals,而是其他一些具有各种条件的指标,同时也是其他指标。

设计对我来说是个大问题,因为我没有经验,所以我没有见过许多一般代码中使用的战术或理论。所以我现在只能通过阅读别人的代码来学习,看看他们是如何工作的,并试图理解他们所做的事情,从中学习。

不管怎样,我会继续努力的,谢谢
 
WHRoeder:
试试这样的改变
嗯,有意思

所以这个变量也必须在循环中声明。


好了,现在玩起来应该很有趣了,谢谢大家

 

我更喜欢只实例化一次,所有循环的vrbs,先在循环之外。 如果你在循环中声明它们,每一次迭代,编译器都会创建新的变量。尽管它们看起来是一样的,但实际上它们不是。

 double     faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1), //MODE_MAIN
           slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); //MODE_SIGNAL        
  
    for(i=Bars-1; i>=0; i--)
     {
            faster = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,i), //MODE_MAIN
            slower = iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,i); //MODE_SIGNAL 
 
diostar:
我更喜欢只实例化一次,所有循环的vrbs,先在循环之外。 如果你在循环中声明它们,对于每一次迭代,编译器都会创建新的变量。尽管它们看起来是一样的,但实际上它们不是。
你到底是怎么得出这个结论的,功能上 的区别是什么?