Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 829
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть вопрос такого формата значит: есть такой код
int P=3;
if(P==5){то необходимо залезть в библиотеку и что-то посчитать}
в данной ситуации Р=3, т.е. условие ложное, вопрос будет ли компилятор лезть в библиотеку и в холостую гонять код или компилятор будет читать код в текущем файле? Объясню почему я об этом спросил. Значит смотрите предположим если записать условие такого формата
int Y=4;
if(Y==4){что-то сделать} else{сделать что-то другое}. В данной ситуации получаем следующую картину Y==4, выполнился первый можно сказать приоритетный оператор, но то что записано в блоке else{сделать что-то другое} тоже будет проверено - посчитано(именно посчитано и всегда), но не выполнено потому что приоритетом является выражение if(Y==4). Другими словами в не зависимости от результата истинности машина производит все вычисления, т.е. тратит мощность на расчёты несмотря на то будет ли выполнен второстепенный оператор или нет. Если использовать большие программы и библиотеки и компилятор будет каждый раз копать код библиотек, то это в конечном итоге будет тормозить работу такой программы, на сколько эффективно будет в это случае использование библиотек может стоит использовать как можно более краткий код самого mql4 чтобы производительность робота была высокой? У кого какие мысли по этому поводу?
Здравствуйте.
Допустим, есть 2 индикатора, у первого 4 буфера, у второго 2. Кидаю их на график, открываю окно данных (CTRL+D), в списке 6 буферов от 0 до 5. Как мне из этого списка на MQL прочитать значение, допустим, 5 буфера? Через iCustom по нужному индикатору не совсем удобно. Удобнее из этого списка. Знаю, что так делают, но как?
Помочь кто-нибудь сможет?
Есть вопрос такого формата значит: есть такой код
int P=3;
if(P==5){то необходимо залезть в библиотеку и что-то посчитать}
в данной ситуации Р=3, т.е. условие ложное, вопрос будет ли компилятор лезть в библиотеку и в холостую гонять код или компилятор будет читать код в текущем файле? Объясню почему я об этом спросил. Значит смотрите предположим если записать условие такого формата
int Y=4;
if(Y==4){что-то сделать} else{сделать что-то другое}. В данной ситуации получаем следующую картину Y==4, выполнился первый можно сказать приоритетный оператор, но то что записано в блоке else{сделать что-то другое} тоже будет проверено - посчитано(именно посчитано и всегда), но не выполнено потому что приоритетом является выражение if(Y==4). Другими словами в не зависимости от результата истинности машина производит все вычисления, т.е. тратит мощность на расчёты несмотря на то будет ли выполнен второстепенный оператор или нет. Если использовать большие программы и библиотеки и компилятор будет каждый раз копать код библиотек, то это в конечном итоге будет тормозить работу такой программы, на сколько эффективно будет в это случае использование библиотек может стоит использовать как можно более краткий код самого mql4 чтобы производительность робота была высокой? У кого какие мысли по этому поводу?
На такие вопросы очень здорово отвечает отладчик встроенный в MetaEditor. Напишите скрипт с подобными условиями и пошагово прогоните в дебагере. Наяву увидите как программа не заходит туда где ей нечего делать. Более того, такое условие
После проверки что Р != 3 дальше проверяться ничего не будет.
Добрый день. Подскажите плиз что сделать чтобы все графические элементы оставались на графике в выходные?
На такие вопросы очень здорово отвечает отладчик встроенный в MetaEditor. Напишите скрипт с подобными условиями и пошагово прогоните в дебагере. Наяву увидите как программа не заходит туда где ей нечего делать. Более того, такое условие
После проверки что Р != 3 дальше проверяться ничего не будет.
Вот вам пример
int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}
рр в данном случае равно 8ми но компилятор ругается на большое число которое я хочу запихнуть в переменную, но я же не буду запихивать это число в переменную потому что рр=8 правильно, но почему-то компилятор начинает копать что я там написал и проверять может ли такое быть из чего мы делаем вывод что как раз таки компилятор всё проверяет и считает, ну это конечно грубая ошибка можно ошибку сделать и менее серьёзную но компилятор всё равно всё будет проверять может ли такое быть или нет. так вот что будет с библиотеками тоже хороший вопрос, я конечно не буду туда такое писать но речь идёт о том что компилятор залезет туда и начнёт проверять что ему предлагается сделать ещё но выполнять это не будет а считать будет. Далее я пробовал работать с отладчиком MQL4 читал инструкцию вот от сюда https://www.metatrader5.com/ru/metaeditor/help/development/debug, у меня даже не активна вкладка "проверять на истории" хотя в инструкции должна быть активна, далее я попробовал выбрать вариант на реальных данных но в этом случае у меня не отображаются значения переменных всё пусто ничего не пишет, просто интересно как так.
Вот вам пример
int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}
рр в данном случае равно 8ми но компилятор ругается на большое число которое я хочу запихнуть в переменную, но я же не буду запихивать это число в переменную потому что рр=8 правильно, но почему-то компилятор начинает копать что я там написал и проверять может ли такое быть из чего мы делаем вывод что как раз таки компилятор всё проверяет и считает, ну это конечно грубая ошибка можно ошибку сделать и менее серьёзную но компилятор всё равно всё будет проверять может ли такое быть или нет. так вот что будет с библиотеками тоже хороший вопрос, я конечно не буду туда такое писать но речь идёт о том что компилятор залезет туда и начнёт проверять что ему предлагается сделать ещё но выполнять это не будет а считать будет. Далее я пробовал работать с отладчиком MQL4 читал инструкцию вот от сюда https://www.metatrader5.com/ru/metaeditor/help/development/debug, у меня даже не активна вкладка "проверять на истории" хотя в инструкции должна быть активна, далее я попробовал выбрать вариант на реальных данных но в этом случае у меня не отображаются значения переменных всё пусто ничего не пишет, просто интересно как так.
Компилятор проверяет допустимые значения в момент компиляции, но не в момент выполнения программы. Почитайте о типах переменных, в каких диапазонах допустимы значения этих переменных. Если-бы компилятор не делал таких проверок, то в момент выполнения кода возможны потери значений и соответственно получение ошибочных результатов вычислений. Так-что такое поведение есть благо для программиста. Компилятор всегда предупредит о возможной потере точности.
А отладчик МТ4 не работает на исторических данных. Это прерогатива тестера МТ5. Но скрипты на истории по-любому нет смысла дебажить и то что я предложил можно понаблюдать и в тестере МТ4. Просто надо в начале кода поставить точку останова, а затем пошагово наблюдать за последовательностью выполнения и значениями переменных.
Считаете нормальным обсуждать куски декомпилированного кода?
Хоть бы переменные переименовали. А то совсем уж внаглую...
Этот советник в сети есть в формате MQL4. Trio Dancer. просто я его под себя переделываю
Этот советник в сети есть. Trio Dancer. просто я его под себя переделываю