Общие вопросы по разработке > Math.Max

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Аватара пользователя
Den
Сообщения: 345
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Math.Max

Непрочитанное сообщение Den » 05 окт 2017, 21:54

Добрый день ,друзья !

Как выбрать максимальное (минимальное) значение из массива с более чем тремя значениями ?
Кроме Math.Max напрямую в АД вроде ничего нет?

Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Math.Max

Непрочитанное сообщение evge » 06 окт 2017, 07:02

Если это касается серии, тогда если в самый конец документации по скриптам заглянуть, там есть следующие

ВСТРОЕННЫЕ ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ
IsUp(Series, N=1, D=0) – возвращает истинность утверждения «ряд со смещением D растет N точек подряд»

IsDown(Series, N=1, D=0) – возвращает истинность утверждения «ряд со смещением D снижается N точек»

CrossAbove(Series1, Series2) – возвращает истинность утверждения «ряд Series1 пересек вверх ряд Series2»

CrossBelow(Series1, Series2) – возвращает истинность утверждения «ряд Series1 пересек вниз ряд Series2»

MinValue(Series, N=1, D=0) – возвращает минимальное значение из N точек ряд Series со смещением D назад

MaxValue(Series, N=1, D=0) – возвращает максимальное значение из N точек ряд Series со смещением D назад


если это список, то использовать метод Max() для списка
никогда такого не было и вот опять

Аватара пользователя
Den
Сообщения: 345
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Math.Max

Непрочитанное сообщение Den » 06 окт 2017, 10:39

evge, я хотел использовать его для выбора макс/мин значения из рядя Input.Low и Input.High

посмотри пожалуйста, как совместить два индикатора, показывающие разницу между Low и High чтобы они показывали не одновременно, а поочередно (Down на падении Up на росте)

Код: Выделить всё

function Initialize()
{
IndicatorName = "DOWN";
AddInput("Input", Inputs.Candle);
AddShadowSeries("D", DrawAs.Custom, Color.Violet);
PriceStudy = true;
AddParameter("P", 2, 1);
}
function Evaluate()
{
if (Input.High[0] > Input.Low[1] && Input.High[0] < Input.High[1]);

D = Math.Max(Input.High[0],Input.High[1]) - Input.Low[0];

D.DrawHistogram(Input.Open, Color.Blue, Line.Solid, 1, Color.Blue, 5);
}




второй

Код: Выделить всё

function Initialize()
{
IndicatorName = "UP";
AddInput("Input", Inputs.Candle);
AddShadowSeries("D", DrawAs.Custom, Color.Lime);
PriceStudy = true;
AddParameter("P", 2, 1);
}
function Evaluate()
{
if (Input.High[0] > Input.Low[1] && Input.Low[1] < Input.Low[0]);

D = Input.High[0] - Math.Min(Input.Low[0],Input.Low[1]);

D.DrawHistogram(Input.Open, Color.Blue, Line.Solid, 1, Color.Blue, 5);
}



Аватара пользователя
Den
Сообщения: 345
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Math.Max

Непрочитанное сообщение Den » 06 окт 2017, 11:43

они вот так показывают, неудобно
Вложения
11.png
11.png (13.24 КБ) 8229 просмотров

Аватара пользователя
Den
Сообщения: 345
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Math.Max

Непрочитанное сообщение Den » 06 окт 2017, 12:16

не допру как его заставить показывать поочередно ?


Код: Выделить всё

function Initialize()
{
IndicatorName = "A";
AddInput("Input", Inputs.Candle);
AddShadowSeries("D", DrawAs.Custom, Color.Violet);
AddShadowSeries("U", DrawAs.Custom, Color.Lime);


PriceStudy = true;
AddParameter("P", 2, 1);
}

