Подскажите про массивы

 
Я только учусь и на массивах попал в засаду: пытаюсь написать скрипт в котором массив данных будет перезаписываться. Например, 10 индексов, 0-9, допустим даты с 1 по 10 января, как 11 числа удалить данные за 1 января и вписать данные за 11, т.е. перезаписать в массив данные со 2 по 11 января, затем с 3 по 12 и т.д.?
 
ovak77:
Я только учусь и на массивах попал в засаду: пытаюсь написать скрипт в котором массив данных будет перезаписываться. Например, 10 индексов, 0-9, допустим даты с 1 по 10 января, как 11 числа удалить данные за 1 января и вписать данные за 11, т.е. перезаписать в массив данные со 2 по 11 января, затем с 3 по 12 и т.д.?
Через промежуточный массив. Сначала копируете со сдвигом 1 в промежуточный массив. Затем дописываете один элемент в этот промежуточный массив. Последняя операция - копирование из промежуточного массива в начальный, но теперь без сдвига.
 
Vladimir Karputov:
Через промежуточный массив. Сначала копируете со сдвигом 1 в промежуточный массив. Затем дописываете один элемент в этот промежуточный массив. Последняя операция - копирование из промежуточного массива в начальный, но теперь без сдвига.
ничего не понял, я только учусь, пробовал переборами, пробовал через ArrayCopy, не получается. Покажите пожалуйста пример
 
ovak77:
ничего не понял, я только учусь, пробовал переборами, пробовал через ArrayCopy, не получается. Покажите пожалуйста пример
Давайте так: объявите два массива размерностью 10. Заполните данными первый массив. А потом ArrayCopy но со смещением (смотреть справку). Распечатайте второй массив.
 
Vladimir Karputov:
Давайте так: объявите два массива размерностью 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 перезаписывать?

 
ovak77:
Я только учусь и на массивах попал в засаду: пытаюсь написать скрипт в котором массив данных будет перезаписываться. Например, 10 индексов, 0-9, допустим даты с 1 по 10 января, как 11 числа удалить данные за 1 января и вписать данные за 11, т.е. перезаписать в массив данные со 2 по 11 января, затем с 3 по 12 и т.д.?

https://book.mql4.com/ru/functions/timeseries

Массивы и таймсерии - Стандартные функции - Учебник по MQL4
Массивы и таймсерии - Стандартные функции - Учебник по MQL4
  • book.mql4.com
При работе с массивами очень важно помнить, что в MQL4 нумерация любой последовательности однотипных элементов начинается с нуля. Ранее указывалось, что не следует путать максимальное значение индекса элемента массива с количеством элементов этого массива (см. Массивы). Например, если объявлен массив: то это значит, что одномерный массив...
 
Alexey Volchanskiy:

Что надо сделать - сдвинуть массив влево, потом в ячейку 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;
}
 
Andrei Fandeev:

https://book.mql4.com/ru/functions/timeseries

Я учусь в пятерке, прочитал несколько статей, в том числе https://www.mql5.com/ru/articles/567 и везде лишь общие сведения, вроде ArrayCopy наилучший вариант, но не получается заставить его работать
Основы программирования на MQL5 - Массивы
Основы программирования на MQL5 - Массивы
  • 2012.11.03
  • Dmitry Fedoseev
  • www.mql5.com
Наряду с переменными и функциями, массивы являются практически неотъемлемой частью любого языка программирования. Замечено, что некоторые начинающие изучать программирование, панически боятся массивов. Удивительно, но факт! Смею заверить вас, что бояться их не нужно. Массивы, по своей сути, это все те же обычные переменные. Если не вдаваться в...
 
ovak77:
Я учусь в пятерке, прочитал несколько статей, в том числе https://www.mql5.com/ru/articles/567 и везде лишь общие сведения, вроде ArrayCopy наилучший вариант, но не получается заставить его работать
Я Вам дал ссылку на очень понятное изложение понятия Массивы, и как с ними работать. Тут ведь не важно МТ4 или МТ5 для понимания сути.
Вам же дают ключевую подсказку - Скопировать массив в промежуточный, сдвиньте его, в освободившуюся клетку добавьте новое значение. Скопируйте обратно.
И каким образом копировать и сдвигать тоже подсказали. Вариантов несколько. Через Копи, через Цикл перебором, и тд
 
Andrei Fandeev:
Я Вам дал ссылку на очень понятное изложение понятия Массивы, и как с ними работать. Тут ведь не важно МТ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);
        }