Ошибки, баги, вопросы - страница 1325

[Удален]  

Ув. разработчики!

Оставил заявку в сервисдескНачата: 2015.07.10 15:48#1257674

не пропустите мимо пожалуйста... 

 

Terminal MetaTrader 5 x64 build 1159 (MetaQuotes Software Corp.)

После прикрепления скрипта из окна "Навигатор" этот скрипт остаётся активным. Такое поведение небезопасно, так как можно ненароком удалить этот скрипт. Например:

Присоединяется скрипт к графику, скрипт рисует несколько линий и эти линии остаются активными (выделенными). Теперь при желании удалить эти линии одним махом (через клавишу "delete") я вместо удаления линий получаю предупреждение о возможном удалении скрипта:

Удалить скрипт?

Предупреждение - это хорошо, НО! В диалоговом окне по умолчанию активна кнопка "Да"! А ведь так можно шмякнуть по кнопке и удалить скрипт! Ведь изначально я хочу удалить линии и нажимаю "delete" в надежде удалить линии, а в итоге могу удалить скрипт!

 
Alexander Laur:

Этот косяк уже достал:

При загрузке терминала выдаются нулевые данные и критическую ошибку деления на нуль.

Никакие проверки получения данных не помогают!!!

Вы же забыли на ноль проверять, а проверяете лишь вызов функции.
 
Не пытайтесь изменить принципы программирования частными случаями. Это как раз про результат благих намерений говорю.

Функция взятия данных предоставила эти данные и теперь вы должны их проинтерпретировать. Не каждый ноль является ошибкой. Особенно опасно делать выводы об ошибочности по характеристикам финансовых инструментов, так как зачастую половина их полей пустые или не имеют смысла в конкретном режиме.
 
Вы не понимаете, но мы - да.

Перечитайте мой ответ выше - он абсолютно точный и обьясняет поведение.
 

Добрый день,

Оставил тикет по вопросу работы copyticks:

https://www.mql5.com/ru/forum/38520/page3

еще 03 июля, никто не отвечает. 

 
Alexander Laur:

То есть после отработки функции получения данных, я должен проверить какие данные я получил. Хорошо, подправлю код:

Но при первом запуске, если он происходит в выходные, т.е. нет тиков, индикатор не выводит информацию. Ждет следующего тика. Из записей в журнале видим, что tickValue = 0, поэтому вышли по ошибке и ждем......

Жесть!

Ноль получается только при первом запуске терминала. Что мешает проверить на ноль и выставить флаг запрета работы? Причём при следующем входе в OnCalculate() уже все функции возвращают не ноль (в выходные проверяется просто - достаточно правый клик на графике и выбрать "Обновить").
[Удален]  
Alexander Laur:

То есть после отработки функции получения данных, я должен проверить какие данные я получил. Хорошо, подправлю код:

Но при первом запуске, если он происходит в выходные, т.е. нет тиков, индикатор не выводит информацию. Ждет следующего тика. Из записей в журнале видим, что tickValue = 0, поэтому вышли по ошибке и ждем......

Жесть!

Ну так а что трудно проверить на деление на ноль ? если есть такой возврат функции, что проще дописать одну строчку в коде или просить на форуме переделать терминал и не факт что в дальнейшем не повторится ?
 
Alexander Laur:

Karputov Vladimir и Vladimir Zubov вы хоть читаете то, что комментируете? Или для Вас главное выразить свое почтение. Ну если не вникли в обсуждаемую проблему, так постойте в стороне, глядишь что то полезное для себя уясните.

Мой разговор с Ренатом о НЕКОРРЕКТНОЙ РАБОТЕ ФУНКЦИЙ !!!

Почему функция ПРАВИЛЬНО (return(true)) отработавшая возвращает НУЛЬ?

Как может стоимость тика быть равна нулю? Где берет функция SymbolInfoDouble() данные о стоимости тика, если возвращает нулевое значение стоимости тика?

Вы бы хоть вникали в то, что комментируете.

Вы вероятно не совсем правильно представляете как работают функции. Функция:

  1. Возвращает результат правильности своей отработки. На примере продуктового склада. Задача у функции - взять то, что лежит в коробке №5. Если функция сходила на склад, нашла коробку №5 и вытряхнула то, что там есть в свою сумку - значит функция вернёт ответ "Задача выполнена успешно".
  2. Функции по большому счёту нет дела до того, что она там принесла в сумке. Это теперь Ваша проблема. Анализировать, что именно принесла функция в сумке.

Таким образом Ваша задача, как программиста, проверять два результата: успешность выполнения функции и то, что вернула функция. И не нужно требовать от терминала то, что Вы хотели бы видеть. Достаточно просто правильно делать.

 

Неоднозначный результат

void OnStart()
{
        A a( 10 );
        {
                A a( a.c );             //здесь = не 10
                Print( a.c );
        }
        {
                A a = a.c;              //здесь = 10
                Print( a.c );
        }
}

В одном случае результат: 10, а в другом: не 10. А в чём разница?