Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 43

 

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

Спасибо,

 
dr.Vasgenich :

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

Спасибо,

/

extern int p = 4; // период ATR

//------

int start()

{

int i;

double m;

while( i < WindowBarsPerChart() - p )

{

double a = iATR( NULL, 0, p, i );

if ( m < a )

{

m = a;

}

i++;

}

Alert( " Максимальное значение ATR в пипсах для видимого количества баров равно ", m / Point ); //

/////

return(0);

}

 

Boeing747 Благодарю. Надо было сразу сюда написать.

Таким образом конечный вариант функции в моей редакции выглядит так

double ATR_Max() {
int i;
double m;
while( i < WindowBarsPerChart() - p ) {
double a = iATR( NULL, 0, p, i );
if ( m < a ) {
m = a;
}
i++;
}
Alert( " Максимальное значение ATR для видимого количества баров равно - ", m );
return(m);
}

 
dr.Vasgenich :

Boeing747 Благодарю. Надо было сразу сюда написать.

Таким образом конечный вариант функции в моей редакции выглядит так

double ATR_Max() {
int i;
double m;
while( i < WindowBarsPerChart() - p ) {
double a = iATR( NULL, 0, p, i );
if ( m < a ) {
m = a;
}
i++;
}
Alert( " Максимальное значение ATR для видимого количества баров равно - ", m );
return(m);
}

я ошибся видать в записи while( i < WindowBarsChart() - p )

скорей всего функция iATR( NULL, 0, p, i ); вычисляет значения для всех баров на чарте и можно а возможно и нужно

исправить на while( i < WindowBarsChart() ). Никогда не работал с функцией iATR(); нужно поэксперементировать как нибудь.

В принципе можно написать вашу функцию без использования функции iATR() так сказать в чистом виде .

 
Boeing747 :

я ошибся видать в записи while( i < WindowBarsChart() - p )

скорей всего функция iATR( NULL, 0, p, i ); вычисляет значения для всех баров на чарте и можно а возможно и нужно

исправить на while( i < WindowBarsChart() ). Никогда не работал с функцией iATR(); нужно поэксперементировать как нибудь.

В принципе можно написать вашу функцию без использования функции iATR() так сказать в чистом виде .


Я сейчас тоже подумал, что период кажись тут не причем. Его наверное лучше убрать.

А через массив нельзя это сделать? Собрать в массив значения всех АТР в окне а потом найти максимум через вот такую функцию - ArrayMaximum Только боюсь моих знаний на это не хватит.




 
dr.Vasgenich :

Я сейчас тоже подумал, что период кажись тут не причем. Его наверное лучше убрать.

А через массив нельзя это сделать? Собрать в массив значения всех АТР в окне а потом найти максимум через вот такую функцию - ArrayMaximum Только боюсь моих знаний на это не хватит.




Да можно прокрутить iATR(); в цикле забив ею масивы а потом при помощи ArrayMaximum извлечь максимальное значение ATR. но все равно получается масло масляного так как все равно специально для этого нужно использовать цикл для набивки массивов как и в первом варианте . но в первом варианте максимум вычислялся в процессе прокрутки цикла что значительно экономнее чем с вариантом ArrayMaximum. Тут и знаний то особых не нужно. в учебнике или в справочнике подробно рассписано про ArrayMaximum/
 
Boeing747 :
Да можно прокрутить iATR(); в цикле забив ею масивы а потом при помощи ArrayMaximum извлечь максимальное значение ATR. но все равно получается масло масляного так как все равно специально для этого нужно использовать цикл для набивки массивов как и в первом варианте . но в первом варианте максимум вычислялся в процессе прокрутки цикла что значительно экономнее чем с вариантом ArrayMaximum. Тут и знаний то особых не нужно. в учебнике или в справочнике подробно рассписано про ArrayMaximum/

Спасибо завтра попробую проверить работу. Еще один вопрос, как можно в этой функции сэкономить ресурсы тестера, чтобы максимальное значение вычислялось после появления нового бара а не с каждым тиком?
 
dr.Vasgenich :

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

можно поробовать для начала так

на глобальном уровне объявляем t

и поверх цикла пишем так;

if ( t != Time[0] )

{

t = Time[0];

// цикл где вычисляется ATRmax

}

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

 

Boeing747, dr.Vasgenich, ребята, слабо воспользоваться кнопкой "SRC" или вам и так нормально?

 
Zhunko :

Boeing747, dr.Vasgenich, ребята, слабо воспользоваться кнопкой "SRC" или вам и так нормально?

Все время забываю пользоваться кнопкой "SRC". видать в привычку уже вошло. в 60 лет трудно переучиваться . завтра поробую воспользоваться вашей кнопкой
Причина обращения: