Похоже, индикатор на каждом тике пересчитывает все бары. Сервис - Настройки - Графики - Макс. количество баров для проверки уменьшить до 200.
Нужно пересчитывать лишь последний бар. Для этого используется функция IndicatorCounted(). Правда, ее в билде 851 как устаревшую немного испортили, но в следующем обещали восстановить. В обновленном языке MQL-4 рекомендуется заголовок функции int start() заменить на такие 10 строк:
int OnCalculate (const int rates_total, // размер таймсерий
const int Ранее_просчитано, // Ранее обработано баров
const datetime &time[], // Time
const double &open[], // Open
const double &high[], // High
const double &low[], // Low
const double &close[], // Close
const long &tick_volume[], // Tick Volume
const long &volume[], // Real Volume
const int &spread[]) // Spread
Наберите в MetaEditor слово OnCalculate и нажмите на нем F1
Вместо значения функция IndicatorCounted() использовать значение второго параметра функции OnCalculate, в данном случае Ранее_просчитано - имя может быть любое. Посмотрите индикатор ADX по адресу https://www.mql5.com/ru/code/7955 - на нем и потренируйтесь. Что у меня получилось - в прикрепленном файле
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте уважаемые специалисты!
Хотелось бы получить от вас советы.
У меня есть индикатор собственного производства. Проблем с его работой я не испытывал, сколько бы не дополнял код и увеличивал его.
Но, как только внес кое какие изменения, программа стала невыносимо пожирать ресурсы терминала и терминал висит глухо. Только после отключения от интернета можно снять индикатор и продолжить работу.
Особенность еще такая, что на стандартных тайм фреймах 5 и 15 мин. в принципе работает, а вот как только подключу к не стандартному, то беда.
Я уже уменьшил раз в 5 объем проверочного кода, но безрезультатно.
А предыдущий вариант программы, спокойно работает на на всех не стандартных и стандартных таймфреймах, в любом количестве одновременно.
Поменял следующее:
У меня был изначально вот такой код:
((iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE,bar+2)<Open[bar+2] &&
iMA(NULL,0,10,0,MODE_SMA,PRICE_CLOSE,bar+2)>Close[bar+2]) ||
(iMA(NULL,0,15,0,MODE_SMA,PRICE_CLOSE,bar+2)<Open[bar+2] &&
iMA(NULL,0,15,0,MODE_SMA,PRICE_CLOSE,bar+2)>Close[bar+2])) && ...
Затем я поменял знак || логическое или на логическое и &&
И поле этого программа входит в ступор.
Помогите разобраться.