function Evaluate()
{
if (Math.Max(Input.High[0],Input.High[1]) > MY.индикатор(Input.Close, 0, 0, 2).GetValue("D", 0));

D = Math.Max(Input.High[0],Input.High[1]) - Input.Low[0];

D.DrawHistogram(Input.Open, Color.Blue, Line.Solid, 1, Color.Blue, 3);



if (Math.Min(Input.Low[0],Input.Low[1]) < MY.индикатор(Input.Close, 0, 0, 2).GetValue("U", 0));

U = Input.High[0] - Math.Min(Input.Low[0],Input.Low[1]);

U.DrawHistogram(Input.Open, Color.Blue, Line.Solid, 1, Color.Blue, 3);


}



Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Math.Max

Непрочитанное сообщение evge » 06 окт 2017, 12:52

Den писал(а):if (Input.High[0] > Input.Low[1] && Input.High[0] < Input.High[1]);


что это? ведь оно ничего не делает. Условие с пустым выполняемым кодом. Для чего это здесь?

Den писал(а):показывающие разницу между Low и High


Low и High чего?

Den писал(а):Down на падении Up на росте


А где определение? Что такое падение? Что такое рост?
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Math.Max

Непрочитанное сообщение evge » 06 окт 2017, 12:55

Den писал(а):не допру как его заставить показывать поочередно ?


Сначала надо правильно написать условия.

Оба условия в вашем коде ничего не делают, т.к. в конце стоит ";"
никогда такого не было и вот опять

Аватара пользователя
Den
Сообщения: 345
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Math.Max

Непрочитанное сообщение Den » 06 окт 2017, 13:29

так тоже чёто не выходит.

MY.индикатор дублирует Last (не знаю как сравнить с ним) - то есть если Input.High > Last - падение, если Input.Low <Last - рост
тут углубленo до High[4]/Low[4]

Код: Выделить всё

function Initialize()
{
IndicatorName = "A";
AddInput("Input", Inputs.Candle);
AddShadowSeries("D", DrawAs.Custom, Color.Violet);
AddShadowSeries("U", DrawAs.Custom, Color.Lime);


PriceStudy = true;
AddParameter("P", 2, 1);
}

function Evaluate()
{
if (Math.Max(Input.High[0],Input.High[1]) > MY.индикатор(Input.Close, 0, 0, 2).GetValue("D", 0))

D = Math.Max(Math.Max((Math.Max(Input.High[0],Input.High[1])), (Math.Max(Input.High[1],Input.High[2]))),Math.Max((Math.Max(Input.High[2],Input.High[3])), (Math.Max(Input.High[3],Input.High[4])))) - Input.Low[0];

D.DrawHistogram(Input.Open, Color.Blue, Line.Solid, 1, Color.Blue, 3);



if (Math.Min(Input.Low[0],Input.Low[1]) < MY.индикатор(Input.Close, 0, 0, 2).GetValue("U", 0))

U = Input.High[0] - Math.Min(Math.Min((Math.Min(Input.Low[0],Input.Low[1])), (Math.Min(Input.Low[1],Input.Low[2]))),Math.Min((Math.Min(Input.Low[2],Input.Low[3])), (Math.Min(Input.Low[3],Input.Low[4]))));

U.DrawHistogram(Input.Open, Color.Blue, Line.Solid, 1, Color.Blue, 3);


}



Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Math.Max

Непрочитанное сообщение evge » 06 окт 2017, 14:15

а что изменилось? убрали ";" и этого достаточно? Ведь код который должен выполнятся в условии нужно брать в фигурные скобки {...}

ну и знать как заложили алгоритм в свой индикатор не могу, это ваш алгоритм :)
никогда такого не было и вот опять

Аватара пользователя
Den
Сообщения: 345
Зарегистрирован: 09 фев 2016, 15:52
Благодарил (а): 14 раз
Поблагодарили: 4 раза

Re: Math.Max

Непрочитанное сообщение Den » 06 окт 2017, 14:42

evge , ГДЕ СКОБКИ ПРОПУЩЕНЫ? перед условием и после стоят скобки

индикатор = Last я ж говорю, он движется одновременно с ценой


Вернуться в «Общие вопросы по разработке»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей