Новая версия платформы MetaTrader 5 build 3550: улучшения и исправления - страница 8

 
Vitaly Muzichenko #:

Буквально вчера хотел использовать функцию ArrayBsearch

но к сожалению, можно считать что её нет - от слова "совсем"

Что возвращает:

А где возврат -1, как узнать что элемент есть? Зачем нужен соседний, если мы ищем конкретный

Как вариант, добавить проверку после нахождения.
Если найденый элемент не равен искомому, значит -1 :))

 
Nikolai Semko #:

Как вариант, добавить проверку после нахождения.
Если найденый элемент не равен искомому, значит -1 :))

Такой вариант не имеет ни малейшего смысла в использовании ArrayBsearch

Сделал так

if(ArraySearch(Ticket, OrderTicket())) continue;

...
bool ArraySearch(long& m[], long e)
{
  for(int i=ArraySize(m)-1; i>=0; i--)
    if(m[i]==e) return(true);
  return(false);
}
P.S.  ArrayBsearch в таком виде можно смело убрать с языка, чтобы не занимала место
 
Vitaly Muzichenko #:

Такой вариант не имеет ни малейшего смысла в использовании ArrayBsearch

Сделал так

P.S.  ArrayBsearch в таком виде можно смело убрать с языка, чтобы не занимала место

Функция предназначена не только для быстрого поиска, но и для быстрой вставки нового значения в отсортированный массив.

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

 
Stanislav Korotky #:

Функция предназначена не только для быстрого поиска, но и для быстрой вставки нового значения в отсортированный массив.

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

Считаете, что функция ArrayBsearch работает без цикла? Логично, мы же его не видим - он вшит :)

О вставке вообще ничего не написано, приведите пример, как это в ней использовать
 
Vitaly Muzichenko #:

Считаете, что функция ArrayBsearch работает без цикла? Логично, мы же его не видим - он вшит :)

О вставке вообще ничего не написано, приведите пример, как это в ней использовать

Бинарный поиск без цикла работает.

 
Andrey Barinov #:

Бинарный поиск без цикла работает.

Проверять скорость работы нет времени, но оставлю код "как есть"

P.S. При этом, для использования ArrayBsearch нужно сначала отсортировать массив, потом сделать сравнение с возвращаемым значение. Столько телодвижений ...
 
Vitaly Muzichenko #:

Проверять скорость работы нет времени, но оставлю код "как есть"

если массив отсортирован, то напрасно. Выигрыш в сотни раз по скорости (в зависимости от размера массива конечно).

Если нет, тогда и не было смысла использовать ArrayBsearch.

 
elavr #:

Не могу понять баг это или фича:

Результат работы на реальных данных:

Результат работы в тестере стратегий:

То есть в тестере стратегий входная строка обрезается по подстроке "||". 

Исправили, будет в следующем билде. Спасибо за сообщение
 

Предложение для улучшения тестера.

А нет ли способа сделать так, чтобы тестер по окончании прохода начал расчеты с начала? Т.е. снаова установил начальную дату, сбросил все результаты и повторил проход.

Это нужно для МО - при первом проходе сделать разметку обучения - совершить сделку и сохранить ее результат, а при втором проходе уже обучать МО результатам сделок и совершать только те сделки, которые выдаст МО.

Если нет такой опции, то хорошо бы ее добавить. Например командой из кода. Полагаю, что сделать это несложно.

 
elibrarius #:

А нет ли способа сделать так, чтобы тестер по окончании прохода начал расчеты с начала? Т.е. снаова установил начальную дату, сбросил все результаты и повторил проход.

Делаю скриптом такое через MTTester.mqh. Скрипт отслеживает окончание первого прохода (обучение), а затем автоматически запускает обученную модель на любом куске истории вторым проходом. Видны OOS и т.д.