[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 192

 

Подскажите, плз. Что-то не врубаюсь почему не работает MathMax.

Упрощённая версия кода (проще не бывает) и та не работает. Переменную GBPUSD_High не считает ни в какую :-( Хотя с GBPUSD_Low всё нормально.

P.S. интересуют только значения на барах с момента подгрузки индикатора.

//+-------------------------------------------------------------------
#property indicator_separate_window
#property indicator_buffers
3
#property indicator_color1 Black
#property indicator_color2 Gray
#property indicator_color3 Gray
//--------------------------------------------------------------------
double
GBPUSD[], GBPUSD_High[], GBPUSD_Low[];
//--------------------------------------------------------------------
int
init()
{
//--------------------------------------------------------------------
SetIndexBuffer
(0,GBPUSD);
SetIndexStyle
(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer
(1,GBPUSD_High);
SetIndexStyle
(1,DRAW_LINE,STYLE_DOT,1);
SetIndexBuffer
(2,GBPUSD_Low);
SetIndexStyle
(2,DRAW_LINE,STYLE_DOT,1);
//--------------------------------------------------------------------
return
;
}
//--------------------------------------------------------------------
int
start()
{
int
Counted_bars, i;
//--------------------------------------------------------------------
Counted_bars=IndicatorCounted();
i=Bars-Counted_bars-1;
while
(i>=0)
{
GBPUSD[i]=Close[i];
if
(GBPUSD_Low[i]==0) GBPUSD_Low[i]=GBPUSD[i];
GBPUSD_High[i]=MathMax(GBPUSD_High[i],GBPUSD[i]);
GBPUSD_Low[i]=MathMin(GBPUSD_Low[i],GBPUSD[i]);
i--;
}
//--------------------------------------------------------------------
return
;
}
//--------------------------------------------------------------------

Подгружать, естественно, к GBPUSD.

 
alderru >>:

Подскажите, плз. Что-то не врубаюсь почему не работает MathMax.

Упрощённая версия кода (проще не бывает) и та не работает. Переменную GBPUSD_High не считает ни в какую :-( Хотя с GBPUSD_Low всё нормально.

P.S. интересуют только значения на барах с момента подгрузки индикатора.

Подгружать, естественно, к GBPUSD.

MathMax ни причем. откуда переменные данные берут? Вариант:

while (i>=0)
{
GBPUSD[i]=Close[i];
GBPUSD_High[i]=High  [i];
GBPUSD_Low[i]=Low[i];

//if (GBPUSD_Low[i]==0) GBPUSD_Low[i]=GBPUSD[i];

GBPUSD_High[i]=MathMax(GBPUSD_High[i],GBPUSD[i]);
GBPUSD_Low[i]=MathMin(GBPUSD_Low[i],GBPUSD[i]);
i--;
}
 
tmp.0 >>:

MathMax ни причем. ..

Именно! Итак ясно, что High всегда больше или равен Close, MathMin - тоже самое ;)

 
OneDepo писал(а) >>

Именно! Итак ясно, что High всегда больше или равен Close, MathMin - тоже самое ;)

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

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

С точки зрения граматики программирования замечания есть?

Установите индикатор, скажите, что здесь не так, почему не расчитывается значение GBPUSD_High.

 
alderru >>:

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

Я не понимаю почему не работает сама функция MathMax.

С точки зрения граматики программирования замечания есть?

Установите индикатор и скажите, что здесь не так, почему не расчитывается значение GBPUSD_High.

Не дурите голову. вставляете в понравившееся место кода это:

Print (GBPUSD_High[i],":",GBPUSD_Low[i],":",GBPUSD[i]); 
и будет вам прозрение во вкладке "эксперты".
 
tmp.0 писал(а) >>

Не дурите голову. вставляете в понравившееся место кода это:

и будет вам прозрение во вкладке "эксперты".

Ну и что...

Нет прозрения. Print печатает только два значения, так же как и отображает индикатор. Что с третьим??

Вы хоть сами попробовали сделать то, что советуете?

 
Следующий вопрос, пожалуйста :)
 
tmp.0 писал(а) >>
Следующий вопрос, пожалуйста :)

Очень умно.

Спасибо за "помощь".

 
alderru >>:

Очень умно.

Спасибо за "помощь".

Вам уже дали ответ выше. Причина - использование неприсвоенного значения в правой части оператора присваивания. Чему равно GBPUSD_High[i] в строке

GBPUSD_High[i]=MathMax(GBPUSD_High[i],GBPUSD[i]);

вам и вариант исправления ситуации показали. Оставьте иронию.


 
OneDepo писал(а) >>

Причина - использование неприсвоенного значения в правой части оператора присваивания.

Значит обьявление индикаторных буферов вовсе не означает, что значения ячеек равны нулю. Правильно?

Следовательно, MathMax не расчитывается так как одна из сравниваемых величин (а именно GBPUSD_High) не имеет значения (вообще ни какого, даже нуля).

Понятно. Спасибо OneDepo.

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

Буду думать.

P.S. но почему же MathMin считается без вопросов, условия ведь равные и обьявленны одинаково?

P.S.S. Где-то сильно туплю. Не получается. Помогите, пожалуйста.

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