Сам я пока несправлюсь, плохо знаком с языком, подскажите в что не так и что поправить?

Индикатор будет работать с ценовыми отметками и я хочу протестировать различные уровнения для поиска наилучшего результата, и по результатам допилить индикатор до ума! Индикатор будет просчитывать бары в зависимости от условий и работать с предыдущими значениями..

В зависимости от показателей бара подбирает нужное уравнение, подсчитывает его, усредняет с предыдущим значением и сохраняет новое значение для дальнейшей работы и возможности обратиться к функции за значением. Я плоховато пока понимаю, не ругайте если что...
Вот как я это понял:
MQL код:

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 i, pull = prev_calculated == 0 ? rates_total-1 : prev_calculated;
double A;
for(i = 0; i < pull; i++) // первый цикл
{
if(open[i] < close[i])
{
A = (high[i]+low[i]+close[i])/3.0; // Пример уравнения
}
else if(open[i] > close[i])
{
A = (high[i]+low[i]+close[i])/3.0; // Пример уравнения
}
else
{
A = (high[i]+low[i]+close[i])/3.0; // Пример уравнения
}
double bulls;
buffer = (Bulls + A)/2.0; // Усреднение (buffer - это буфер первой линии индикатора)
}
//--- return value of prev_calculated for next call
return(Bulls);
}


Конечно я тут начибучил, подскажите как правильно?