Ошибки, баги, вопросы - страница 3149
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Шаг 1: Создаём заготовку при помощи 'MQL5 Wizard':
Шаг 2: правильно прописываем 'limit' и ИСПОЛЬЗУЕМ массив close - А НЕ вызов iClose!!!
Результат:
и нет никаких ошибок.
Кто сказал, что это единственный верный расчёт limit и индикатора?
Обсуждение ведётся насчёт иного расчёта limit и самого индикатора - слева-направо - от начала истории до текущего времени. Это проще и нагляднее.
В рассчитанном таким образом limit (int limit = rates_total - prev_calculated; if(limit>1) limit=rates_total-1;) сразу присутствуют все данные о:
Если текущий тик (limit==0), то for(int i=limit; i>=0; i--) { // ... } будет вести расчёт индикатора на каждом новом тике, и только нулевой бар будет пересчитываться.
Если открытие нового бара (limit==1), то for(int i=limit; i>=0; i--) { // ... } будет вести расчёт первого и нулевого бара - предыдущий и вновь открытый
Если это изменение истории (limit>1), то for(int i=limit; i>=0; i--) { // ... } произведёт полный перерасчёт всего индикатора по всей доступной истории (история где-то кем-то была изменена)
А какая разница? он может получиться меньше нуля?
да, встречал (дописал в предыдущем сообщении)
Но видимо эта проблема навсегда.
И теперь только if-ы.
Проблему только Артём понял.
Но видимо эта проблема навсегда.
И теперь только if-ы.
Нет, не понял. Уточните что я понял...
все же тернарный оператор смотрится более лаконично (ИМХО)
тем более, как говорил, а если вдруг, что-то пойдет не так и prev_calculated окажется больше rates_total.
Такую ситуацию встречал, когда Макс. баров в окне != unlimited, а например 50000. В этом случает размер массив баров с каждым новым баром увеличивался на 1, но в какой то момент снова становился снова 50000. Логику не уловил. Ловил это пару лет назад. Сейчас нужно проверить. Поставлю распринтовку на своем VPS.
Нет, не понял. Уточните что я понял...
Что for теперь не работает как раньше
limit==0
для тиков i>=0
для баров i>0
Выше же вы всё правильно написали,
только для нового бара опечатался for(int i=limit; i>=0; i--)
тут оператор = не нужен, но это в прошлом наверно уже,
если не вернут прежнее поведение.
Что for теперь не работает как раньше
limit==0
для тиков i>=0
для баров i>0
Выше же вы всё правильно написали,
только для нового бара опечатался for(int i=limit; i>=0; i--)
тут оператор = не нужен, но это в прошлом наверно уже,
если не вернут прежнее поведение.
Опять ничего не понял. В чём у вас что-то не так? Вроде всё как раньше было.
Опять ничего не понял. В чём у вас что-то не так? Вроде всё как раньше было.
При такой конструкции
индикаторный буфер выходит за пределы.
Покажи пожалуйста пример для тиков с циклом i>=0
может я что подзабыл, и не так делаю.
При такой конструкции
индикаторный буфер выходит за пределы.
При такой конструкции
индикаторный буфер выходит за пределы.
Покажи пожалуйста пример для тиков с циклом i>=0
может я что подзабыл, и не так делаю.
я уже писал, что при такой конструкции вы обращаетесь к индексу буфера с номером rates_total (когда prev_calculated == 0 ).
А это переполнение, так как rates_total - это размер буфера, последний элемент которого rates_total -1