глобальная инициализация не удалась!!!!!!! - страница 6

 
SDC:

Вы используете int OnCalculate() вместо int start(). Она запускается на каждом тике, как start(). До и после будет выглядеть примерно так,

Формальные параметры OnCalculate делают его более самодостаточным, кодеру не нужно полагаться на вызов всевозможных глобальных файлов, что, очевидно, в кругах oop считается плохим кодером, который получает пощечину. На практике нет особой разницы между использованием любого из них. Кроме того, OnCalculate такой же, как и в mql5, так что у вас есть возможность писать совместимый код.


Спасибо, SDC. Думаю, я понимаю, к чему вы клоните. Я не уверен, что мне нравится направление, в котором движется MetaQuotes. Они делают то же самое, что и Microsoft. Это может облегчить кодирование, но это серьезно снижает потребность программиста в понимании того, что на самом деле происходит "под капотом", так сказать. Это огромная проблема, на мой взгляд, потому что это снижает мастерство и понимание программистов. Если вы хотите быть мастером в том, что вы делаете, вы должны понимать это от самого базового уровня до более высоких концепций. Я начал программировать в 1978 году. Мы писали в двоичном и восьмеричном коде. Сейчас большинство людей не имеют об этом ни малейшего представления. Microsoft уже много лет продвигает языки программирования до уровня, который полностью отделяет программиста от понимания того, что на самом деле происходит под капотом, и это не для нашего блага. Их цель - сделать так, чтобы только их программисты знали, что на самом деле происходит на низких уровнях, а все остальные должны полагаться на них.

Примером того, о чем я говорю, является эволюция от C++ к C#. Утверждается, что C# призван облегчить жизнь программиста, выполняя за него низкоуровневую "сантехнику", освобождая его от необходимости знать, как это делать самому, а также ускоряя время разработки. Конечно, это было достигнуто, но какой ценой? Мы, "олдтаймеры", прекрасно понимаем, что такое прямой доступ к памяти и как его использовать. Мы знаем, что происходит "под капотом". Мне часто приходилось специально выделять определенный объем памяти или манипулировать памятью побайтно или даже побитно. Имеет ли представление об этом тот, кто знает только высокоуровневое "облако" C#? Неа. Позвоните в Microsoft.

Я знаю, что я тут разглагольствую, но я думаю, что MetaQuotes движется в том же направлении, и это не очень хорошо. Это определенно нехорошо, когда вы говорите о написании приложений, которые должны работать с данными в реальном времени. На нашей арене ошибка может стоить кому-то больших денег. Я могу смириться с этим, если я облажаюсь в приложении, которое предназначено только для моего личного использования. Если я облажаюсь в приложении, которое я продаю, это неприемлемо.

BTW, я не думаю, что глобальные объекты, используемые в ООП, и глобальные объекты, используемые в MQL, - это одно и то же понятие. MQL все еще младенец в плане того, чтобы быть настоящим объектно-ориентированным языком. На самом деле, "глобальный" ничего не значит в ООП. Она называется "статической" переменной и доступна всем объектам, созданным из одного класса, а также любым классам в производной иерархии. Она не одобряется по причинам инкапсуляции данных, а также является кошмаром в обслуживании, особенно если она используется в классе очень высокого уровня, от которого зависит все в приложении.

 

В принципе, если вы хотите получить цифры из счета, вам просто нужно использовать AccountBalance().

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

 
ProfessorMetal:


Спасибо, SDC. Думаю, я понимаю, к чему вы клоните. Я не уверен, что мне нравится направление, в котором движется MetaQuotes. Они делают то же самое, что и Microsoft. Это может облегчить кодирование, но это серьезно снижает потребность программиста в понимании того, что на самом деле происходит "под капотом", так сказать. Это огромная проблема, на мой взгляд, потому что это снижает мастерство и понимание программистов. Если вы хотите быть мастером в том, что вы делаете, вы должны понимать это от самого базового уровня до более высоких концепций. Я начал программировать в 1978 году. Мы писали в двоичном и восьмеричном коде. Сейчас большинство людей не имеют об этом ни малейшего представления. Microsoft уже много лет продвигает языки программирования до уровня, который полностью отделяет программиста от понимания того, что на самом деле происходит под капотом, и это не для нашего блага. Их цель - сделать так, чтобы только их программисты знали, что на самом деле происходит на низких уровнях, а все остальные должны полагаться на них.

