![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не нужно ничего чистить.
Скиньте код расчётной части индикатора.
===
Хотя, мне почему-то кажется, что вы хотите от индикатора чего-то лишнего, раз нужен полный пересчет на каждом баре
нужно
зачем получать историю заново, если перерасчет индюка это тоже самоенужно
зачем получать историю заново, если перерасчет индюка это тоже самоеВот и у меня вопрос: "Зачем получать историю заново"
Смысл индикатора не понятен для меня. От слова "совсем"
Смысл индикатора не понятен для меня. От слова "совсем"
Получаем сигнал от пересечения 2-х МА
По истории например было 500 пересечений
Далее идёт сортировка прибыльных пересечений для buy и для sell
На каждом тике меняем значение параметра МА
Итог: при первом старте получаем например 150 прибыльных пересечений для buy и 200 для sell
далее на новом тике поменялся параметр МА
вот на этом месте и не может решиться вопрос, т.к. по умолчанию как сейчас есть, результаты на новом тике =0
а если я вместо return добавлю limit=bars; то работает как надо, расчёт идёт верно согласно новому значению параметра, но виснет и в итоге ошибка out of memory
Получаем сигнал от пересечения 2-х МА
По истории например было 500 пересечений
Далее идёт сортировка прибыльных пересечений для buy и для sell
На каждом тике меняем значение параметра МА
Итог: при первом старте получаем например 150 прибыльных пересечений для buy и 200 для sell
далее на новом тике поменялся параметр МА
вот на этом месте и не может решиться вопрос, т.к. по умолчанию как сейчас есть, результаты на новом тике =0
а если я вместо return добавлю limit=bars; то работает как надо, расчёт идёт верно согласно новому значению параметра, но виснет и в итоге ошибка out of memory
Да, при доступе к МА на каждом тике это имеет место быть.
Решения проблемы не вижу, может кто другой подскажет.
Избавится от пересчета всей МА в каждом тике. Вычесть из суммы расчета МА выбывающее значение, а в каждом тике прибавлять только значение из тика и делить на период.
Как-то так, с разновидностями МА чуть больше математики)
Да, при доступе к МА на каждом тике это имеет место быть.
Решения проблемы не вижу, может кто другой подскажет.
Мне бы в этом месте разобраться, тут кроется решение
int i=0, bars=Bars-1, limit=bars-IndicatorCounted(); if(limit<bars){ if(limit<1) return; i=limit; } else i=bars; while(i >= 0) {
Вот если я делаю грубо по барам, то тоже работает, результаты получаю на каждом тике, но виснет
Мне бы в этом месте разобраться бы, тут кроется решение
Вот если я делаю грубо по барам, то тоже работает, результаты получаю на каждом тике, но виснет
У вас while(i >= 0) крутит на каждом тике огромное число итераций, ровно столько, сколько баров. Это и приводит к зависанию. Тики идут практически постоянно, цикл не останавливается.
Так что в том месте где вы хотите разобраться, можно сделать расчёт или на новом баре один раз, или ... но не на каждом тике крутить цикл безостановочно
Получаем сигнал от пересечения 2-х МА
По истории например было 500 пересечений
Далее идёт сортировка прибыльных пересечений для buy и для sell
На каждом тике меняем значение параметра МА
Итог: при первом старте получаем например 150 прибыльных пересечений для buy и 200 для sell
далее на новом тике поменялся параметр МА
вот на этом месте и не может решиться вопрос, т.к. по умолчанию как сейчас есть, результаты на новом тике =0
а если я вместо return добавлю limit=bars; то работает как надо, расчёт идёт верно согласно новому значению параметра, но виснет и в итоге ошибка out of memory
не понимаю - в чем проблема?
Все работает на каждом тике, ничего не виснет.