静态数组 ? - 页 5

 
AHHHHHHH!现在他告诉我LOL

好吧,这是我得到的东西,有一些结果,我不完全理解这些结果,但我想我可以从那里弄清楚,并理解为什么我永远无法得到一个结果。

谢谢

//+------------------------------------------------------------------+
//|                                                  Agent86_5min.mq4 |
//|                                                    Unfinished POS |
//|                                    
//+------------------------------------------------------------------+
#property copyright "Unfinished POS by Agent86"


//---- input parameters
extern double    TakeProfit=20.0;
extern double    Lots=0.1;
extern double    StopLoss=15.0;
extern int MagicNumber=123486;

double v1[5];
double v2[];
double v3[];
double val1;
double val2;
double val3;


//++++ These are adjusted for 5 digit brokers.

int     pips2points;    // slippage  3 pips    3=points    30=points
double  pips2dbl;       // Stoploss 15 pips    0.0015      0.00150
int     Digits.pips;    // DoubleToStr(dbl/pips2dbl, Digits.pips)

    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
   if (Digits == 5 || Digits == 3)
   {    // Adjust for five (5) digit brokers.
      pips2dbl    = Point*10; pips2points = 10;   Digits.pips = 1;
   } 
   else 
    {    
      pips2dbl    = Point;    pips2points =  1;   Digits.pips = 0; 
    }
    // OrderSend(... Slippage.Pips * pips2points, Bid - StopLossPips * pips2dbl
     
   
    
//---- 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
   
    
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
  
   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(int i=Bars; i >= 0; i--)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
   
      // Print (val1, (" val1")); //will print some 0's
      if (val1 > 0)
         {        
          v1[i]=High[i];
 
         }
      else          
         {
         v1[i]=v1[i+1];
         }
        

      val2=iFractals(NULL, 0, MODE_LOWER,i);
     
      if (val2 > 0) 
         {
         v2[i]=Low[i];
         }
      else          v2[i]=v2[i+1];
       
     }   
     
     for(i=Bars; i >= 0; i--)
     {
     val1=iFractals(NULL, 0, MODE_UPPER,i);
     if(val1>0)
      {
      double v1[6];
      v1[5]=High[i];
      Print ("v1[", 5, "]= ", v1[5]);
      }
     }
     
        
                       
        
           

//---- 

 
                    
        

                
   return(0);
  }    

//+------------------------------------------------------------------+
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3312
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3315
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3301
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3301
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3302
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3296
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3293
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3292
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3293
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3292
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3284
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3299
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3306
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3325
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3361
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3343
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3399
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3419
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3422
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3422
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3398
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3374
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3375
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3378
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3387
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3389
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3389
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3383
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3373
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3372
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3368
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3356
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3366
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3369
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3386
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3361
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3301
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3296
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3297
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3297
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3297
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3301
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3303
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3314
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3307
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3307
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3302
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3301
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3294
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3297
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3292
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3292
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]=1.3292
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.3293
2011.09.21 10:54:46 2011.01.03 02:28 Agent86_5min EURUSD,M5: v1[5]= 1.329
 
所以现在我可以回去弄清楚如何参考以前的分形

谢谢

 
总有一种解释......你只需要找到它。)
 
RaptorUK:

是的,指标缓冲区的处理方式与普通数组不同。

v[i]不是在声明数组,它只是其中的一个元素 ......但是double v[]; 是一个零元素的数组 ......所以 v[anything] 总是 = 0

这让我很困惑。
所以你实际上可以把值放进数组,但由于它没有被声明,所以在不知道它是哪个元素的情况下,是没有办法访问这些元素的。

那么,如果数组中的元素为零,缓冲器如何知道如何画出v1[i]的线。?

是不是因为它真的只是一个静态的bool,而不是真的像一个数组一样在这一点上行事。
但在绘制时,元素中没有实际的值,只是True,而且在那一刻可以绘制High[i]?

如果我没有说清楚,请澄清。

