Часто приходится работать с множеством индикаторов, и притом, что для анализа нужен небольшой кусочек истории, который размещается на экране, индикатор рассчитывается для всей имеющейся истории. Если мы переключимся на временной период М1, то обнаружим там 4 млн баров с 1999 года.
И если мы всего лишь рассчитываем скользящую среднюю, то нам потребуется 31 Мб и это для самого простейшего индикатора, 125 мб для MACD, а есть и более сложные индикаторы и мультивалютные стратегии. Следовательно, возникает вопрос: как можно ограничить расчет индикатора, чтобы например можно было задавать начальную и конечную дату на которой нужно производить вычисления и не тратить колоссальные ресурсы производительности и памяти, которой адресного пространства всего 2 Гб, и его невозможно увеличить, докупая память, на расчет большинства не интересующих баров.
Можно конечно предложить: задать параметр (Графики / Макс баров в окне) – но этот вариант не подходит, так как, становится сразу недоступна большая часть истории котировок, а она необходима для тестирования стратегии на определенном интервале.
Буквально 5-ю темами ниже. Смотрите решение в моём последнем посте.
Отрисовка n последних баров в индикаторе.
Буквально 5-ю темами ниже. Смотрите решение в моём последнем посте.
Отрисовка n последних баров в индикаторе.
не покатит нельзя ставить ссылки
//+------------------------------------------------------------------+ int simble(double &in[],double &Out[]) { int i=ArraySize(in)-1; while(i>=0) { Out[i]=in[i]; i--; } } //+------------------------------------------------------------------+
через такую функцию не пройдёт.
так что особого смысла в этом не вижу
не покатит нельзя ставить ссылки
через такую функцию не пройдёт.
так что особого смысла в этом не вижу
если дальше использовать их как данные для расчета значений через функции
например возмём твой шаблон и функцию
расчета скользящей средней от массива.
//-------------------Основной цикл индикатора------------------------- while (i<History) { HiBuffer[i]=iMAOnArrayMql4(high,History,13,0,MODE_EMA,i); i++; } //---------------Конец основного цикла индикатора---------------------
получается такая штука
'high' - parameter conversion is not allowed тест.mq5 68 34
получается что опять приходится дейсвовать через дополнительным массив.....
если прочитать хелп про
то можно сразу скопировать в массив и перевернуть его "сет ас сериес"....
получится тоже самое без без перебора с возможностью оперирования массивом и использовать его для расчета функциями.
если дальше использовать их как данные для расчета значений через функции
например возмём твой шаблон и функцию
расчета скользящей средней от массива.
получается такая штука
получается что опять приходится дейсвовать через дополнительным массив.....
если прочитать хелп про
то можно сразу скопировать в массив и перевернуть его "сет ас сериес"....
получится тоже самое без без перебора с возможностью оперирования массивом и использовать его для расчета функциями.
Ааа, ешкин паровоз. Суть то не в этом, а в том, что считаться индюк будет один раз на каждом баре заданное количество баров истории, а не на каждом тике.
Как и хотел топикстартер, как хотел и я в в своей теме.
А уж что с массивами делать, как их считать, это уже другое дело. У мну же там просто шаблончик.
А
high[]действительно передавать в функции нельзя. Для OHLC я обычно держу отдельные глобальные массивы объявленные как таймсерии. High[] же как в 4-ке нет.
Ааа, ешкин паровоз. Суть то не в этом, а в том, что считаться индюк будет один раз на каждом баре заданное количество баров истории, а не на каждом тике.
Как и хотел топикстартер, как хотел и я в в своей теме.
А уж что с массивами делать, как их считать, это уже другое дело. У мну же там просто шаблончик.
А
да согласен,
у меня тож глобальные буферы и там уже производные цен...
чтобы ограничить отрисовку индикатора надо создать для него "среду" определённой длинны
и использовать её уже для расчета индикатора.
да согласен,
у меня тож глобальные буферы и там уже производные цен...
чтобы ограничить отрисовку индикатора надо создать для него "среду" определённой длинны
и использовать её уже для расчета индикатора.
Меня интересует больше не то как рассчитать среднюю в своем индикаторе, а то как ограничить существующие стандартные индикаторы, чтобы они не жрали кучу памяти и не тормозили во время работы с графиками, и допустим вы рассчитаете средние в своем массиве, он конечно будет занимать памяти совсем не много. Но как вы выведите его содержимое на экран - для этого вам нужен индикаторный буфер, а его размером управляет терминал а не программа пользователя и он снова сделает его длинной во всю историю.
вот цитата ArrayResize
Функция может быть применена только к динамическим массивам. При этом необходимо иметь ввиду, что нельзя изменять размер для динамических массивов, назначенных в качестве индикаторных буферов функцией SetIndexBuffer(). Для индикаторных буферов все операции по изменению размера производит исполняющая подсистема терминала.
никак....
даже если поставить в свойствах
ограничение видимости то все равно терминал считает все данные
разработчики видимо стремятся к тому чтобы терминал использовали как источник котировок
а язык мкл5 как создание необходимой среды для индикаторов и аналитических программам.
притом что индикатор или программа могут быть созданны на языке мкл5
но разрабатывать среду придётся самим
никак....
даже если поставить в свойствах
ограничение видимости то все равно терминал считает все данные
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Часто приходится работать с множеством индикаторов, и притом, что для анализа нужен небольшой кусочек истории, который размещается на экране, индикатор рассчитывается для всей имеющейся истории. Если мы переключимся на временной период М1, то обнаружим там 4 млн баров с 1999 года.
И если мы всего лишь рассчитываем скользящую среднюю, то нам потребуется 31 Мб и это для самого простейшего индикатора, 125 мб для MACD, а есть и более сложные индикаторы и мультивалютные стратегии. Следовательно, возникает вопрос: как можно ограничить расчет индикатора, чтобы например можно было задавать начальную и конечную дату на которой нужно производить вычисления и не тратить колоссальные ресурсы производительности и памяти, которой адресного пространства всего 2 Гб, и его невозможно увеличить, докупая память, на расчет большинства не интересующих баров.
Можно конечно предложить: задать параметр (Графики / Макс баров в окне) – но этот вариант не подходит, так как, становится сразу недоступна большая часть истории котировок, а она необходима для тестирования стратегии на определенном интервале.