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

 
grezky #:


Т.е. ' ChartGetDouble(chart_ID,CHART_PRICE_MIN ..)' вернет минимальное значение цены на шкале графика, его нужно будет прибавить к минимальному значению объемов, в данном случае к нулю. Но все объемы придется перерисовывать по мере изменения значения ' ChartGetDouble(chart_ID,CHART_PRICE_MIN,..) '. Соответственно, если вручную изменять масштаб графика, то также объемы должны будут перерисовываться. Все верно?

            double down=ChartGetDouble(0,CHART_PRICE_MIN,0);
            Label0[i]=down+Volume[i]*_Point;
На каждом тике будет выравнивать, если масштаб изменился
 
Tretyakov Rostyslav #:
На каждом тике будет выравнивать, если масштаб изменился

Спасибо!

 
В МТ4 при помощи скрипта period_converter можно создавать пользовательские символы. В результате появляются файлы *.hst. Но их похоже невозможно использовать в тестере стратегий?
 
Подскажите, пожалуйста, как закодировать фигуру, состоящую из 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 строк кода одних только описаний. 

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

 
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 строк кода одних только описаний. 

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

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

Посмотрите в сторону ассоциативных массивов (словарей). В качестве ключа можно использовать строку, полученную из ваших пяти чисел, разделённых пробелом или любым нецифровым символом. В MQL5 есть реализация этого контейнера, но работать с ней не так удобно, как в других языках, к сожалению. 

Код может быть примерно таким:

CHashMap<string, int> d;

void OnTick() {
	...
        if(IsNewBar()) {
                int x1, x2, x3, x4, x5;
                x1 = ...;
                x2 = ...;
                x3 = ...;
                x4 = ...;
                x5 = ...;

                string key = (string) x1 + " " + (string) x2 + " " + (string) x3 + " " + (string) x4 + " " + (string) x5;
                int value = 0;
                if(d.ContainsKey(key)) {
                        value = d.TryGetValue(key);
                }
                value++;
                d.TrySetValue(key, value);
        }
}

int OnDeinit(const int reason) {
        int n = d.Count();
        string keys[];
        int values[];
        d.CopyTo(keys, values);

        for(int i = 0; i < n; i++) {
                PrintFormat("%s = %d" ,keys[i], values[i]);
        }

}

Код не компилировал, возможны неточности.

Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных / CHashMap
Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных / CHashMap
  • www.mql5.com
CHashMap - Шаблонные коллекции данных - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin #:
Битовая маска

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

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

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

 
Yuriy Bykov #:

Посмотрите в сторону ассоциативных массивов (словарей). В качестве ключа можно использовать строку, полученную из ваших пяти чисел, разделённых пробелом или любым нецифровым символом. В MQL5 есть реализация этого контейнера, но работать с ней не так удобно, как в других языках, к сожалению. 

Код может быть примерно таким:

Код не компилировал, возможны неточности.

Вот только ответил Артёму, чат мне тоже что-то про хеши пишет, но не понимаю, что. 

Попробую сообразить Ваш код, благодарю за ответ. 

 
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 строк кода одних только описаний. 

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

нравятся массивы, сделайте плоский массив : DIM[x][y][z][q]:=:FLAT[x*Y*Z*Q+y*Z*Q+z*Q+q] где большими буквами X Y Z Q величины размерностей (x принимает значения 0..X-1 всего X вариантов, y 0..Y-1 и так далее), полный размер массива X*Y*Z*Q

с индексами вроде-бы ненапутал :-)

 
Maxim Kuznetsov #:

нравятся массивы, сделайте плоский массив : DIM[x][y][z][q]:=:FLAT[x*Y*Z*Q+y*Z*Q+z*Q+q] где большими буквами X Y Z Q величины размерностей (x принимает значения 0..X-1 всего X вариантов, y 0..Y-1 и так далее), полный размер массива X*Y*Z*Q

с индексами вроде-бы ненапутал :-)

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

if (x1 == 0 && x2 == 0 && x3 == 0 && x4 == 0 && x5 == 0 )               { pattern_00000++;      current_pattern = pattern_00000 ; }
if (x1 == 0 && x2 == 0 && x3 == 0 && x4 == 0 && x5 == 1 )               { pattern_00001++;      current_pattern = pattern_00001 ; }
if (x1 == 0 && x2 == 0 && x3 == 0 && x4 == 0 && x5 == 2 )               { pattern_00002++;      current_pattern = pattern_00002 ; }
if (x1 == 0 && x2 == 0 && x3 == 0 && x4 == 0 && x5 == 3 )               { pattern_00003++;      current_pattern = pattern_00003 ; }
...
...
if (x1 == 9 && x2 == 9 && x3 == 9 && x4 == 9 && x5 == 9 )               { pattern_99999++;   current_pattern = pattern_99999 ; }

Print( current_pattern );

Print(pattern_29738);


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

UPD

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

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

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