Теория ускорения работы советника при использовании пользовательского индикатора (функция - iCustom) - страница 6

 

Alexander Laur, т.е. пока работает скрипт/советник память зарезервирована и очистки не подлежит - печальный вывод.
А есть ли возможность скриптом запускать другой скрипт, тогда закрытие запущенного скриптом скрипта должно же приводить к отчистки памяти, или это будет расценено, как комплексная среда обработки данных?

 
-Aleks-:

Alexander Laur, т.е. пока работает скрипт/советник память зарезервирована и очистки не подлежит - печальный вывод.
А есть ли возможность скриптом запускать другой скрипт, тогда закрытие запущенного скриптом скрипта должно же приводить к отчистки памяти, или это будет расценено, как комплексная среда обработки данных?

Я сразу предложил "открывать график с запущенным экспертом", это можно сделать - ChartOpen + ChartApplyTemplate

Вопрос лишь в том, освободится ли память при его закрытии (удалении эксперта). 

Проверяйте. 

 
Andrey Khatimlianskii:

Я сразу предложил "открывать график с запущенным экспертом", это можно сделать - ChartOpen + ChartApplyTemplate

Вопрос лишь в том, освободится ли память при его закрытии (удалении эксперта). 

Проверяйте. 

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

Дополнительный вопрос, влияет ли на размер графического буфера выбор вещественного типа буфера для расчет внутри индикатора?

Тип

Размер в байтах

Минимальное положительное значение

Максимальное значение

Точность представления

Аналог в С++

float

4

1.175494351e-38

3.402823466e+38

7 значащих цифр

float

double

8

2.2250738585072014e-308

1.7976931348623158e+308

15 значащих цифр

double


И безумная идея, а что если вместо графического буфера использовать TextOut - вот только не знаю, как считывать от туда данные...

 
-Aleks-:

Дополнительный вопрос, влияет ли на размер графического буфера выбор вещественного типа буфера для расчет внутри индикатора?

Под термином "графический буфер" имеется в виду графическое отображение обычного индикатора? 
 
Dennis Kirichenko:
Под термином "графический буфер" имеется в виду графическое отображение обычного индикатора? 

Вопрос в том, можно ли повлиять на размер выделяемой памяти на графический буфер на один бар, если использовать в коде индикатора для вычислений не double, а float. 

//---- buffers

double Vy[];
double bufDirSoft[];

extern int n=3;
extern int BarsN=100;
//----
int ExtCountedBars=0;

 
И ещё, как определить, что память кончилась, есть ли функции какие?
 
-Aleks-:

Вопрос в том, можно ли повлиять на размер выделяемой памяти на графический буфер на один бар, если использовать в коде индикатора для вычислений не double, а float...

Нет. Есть такая волшебная функция, которая перемелет все потуги:

bool  SetIndexBuffer(
   int                    index,         // индекс буфера
   double                 buffer[],      // массив
   ENUM_INDEXBUFFER_TYPE  data_type      // что будем хранить
   );

Этот механизм вшит в сам язык\терминал. Хотя мысль интересная...

 
-Aleks-:
И ещё, как определить, что память кончилась, есть ли функции какие?

Что значит кончилась? :-)

Что-то есть тут:

https://www.mql5.com/ru/docs/constants/environment_state/terminalstatus#enum_terminal_info_integer

Имхо, самый эффективный способ управлением памятью для ресурсов индикатора, это минимизация параметра  "Макс. баров в истории" (Настройки --> Графики). Насколько помню,  минимум для параметра - это 5 тыс.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
-Aleks-:
И ещё, как определить, что память кончилась, есть ли функции какие?

Можно получать информацию о терминале

TERMINAL_MEMORY_TOTAL

Размер памяти, доступной процессу терминала (агента), в MB

int

TERMINAL_MEMORY_AVAILABLE

Размер свободной памяти процесса терминала (агента)в MB

int

TERMINAL_MEMORY_USED

Размер памяти, использованной терминалом (агентом), в MB

int