Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1177
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте!
Подскажите, пожалуйста, как в индикаторе наладить его работу только на открытии бара, а не на каждом тике и как сделать, чтобы он не бегал каждый раз (на каждом новом баре) по всей истории?
Заранее благодарю.
Ростислав
Сначала о барах. При формировании нового бара в Time[0] записывается новое значение - время открытия бара.
OnCalculate(...)
{
if(Time[0] == t) return(0); // Если этот БАР обработан --> выход
t = Time[0];
Теперь по всей истории: тормозить будет
datetime t;
Сначала о барах. При формировании нового бара в Time[0] записывается новое значение - время открытия бара.
OnCalculate(...)
{
if(Time[0] == t) return(0); // Если этот БАР обработан --> выход
t = Time[0];
Теперь по всей истории: тормозить будет
Спасибо за быстрый ответ. Я же и спрашиваю, как сделать, чтоб НЕ тормозил и не бегал по всей истории при появлении нового бара, а просто обрабатывал новый бар...
Сейчас организовано так: for(int i=limit-1; i>=0; i--) и как я понимаю, это значит, что на каждом открытии бара, все значения по всей истории будут пересчитаны снова, а нужно сделать работу только по последнему бару...
Вот как рассчитывается на последнем баре:
Давайте сначала рассмотрим строку
чтоб мне было понятней переписал так
Ага!!! Теперь начинаю понимать... В цикле переменная a меняется от 1 до 6. При значениях этой переменной 1, 5 и 6 какие-либо действия отсутствуют. Тогда просто
или в Вашем стиле
Результат будет тот же, но выполнится быстрее
Теперь Вам надо избавиться от функции Statistic ? Нужно написать ее тело подряд три раза, заменить в каждой из трех частей формальные параметры фактическими и удалить дублирование объявлений переменных. Общий код будет чуть длиннее, но выполнение ускорится. Есть смысл выбросить print() - кто же именно в это время будет журнал сообщений смотреть? - или заменить на Alert(), чтоб на экран вылазило. Еще там переменная namZz2 - ее значение меняется?
Мне наоборот нужно оставить статистик а сделать перебор массивов в статистике() а не через стат(). По тупому я знаю что можна три раза переписать как Вы сказали но проблема в том что скорее всего по результатм сбора статистики прийдется еще массивы добавлять и я рано или поздно вернусь на исходные. Потому и озвучиваю задачу конкретно а вы мне предлагаете простые пути которые я и так знаю они к сожалению приведут меня к началу. Потому и смотрю вперед чтобы не возвращать в будущем к этому!
как этот код вставить в статистик !? чтоб было одной процедурой вы в начало как я вопрос озвучил посмотрите пожалуйста !
Вот как рассчитывается на последнем баре:
Вот выдержка из рабочего кода ! Как собрать это в одной void Statistic без промежуточной void Stat !? То что Вы предлагаете мне нужно весь код перетачивать чтобы все массивы в один собрать и потом оттуда выцарапывать !
Приведенная вами выдержка из рабочего кода либо неверная либо ваша функция Statistic() ничего не делает кроме принта при вызове из Stat().
У вас она завершает работу сразу после return; в любом случае.
Вы полностью код приведите чтобы было понятно что вы хотите.
К сведению. Слишком много веток на форуме для помощи новичкам по MQL4.
Данная ветка теперь не поддерживается и закрыта.
Просьба все свои вопросы направлять в любую из нижеследующих активных веток:
https://www.mql5.com/ru/forum/160683
https://www.mql5.com/ru/forum/160587
Все последующие посты в этой ветке будут удаляться.