Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2379

 
Ivan Butko #:

Благодарю Вас за ответ, но я к сожалению, не понимаю подобную конструкцию. Как это применить к следующему "плохому коду":


Если описать то, что выше, то получится 99999 строк кода(

UPD

Если моя задача лежит в области фриланса - ничего страшного, пойму. 

Если же нет, прошу подсказать

// размеры по 4-м осям
#define X 5
#define Y 5
#define Z 5
#define Q 5

// плоский массив вместо 4-х мерного
int STAT[X*Y*Z*Q];

// обращение к элементу
#define ST(x,y,x,q) STAT[(x)*Y*Z*Q+(y)*Z*Q+(z)*Q+(q)]

// инкрементируем 
ST(x1,x2,x3,x4)++;

ВСЁ

 
Ivan Butko #:

Если Вас не затруднит, приведите, пожалуйста, простейший пример. 
Гуглю - и не соображу, как применить. Чат тоже не понимает. 

Например, график показывает фигуру 5 3 9 6 1 и какой-то результат. 

Как мне обратиться в коде к этой фигуре и задать ей результат?

   —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————
   |    Байт7  |  |    Байт6  |  |    Байт5  |  |    Байт4  |  |    Байт3  |  |    Байт2  |  |    Байт1  |  |    Байт0  |
   —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————
   |64|62|60|58|  |56|54|52|50|  |48|46|44|42|  |40|38|36|34|  |32|30|28|26|  |24|22|20|18|  |16|14|12|10|  |08|06|04|02|
   —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————
   
   В каждый байт можно вписать число от 0 до 255, в каждый бит - 0 или 1, в каждые два бита - от 0 до 15
   
   Байт 0 - это X1
   Байт 1 - это X2
   Байт 2 - это X3
   Байт 3 - это X4
   Байт 4 - это X5
   Байт 5 - это X6
   Байт 6 - это X7
   Байт 7 - это X8
   
   Результирующее число - код

Это если записывать в long-значение 8 чисел со значениями от 0 до 255.

Если значения чисел меньше, и самих чисел тоже меньше, то можно записывать в переменную меньшего типа.

Если значения чисел от 0 до 15, то можно записывать их в четыре бита, а не в 8. Тогда переменная может быть ещё меньшего типа.

 
Maxim Kuznetsov #:

// размеры по 4-м осям
#define X 5
#define Y 5
#define Z 5
#define Q 5

// плоский массив вместо 4-х мерного
int STAT[X*Y*Z*Q];

// обращение к элементу
#define ST(x,y,x,q) STAT[(x)*Y*Z*Q+(y)*Z*Q+(z)*Q+(q)]

// инкрементируем 
ST(x1,x2,x3,x4)++;

ВСЁ

Artyom Trishkin #:

Это если записывать в long-значение 8 чисел со значениями от 0 до 255.

Если значения чисел меньше, и самих чисел тоже меньше, то можно записывать в переменную меньшего типа.

Если значения чисел от 0 до 15, то можно записывать их в четыре бита, а не в 8. Тогда переменная может быть ещё меньшего типа.


Большое спасибо за ответы

 
Artyom Trishkin #:
Например, график показывает фигуру 5 3 9 6 1 и какой-то результат.
   —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————
   |    Байт7  |  |    Байт6  |  |    Байт5  |  |    Байт4  |  |    Байт3  |  |    Байт2  |  |    Байт1  |  |    Байт0  |
   —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————
   |64|62|60|58|  |56|54|52|50|  |48|46|44|42|  |40|38|36|34|  |32|30|28|26|  |24|22|20|18|  |16|14|12|10|  |08|06|04|02|
   —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————
   |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |00|00|00|01|  |00|00|01|10|  |00|00|10|01|  |00|00|00|11|  |00|00|01|01| числа в двоичном виде.
   —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————
   |		| | 	      |  |           |  |     1     |  |     6     |  |     9     |  |     3     |  |     5     |
   —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————  —————————————
Двоичный кол = 0001 0000 0110 0000 1001 0000 0011 0000 0101
Десятичный результат = 4 396 221 189

 
Ivan Butko #:


Большое спасибо за ответы

только учтите что в любом случае, как-бы вы не оптимизировали статистику,

с ростом числа измеряемых величин и их ёмкости (числу вариантов), В ЛЮБОМ СЛУЧАЕ катастрофически растёт общая размерность и потребление памяти.  А потом для хеш-массивов ещё и тормоза начинаются. 

постарайтесь свести задачу к 2-х или 3-х мерной. 

 
Artyom Trishkin #:
Maxim Kuznetsov #:

только учтите что в любом случае, как-бы вы не оптимизировали статистику,

с ростом числа измеряемых величин и их ёмкости (числу вариантов), В ЛЮБОМ СЛУЧАЕ катастрофически растёт общая размерность и потребление памяти.  А потом для хеш-массивов ещё и тормоза начинаются. 

постарайтесь свести задачу к 2-х или 3-х мерной. 

Спасибо

 
Здравствуйте!
  if(Ma1Buffer[i] > Ma2Buffer[i])
  {
  
  }

Что нужно указать между скобками, чтобы если МА1 больше MA2, то отображался значок при пересечение на самой МА1?
 
Ivan Butko #:


Большое спасибо за ответы

Пять одномерных массивов)
 
Ivan Butko #:
Подскажите, пожалуйста, как закодировать фигуру, состоящую из 5 чисел (множество их комбинаций), чтобы собрать статистику её срабатывания?

4 числа я понимаю как - использовать 4-мерный массив. Допустим, на графике фигура 4 2 7 9, тогда array[4, 5, 7, 9] = N (какой-то статистический результат). 
И в конце там смотришь, что вышло. 

Но, 5-мерных массивов не существует. А нужно собрать статистику 5-числовых, 6-числовых и так далее. 

Я понимаю, можно их вручную прописать "if (x1 == 4 && x2 == 2 &&......)  array[4, 5, 7, 9] = N;, 
Но так у меня выйдёт 1500 строк кода одних только описаний. 

Хотелось бы узнать, можно ли что-то подобное провернуть, как с массивами, упрощающими подсчёт и описание. 

struct Figura
   {
   uchar x1;
   uchar x2;
   uchar x3;
   uchar x4;
   uchar x5;
   int Statist1;
   int Statist2;
   };

Figura Massiv[];

По иксам находить фигуру. В Statist накапливать статистику.

 

коллеги - код во вложении. Вроде все правильно сделал на МТ 4: индикатор в доп окне в виде гистограммы - не рисуется.

Изначально беру приведение двух символов - ко второму через коэфф, потом из 1-го котировки вычитаю котировку 2-го символа.

Спс за помощь.