Зачем вам ВСЕ значения по всей истории в советнике?
Алгоритм такой. Ну все конечно не нужны, но надо тысяч несколько значений с каждого ТФ.
Svinozavr>>:
По коду. Ресайз лучше делать не на каждом тике, а только на новом поступившем баре соотв. тф. На память это влиять, по идее, не должно, но на быстродействие - точно.
Именно так и делается. При поступлении нового бара на ТФ делается ресайз массива этого ТФ
Еще. Если вы перенесете в индикаторы то, что вы делаете сейчас в советнике, то проблема, скорее всего, будет устранена.
А в чем разница с точки зрения выделения памяти? Что в индикаторе будет выделятся память для буферного массива с количеством элементов, равным количеству баров. Что то же самое я делаю в советнике. А быстродействие советника при наличии всех необходимых данных в нем самом возрастает в разы, т.к. не нужно использовать не самую быструю функцию iCustom.
lusp>>:
Алгоритм такой. Ну все конечно не нужны, но надо тысяч несколько значений с каждого ТФ.
Ой ли, уверены? Нет, я не говорю, что так не может быть, но, как правило, если не требуется отрисовки из советника значений, нужно немного.
Именно так и делается. При поступлении нового бара на ТФ делается ресайз массива этого ТФ
ок.
А в чем разница с точки зрения выделения памяти? Что в индикаторе будет выделятся память для буферного массива с количеством элементов, равным количеству баров. Что то же самое я делаю в советнике.
Механизм выделения памяти.
А быстродействие советника при наличии всех необходимых данных в нем самом возрастает в разы, т.к. не нужно использовать не самую быструю функцию iCustom.
Нет. Операции с ресайзом, копированием и пр. с массивами на порядок медленнее, чем обращение из советника к буферам индикатора.
интересно, при этом весь массив реально переписывается, или в правду лишь сдвигается?
если переписывается весь, то смысл то какой? производительность упадет
думаю, что реально сдвигается, т.к. сдвиг массивов данных - это аппаратная возможность процессора (ассемблерная команда MOV AX, VALUE [BX][DI] ), думаю разработчики MQL много встроенных функций реализовали с максимальной производительностью
ЗЫ: а что Вам мешает проверить это на простом скрипте? - храните в массиве (1000 эл-в) котировки Ask и считайте среднее арифметическое последних 1000 котировок и выводите в виде Comment на график, при этом каждый раз сдвигайте массив
Нет. Операции с ресайзом, копированием и пр. с массивами на порядок медленнее, чем обращение из советника к буферам индикатора.
Я как раз и стал переделывать систему, вводя все индикаторы в советник, что бы уйти от iCustom. Возможно единичное обращение к ней будет работать и быстрее, чем ресайз. Но когда на каждом тике надо несколько тысяч значений индикатора, да не одного, а ресайз в худшем случае делается раз в минуту, то выгода очевидна. После такой трансформации быстродействие советника меня стало удовлетворять, а вот с памятью получилась засада
думаю, что реально сдвигается, т.к. сдвиг массивов данных - это аппаратная возможность процессора (ассемблерная команда MOV AX, VALUE [BX][DI] ), думаю разработчики MQL много встроенных функций реализовали с максимальной производительностью
ЗЫ: а что Вам мешает проверить это на простом скрипте? - храните в массиве (1000 эл-в) котировки Ask и считайте среднее арифметическое последних 1000 котировок и выводите в виде Comment на график, при этом каждый раз сдвигайте массив
просто функция предназначена для копирования(поэлементно копируется каждый член), а смещение на мой взгляд должно быть в таком духе.
Я как раз и стал переделывать систему, вводя все индикаторы в советник, что бы уйти от iCustom. Возможно единичное обращение к ней будет работать и быстрее, чем ресайз. Но когда на каждом тике надо несколько тысяч значений индикатора, да не одного, а ресайз в худшем случае делается раз в минуту, то выгода очевидна. После такой трансформации быстродействие советника меня стало удовлетворять, а вот с памятью получилась засада
Если вы динамически не меняете параметров индикатора из советника, то обращение быстрое, т.к. в этом случае iCustom не пересчитывает индикатор по истории, а работает только как ссылка на ячейку в его буфере. Но если тыщи на каждом тике... мдя..
Знаете, очень похоже, что ваш алгоритм реализации идеи изначально не оптимален. Я вот, хоть убей, не могу себе представить задачу (разумную), для которой нужны были бы такие заморочки.
Почти уверен, что все можно было бы решить легче. Хотя... всяко м.б. )))
Зачем вам ВСЕ значения по всей истории в советнике?
По коду. Ресайз лучше делать не на каждом тике, а только на новом поступившем баре соотв. тф. На память это влиять, по идее, не должно, но на быстродействие - точно.
Именно так и делается. При поступлении нового бара на ТФ делается ресайз массива этого ТФ
Еще. Если вы перенесете в индикаторы то, что вы делаете сейчас в советнике, то проблема, скорее всего, будет устранена.
А в чем разница с точки зрения выделения памяти? Что в индикаторе будет выделятся память для буферного массива с количеством элементов, равным количеству баров. Что то же самое я делаю в советнике. А быстродействие советника при наличии всех необходимых данных в нем самом возрастает в разы, т.к. не нужно использовать не самую быструю функцию iCustom.
......... . .......#define num 60 //количество элементов в массиве, 60 -вроде как 60 сек или мин :)
static double Mass[num];
ArrayCopy(Mass,Mass,0,1,WHOLE_ARRAY); //сдвигаем массив на одну позицию
.......... .......... ...
интересно, при этом весь массив реально переписывается, или в правду лишь сдвигается?
если переписывается весь, то смысл то какой? производительность упадет
Алгоритм такой. Ну все конечно не нужны, но надо тысяч несколько значений с каждого ТФ.
Ой ли, уверены? Нет, я не говорю, что так не может быть, но, как правило, если не требуется отрисовки из советника значений, нужно немного.
Именно так и делается. При поступлении нового бара на ТФ делается ресайз массива этого ТФ
ок.
А в чем разница с точки зрения выделения памяти? Что в индикаторе будет выделятся память для буферного массива с количеством элементов, равным количеству баров. Что то же самое я делаю в советнике.
Механизм выделения памяти.
А быстродействие советника при наличии всех необходимых данных в нем самом возрастает в разы, т.к. не нужно использовать не самую быструю функцию iCustom.
Нет. Операции с ресайзом, копированием и пр. с массивами на порядок медленнее, чем обращение из советника к буферам индикатора.
интересно, при этом весь массив реально переписывается, или в правду лишь сдвигается?
если переписывается весь, то смысл то какой? производительность упадет
думаю, что реально сдвигается, т.к. сдвиг массивов данных - это аппаратная возможность процессора (ассемблерная команда MOV AX, VALUE [BX][DI] ), думаю разработчики MQL много встроенных функций реализовали с максимальной производительностьюЗЫ: а что Вам мешает проверить это на простом скрипте? - храните в массиве (1000 эл-в) котировки Ask и считайте среднее арифметическое последних 1000 котировок и выводите в виде Comment на график, при этом каждый раз сдвигайте массив
Нет. Операции с ресайзом, копированием и пр. с массивами на порядок медленнее, чем обращение из советника к буферам индикатора.
Я как раз и стал переделывать систему, вводя все индикаторы в советник, что бы уйти от iCustom. Возможно единичное обращение к ней будет работать и быстрее, чем ресайз. Но когда на каждом тике надо несколько тысяч значений индикатора, да не одного, а ресайз в худшем случае делается раз в минуту, то выгода очевидна. После такой трансформации быстродействие советника меня стало удовлетворять, а вот с памятью получилась засада
думаю, что реально сдвигается, т.к. сдвиг массивов данных - это аппаратная возможность процессора (ассемблерная команда MOV AX, VALUE [BX][DI] ), думаю разработчики MQL много встроенных функций реализовали с максимальной производительностьюЗЫ: а что Вам мешает проверить это на простом скрипте? - храните в массиве (1000 эл-в) котировки Ask и считайте среднее арифметическое последних 1000 котировок и выводите в виде Comment на график, при этом каждый раз сдвигайте массив
просто функция предназначена для копирования(поэлементно копируется каждый член), а смещение на мой взгляд должно быть в таком духе.
Я как раз и стал переделывать систему, вводя все индикаторы в советник, что бы уйти от iCustom. Возможно единичное обращение к ней будет работать и быстрее, чем ресайз. Но когда на каждом тике надо несколько тысяч значений индикатора, да не одного, а ресайз в худшем случае делается раз в минуту, то выгода очевидна. После такой трансформации быстродействие советника меня стало удовлетворять, а вот с памятью получилась засада
Если вы динамически не меняете параметров индикатора из советника, то обращение быстрое, т.к. в этом случае iCustom не пересчитывает индикатор по истории, а работает только как ссылка на ячейку в его буфере. Но если тыщи на каждом тике... мдя..
Знаете, очень похоже, что ваш алгоритм реализации идеи изначально не оптимален. Я вот, хоть убей, не могу себе представить задачу (разумную), для которой нужны были бы такие заморочки.
Почти уверен, что все можно было бы решить легче. Хотя... всяко м.б. )))