Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 731

 
Vitalie Postolache:

А 10000 х 10000 разве не двумерный?

double arr[10000][10000];

и всё такое...

Top2n:
Ну да это двумерный же, как то не так излагаюсь, видимо не матрица, а массив. Матрица, что ли подразумевает многомерность?
Согласен. Не так было сказано, да плюс не так было понято.

Тормозит в этом коде не запись массива, а цикл в цикле.
 
Alexey Viktorov:
Согласен. Не так было сказано, да плюс не так было понято.

Тормозит в этом коде не запись массива, а цикл в цикле.

Неужели нужно на другую среду программирования переносить, или это общая не задача для всех типов языков? Какие могут быть методы решения по ускорению?

если тупо один цикл и в нем увеличивать значение переменной из удаленного цикла

         for(int q=0; q<ARRAY_SIZE_X*ARRAY_SIZE_Y; q++) // Перебор по периоду, колонка X
                 {
                  int arr++
                  if(arr=ARRAY_SIZE_X) {z++;arr=0;}

                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);


 

Мог бы проверить, но не хочу комп мучить, если не ускорится, опять на жесткий лишнее напряжение)))

 
Top2n:

Неужели нужно на другую среду программирования переносить, или это общая не задача для всех типов языков? Какие могут быть методы решения по ускорению?

если тупо один цикл и в нем увеличивать значение переменной из удаленного цикла ускорится?

Мог бы проверить, но не хочу комп мучить, если не ускорится, опять на жесткий лишнее напряжение)))

А записать массив после цикла - никак? Только на каждой строке можно? Это я к первому варианту, где цикл в цикле.
 
Vitalie Postolache:
А записать массив после цикла - никак? Только на каждой строке можно? Это я к первому варианту, где цикл в цикле.
Массив такого размера не влезет в выделенную оперативную память.

Конечно можно дополнительно всунуть счётчик и производить запись по этому счётчику, а не каждую строку отдельно, но это вряд-ли ускорит процесс на столько что будет заметно без замеров.
 
Alexey Viktorov:
Массив такого размера не влезет в выделенную оперативную память.

Конечно можно дополнительно всунуть счётчик и производить запись по этому счётчику, а не каждую строку отдельно, но это вряд-ли ускорит процесс на столько что будет заметно без замеров.

Подскажите, документация гласит, да и компилятор тоже), что: "Флаг AS_SERIES не может быть установлен у многомерных массивов"

Вопрос: каким образом  отсортировать массив в mql5

void Func()
{
double m[][3];

if(условия)
  {
   // много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
  }
 BySort(m); // передаём в функцию "BySort"
}

void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
  ArraySort(mas);
  ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает

 ... здесь работа с массивом и основной код 

}
 
Vitaly Muzichenko:

Подскажите, документация гласит, да и компилятор тоже), что: "Флаг AS_SERIES не может быть установлен у многомерных массивов"

Вопрос: каким образом  отсортировать массив:

double m[][3];

if(условия)
 {
// много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
 }

void BySort(double &mas[][3])// выделенное лишнее
 {
// Сортируем по размеру от большего к меньшему
  ArraySort(mas, WHOLE_ARRAY, 0, MODE_DESCEND); // вот это не работает в mql5

  ArraySort(mas);
  ArraySetAsSeries(mas,true);
// а при такой записи ругается // это тоже лишнее
 }
AS_SERIES и сортировка совершенно разные понятия.

1 - меняет направление индексации ячеек массива не меняя их содержимое, а 2 - не меняя индексацию меняет содержимое ячеек так, что они отсортированы по возрастания или по убыванию.

Дополнительно в документации сказано что сортировать массив можно только по первому измерению.
 
Alexey Viktorov:
AS_SERIES и сортировка совершенно разные понятия.

1 - меняет направление индексации ячеек массива не меняя их содержимое, а 2 - не меняя индексацию меняет содержимое ячеек так, что они отсортированы по возрастания или по убыванию.

Дополнительно в документации сказано что сортировать массив можно только по первому измерению.

Вот тут сортирует по порядку возрастания

ArraySort(mas);

Как теперь его перевернуть? Нужно по порядку убывания, это сортировка лотов.

 
Vitaly Muzichenko:

Вот тут сортирует по порядку возрастания

ArraySort(mas);

Как теперь его перевернуть? Нужно по порядку убывания, это сортировка лотов.

Ух-ты. Я первый раз смотрю сортировку в mql5. Отвечал ориентируясь на mql4 по памяти. Раз такое дело, можно перевернуть цикл чтения. Если нужен поиск конкретного значения, то он возвращает индекс массива, хоть как его сортируй.

Ну и самый тупой вариант в цикле переписать весь массив в обратном порядке. А оно того стоит???
 
Vitaly Muzichenko:

Вот тут сортирует по порядку возрастания

ArraySort(mas);

Как теперь его перевернуть? Нужно по порядку убывания, это сортировка лотов.

А если после сортировки поменять порядок индексации с помощью ArraySetAsSeries?
 
Vitalie Postolache:
А если после сортировки поменять порядок индексации с помощью ArraySetAsSeries?

Тогда получается вот так:

 

 

Причина обращения: