Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 732
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А если после сортировки поменять порядок индексации с помощью ArraySetAsSeries?
ArraySetAsSeries не применяется к многомерным массивам.
Да, не применяется. А кто знает что применяется, ответьте пожалуйста.
Да, не применяется. А кто знает что применяется, ответьте пожалуйста.
Иногда использую пузырьковую сортировку двумерного массива. Можно выбрать направление и размерность, по которой сортировать
К Вам приехать домой за кодом, или всё-таки выложите, если не жалко)
Добавлено: А на сколько он ресурсо-затратный?, может всё-же перевернуть цикл, чего делать крайне не хочется.
К Вам приехать домой за кодом, или всё-таки выложите, если не жалко)
Я просто не помню о какой размерности массива вы писали - мож он не надо вам, а я тут пихать буду ...
//| Пузырьковая сортировка двумерного массива |
//+------------------------------------------------------------------+
template<typename T>
void ArraySortBubbleTwoDims(T& array[][TWO_DIM], int sort_dimension=0, int sort_direction=0) {
T t=0;
int k=ArrayRange(array,1); // Количество колонок
int n=ArrayRange(array,0); // Количество строк
//---
if(sort_dimension<0) sort_dimension=0;
if(sort_dimension>k) sort_dimension=k;
//---
for(int i=n-1; i>0; i--) {
for(int j=0; j<i; j++) {
//--- по возрастанию
if(sort_direction==0) {
if(array[j][sort_dimension]>array[j+1][sort_dimension]) {
for(int e=0; e<k; e++) {
t=array[j][e];
array[j][e]=array[j+1][e];
array[j+1][e]=t;
}
}
}
//--- по убыванию
else {
if(array[j][sort_dimension]<array[j+1][sort_dimension]) {
for(int e=0; e<k; e++) {
t=array[j][e];
array[j][e]=array[j+1][e];
array[j+1][e]=t;
}
}
}
}
}
}
//+------------------------------------------------------------------+
Дык, пиво берите, да в гости ;)
Я просто не помню о какой размерности массива вы писали - мож он не надо вам, а я тут пихать буду ...
Вроде зима, а лыжи не едут
{
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 работает
... здесь работа с уже сортированным массивом и основной код
}
Выдаёт ошибку: "'m' - parameter conversion not allowed e.mq5 2076 20"
Вроде зима, а лыжи не едут
{
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 работает
... здесь работа с уже сортированным массивом и основной код
}
Выдаёт ошибку: "'m' - parameter conversion not allowed e.mq5 2076 20"
Примечание
Флаг AS_SERIES не может быть установлен у многомерных массивов и у статических массивов (то есть массивов, чей размер в квадратных скобках указан еще на этапе компиляции).
А что мешает отсортировать его предложенной мной функцией?
Так в справке же написано:
Примечание
Флаг AS_SERIES не может быть установлен у многомерных массивов и у статических массивов (то есть массивов, чей размер в квадратных скобках указан еще на этапе компиляции).
А что мешает отсортировать его предложенной мной функцией?
Точно такая-же ошибка при передаче в функцию
В какую?
В вашу "ArraySortBubbleTwoDims"
В общем, развернул цикл и вопрос решён. Но всё-же хотелось видеть нормальное решение в виде стандартной функции