[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 354

Владимир Тезис
4267
Владимир Тезис  
Есть сочинение Н.Старицкого. По нему снят фильм "За двумя зайцами". Хочу почитать этого гениального автора. Мне не удаётся найти его текст. Помогите найти. и извините, если попросил не в ту ветку ;)
Сергей
78
Сергей  

подскажите, как работает ArrayMaximum?

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Поиск элемента с максимальным значением. Функция возвращает позицию максимального элемента в массиве.
Параметры:array[] - Числовой массив, в котором производится поиск.
count - Количество элементов для поиска.
start - Начальный индекс для поиска.

Пример:
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(num_array);
Print("Max value = ", num_array[maxValueIdx]);

значит тут мне не понятно count... как написать, чтоб у меня советник искал, скажем, со 2го номера массива?

int MinArray[7] = {1,2,3,4,5,6,7}

int ArrayMaximum (MinArray[7], "А тут что?", 2); не понятно мне

FelixFX
78
FelixFX  
splxgf:

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

1. Можно брать каждый уровень и просматривать данные за два года. Затраты: количество баров умножаем на количество уровней.

2. Можно создать отдельный массив уровней. И достаточно перебрать все бары проверяя и инкрементируя нужные элементы массива. В этом случае вычисления будут производиться быстрее.

Меня интересует пример подобный данному:

for (a=0;a<=100;a++){

for (b=0;b<=100;b++){

for (c=0;c<=100;c++){

for (d=0;d<=100;d++){

for (e=0;e<=100;e++){

for (f=0;f<=100;f++){

for (g=0;g<=100000;g++){

jaw_val1=iAlligator(NULL, 0, a, b, c, d, f, e, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW, g);

jaw_val2=iAlligator(NULL, 0, a, b, c, d, f, e, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH , g);

jaw_val3=iAlligator(NULL, 0, a, b, c, d, f, e, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS , g);

if ( jaw_val1>Close[g] && jaw_val2>Close[g] && jaw_val3>Close[g]) sum=sum+(High[g]-Low[g]);

}}}}}}}


Но тогда массив должен быть 7-ми мерный?

Artyom Trishkin
Модератор
58758
Artyom Trishkin  
CLAIN:

подскажите, как работает ArrayMaximum?

int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)

Поиск элемента с максимальным значением. Функция возвращает позицию максимального элемента в массиве.
Параметры:array[] - Числовой массив, в котором производится поиск.
count - Количество элементов для поиска.
start - Начальный индекс для поиска.

Пример:
double num_array[15]={4,1,6,3,9,4,1,6,3,9,4,1,6,3,9};
int maxValueIdx=ArrayMaximum(num_array);
Print("Max value = ", num_array[maxValueIdx]);

значит тут мне не понятно count... как написать, чтоб у меня советник искал, скажем, со 2го номера массива?

int MinArray[7] = {1,2,3,4,5,6,7}

int ArrayMaximum (MinArray[7], "А тут что?", 2); не понятно мне

Допустим, есть у вас массив DataMass[], в котором содержатся некие значения. Тип содержащихся в нём значений - double.

Вам нужно найти наибольшее значение, содержащееся в этом массиве, начиная с нулевого элемента массива:

int IndexMaxValue=ArrayMaximum(DataMass, WHOLE_ARRAY, 0); // находим индекс элемента с наибольшим значением.

double MaxValue=DataMass[IndexMaxValue]; // находим максимальное значение в массиве по его индексу

Строку поиска элемента с максимальным значением можно записать короче:

int IndexMaxValue=ArrayMaximum(DataMass); // Два последних аргумента функции имеют значения по умолчанию, поэтому их можно опустить при вызове функции, ведь мы ищем по всему массиву (WHOLE_ARRAY) и начиная с нулевой ячейки (0), а эти значения передаются в функцию по умолчанию.

Всё это можно записать одной строкой:

double MaxValue=DataMass[ArrayMaximum(DataMass)]; // находим максимальное значение в массиве по его индексу.

В переменной MaxValue будет содержаться искомое максимальное значение в массиве DataMass[]


Если же вам нужно искать не во всём массиве и начиная не с нулевого элемента, то эти значения нужно указывать явно в передаваемых параметрах:

int IndexMaxValue=ArrayMaximum(DataMass, WHOLE_ARRAY, 2); // находим индекс элемента с наибольшим значением. Поиск выполняем по всему массиву (WHOLE_ARRAY), начиная со второй ячейки (2)

