помогите разобраться

 

Помогите написать индикатор для грааля, пишу простую вещь. Все должно работать, не могу понять что не так в коде.

Нужно просто умножить Volume[i]*(Close[i]-Close[i-1]) и положить в первый буфер Buffer1[i]


Затем взять ImaOnArray.


Что не так? Подскажите пожалуйста.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   int limit;
//---
   if(rates_total<=1)
      return(0);
//--- last counted bar will be recounted
   limit=rates_total-prev_calculated;
   if(prev_calculated>0)
      limit=limit+2;
//----
 for(int i=limit-1; i>=0; i--)
 
     {
  
   
   Buffer1[i]=volume[i]*(close[i]-close[i+1]);
   
  }
for(int i=limit-1; i>=0; i--)
 
     {
     Buffer2[i]=iMAOnArray(Buffer1,0,period1,0,MODE_EMA,i);
     
  }
 
 
 
 
    return(rates_total);
  }
Файлы:
dVPMO.mq4  5 kb
 
Ivan Strekalov:

Помогите написать индикатор для грааля, пишу простую вещь. Все должно работать, не могу понять что не так в коде.

Нужно просто умножить Volume[i]*(Close[i]-Close[i-1]) и положить в первый буфер Buffer1[i]


Затем взять ImaOnArray.


Что не так? Подскажите пожалуйста.

Потому, что бар i-1 существует только на истории. А если сделать Volume[i+1]*(Close[i+1]-Close[i]) будет запаздывание.

 
Alexey Viktorov:

Потому, что бар i-1 существует только на истории. А если сделать Volume[i+1]*(Close[i+1]-Close[i]) будет запаздывание

нет, проблема не в этом


В коде написано

 for(int i=limit-1; i>=0; i--)
 
     {
  
   
   Buffer1[i]=volume[i]*(close[i]-close[i+1]);
   
  }
for(int i=limit-1; i>=0; i--)
 
     {
     Buffer2[i]=iMAOnArray(Buffer1,0,period1,0,MODE_EMA,i);
     
  }
 

но!

Buffer1[] - тип double

а значение volume[] - тип long

Данные просто не выводятся в буфер.

Так ли это? Вы можете посмотреть файл в  приложении?

 
Ivan Strekalov:

нет, проблема не в этом


В коде написано

но!

Buffer1[] - тип double

а значение volume[] - тип long

Данные просто не выводятся в буфер.

Так ли это? Вы можете посмотреть файл в  приложении?

Зачем мне его смотреть? Мне достаточно того что я вижу здесь. Увидел проблему, дальше смотреть не интересно пока не исправите.

Вторая подсказка

Buffer1[i]=double(volume[i]*(close[i]-close[i+1]));
должно сработать.
 

Всё-таки я посмотрел код.

Почему-то выбивает на volume[i]

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

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