Три максимума за период, не последних. Вернее не обязательно последних.
Смотрите: у вас есть массив со значениями. Вам нужно найти в этом массиве три максимума. Они не обязаны быть ни последними, ни первыми в массиве таймсерии. Нужно просто найти три максимума.
1. Копируем ваш массив во временный (искать будем во временном массиве):
int ArrayCopy(object &dest[], object source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY)
Копирует один массив в другой. Массивы должны иметь одинаковый тип. Массивы типа double[], int[], datetime[], color[], и bool[], можно копировать как массивы одного типа. Возвращает количество скопированных элементов.
Параметры:
dest[]
-
Массив-приемник.
source[]
-
Массив-источник.
start_dest
-
Начальный индекс для приемного массива. По умолчанию, стартовый индекс - 0.
start_source
-
Начальный индекс для исходного массива. По умолчанию, стартовый индекс - 0.
count
-
Количество элементов, которые нужно скопировать. По умолчанию, весь массив (WHOLE_ARRAY).
2. Ищем во временном массиве максимальное значение:
int ArrayMaximum(double array[], int count=WHOLE_ARRAY, int start=0)
Поиск элемента с максимальным значением. Функция возвращает позицию максимального элемента в массиве.
Параметры:
array[]
-
Числовой массив, в котором производится поиск.
count
-
Количество элементов для поиска.
start
-
Начальный индекс для поиска.
3. Сохраняем найденный индекс в массиве (напр. MassIndexMaxValue[])
4. Обнуляем значение найденного максимума во временном массиве - просто пишем туда ноль
5. Опять ищем во временном массиве следующее максимальное значение (индекс первого найденного у нас уже сохранён в MassIndexMaxValue[] и значение этого максимума обнулено)
Этот цикл продолжаем до тех пор, пока не найдём нужное количество максимальных значений во временном массиве.
Теперь массив MassIndexMaxValue[] будет содержать индексы нужного количества максимальных значений в вашем массиве. Размер временного массива после завершения поиска обнуляем - память незачем засорять
Вот как-то так...
ЗЫ... тут вот на коленке набросал по-быстрому... может где и ошибся - писал спросонья и не проверял ничего, но функция примерно такого содержания:
void FindMaxValue(double &ms[], int &ind[], int NumMaxValue) {
int i, IndMax;
double tmp[]; // создаём временный массивArrayResize(ind,NumMaxValue); // изменяем размер массива индексов максимальных значений под количество макс. значенийArrayResize(tmp,ArraySize(ms)); // размер временного массива = размеру вашего массива значенийArrayCopy(tmp, ms); // копируем ваш массив во временныйfor (i=0; i<NumMaxValue; i++) { // цикл по количеству искомых максимумов
IndMax=ArrayMaximum(tmp); // ищем индекс максимального значения
ind[i]=IndMax; // сохраняем индекс i-го максимального значения
tmp[IndMax]=0; // обнуляем i-е найденное максимальное значение во временном массиве
}
ArrayResize(tmp,0); // обнуляем размер временного массиваreturn;
}
Смотрите: у вас есть массив со значениями. Вам нужно найти в этом массиве три максимума. Они не обязаны быть ни последними, ни первыми в массиве таймсерии. Нужно просто найти три максимума.
Артём, спасибо Вам большое!
Рада, что моя мысль с обнуленим максимального значения массива была правильной, а Вы расписали всё в деталях, с копированием в другой массив, теперь буду разбираться в мелочах
и по совету Владимира начну с алгоритма программы, обработаю Вашу информацию и уверена всё получится - учителя хорошие.
Подскажите пожалуйста, как можно получать сигналы из пользовательского индикатора в эксперт?
Я воспользовался iCustom, но сов все равно не получает сигнала
А с другими индикаторами такая же история? Если да, то Вы не верно задействуете функцию iCustom(). Если нет, то попробуйте посмотреть код индикатора - вполне может так случиться, что Ваш индикатор ввобще не задействует ни одного индикаторного буффера - работает с построением графических объектов.
Но она почему-то не работает. Вызывается в советнике сразу в начале после int start() следующим образом:
if(!Trade())
{
Sleep(5000);
return;
}
Во вкладках Журнал и Эксперты советник loaded successfully, и больше ничего. Хотя должно появиться "В выходные не торгуем.", т.к. 26.11.2011 - суббота.
Возможно код индикатора iCustom не поддается... слишком мало в Вашем вопросе информации для ответа.
Индикатор рисует линии поддержки и сопротивления,с чем и справляется во время визуализации. Сам индикатор при пересечении дает сигнал LT_1 == 1 или -1.
Но она почему-то не работает. Вызывается в советнике сразу в начале после int start() следующим образом:
Во вкладках Журнал и Эксперты советник loaded successfully, и больше ничего. Хотя должно появиться "В выходные не торгуем.", т.к. 26.11.2011 - суббота.
Где ошибка и что я делаю не так?
Сегодня суббота - выходной. Вы запускаете эксперта, происходит инициализация, но поскольку выходной и тика нет, функция старта не запускается (то есть Trade() не вызывается.). Для проверки правильности её работы нужно сунуть вызов этой функции в блок инициализации, ну или тестить в тестере.
skyjet: Индикатор рисует линии поддержки и сопротивления,с чем и справляется во время визуализации. Сам индикатор при пересечении дает сигнал LT_1 == 1 или -1.
ТОгда вообще не парься - чисто перенеси код индюка в эксперта как есть на выполнение торговых критериев и все - далее в сове по этим перенесенным торговым условиям с этого индюка открываешь позы через советника и все...
Три максимума за период, не последних. Вернее не обязательно последних.
Смотрите: у вас есть массив со значениями. Вам нужно найти в этом массиве три максимума. Они не обязаны быть ни последними, ни первыми в массиве таймсерии. Нужно просто найти три максимума.
1. Копируем ваш массив во временный (искать будем во временном массиве):
int ArrayCopy( object &dest[], object source[], int start_dest=0, int start_source=0, int count=WHOLE_ARRAY)
Копирует один массив в другой. Массивы должны иметь одинаковый тип. Массивы типа double[], int[], datetime[], color[], и bool[], можно копировать как массивы одного типа.Возвращает количество скопированных элементов.
2. Ищем во временном массиве максимальное значение:
int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)
Поиск элемента с максимальным значением. Функция возвращает позицию максимального элемента в массиве.3. Сохраняем найденный индекс в массиве (напр. MassIndexMaxValue[])
4. Обнуляем значение найденного максимума во временном массиве - просто пишем туда ноль
5. Опять ищем во временном массиве следующее максимальное значение (индекс первого найденного у нас уже сохранён в MassIndexMaxValue[] и значение этого максимума обнулено)
Этот цикл продолжаем до тех пор, пока не найдём нужное количество максимальных значений во временном массиве.
Теперь массив MassIndexMaxValue[] будет содержать индексы нужного количества максимальных значений в вашем массиве.
Размер временного массива после завершения поиска обнуляем - память незачем засорять
Вот как-то так...
ЗЫ... тут вот на коленке набросал по-быстрому... может где и ошибся - писал спросонья и не проверял ничего, но функция примерно такого содержания:
При её вызове:
FindMaxValue(Ваш_Массив_Значений, MassIndexMaxValue, 3);... ранее определённый массив int MassIndexMaxValue[] должен содержать индексы найденных трёх максимальных значений в Ваш_Массив_Значений[];
Не могу понять как вычисляется процент прибыли на сделку и процент убытка на сделку. Подскажите?
http://www.assessor.ru/forum/index.php?t=822
Смотрите: у вас есть массив со значениями. Вам нужно найти в этом массиве три максимума. Они не обязаны быть ни последними, ни первыми в массиве таймсерии. Нужно просто найти три максимума.
Артём, спасибо Вам большое!
Рада, что моя мысль с обнуленим максимального значения массива была правильной, а Вы расписали всё в деталях, с копированием в другой массив, теперь буду разбираться в мелочах
и по совету Владимира начну с алгоритма программы, обработаю Вашу информацию и уверена всё получится - учителя хорошие.
ОТДЕЛЬНОЕ СПАСИБО ЗА СТАТЬЮ https://www.mql5.com/ru/articles/1357
Добрый день!
Подскажите пожалуйста, как можно получать сигналы из пользовательского индикатора в эксперт?
Я воспользовался iCustom, но сов все равно не получает сигнала
Добрый день!
Подскажите пожалуйста, как можно получать сигналы из пользовательского индикатора в эксперт?
Я воспользовался iCustom, но сов все равно не получает сигнала
Возможно код индикатора iCustom не поддается... слишком мало в Вашем вопросе информации для ответа.
Добрый день!
Подскажите пожалуйста, как можно получать сигналы из пользовательского индикатора в эксперт?
Я воспользовался iCustom, но сов все равно не получает сигнала
А с другими индикаторами такая же история? Если да, то Вы не верно задействуете функцию iCustom(). Если нет, то попробуйте посмотреть код индикатора - вполне может так случиться, что Ваш индикатор ввобще не задействует ни одного индикаторного буффера - работает с построением графических объектов.
Здравствуйте. Имеется функция:
Но она почему-то не работает. Вызывается в советнике сразу в начале после int start() следующим образом:
Во вкладках Журнал и Эксперты советник loaded successfully, и больше ничего. Хотя должно появиться "В выходные не торгуем.", т.к. 26.11.2011 - суббота.
Где ошибка и что я делаю не так?
Возможно код индикатора iCustom не поддается... слишком мало в Вашем вопросе информации для ответа.
Здравствуйте. Имеется функция:
Но она почему-то не работает. Вызывается в советнике сразу в начале после int start() следующим образом:
Во вкладках Журнал и Эксперты советник loaded successfully, и больше ничего. Хотя должно появиться "В выходные не торгуем.", т.к. 26.11.2011 - суббота.
Где ошибка и что я делаю не так?
Сегодня суббота - выходной. Вы запускаете эксперта, происходит инициализация, но поскольку выходной и тика нет, функция старта не запускается (то есть Trade() не вызывается.). Для проверки правильности её работы нужно сунуть вызов этой функции в блок инициализации, ну или тестить в тестере.
Индикатор рисует линии поддержки и сопротивления,с чем и справляется во время визуализации. Сам индикатор при пересечении дает сигнал LT_1 == 1 или -1.
ТОгда вообще не парься - чисто перенеси код индюка в эксперта как есть на выполнение торговых критериев и все - далее в сове по этим перенесенным торговым условиям с этого индюка открываешь позы через советника и все...