- Как перезаписывать значения в массиве?
- Как просто отобразить заранее известные данные в своем индикаторе?
- Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6.
Я только учусь и на массивах попал в засаду: пытаюсь написать скрипт в котором массив данных будет перезаписываться. Например, 10 индексов, 0-9, допустим даты с 1 по 10 января, как 11 числа удалить данные за 1 января и вписать данные за 11, т.е. перезаписать в массив данные со 2 по 11 января, затем с 3 по 12 и т.д.?
Через промежуточный массив. Сначала копируете со сдвигом 1 в промежуточный массив. Затем дописываете один элемент в этот промежуточный массив. Последняя операция - копирование из промежуточного массива в начальный, но теперь без сдвига.
Давайте так: объявите два массива размерностью 10. Заполните данными первый массив. А потом ArrayCopy но со смещением (смотреть справку). Распечатайте второй массив.
ArrayCopy(AskBufferTemp,AskBuffer,1,0+delta,InpVisible); AskBufferTemp[0]=last_tick.ask; ArrayCopy(AskBuffer,AskBufferTemp,0,0,InpVisible);
Я нашел такую конструкцию, но она перезаписывает только last_tick.ask и работает только в индикаторах, через INDICATOR_DATA, если данных в массиве много, то приходится писать десятки массивов и при каждом перезапуске обнулять все массивы и главное, в скрипте это не работает, в нем нет индикаторных буферов. Может есть способ перебором в For перезаписывать?
Я только учусь и на массивах попал в засаду: пытаюсь написать скрипт в котором массив данных будет перезаписываться. Например, 10 индексов, 0-9, допустим даты с 1 по 10 января, как 11 числа удалить данные за 1 января и вписать данные за 11, т.е. перезаписать в массив данные со 2 по 11 января, затем с 3 по 12 и т.д.?
https://book.mql4.com/ru/functions/timeseries
- book.mql4.com
Что надо сделать - сдвинуть массив влево, потом в ячейку 9 записать данные за сегодня. Если массив маленький, можно тупо сдвинуть, как я напишу ниже, если большой - использовать кольцевой буфер для скорости
написал ерунду спросоня )) вот так правильно
double dt[10]; void ShiftAndPutData(double data) { for(int n = 0; n < 9; n++) //shift left dt[n] = dt[n+1]; dt[9] = data; }
https://book.mql4.com/ru/functions/timeseries
- 2012.11.03
- Dmitry Fedoseev
- www.mql5.com
Я учусь в пятерке, прочитал несколько статей, в том числе https://www.mql5.com/ru/articles/567 и везде лишь общие сведения, вроде ArrayCopy наилучший вариант, но не получается заставить его работать
Вам же дают ключевую подсказку - Скопировать массив в промежуточный, сдвиньте его, в освободившуюся клетку добавьте новое значение. Скопируйте обратно.
И каким образом копировать и сдвигать тоже подсказали. Вариантов несколько. Через Копи, через Цикл перебором, и тд
Я Вам дал ссылку на очень понятное изложение понятия Массивы, и как с ними работать. Тут ведь не важно МТ4 или МТ5 для понимания сути.
Вам же дают ключевую подсказку - Скопировать массив в промежуточный, сдвиньте его, в освободившуюся клетку добавьте новое значение. Скопируйте обратно.
И каким образом копировать и сдвигать тоже подсказали. Вариантов несколько. Через Копи, через Цикл перебором, и тд
Вроде что-то слепил, не знаю, можно ли так писать, но вроде работает, выдает 1 предупреждение
CustomMqlTick arr0[3]; CustomMqlTick arr1[3]; static int j; if(j<3) { for(int i=j;i<3 && !IsStopped();i++) { arr0[i]=my_tick0; ArrayPrint(arr0); } } j=j+1; if(j==3) { for(int v=0;v<2 && !IsStopped();v++) { arr1[v]=arr0[v+1]; } j=2; ArrayCopy(arr0,arr1,0,0,2); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования