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

 
Slava:

Если функция предполагает удаление элемента, то элемент удаляется. Просто удаляется безо всякого обнуления.

Роман идите уже учиться.

Читайте внимательно, удаление значения элемента.
Мы говорим за статический массив!
Функция не меняет фактический размер массива!
У меня складывается впечатление, что учится не мне нужно.

 
Aleksey Vyazmikin:

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

Нервирует игнорирования проблемы со стороны разработчиков.

Скорее всего у брокера в базе сохранённых тиков такие данные.

Помогают проверки на существование бида, аска, их сравнение, и измерение спреда в тиках.

 
Igor_Gagarin:

Скорее всего у брокера в базе сохранённых тиков такие данные.

Помогают проверки на существование бида, аска, их сравнение, и измерение спреда в тиках.

Если криво сохранили, допустим, то поведение должно быть одинаково, а не разница от даты запуска совветника.

И потом, если сервер криво сохранил, то пусть исправляют.

При чем тут бид и аск - на видео показал что цена last пропадает. И чем это может помочь - я теряю информацию, и мне это не помогает, а вредит.

 
Slava:

Приветствую! К кому обратиться, чтобы рассмотреть возможность подсвечивания постов, взятых "на карандаш" со стороны разработчиков?

Выкладывал некоторые коды, которые воспроизводят проблемы (вплоть до зависания Терминала), но, к сожалению, без какой-либо обратной связи.

Запускаю на новых билдах - продолжает воспроизводиться. Пропустили мимо воспроизведение или нет - отсутствует информация.

 
Roman:

Читайте внимательно, удаление значения элемента.
Мы говорим за статический массив!
Функция не меняет фактический размер массива!
У меня складывается впечатление, что учится не мне нужно.

То, что предлагаете Вы, как минимум приведёт к замедлению работы функции, а толку ноль - это решение не масштабируемое.

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


 
Slava:

Если функция предполагает удаление элемента, то элемент удаляется. Просто удаляется безо всякого обнуления.

Роман, идите уже учиться.

Правильно понимаю, что АррейРемув к статическому массиву применять бесполезно, он ничего не изменяет. Длину массива изменить нельзя, а значения он не трогает. Если так, то в доках неплохо упомянуть об этом.

 
Ilyas:

То, что предлагаете Вы, как минимум приведёт к замедлению работы функции, а толку ноль - это решение не масштабируемое.

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


Логичнее было бы запретить выполнение ArrayRemove() для статических массивов. Пусть просто возвращает false.

 
Koldun Zloy:

Логичнее было бы запретить выполнение ArrayRemove() для статических массивов. Пусть просто возвращает false.

Нет, не вариант. Допустим мне надо иметь 5 последних значений, не важно чего. Делаем массив 5 элементов и при поступлении шестого, удаляем нулевой, а в четвёртый пишем новое значение. В результате имеем по прежнему 5 элементов без напряга.

Конечно есть и другие варианты решения такой задачи, но надо замерять скорость, что тяжелей. А ArrayRemove() посимпатичней.

 
Было бы интересно узнать "экспертное" мнение @Roman о работе функции std::vector::erase в С++ (online):
#include <iostream>
#include <vector>


class A{
public:
    int value;
    A(){
        static int next_value = 0;
        value = next_value++;
    }
    ~A(){
        std::cout << "DELETED:" << value << std::endl;
    }
    operator int(){return value;}
};

int main()
{
    std::vector<A> v(5);
    for(int i : v) std::cout<< i;       
    std::cout<< std::endl;              //01234
    
    v.erase(v.begin()+2);               //DELETED:4
    for(int i : v) std::cout<< i;       
    std::cout<< std::endl;              //0134
}

Результат:

01234                                                                                                                                                                                                        
DELETED:4                                                                                                                                                                                                    
0134                                                                                                                                                                                                         
DELETED:0                                                                                                                                                                                                    
DELETED:1                                                                                                                                                                                                    
DELETED:3                                                                                                                                                                                                    
DELETED:4 
 
Valeriy Yastremskiy:

Правильно понимаю, что АррейРемув к статическому массиву применять бесполезно, он ничего не изменяет. Длину массива изменить нельзя, а значения он не трогает. Если так, то в доках неплохо упомянуть об этом.

Значения простых типов меняет. Размер массива - нет. В доках написано очень подробно

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