Примером того, о чем я говорю, является эволюция от C++ к C#. Утверждается, что C# призван облегчить жизнь программиста, выполняя за него низкоуровневую "сантехнику", освобождая его от необходимости знать, как это делать самому, а также ускоряя время разработки. Конечно, это было достигнуто, но какой ценой? Мы, "олдтаймеры", прекрасно понимаем, что такое прямой доступ к памяти и как его использовать. Мы знаем, что происходит "под капотом". Мне часто приходилось специально выделять определенный объем памяти или манипулировать памятью побайтно или даже побитно. Имеет ли представление об этом тот, кто знает только высокоуровневое "облако" C#? Неа. Позвоните в Microsoft.

Я знаю, что я тут разглагольствую, но я думаю, что MetaQuotes движется в том же направлении, и это не очень хорошо. Это определенно нехорошо, когда вы говорите о написании приложений, которые должны работать с данными в реальном времени. На нашей арене ошибка может стоить кому-то больших денег. Я могу смириться с этим, если я облажаюсь в приложении, которое предназначено только для моего личного использования. Если я облажаюсь в приложении, которое я продаю, это неприемлемо.

BTW, я не думаю, что глобальные объекты, используемые в ООП, и глобальные объекты, используемые в MQL, - это одно и то же понятие. MQL все еще младенец в плане того, чтобы быть настоящим объектно-ориентированным языком. На самом деле, "глобальный" ничего не значит в ООП. Она называется "статической" переменной и доступна всем объектам, созданным из одного класса, а также любым классам в производной иерархии. Она не одобряется по причинам инкапсуляции данных, а также является кошмаром в обслуживании, особенно если она используется в классе очень высокого уровня, от которого зависит все в приложении.

Я думаю, что MQ движется в направлении достижения совместимости mql4 и mql5, вы увидите, что мы уже дрейфуем на территорию mql5 с OnTick, OnTimer, OnCalculate и множеством функций mql5, которые теперь доступны для использования. Вы увидите, что это не облегчает работу. Новая версия более строга к нам, чем предыдущая. Старый mql4 позволял нам писать действительно небрежный код и это сходило нам с рук, новый же ожидает от нас большей точности.
 

Поэтому генератор ea больше не может быть использован. Если код не обновлен, вам действительно нужно самостоятельно кодировать инди/еа.

Практически, дисциплина - это ключ к программированию. Это трудно, но вы становитесь более сильным в кодировании.

 
SDC:
Я думаю, что MQ движется в направлении достижения совместимости с mql4 и mql5, вы увидите, что мы уже дрейфуем на территорию mql5 с OnTick, OnTimer, OnCalculate и множеством функций mql5, которые теперь доступны для использования. Вы увидите, что это не облегчает работу. Новая версия более строга к нам, чем предыдущая. Старый mql4 позволял нам писать действительно небрежный код и это сходило нам с рук, новый же ожидает от нас большей точности.


Я понимаю, о чем вы говорите. Я просмотрел некоторую документацию и понял, что неправильно понимал использование новых методов. OnStart() предназначен для запуска скриптов, OnCalculate() заменяет старый start() для индикаторов и должен заменить множество подсчитанных баров, которые все использовали в старой инкарнации MQL, а также запускает выполнение кода индикатора при получении нового тика (если он не запущен в данный момент) и, наконец, OnTick() заменяет start() для советников. Наряду со многими другими изменениями, вы правы - это не облегчает нашу жизнь, потому что нам придется "переучиваться", а для тех, кто занимается этим уже давно и имеет несколько приложений, это приведет к тому, что придется многое переделывать, чтобы поддерживать их в рабочем состоянии. Что касается меня самого, то я только начинал разбираться в MQL, и это стало для меня хорошей зацепкой. Большую часть того, чему я научился, мне теперь придется "отучиться", так сказать.

Что касается ужесточения правил - это хорошо, на мой взгляд. Возможно, к этому трудно привыкнуть, но это уменьшит вероятность ошибок, которые могут дорого обойтись нашим пользователям и нам самим. С точки зрения человека, который провел годы в корпоративном мире, работая над приложениями, в которых ошибки с нашей стороны могли стоить нашим пользователям огромных денег (а нам - работы), я сторонник точности. Однако я хотел сказать, что такие вещи, как введение OnCalculate(), который делает половину работы за вас, снижают ваше понимание того, что происходит под капотом. Я говорю по собственному опыту, когда говорю о переходе с C++ на C#. Вы перешли от знания "как это работает" к "я нажимаю эту кнопку, и происходит вот это". Может быть, я старый школьник, но я не думаю, что отупение - это хорошо. У этого реинжиниринга есть как хорошие, так и плохие стороны.

 
deysmacro:

