Meta Editor выдает ошибку 'ArrayMinimum' - constant cannot be modified и 'ArrayMaximum' - constant cannot be modified, а также '=' - illegal operation use по присвоению переменной PrevClose в следующем коде:
ulong copied = CopyTicksRange(Symbol(), ticks, COPY_TICKS_INFO, t0, t1);
ArrayResize(ticks, copied, 100000);
double PrevClose = ticks[copied-1]; // Получаем последний элемент массива как значение PrevClosedouble highestHigh = ArrayMaximum(ticks, 0, copied - 1); // Находим максимальное значение в массиве ticksdouble lowestLow = ArrayMinimum(ticks, 0, copied - 1); // Находим минимальное значение в массиве ticks
Meta Editor выдает ошибку 'ArrayMinimum' - constant cannot be modified и 'ArrayMaximum' - constant cannot be modified, а также '=' - illegal operation use по присвоению переменной PrevClose в следующем коде:
"Находим максимальное значение в массиве ticks"- максимальное значение чего мы находим?
ticks[copied-1].bid или ticks[copied-1].flags
Шутка)))
Скорее всего вы перепутали CopyTicks с CopyRates, хотя там тоже массив структур и указывать, какой элемент структуры вам нужен.
double PrevClose = rates[copied-1].close;
У вас в коде лишняя строка.
ArrayResize(ticks, copied, 100000);
Не нужна она так как CopyTicks и CopyRates , сама при копировании, распределяет размер массива.
"Находим максимальное значение в массиве ticks"- максимальное значение чего мы находим?
ticks[copied-1].bid или ticks[copied-1].flags
Шутка)))
Скорее всего вы перепутали CopyTicks с CopyRates, хотя там тоже массив структур и указывать, какой элемент структуры вам нужен.
double PrevClose = rates[copied-1].close;
У вас в коде лишняя строка.
Не нужна она так как CopyTicks и CopyRates , сама при копировании, распределяет размер массива.
Благодарю за подсказку. Я не знал. На всякий случай вставляю эту строку.
Верно ли я понимаю вашу шутку, что в rates все цены усредненные и учитывают бар, а в ticks - нет? Я потому и взял tick, чтобы использовать произвольный интервал времени, а не цены баров. CopyRates у меня в аналогичной формуле заполнял за отрезок час переменную copied на максимальное значение типа ulong. Эту проблему я тоже не мог решить.
Благодарю за подсказку. Я не знал. На всякий случай вставляю эту строку.
Верно ли я понимаю вашу шутку, что в rates все цены усредненные и учитывают бар, а в ticks - нет? Я потому и взял tick, чтобы использовать произвольный интервал времени, а не цены баров. CopyRates у меня в аналогичной формуле заполнял за отрезок час переменную copied на максимальное значение типа ulong. Эту проблему я тоже не мог решить.
Всё не верно.
MqlRates-это структура, а вы обращаетесь с ней как с переменной.
Вы пытаетесь соединить тёплое с мягким, поэтому компилятор вас не понимает.
Так же как и я)))
Возможно я смог бы подсказать чего полезного, но из вашего кода совсем не понятно, что вы пытаетесь найти.
Задача стоит модифицировать WPR (Williams Percent Range) так, чтобы получать разницу значений WPR за произвольный отрезок времени, независимо от баров.
maxvoronin74 #: Задача стоит модифицировать WPR (Williams Percent Range) так, чтобы получать разницу значений WPR за произвольный отрезок времени, независимо от баров.
Возможно (но это не точно) вы это хотели получить.
MqlTick ticks[];
int copied = CopyTicksRange(Symbol(), ticks, COPY_TICKS_INFO, t0, t1);
double bid[];
for(int i = 0; i < copied; i++)
bid[i] = ticks[i].bid;
double PrevClose = bid[copied - 1]; // Получаем последний элемент массива как значение PrevClosedouble highestHigh = ArrayMaximum(bid, 0, copied); // Находим максимальное значение в массиве ticksdouble lowestLow = ArrayMinimum(bid, 0, copied); // Находим минимальное значение в массиве ticks
Благодарю. Вот, что вышло, если я правильно уловил урок:
Раз уж мы всё равно крутим цикл по всем тикам, можно в этом цикле не копировать, а сразу искать те максимумы-минимумы.
Кстати, если копировать, неплохо бы сначала задать размеры массивов, куда копируем, цикл за нас это делать не будет, вылетим из массива на первой же итерации. Это только CopyTicksRange сама целевой массив отресайзит.
Раз уж мы всё равно крутим цикл по всем тикам, можно в этом цикле не копировать, а сразу искать те максимумы-минимумы.
Кстати, если копировать, неплохо бы сначала задать размеры массивов, куда копируем, цикл за нас это делать не будет, вылетим из массива на первой же итерации. Это только CopyTicksRange сама целевой массив отресайзит.
Я перфекционист, сортировать отдельные элементы массива структур, это как пенопластом по стеклу.
Насчёт не распределенного массива, у меня есть уважительная причина. Время час ночи и жена над ухом со словами "спать пора, спать пора". )))
Meta Editor выдает ошибку 'ArrayMinimum' - constant cannot be modified и 'ArrayMaximum' - constant cannot be modified, а также '=' - illegal operation use по присвоению переменной PrevClose в следующем коде:
Meta Editor выдает ошибку 'ArrayMinimum' - constant cannot be modified и 'ArrayMaximum' - constant cannot be modified, а также '=' - illegal operation use по присвоению переменной PrevClose в следующем коде:
"Находим максимальное значение в массиве ticks"- максимальное значение чего мы находим?
ticks[copied-1].bid или ticks[copied-1].flags
Шутка)))
Скорее всего вы перепутали CopyTicks с CopyRates, хотя там тоже массив структур и указывать, какой элемент структуры вам нужен.
double PrevClose = rates[copied-1].close;
У вас в коде лишняя строка.
Не нужна она так как CopyTicks и CopyRates , сама при копировании, распределяет размер массива."Находим максимальное значение в массиве ticks"- максимальное значение чего мы находим?
ticks[copied-1].bid или ticks[copied-1].flags
Шутка)))
Скорее всего вы перепутали CopyTicks с CopyRates, хотя там тоже массив структур и указывать, какой элемент структуры вам нужен.
double PrevClose = rates[copied-1].close;
У вас в коде лишняя строка.
Не нужна она так как CopyTicks и CopyRates , сама при копировании, распределяет размер массива.Благодарю за подсказку. Я не знал. На всякий случай вставляю эту строку.
Верно ли я понимаю вашу шутку, что в rates все цены усредненные и учитывают бар, а в ticks - нет? Я потому и взял tick, чтобы использовать произвольный интервал времени, а не цены баров. CopyRates у меня в аналогичной формуле заполнял за отрезок час переменную copied на максимальное значение типа ulong. Эту проблему я тоже не мог решить.
Благодарю за подсказку. Я не знал. На всякий случай вставляю эту строку.
Верно ли я понимаю вашу шутку, что в rates все цены усредненные и учитывают бар, а в ticks - нет? Я потому и взял tick, чтобы использовать произвольный интервал времени, а не цены баров. CopyRates у меня в аналогичной формуле заполнял за отрезок час переменную copied на максимальное значение типа ulong. Эту проблему я тоже не мог решить.
Всё не верно.
MqlRates-это структура, а вы обращаетесь с ней как с переменной.
MqlTick- тоже структура.
Вы пытаетесь соединить тёплое с мягким, поэтому компилятор вас не понимает.
Так же как и я)))
Возможно я смог бы подсказать чего полезного, но из вашего кода совсем не понятно, что вы пытаетесь найти.
Всё не верно.
MqlRates-это структура, а вы обращаетесь с ней как с переменной.
MqlTick- тоже структура.
Вы пытаетесь соединить тёплое с мягким, поэтому компилятор вас не понимает.
Так же как и я)))
Возможно я смог бы подсказать чего полезного, но из вашего кода совсем не понятно, что вы пытаетесь найти.
Задача стоит модифицировать WPR (Williams Percent Range) так, чтобы получать разницу значений WPR за произвольный отрезок времени, независимо от баров.
Возможно (но это не точно) вы это хотели получить.
double lowestLow = ArrayMinimum(bid, 0, copied);
Благодарю. Вот, что вышло, если я правильно уловил урок:
Но, к сожалению по строке bid_arr[i] = ticks[i].bid; слетел Эксперт с графика по причине array out of range in 'имямоегоэксперта.mq5' (204,12).Благодарю. Вот, что вышло, если я правильно уловил урок:
Раз уж мы всё равно крутим цикл по всем тикам, можно в этом цикле не копировать, а сразу искать те максимумы-минимумы.
Кстати, если копировать, неплохо бы сначала задать размеры массивов, куда копируем, цикл за нас это делать не будет, вылетим из массива на первой же итерации. Это только CopyTicksRange сама целевой массив отресайзит.
Раз уж мы всё равно крутим цикл по всем тикам, можно в этом цикле не копировать, а сразу искать те максимумы-минимумы.
Кстати, если копировать, неплохо бы сначала задать размеры массивов, куда копируем, цикл за нас это делать не будет, вылетим из массива на первой же итерации. Это только CopyTicksRange сама целевой массив отресайзит.
Я перфекционист, сортировать отдельные элементы массива структур, это как пенопластом по стеклу.