谢谢你的指导
 

指示器缓冲区 是特殊的Arrays ......不要把Arrays和Buffers混为一谈,它们是相似而又不同的。

在原来的代码中,v1[]和v2[]是缓冲区,在你最新的代码中,它们是数组,当你声明一个数组时,你必须给它一个大小,例如,v1[50]有50个元素,从v1[0]到v1[49]。当需要更多的元素时,缓冲区会自动调整大小,并且数值会在缓冲区内自动移动。 考虑到当前形成的条形图,即条形图0,当这个条形图完成后,与该条形图相关的指标值必须转移到索引1 ......这是用缓冲区自动完成的,如果你想用数组做类似的事情,你可以,但你必须自己编码。

 
好吧,我明白了,我只是不知道缓冲区其实是不一样的,这正是我需要了解的,我很可能在不久前就会明白这个道理。

谢谢
 
for(i=Bars; i >= 0; i--)
      {
      val3=iFractals(NULL, 0, MODE_UPPER,i);
      if(val3>0)
         {      
         v3[1]=High[i];
         double v3[9];
// if I put v3[1]=High[i]; here in stead of above it will not draw the line, probably because of this buffer topic again
         Print ("v1[", 1, "]= ", v3[1]);
         }
      }

无论如何,我想我现在可能取得了一些好的进展


我看到我可以把这一行放在数组声明的上面,它显示了指标,但只打印0,如果我把它放在下面,就会打印出数值

 
请问关于iFractals和当val1>0时

我假设这意味着==True,然后继续

那么在这一点上,我怎么能知道这个值,因为只要是真的,简单的打印会打印出一个正在变化的值

,而且还声明了数组,然后声明了数组中的一个元素,比如v1[3]=High[i]打印结果也会随着val1>0而继续变化

所以我试图理解这一点,以及我如何可能在此刻冻结时间,它将是val1>0,或者我如何在不使用缓冲区中的[i]值的情况下知道实际的分形 值是什么,因为我无法从缓冲区中获得该值,因为我们之前讨论过,[i]没有声明数组,而且本身是未宣布的。好吧,是部分未声明。

所以我想,声明数组并赋值为High[i]会产生我想要的打印结果,然而,它并不像指标那样是固定的,那么指标如何有一个固定的值,我如何重现这个值,以便使用这个值或将它重命名为其他变量,使之有用。

请指教

谢谢






 
也许你应该先解释一下你想做什么 ......完全不提任何代码 ......只是简单的英语。 这可能会使我们双方都更清楚地了解情况 . . ;-)
 
RaptorUK:
也许你应该先解释一下你想做什么 ......完全不提任何代码 ......只是简单的英语。 这可能会使我们双方都更清楚地了解情况 . . ;-)
LOL OK

我想我只是想学会参考信号本身会在图表上显示的分形。
不是所有的,而是选择一个,或之前的一个,高点和/或低点,并选择它们来使用。
以一种ABCD的命名方法来使用

由于iFractals似乎几乎可以做到我自己创建的这个用途,我希望能够给这些分形一个变量名称

这样我就可以设计代码来引用这些固定的iFractals,就像指标中显示的那样,也像v1[i]=High[i]中显示的那样,在新的分形形成之前一直显示。指示器显示的是保持固定的值

因此,我打算尝试创建一个代码,为当前的v1[i]=High[i]创建一个变量,这可能是A,但我想要一个像指标中那样的固定值,而不是像我的Print语句那样的一个移动值。

然后我可能想从以前的High[i]中选择,把它标记为A或B,如果(A>High[i]在那个时候)可能是C,等等。要试着想出一个好的ABCD方案,用于一个完全不同的策略的另一部分。但我注意到很多人在纤维和许多其他部分和指标中使用这种ABCD方案,但我只是想学习如何创建一个基本的ABCD方案,甚至可能以后让它根据这些ABCD画出趋势线 等等。

还有其他很多东西,但现在只是一个ABCD类型的东西。

谢谢