Поэтому генератор ea больше не может быть использован. Если код не обновляется, вам действительно нужно самостоятельно кодировать инди/еа.

Практически, дисциплина - это ключ к программированию. Это трудно, но вы становитесь более сильным в кодировании.


Не спорю, друг. По правде говоря, я не думаю, что EA-генераторы вообще стоило использовать. Вы понятия не имеете, что на самом деле делает "черный ящик". Что касается вашего второго утверждения, то я с вами полностью согласен.
 
ProfessorMetal:

Вы перешли от знания "как это работает" к "я нажимаю эту кнопку, и происходит вот это". Может быть, я старый школьник, но я не думаю, что отупение - это хорошо. У этого реинжиниринга есть как хорошие, так и плохие стороны.

Посмотрите на это с другой стороны: для одного человека или даже для организованной компании людей было бы практически невозможной задачей запрограммировать с нуля что-то вроде MT4 полностью из двоичного кода. Не говоря уже о современных компьютерных играх. Настанет время, когда ни один живой человек не будет иметь ни малейшего представления о двоичной, восьмеричной, шестнадцатеричной системе счисления или даже о Basic. Сначала вы строите из элементов, потом, со временем, получаются блоки, потом, возможно, целые истории, целые книги. Вы просто собираете сюжеты и в итоге получаете что-то вроде бы новое, хотя это все тот же старый ши_ каждый раз. Мир меняется, нельзя зацикливаться на одном и том же старом сценарии! Нужно постоянно переучиваться, сначала читать руководство. Потом снова, и снова, и снова. Иначе человек отстает и становится динозавром.

 
Dadas:

Посмотрите на это с другой стороны: для одного человека или даже организованной компании людей было бы практически невозможным делом запрограммировать с нуля что-то вроде MT4 полностью из двоичного кода. Не говоря уже о современных компьютерных играх. Настанет время, когда ни один живой человек не будет иметь ни малейшего представления о двоичном, восьмеричном, шестнадцатеричном или даже Basic. Сначала вы строите из элементов, потом, со временем, у вас появляются блоки, потом, возможно, целые истории, целые книги. Вы просто собираете сюжеты и в итоге получаете что-то вроде бы новое, хотя это все тот же старый ши_ каждый раз. Мир меняется, нельзя зацикливаться на одном и том же старом сценарии! Нужно постоянно переучиваться, сначала читать учебник. Потом снова, и снова, и снова. Иначе человек отстает и становится динозавром.


Я понял твою точку зрения, Дадас. И я согласен с тобой до определенного момента. Однако, кто-то ВСЕГДА должен знать предмет с нуля, иначе весь карточный домик рухнет. Позвольте мне дать вам иллюстрацию того, что я имею в виду. Я провел время в качестве профессионального педагога. Я имею звание доцента математики и физики. Я преподавал в муниципальном колледже, и наша "постоянная" кафедра физики состояла из меня и заведующего кафедрой.

В то время факультет математики склонялся к тому, чтобы все преподавание велось путем обучения студентов статистике, исчислению, линейной алгебре и т.д. с помощью компьютерных или калькуляторных программ. Они не учили их ничему по реальным предметам. Студентов учили только тому, как пользоваться программами. Это не изучение математики. Это нажать кнопку "Пуск", ввести несколько цифр и нажать кнопку "Поехали". Ко мне приходили студенты, которые горько жаловались на то, что они следовали всем "инструкциям" и все равно неправильно решили задачу. Мой первый вопрос к ним был: "Ответ, который выдал калькулятор, кажется разумным?" Ответ: "Ну, я не знаю". Почему они не знали? Потому что они ни черта не смыслили в математике. Все, что они знали, - это нажимать эти кнопки в такой последовательности, и калькулятор, как по волшебству, выдаст ответ. НЕПРАВИЛЬНО!

