Скачать MetaTrader 5

iEnvelopesOnArray всегда дает 0

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй торговый сигнал. Получи доступ к миллионам трейдеров!
Vladislav Andruschenko
91988
Vladislav Andruschenko 2015.01.23 11:18 

Приветствую всех,

не могу понять в чем ошибка

есть массив  ssld в нем все данные заполнены

но вот при вызове  iEnvelopesOnArray всегда выдает 0 

 

      double val1=iEnvelopesOnArray(ssld,ENVma_period,ENVma_period,MODE_SMA,0,ENVdeviation,MODE_MAIN,i);
      Print("i="+i+" val1="+val1+" ssld="+ssld[i]);
2015.01.23 13:16:10.123 EURGBP,M1: i=5009 val1=0 ssld=0.76832
2015.01.23 13:16:10.123 EURGBP,M1: i=5010 val1=0 ssld=0.76835
2015.01.23 13:16:10.123 EURGBP,M1: i=5011 val1=0 ssld=0.76838

2015.01.23 13:16:10.105 EURGBP,M1: initialized

 

 

и деинициализируется после 3 проходов 

в чем может быть трабл?  


Vladislav Andruschenko
91988
Vladislav Andruschenko 2015.01.23 11:23  
2015.01.23 13:22:23.360 Access violation read to 0x09986000

Victor Nikolaev
Модератор
14508
Victor Nikolaev 2015.01.23 12:06  
ArraySetAsSeries() не пробовали использовать.
Vladislav Andruschenko
91988
Vladislav Andruschenko 2015.01.23 12:07  

пробовал, не получается. 

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

Vladislav Andruschenko
91988
Vladislav Andruschenko 2015.01.23 12:10  

вот грубо говоря код 

int start()
  {
   int counted_bars=IndicatorCounted();
   int i,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=MathMin(Bars-counted_bars,Bars-1);
   ArrayResize(ssld_temp,100);
   ArraySetAsSeries(ssld_temp,true);

   for(i=limit;i>=0;i--)
     {
      double hiPrice = iSmooth(High[i+1],TromPeriod,SmoothPhase,i+1, 0);
      double loPrice = iSmooth(Low[i+1] ,TromPeriod,SmoothPhase,i+1,10);
      double clPrice = iSmooth(Close[i] ,TromPeriod,SmoothPhase,i  ,20);


      Hlv[i]=Hlv[i+1];
      if(clPrice>hiPrice) Hlv[i] =  1;
      if(clPrice<loPrice) Hlv[i] = -1;

      if(Hlv[i]==-1)
        {
         ssld[i] = hiPrice;
         sslu[i] = loPrice;
        }
      else
        {
         ssld[i] = loPrice;
         sslu[i] = hiPrice;
        }
     }
   ArraySetAsSeries(ssld_temp,true);

   for(i=0; i<100; i++)
     {

      ssld_temp[i]=ssld[i];
     }

   for(i=0; i<100; i++)
     {

      double val1=iEnvelopesOnArray(ssld_temp,0,ENVma_period,MODE_SMA,0,ENVdeviation,MODE_UPPER,i);
      envelopes[i]=val1;
      Print("ArraySize ="+ArraySize(ssld_temp)+"i="+i+" ssld_temp="+ssld_temp[i]+" ssld="+ssld[i]+" envelopes="+envelopes[i]);
     }
   return(0);
  }

 

индикатор считает и записывает свои буферы - далее после расчетов я его буферы 100 штук копирую в свой массив.

далее пытаюсь рассчитать  iEnvelopesOnArray по этому массиву. 

но мне выдает всегда 0  

Vladislav Andruschenko
91988
Vladislav Andruschenko 2015.01.23 12:14  
Access violation read to 0x04781000 
ArraySize =100i=95 ssld_temp=0.75036 ssld=0.75036 envelopes=0
ArraySize =100i=96 ssld_temp=0.75046 ssld=0.75046 envelopes=0
ArraySize =100i=97 ssld_temp=0.75065 ssld=0.75065 envelopes=0
 initialized

Vladislav Andruschenko
91988
Vladislav Andruschenko 2015.01.23 12:19  
вот и я не пойму в чем дело 
Victor Nikolaev
Модератор
14508
Victor Nikolaev 2015.01.23 12:32  
  for(i=0; i<100; i++)
     {

      ssld_temp[i]=ssld[i];
     }

   for(i=0; i<100; i++)
     {

      double val1=iEnvelopesOnArray(ssld_temp,0,ENVma_period,MODE_SMA,0,ENVdeviation,MODE_UPPER,i);
      envelopes[i]=val1;
      Print("ArraySize ="+ArraySize(ssld_temp)+"i="+i+" ssld_temp="+ssld_temp[i]+" ssld="+ssld[i]+" envelopes="+envelopes[i]);
     }
Копируете 100 элементов и для 100 элементов пытаетесь сделать расчет. Если ENVma=100, то можно получить только одно значение. Для других не хватает данных
Alexander
2920
Alexander 2015.01.23 12:50  

Смотрим. Какой билд терминала ?
Приложите, пожалуйста, рабочий код для воспроизведения

Vladislav Andruschenko
91988
Vladislav Andruschenko 2015.01.23 14:34  
Vinin:
Копируете 100 элементов и для 100 элементов пытаетесь сделать расчет. Если ENVma=100, то можно получить только одно значение. Для других не хватает данных
в том то и дело что ENVma_period = 3
Vladislav Andruschenko
91988
Vladislav Andruschenko 2015.01.23 14:35  

билд 765

в том то и дело что любой код, вне зависимости от индикатора - любой код не работает  

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий