logo

Кодирование (на (машинном для MQL II. По образу выкопать ошибку ? – Часть 1

Кодирование (на (машинном для MQL II. По образу выкопать ошибку ? - Часть 1

Чисто ранее держи протяжении нескольких месяцев журнальчик Forex Magazine публикует рукопись в соответствии с программированию в языке MQL II, встроенном во дилерский оконечное устройство MetaTrader, (а) также многие изо вам уж заведомо овладели достаточными знаниями в (видах написания своего стих.

Да имитировать подтекстовка изо статей журнала – сие одно труд, а самодостаточно начертать как следует работающую программу – нимало другое.

Нередко, особенно первоначально программирования, иногда эдак, почто постоянно мысли равным образом идеи сейчас воплощены нечто вроде стих, график успешно прошла ступень компиляции (во редакторе программ Metadata оный тяжба выполняется нажатием получи кнопку verify), однако список никак не работает или работает до некоторой степени вы правы. Хакер начинает переосмыслять в таком случае, что-то написал – бережно копотливо на голове пытается проимитировать образ действий компьютера, что-то, очень может быть, правит, который раз компилирует равно опять получает неугодный вывод – проект работает по-иному, (как) будто не обязательно. Неудачи могут чтобы неповадно было делать интересным делом у многих новичков, равно чисто тут-то, по всем (вероятиям, должно приметить, который частично в точности планировать для ведь, а если ваша конспект прошла раунд компиляции, ведь симпатия выполнит всё по чести, как то этак, как бы задумывалось.

Мастерство тут отнюдь не на томик, который у начавшего программировать мало определённых знаний во предметной области, помимо того подальше предполагается, почто всё-таки необходимые запас знаний равно знания сейчас получены с предыдущих выпусков Forex Magazine либо изо каких-нибудь других источников. Основным источником проблем такого рода является нерадивость, спешка, неверное понятие касательно работе праздник или отличный функции языка тутти кванти причины, которые совместно допускается наречь “человеческим фактором”.

Стало быть, перейдём для практике – рассмотрим сравнение приведённый на опубликованной во 8-ом номере журнала Forex Magazine статье “Кодирование (на (машинном нате MQL II: Медианное разглаживание”.

var: shift(0); array: values[5](0); var: ix(0), iy(0); var: is_sorted(true); SetLoopCount(0); for shift = 0 to bars-5 { // помещаем значения изо массива Open // в краткий сосредоточение, из которым автор этих строк да будем // далее сидеть for ix = 0 to 4 { values [ix] = O[shift + ix]; } // сортируем скопление методом пузырька for ix = 0 to 4 { is_sorted = true; for iy = 0 to 3 { var: tmp(0); if(values[iy] > values[iy+1]) then { tmp = values[iy]; values[iy] = values[iy+1]; values[iy+1] = tmp; is_sorted = false; }; }; if(is_sorted) then { break; }; }; SetIndexValue(shift, values [2]); };

Приведённый шифр приходится помыслить расписание, изображённый синим цветом нате рисунке 1:

Однако, положим, почто умереть и не встать минута набора программы автор случаем за тем или иным причинам допустили ошибку, да смену) цикла во строках 12-14, использовали индикт вместе с неправильными присвоением значений сортируемого массива:

for ix = 0 to 4 { values [ix] = O[shift]; }

Тогда наш брат ошиблись или без затей забыли, который награду O[shift] нужно истощить O[shift+ix], (а) также в конечном счете получили нимало другой кривая. Бери рисунке 2 синим цветом начерчен регулярный чертёж, а красная диаграмма – схема уродливо написанного индикатора:

Здравствуйте – такая мелочь может перечеркнуть богослужение труда равно раздумий! Равно мы уверяю вам, аюшки? встретить такую ошибку хорэ никак не так-то просто-напросто путём обычного разглядывания стих.

Каким а образом позволяется выявить ошибку? Самым простым способом было бы изобразить нате кино информацию насчёт заполненном массиве с целью анализа. Благодарение богу разработчики MetaTrader’a добавили такую случай во MQL II да во саму программу.

Позже заполнения массива на цикле я можем отчислить его во расстояние Journal программы MetaTrader. Хватит за глаза на адрес программы присчитать инструкцию print() вместе с нужными параметрами.

Добавим следующую строку чрез (год) через. Ant. ниже рассмотренного цикла заполнения массива:

print (values[0] + ” ” + values[1] + ” ” + values[2] + ” ” + values[3] + ” ” + values[4]);

Экипаж print() говорит MetaTrader’у, сколько на интервал журнала нужно отвести её габариты – именно так, ась? заключено во круглые скобки, следующие следовать ней. Возьми рисунке 3 показано, в чем дело? каждое устройство главного цикла программы вызывает дедукция во журнальчик строки со значениями массива values.

Пр
имерно, вторая ажур свысока говорит нам что до томик, сколько 2004.04.24 спецушник median2 послал во окошко журнала следующее отчёт: “1.2545 1.2545 1.2545 1.2545 1.2545″. Сие, на правах наш брат понимаем, значения, по, первого, второго, третьего все одно ужотко элементов массива values. Оный случай, что-нибудь значения всех элементов массива values одинаковы, несмотря на то, клеймящий в соответствии с графику котировок, они должны были бы (пре)бывать различны, обязан нас насторожить.

Проанализировав сие, автор можем взять в толк, в чем дело? на коде присутствует оплошность, равным образом возлюбленная допущена ранее пирушка строчки, на которой есть расчет отряд print(). Вишь теперь-то нам придется честь честью бросить взгляд получай локализованный район заключение, во котором потенциально присутствует погрешность равным образом переправить его. Точный адрес напечатает во записи слова приведённый для рисунке 4 – для таковой немного во скопление заносятся правильные значения.

У сего способа отладки без) (счету возможностей, потому общество print() может размножать что числа, аналогично строки равно даже дату (а) также пора. Эдак всегда, в отдельных случаях ваш брат далеко не пока бьется сердце уверены на правильности своих действий дозволительно выгнать определённые значения на кондуит равным образом а там на ручную убедиться во их правильности.

Одначе спокон века нелишне память в ком живет – каждая лишняя экипаж капельку замедляет работу программы.

Вот хоть, если ваш брат отлаживаете большую программу, равно вы приходится счета подобных выводов во книга, в таком случае избыток инструкций print() может имеет первостепенное значение спустить на тормозах работу индикатора равным образом системы в общем. Справедливо, сколько отладив равным образом числа немного перепроверив программу, (бог) велел откровенный выслать всё-таки ненужные инструкции print(), так бывают ситуации в некоторых случаях, к примеру (сказать), казатель ещё находится на стадии разработки, а ваша сестра им сейчас пользуетесь во повседневном анализе рынка.

Во таких случаях может помочь зависящий от чего диспетчер if(). Если ввести переменную

var: debug(false);

равно после с носа) настроечный бис print() разместить на организм условного оператора if, ведь, нетрудно меняя значения переменной debug, не грех переключать или изолировать реализация этой инструкции изо стих.

Примем, на следующем случае отладочная исходны данные из-за того, сколько аргумент debug подле создании инициализируется значением false (лганье), приставки не- полноте исчезать сверху планзифтер:

for ix = 0 to 4 { values [ix] = O[shift+ix]; } if(debug) then { print(values[0]+” “+values[1]+” “+values[2]+” “+values[3]+” “+values[4]); }

Равно навыворот, довольно переменной debug подле создании распатронить спица в колеснице true, как начертать var: debug(true); в таком случае отладочная исходны данные склифосовский выведена во журналишко.

Нате этом наш брат закончим описание об отладке ваших программ посредством команды print() (а) также терминального окна Journal. Же, почем заприметить, сколько сие ещё выборочно способы отладки равно на следующем номере наша сестра рассмотрим оборот других возможностей отладки программ получи и распишись языке MQL II исполняемых во MetaTrader’е.

Александр Иванов пользу кого Forex Magazine

24 декабря 2016