Теперь вернемся к моему первоначальному вопросу. Мой партнер был полностью за это. Его аргументация: "Когда-нибудь все будет делаться именно так. Никому не нужно будет знать, как на самом деле делать математику и физику, как это делаем мы. Все это будут делать программы". Мой ответ: "Да, конечно. А как именно они узнают, когда "ответы, которые они получают, совершенно нереальны? И вообще, кто, черт возьми, будет писать и поддерживать все это, когда люди дошли до того, что не могут даже элементарно считать, потому что их научили позволять машине делать это за них?" Понимаете, о чем я? Кто-то должен будет знать, "как это работает", или, говоря словами Джима Моррисона, весь этот дом горит". И вот тут, мой друг, в дело вступают динозавры вроде меня. Я могу идти вниз, пинаясь и крича, но я буду учить до конца. И когда этот дерьмовый дом загорится, это будет не потому, что я выбрал ленивый путь :-).

 
ProfessorMetal:


Я понял вашу точку зрения, Дадас. И я согласен с тобой до определенного момента. Однако кто-то ВСЕГДА должен знать предмет с нуля, иначе весь карточный домик рухнет. Позвольте мне дать вам иллюстрацию того, что я имею в виду. Я провел время в качестве профессионального педагога. Я имею звание доцента математики и физики. Я преподавал в муниципальном колледже, и наша "постоянная" кафедра физики состояла из меня и заведующего кафедрой.

В то время кафедра математики склонялась к тому, что все преподавание будет вестись путем обучения студентов статистике, исчислению, линейной алгебре и т.д. с помощью компьютерных программ или калькуляторов. Они не учили их ничему по реальным предметам. Студентов учили только тому, как пользоваться программами. Это не изучение математики. Это нажать кнопку "Пуск", ввести несколько цифр и нажать кнопку "Поехали". Ко мне приходили студенты, которые горько жаловались на то, что они следовали всем "инструкциям" и все равно неправильно решили задачу. Мой первый вопрос к ним был: "Ответ, который выдал калькулятор, кажется разумным?" Ответ: "Ну, я не знаю". Почему они не знали? Потому что они ни черта не смыслили в математике. Все, что они знали, - это нажимать эти кнопки в такой последовательности, и калькулятор, как по волшебству, выдаст ответ. НЕПРАВИЛЬНО!

Теперь вернемся к моему первоначальному вопросу. Мой партнер был полностью за это. Его аргументация: "Когда-нибудь все будет делаться именно так. Никому не нужно будет знать, как на самом деле делать математику и физику, как это делаем мы. Все это будут делать программы". Мой ответ: "Да, конечно. А как именно они узнают, когда "ответы, которые они получают, совершенно нереальны? И вообще, кто, черт возьми, будет писать и поддерживать все это, когда люди дошли до того, что не могут даже элементарно считать, потому что их научили позволять машине делать это за них?" Понимаете, о чем я? Кто-то должен будет знать, "как это работает", или, говоря словами Джима Моррисона, весь этот дом горит". И вот тут, мой друг, в дело вступают динозавры вроде меня. Я могу идти вниз, пинаясь и крича, но я буду учить до конца. Когда этот дерьмовый дом загорится, это будет не потому, что я выбрал ленивый путь. :-)


Ну, тогда ты закончишь как Дон Кихот.

И да, мы не доживем до этого, но рано или поздно так и будет. В конце концов, никто ни черта не знает, как и почему работает вся эта Вселенная, но она работает. Знаете ли вы, получаете ли вы правильные ответы от самой Вселенной? Как вы вообще можете это знать? Я понимаю образ мышления математиков. Они хотят, чтобы формулы управляли всем, и они хотят знать/понимать, откуда берутся формулы, с/з они хотят контролировать. 2+2=4, но почему? Действительно ли это правильный ответ? Правда в том, что вы никогда не сможете контролировать ситуацию.

И после того, как все сказано и сделано, вы получаете "global initialization failed", и никто не знает, почему или как это исправить.

 
Dadas:


Ну, тогда вы закончите как Дон Кихот.

И да, мы не доживем до этого, но рано или поздно так и будет. В конце концов, никто ни черта не знает, как и почему работает вся эта Вселенная, но тем не менее она работает. Знаете ли вы, получаете ли вы правильные ответы от самой Вселенной? Как вы вообще можете это знать? Я понимаю образ мышления математиков. Они хотят, чтобы формулы управляли всем, и они хотят знать/понимать, откуда берутся формулы, с/з они хотят контролировать. 2+2=4, но почему? Действительно ли это правильный ответ? Правда в том, что вы никогда не сможете контролировать ситуацию.

И после того, как все сказано и сделано, вы получаете "global initialization failed", и никто толком не знает, почему и как это исправить.


Я думаю, вы имели в виду Дон Кихота. В любом случае, суть в том, что нам действительно нужно понимать, с чем мы работаем, иначе нас ждет провал.