int IndexMaxValue=ArrayMaximum(DataMass, 10, 3); // находим индекс элемента с наибольшим значением. Поиск выполняем по десяти элементам массива (10), начиная с третьей ячейки (3)


Надеюсь доходчиво объяснил :)

Сергей
78
Сергей  
artmedia70:
Допустим, есть у вас массив DataMass[], в котором содержатся некие значения. Тип содержащихся в нём значений - double.

Вам нужно найти наибольшее значение, содержащееся в этом массиве, начиная с нулевого элемента массива:

int IndexMaxValue=ArrayMaximum(DataMass, WHOLE_ARRAY, 0); // находим индекс элемента с наибольшим значением.

double MaxValue=DataMass[IndexMaxValue]; // находим максимальное значение в массиве по его индексу

Строку поиска элемента с максимальным значением можно записать короче:

int IndexMaxValue=ArrayMaximum(DataMass); // Два последних аргумента функции имеют значения по умолчанию, поэтому их можно опустить при вызове функции, ведь мы ищем по всему массиву (WHOLE_ARRAY) и начиная с нулевой ячейки (0), а эти значения передаются в функцию по умолчанию.

Теперь всё это можно записать одной строкой:

double MaxValue=DataMass[ArrayMaximum(DataMass)]; // находим максимальное значение в массиве по его индексу

Если же вам нужно искать не во всём массиве и начиная не с нулевого элемента, то эти значения нужно указывать явно в передаваемых параметрах:

int IndexMaxValue=ArrayMaximum(DataMass, WHOLE_ARRAY, 2); // находим индекс элемента с наибольшим значением. Поиск выполняем по всему массиву (WHOLE_ARRAY), начиная со второй ячейки

int IndexMaxValue=ArrayMaximum(DataMass, 10, 3); // находим индекс элемента с наибольшим значением. Поиск выполняем по десяти элементам массива (10), начиная с третьей ячейки

Надеюсь доходчиво объяснил :)



более чем =) спасибо, но один вопрос все же остался.... а что если у меня 2 одинаковых максимальных значения, то какое он выберет? то, которое слева?
Artyom Trishkin
Модератор
58758
Artyom Trishkin  
CLAIN:

более чем =) спасибо, но один вопрос все же остался.... а что если у меня 2 одинаковых максимальных значения, то какое он выберет? то, которое слева?

А проверьте :)

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

По индексу и определите которое из двух наибольших значений он вам выводит.

Artyom Trishkin
Модератор
58758
Artyom Trishkin  

Выводит индекс ближайшего к началу поиска:

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                             Copyright © 2011, Trishkin Artyom A. |
//|                                           support@goldsuccess.ru |
//|                                           Skype: artmedia70      |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, Trishkin Artyom A."
#property link      "support@goldsuccess.ru"
//                   Skype: artmedia70
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
double DataMass[15]={4,1,6,3,19,4,1,6,3,19,4,1,6,3,9}; // индекс первого = 4, индекс второго = 9

int start()
  {
//----
   int IndexMaxValue=ArrayMaximum(DataMass); 
   double MaxValue=DataMass[IndexMaxValue]; // находим максимальное значение в массиве по его индексу
   Alert("Индекс максимального элемента массива = "+IndexMaxValue+", его значение = "+MaxValue);
//----
   return(0);
  }
//+------------------------------------------------------------------+

Догадайтесь индекс которого он выводит :)

Виктор
Модератор
6448
Виктор  
drknn:
Есть сочинение Н.Старицкого. По нему снят фильм "За двумя зайцами". Хочу почитать этого гениального автора. Мне не удаётся найти его текст. Помогите найти. и извините, если попросил не в ту ветку ;)
Владимир, это пьеса. Вот текст.
Andrei Shubin
187
Andrei Shubin  

Доброе утро! Есть два вопроса (чего-то нигде не могу найти удобоваримого ответа):

1. Индикатор рисует в подокне два ряда вертикальных трендовых линий. Как мне получить номера баров, соответствующих этим линиям?

2. В том же индикаторе необходимо отрисовывать линии в будущее где-то на 24 часа вперед. Но что-то никак не соображу, как это лучше реализовать.

Очень надеюсь на помощь форумчан!)

3057826
65
3057826  
Помогите добавить функцию удаления ордеров пожалуйста!