Помогите добавить буфер!

 

Здравствуйте.

У меня не получается добавить буфер к индикатору, постоянно выдает число 2147483647, а должен или 1 или 0.

Кто помогите, помогите.

Файлы:
ascvtrend.mq4  5 kb
 

Как писать iCustom() я знаю, мне нужно добавить буфер переменных dn и up.

 
rensbit >>:

Здравствуйте.

У меня не получается добавить буфер к индикатору, постоянно выдает число 2147483647, а должен или 1 или 0.

Кто помогите, помогите.


Не могли бы уточнить проблему ( у меня ваш код работает нормально) 

Я правда изменил    Range = AvgRange / 10;      на     Range = AvgRange * 0.1;  но это скорее по привычке заменять где можно / на *

эта замена роли не играет потому что   0/10 в MQL спокойно проходит а вот наоборот  10/0  какраз может выдать 2147483647 но у вас в коде

n/0 я не нашел поэтому не пойму проблему?

 
rensbit >>:

Как писать iCustom() я знаю, мне нужно добавить буфер переменных dn и up.

Выложите код который не работает

 
Urain >>:

Не могли бы уточнить проблему ( у меня ваш код работает нормально)

Я правда изменил Range = AvgRange / 10; на Range = AvgRange * 0.1; но это скорее по привычке заменять где можно / на *

эта замена роли не играет потому что 0/10 в MQL спокойно проходит а вот наоборот 10/0 какраз может выдать 2147483647 но у вас в коде

n/0 я не нашел поэтому не пойму проблему?

В индикаторе есть два буфера val1buffer[] и val2buffer[]. Up и dn в индикаторе простые переменные. Нужно сделать из низ тритий и четверты буфер - up[] и dn[].


з.ы. нумерация начиная с нуля :)


з.з.ы. код не мой :)

 
rensbit писал(а) >>

Щас подожди 5 мин,но лучшеб дал свой черновик

тебе нужно визуализировать,или кудато передавать?

 
Urain >>:

Щас подожди 5 мин,но лучшеб дал свой черновик

тебе нужно визуализировать,или кудато передавать?

передавать в советник

 

rensbit писал(а) >>

Держи (Я оставил вывод в файл, для проверки если не нужно убери, буфера bool, но можно и int )

//+------------------------------------------------------------------+
//|                                                    ASC Trend.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, PIPS 2009"
//----
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Green
#property indicator_color2 Red
//----
extern int RISK = 4;
extern int AllBars = 250;
//----
double val1buffer[];
double val2buffer[];
bool up[], dn[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {up[0]=0; dn[0]=0; 
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY);
   SetIndexArrow(0, 108);
   SetIndexBuffer(0, val1buffer);
//----
   SetIndexStyle(1, DRAW_ARROW, EMPTY);
   SetIndexArrow(1, 108);
   SetIndexBuffer(1, val2buffer);
   SetIndexBuffer(2, dn);
   SetIndexBuffer(3, up);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   ArrayResize(dn,Bars-1);ArrayResize(up,Bars-1);
   //ArrayInitialize(dn,0);ArrayInitialize(up,0);
     
   double value2;
   double value3;
   double value10 = 10;
   double value11;
   double x1 = 70;
   double x2 = 30;
   int TrueCount;
   int counter;
   int MRO1;
   int MRO2;
   int i1;
   double Range;
   double AvgRange;
   double val1;
   double val2;
   double Table_value2[500][2];
   int counted_bars = IndicatorCounted();
   value10 = 3 + RISK*2;
   x1 = 67 + RISK;
   x2 = 33 - RISK;
   value11 = value10;
//----
   if(counted_bars < 0) 
       return (-1);
//----
   if(counted_bars > 0) 
       counted_bars--;  //last bar recounted
   int i;
   int shift = Bars - counted_bars - 1;
   if(shift > AllBars) 
       shift = AllBars;     
   for(i = shift; i > 0; i--)
     {          
       counter = i;
       Range = 0;
       AvgRange = 0;
       //----
       for(counter = i; counter <= i + 9; counter++)
           AvgRange = AvgRange + MathAbs(High[counter] - Low[counter]);
       Range = AvgRange * 0.1;
       counter = i;
       TrueCount = 0;
       //----
       while(counter < i + 9 && TrueCount < 1)
         {
           if(MathAbs(Open[counter] - Close[counter+1]) >= Range*2.0)
               TrueCount++;
           counter++;
         }
       //----
       if(TrueCount >= 1) 
           MRO1 = counter ; 
       else 
           MRO1 = -1;  
       counter = i;
       TrueCount = 0;
       //----
       while(counter < i + 6 && TrueCount < 1)
         {
           if(MathAbs(Close[counter+3] - Close[counter]) >= Range*4.6)
             {
               TrueCount++;
             }
           counter++;
         }
       //----
       if(TrueCount >= 1) 
           MRO2 = counter; 
       else 
           MRO2 = -1;    
       //----
       if(MRO1 > -1) 
           value11 = 3; 
       else 
           value11 = value10;        
       //----
       if(MRO2 > -1) 
           value11 = 4; 
       else 
           value11 = value10;   
       value2 = 100 - MathAbs(iWPR(NULL, 0, value11, i));
       Table_value2[i][0] = i;
       Table_value2[i][1] = value2;
       val1 = 0;
       val2 = 0;
       value3 = 0;
       //----
       if(value2 < x2 )  // x2 = 30
         {
           i1 = 1;
           //----
           while(Table_value2[i+i1][1] >= x2 && Table_value2[i+i1][1] <= x1)
               i1++;
           //----
           if(Table_value2[i+i1][1] > x1)
             {
               value3 = High[i] + Range*0.5;
               val1 = value3;
             }
         }
       //----
       if(value2>x1)  // x1 = 70 
         {  
           i1 = 1;
           //----
           while(Table_value2[i+i1][1] >= x2 && Table_value2[i+i1][1] <= x1)
             {
               i1++;
             }
           //----
           if(Table_value2[i+i1][1] < x2)
             {
               value3 = Low[i]-Range*0.5;
               val2 = value3;
             } 
         }
       //----
       if(val2 != 0 && up[i] == 0)
         {     
           val1buffer[i] = val2 - 1*Point;
           up[i] = 1;
           dn[i] = 0;
           //----
           if(shift <= 2)
               Alert(Symbol(), " ", Period(), "M  Asctrend BUY ");
         }  
       //----
       if(val1 !=0 && dn[i] == 0)
         {
           val2buffer[i] = val1 + 1*Point;
           dn[i] = 1;
           up[i] = 0;
           //----
           if(shift <= 2)
               Alert(Symbol(), " ", Period(), "M   Asctrend SELL ");
         }
     }
   Prints("ASC Trend");  
   return(0);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void Prints(string files)
      {
       int han = FileOpen(files+".txt", FILE_WRITE," "); 
       if(han>0){//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,           
                 FileWrite(han," ");      
                 for(int i=0;i<1000;i++)
                    {FileWrite(han,i," ",dn[i]," ",up[i]); 
                    } 
                 FileClose(han);
                }
        return;
      }//============================================================ 

прости выкладую сюда нет времени WinRar устанавливать

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