статический массив ? - страница 3

 

Хорошо, я вижу кое-что,

 while(i>=0)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      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];
      
      i--;    
     }

когда этот цикл завершается? Когда i не >=0, т.е. -1.

то следующим кодом будет ...

     for(val1=High[i]; v1[i] == 0 ;i++)  // or v1[i] == EMPTY_VALUE
      {
      Print (v1[i]);
      }

Поэтому начальное значение для i равно -1... отсюда и распечатка. v[-1] действительно = 0, поэтому цикл завершается.

 
Когда я печатаю что-либо, оно всегда равно 0.

int i=Bars;         
   
   while(i>=0)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      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];
      
      i--;
       
     }
   
     Print (v1[i+10]);
      

Я изменил i на что-то другое и операторы while и даже создал совершенно другой код, и все, кажется, = 0, я понятия не имею почему.
Но индикатор работает, и буфер, похоже, правильно хранит val1 в пределах v1[i], но я не могу сослаться ни на что в массиве, чтобы вывести что-либо из этого.

все всегда = 0

Я продолжу читать дальше.






 
for(v1[i]=High[i]; v1[i] !=0; i++)
      {
      Print (v1[i]);
      }
      

This prints nothing so still having -1 issue I guess
но если он начинается с -1, то он заканчивается, как только он циклится один раз, потому что i++ возвращает его к нулю снова.

Я не знал, что оператор for будет затронут оператором while, поскольку это происходит вне оператора while.

 
int i=Bars;         
   
   while(i>=0)
     {
      val1=iFractals(NULL, 0, MODE_UPPER,i);
      if (val1 > 0)
      { 
      v1[i]=High[i];
      Print (v1[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];
      
      i--;
       
     }
По-прежнему 0 даже при печати внутри и перед циклом.

Похоже, даже базовые задачи ускользают от меня. Даже в документации и в книге не упоминается тема -1, по крайней мере в разделах Bars или Predefined variables, где, как я думал, она должна быть.
Хватит отчаиваться. 1,5 недели на эту простую тему и все же печатаю, как я думал, простейшую задачу, которая поможет мне двигаться в правильном направлении.

Какой облом! LOL

Завтра попробую еще немного.
 

Вы не очень внимательно прочитали мое сообщение...

Bars не равна -1 в любой момент времени ... и не имеет ничего общего с -1, о котором я говорил.

Вы используете переменную i в двух циклах ... если вы не измените ее на какое-то другое значение между циклами, то ее начальное значение во втором цикле будет равно ее конечному значению в первом цикле.

 
Я запутался


Я вообще избавился от цикла for и думал, что буду просто печатать внутри цикла.
Я пробовал переинициализировать i=0 или i !=0 безрезультатно. или даже совсем другую переменную, например val3-iFractals.....a.
И a=0, и не бары, потом считал оттуда же вверх и печать все равно равна 0.

Не понимаю, почему печать внутри цикла не работает, как в приведенном выше коде.

Спасибо

 

Может быть, вы сможете ответить на один вопрос для меня...

Почему так много людей с небольшим опытом кодирования, кажется, в ужасе от добавления операторов Print? Почему вы хотите усложнить себе жизнь... может быть, вы любите садо-мазо?

У вас есть один единственный оператор Print . . и он выводит 0 ... вы даже не знаете, какое значение i было в тот момент, вы не знаете, какое значение val1 было ... вы знаете, как работает iFractals, я имею в виду, как он вычисляет, что он делает и какой диапазон значений он дает?

 

Я скопировал ваш код, добавил несколько операторов печати и запустил его... он печатает...

2011.09.18 14:42:24 Agent86 EURUSD,H1: v1[29]= 1.4727

 
RaptorUK:

Может быть, вы сможете ответить на один вопрос для меня...

Почему так много людей с небольшим опытом кодирования, кажется, в ужасе от добавления операторов Print? Почему вы хотите усложнить себе жизнь... может быть, вы любите садо-мазо?

У вас есть один единственный оператор Print . ... и он выводит 0... Вы даже не знаете, какое значение i было в то время, вы не знаете, какое значение val1 было... Вы знаете, как работает iFractals, я имею в виду, как он вычисляет, что он делает и какой диапазон значений он дает?


Я не боюсь добавлять операторы Print, я поместил их после каждой переменной и не понимаю, что она печатает и почему, потому что это не то, что я ожидал увидеть.
Единственный оператор печати, который вы видите, не единственный, который я туда поместил. Я бы не стал писать, если бы попробовал только один единственный оператор печати.
Только через 2-3 недели после того, как я перепробовал сотни вещей и прочитал и перечитал 100's сообщений, и словарь, книгу, документацию и многое другое, я написал сообщение, чтобы попытаться понять, как работает этот массив и как печатать элементы и значения

Я работал над этим 2-3 часа в день, пытаясь понять это, и я не намного ближе, хотя я узнал много других вещей, пытаясь разобраться в этом.

Я полностью переписал код с циклом for вместо цикла while и ограничил массив 100 элементами, думая, что это немного упростит задачу; и все равно не смог вывести значения.


Я просто не понимаю этого.

Я думал, что iFractals дает значение high/low средней свечи в серии из 5 свечей при условии, что эти 2) свечи слева и 2) свечи справа выше или ниже средней свечи. Отметка или запись точки максимума или минимума средней свечи.

Я не знаю фактических вычислений iFractals, но я не думал, что это будет иметь значение, поскольку я печатал его, если >0, что, как я думал, означает true, и поскольку он инициализируется с High[i] также.

Я просто не понимаю этого.


 
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[0]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[1]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[2]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[3]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[4]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[5]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[6]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[7]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[8]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[9]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[10]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[11]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[12]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[13]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[14]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[15]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[16]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[17]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[18]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[19]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[20]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[21]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[22]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[23]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[24]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[25]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[26]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[27]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[28]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[29]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[30]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[31]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[32]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[33]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[34]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[35]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[36]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[37]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[38]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[39]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[40]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[41]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[42]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[43]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[44]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[45]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[46]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[47]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[48]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[49]= 0
2011.09.20 20:41:50 2011.01.03 10:21 Agent86_5min EURUSD,M5: v1[50]= 0


Из этого кода, и да, там были другие операторы печати, кроме val1, все другие попытки вывести v1[i] в любом месте кода печатают = 0

//+------------------------------------------------------------------+
//|                                                  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[];
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];
     
      i--;
       
     }
   
   for(i=50; i>=0; i--)
      {
      Print ("v1[", i, "]= ", v1[i]);
      }

//----
            
                       
            

           

//---- 

 
                    
        

                
   return(0);
  }    

//+------------------------------------------------------------------+
Причина обращения: