Проблема с отрисовкой/вычислением индикаторов в терминале - страница 4

 
Vinin:

Не говорю что код плохой или хороший. Просто у Вас довольно своеобразная логика (по крайней мере на мою слабо похожа).

Не могу не согласиться: сначала куча объявленных статических переменных, а затем "изменение значений внешних переменных" - своеобразная логика...
 
TarasBY:

Для начала уберите ВСЕ static переменные (пусть будут "просто глобальными") - потом расскажете, что получилось.


попробую. после тестирования дам знать
 
TarasBY:
Не могу не согласиться: сначала куча объявленных статических переменных, а затем "изменение значений внешних переменных" - своеобразная логика...


думаю да, вы правы. скорее всего именно это влияет на правильный расчет

как то я пропустил этот момент.

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

и видимо совсем упустил из виду то, что их значения неизменны в процессе работы индикатора

это весьма ценный совет, большое спасибо

 
I_SPQR_I:

думаю да, вы правы. скорее всего именно это влияет на правильный расчет

как то я пропустил этот момент.

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

и видимо совсем упустил из виду то, что их значения неизменны в процессе работы индикатора

это весьма ценный совет, большое спасибо

Посмотрите в своём коде последнюю функцию: она "не явно возвращает значение" - так надо, или Вы что-то пропустили?
 
TarasBY:
Посмотрите в своём коде последнюю функцию: она "не явно возвращает значение" - так надо, или Вы что-то пропустили?


если вы про эту функцию

double TopDistant(double& ChH[],double& ChL[],int& ANTH[],double& ATH[],int& ANTL[],double& ATL[],int UDTop)
  {
     int i;
     double Delta;
     if(UDTop==0 || UDTop==1)
     for(i=0;i<ArraySize(ANTH);i++)
        {
          Delta=Delta+(ATH[i]-ChH[ANTH[i]]);
        }
     if(UDTop==0 || UDTop==-1)
     for(i=0;i<ArraySize(ANTL);i++)
        {
          Delta=Delta+(ATL[i]-ChL[ANTL[i]]);
        }
     return(MathAbs(Delta));
  }
то там явно есть вывод значения
return(MathAbs(Delta));
или может вы про то, что существуют такие UDTop, при которых расчет не проводится? UDTop - это флаг, который принимает целочисленные значения от -1 до 1.
 
I_SPQR_I:

если вы про эту функцию

то там явно есть вывод значения
или может вы про то, что существуют такие UDTop, при которых расчет не проводится? UDTop - это флаг, который принимает целочисленные значения от -1 до 1.

Согласен. Я немножко приводил Ваш код в удобочитаемый для себя вид и return() попал внутрь последнего if() - пришлось натуитивно восстанавливать:

double TopDistant (double& ChH[],
                   double& ChL[],
                   int& ANTH[],
                   double& ATH[],
                   int& ANTL[],
                   double& ATL[],
                   int UDTop)
{
    double Delta = 0.0;
//----
    if (UDTop == 0)
    {
        if (UDTop == 1)
        {
            for (int i = 0; i < ArraySize (ANTH); i++)
            {Delta += (ATH[i] - ChH[ANTH[i]]);}
        }
        if (UDTop == -1)
        {
            for (i = 0; i < ArraySize (ANTL); i++)
            {Delta += (ATL[i] - ChL[ANTL[i]]);}
        }
    }
//----
    return (MathAbs (Delta));
}

Вопрос снят.

 
TarasBY:

Вопрос снят.


А вам не кажется, что в отредактированном вами варианте при UDTop==0 расчет Delta проводится не будет?
 
I_SPQR_I:

А вам не кажется, что в отредактированном вами варианте при UDTop==0 расчет Delta проводится не будет?
Вы правы ("бес попутал" - не обратил внимания что стоит оператор "||", а не "&") - чужой код всегда "потёмки"... :)
Причина обращения: