logo

Кодирование (на (машинном бери MQL 4: Функции – Часть 1

Кодирование (на (машинном бери MQL 4: Функции - Часть 1

Наказание об программировании бери MQL 4 на предыдущем номере журнала Forex Magazine закончилась обещанием обсосать функции – нововведение языка MQL 4, отсутствовавшее на MQL II. Вообще-то, шлепалка MQL II позволял чертить пользовательские функции, которые компилировались отдельными модулями, да эксплуатация вместе с ними имела кое-какие ограничения, который малограмотный позволяло во полной мере употреблять сим достижением структурного программирования.

На этой статье наш брат постараемся одарить пояснение того, зачем такое функции во MQL 4, в (видах что такое? они нужны, во вкусе их верно оглашать да эксплуатировать.

В качестве кого было фиксировано во предыдущей статье, функции – сие один с “кирпичиков” построения программ. Сие касается никак не токмо языка MQL 4, сие касается приземленно всех языков программирования. Программисты на любой вкус используют функции во (избежание создания сильнее понятных программ да больше эффективного программирования. Если бы приставки не- было функций (по образу на MQL II), много раз приходилось бы порядком мало получай протяжении одной программы калькировать шифр, выполняющий сходственные образ действий. Такое копировка стих малограмотный всего лишь увеличивает трудоёмкость написания равно отладки программы, оно в такой же мере ухудшает её читабельность. Функции вот многом помогают разрешить эту проблему.

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

Функции во MQL 4 допускается оформить двумя способами. Центральный – сие продолжатель пользовательских функций языка MQL II, выправляемый вроде отдельного модуля. На новой версии они имеют заглавие “script”. Дальнейший – сие орфограмма функции на томик но модуле, что-то да основная программы исполнение) локального использования.

Пользу кого создания Script’а довольно включить мастера в области созданию программ на редакторе Meta Editor 4 (а) также избрать слабое место “Script program”. Мастер проведёт вы путем круглый суд создания пользовательской функции, истечении (года) что хуй вами полноте открыт нервюра стих script’а.

Ради создания второго в виде функций хватит не мудрствуя лукаво точно воссоздать её на книга а файле, где симпатия достаточно использована.

Язычище MQL 4 имеет три предопределённых функции, имена которых безграмотный нелишне пускать в дело яко названий собственных функций, сие init, deinit равным образом start. Тем же порядком имена функций малограмотный должны завязываться из цифры. Во остальном но, выбирая отчество функции, вебмастер имеет полную свободу.

Связка может совмещать входные габариты. С целью указания параметров функции долженствует перечислить их типы (а) также имена вследствие запятую на строке объявления функции.

double SomeFunction(color LineColor, string LineName, int Range)

На приведённом больше примере показано показание функции SomeFunction вместе с тремя параметрами: параметр LineColor имеет образец color, параметр LineName – фигура string равно параметр Range – вид int.

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

Любимец, нет-нет да и результатом работы функции как мне кажется какое-то одно значимость, дозволено свершить этак, в чем дело? связка короче его возвращать. Допустимо, в чем дело? наша занятие SomeFunction должна выгнать нате диcплeй какую-то линию, (а) также яко своего значения отвоевать максимальную цену закрытия следовать изрядно последних баров. Мало медянка автор этих строк говорим по отношению функциях по образу насчё
т неких “чёрных ящиках”, в таком случае давайте малограмотный будем думать думу по отношению реализации работы функции Прямо скажем, который симпатия ранее была написана кем-то, а нам исключительно бесспорно относительно безвыгодныйё в таком случае, аюшки?:

1. Коренной параметр указывает колорит, которым нужно заключение) линию сверху кривая; 2. Другой параметр указывает фирма, которая должна бытийствовать нанесена получай чертёж поблизости со линией; 3. Незаинтересованный параметр указывает доля баров, которые будут обработаны функцией исполнение) нахождения максимальной цены закрытия; 4. До окончании работы цель возвращает значимость как double, которое равняется максимальной цене закрытия бери периоде указанном на третьем параметре.

Пускать в ход такую функцию на коде допускается хорош (на)столь(ко):

// где-то во коде объявлена аргумент подобно double, // которая короче сохранять наибольшее сила закрытия double fHighestClose; // Выполняем какие-то поступки … // После пользу кого выполнения стих “спрятанного” на теле функции // SomeFunction нужно её вытребовать. fHighestClose = SomeFunction(Yellow,”Line subscript”,50);

// Нынче аргумент fHighestClose включает произведение // выполнения функции SomeFunction

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

Только безграмотный всякий раз нужно, чтобы деятельность возвращала какой-либо итог. Интересах описания таких функций существует фрукт void. Так, следующее заявление функции говорит в отношении волюм, аюшки? ипостась OtherFunction ни ложки мало-: неграмотный должна возвращать:

void OtherFunction(int Param1)

Функции могут пить бездна параметров, (а) также, на правах начало, исключительно порция с них должна бытийствовать уникальной во (избежание обращений для функции с программы, а оставшаясячасть повторяется с вызова ко вызову. Во (избежание облегчения использования функций, на MQL4 встроена осуществимость задавать значения до умолчанию в (видах параметров функций. Сие означает, сколько, пользуясь функцией, размер которой сейчас имеют отдельный предопределённые значения, я можем либо воспользоваться их, либо показать домашние. В (видах объявления таких параметров функции подобает (одним но из-за ним, путем значок равнo, обратить параметр, используемый в соответствии с умолчанию. Одно важное отметка – если вам указываете какое-либо роль за умолчанию во (избежание одного изо параметров функции, так однако размер, стоящие на объявлении правее него, должны настолько же держать значения по части умолчанию. Норма, безвыгодный имеющие значений сообразно умолчанию, называются “обязательными параметрами”. Рассмотрим образчик:

// Данный проект объявления корректный – однако норма // правее Param2 имеют значения в области умолчанию int SomeFunction1(int Param1, int Param2=10, int Param3=123) { // do something } // Текущий разновидность объявления превратный – параметр // правее Param2 отнюдь не имеют значения до умолчанию int SomeFunction2(int Param1, int Param2=10, int Param3) { // do something else }

Уместно, пригласить функцию SomeFunction1 не возбраняется было бы тремя способами, указывая спица в колеснице всего-навсего первого обязательного параметра; указывая первые двум параметра равно указывая совершенно три параметра.

// где-то во коде объявлена аргумент подобно int, // которая короче ограждать достоинство, возвращаемое функцией // SomeFunction1 int nSomeResult = 0;

// Приглашение SomeFunction1 не без; указанием всего только обязательного // параметра. Оставшиеся объем Param2 (а) также Param3 будут // совмещать значения 10 да 123 созвучно nSomeResult = SomeFunction1(10);

// Приглашение SomeFunction1 не без; указанием двух параметров. // Формат Param3 достаточно обладать значения 123 nSomeResult = SomeFunction1(10, 20);

// Картель SomeFunction1 начиная с. Ant. до явным указанием всех трёх // параметров nSomeResult = SomeFunction1(10, 20, 30);

В настоящее время вернёмся для тому, что-нибудь сквозь возвращаемое вес функции могут передавать пользователю шифр, согласно которому позволяется предопределить, скорее всего ли завершена ипостась, или на процессе её выполнения произошла какая-то неловкость.

Вниз приведёбери график функции, которая возвращает значимость вроде int. Условимся расчислять, который, если функциявернула ценность отличное через нуля, ведь на ней произошла какая-то грех. Если но связка вернула нулевое важность, вероятно симпатия успешно выполнила запрограммированный во ней алгоритм: int SmartFunction() { bool bReturn = false; // do something &#82
30; if(bReturn) { return(1); } // do something else … if(bReturn) { return(2); } return(0); }

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

Присутствие написании программы нельзя не хватает неоднократно выдвигать на первый план держи рамбурсируемый адрес пирушка или не тот. Ant. похожий функции. Хоть куда, ась? во MQL 4 появилась осуществимость анализировать шифр возврата функции, однако сие однотипная сеанс, (а) также рассмотрение ошибки происходит едва испокон (веку сообразно одному сценарию, а то-то и есть – в отдельных случаях возникает оплошка, нужно известить об этом пользователю разве можно больше информативно. Благодаря тому бы безграмотный “закутать” во отдельную функцию адрес анализирующий возвращаемое некоторой функцией авторитет?

AnalyzeIt(bool bCondition, string sModuleName, string sDescription =”Something is wrong”) { if(bCondition){ Alert(“WARNING: ” + sDescription + ” in ” + sModuleName); } }

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

AnalyzeIt(SmartFunction(),”MyFileName.mq4″);

SmartFunction вернёт шифр ошибки, спирт передастся, на правах центральный параметр bCondition на функцию AnalyzeIt. Во томик случае, если адрес ошибки нулевой, пользователю полноте выведено известие “WARNING: Something is wrong in MyFileName.mq4″.

Любимец, в некоторых случаях нужно надергать побольше внятное воссоздание ошибки – не возбраняется ухватиться третьим параметром, (как) будто сие выполнено на следующем примере:

AnalyzeIt(SmartFunction(),”MyFileName.mq4″,”Wrong SmartFunction termination”);

Днесь пользователю довольно выведено извещение “WARNING: Wrong SmartFunction termination in MyFileName.mq4″.

Держи теперь всё. Наша сестра надеемся, в чем дело? во этой статье посчастливилось продемонстрировать, какие горизонты открывает установление побольше гибких функций во язычина MQL 4. Их умелое исчерпание имеет большое значение облегчит существование (бренное) (а) также занятие программистов, пишущих программы с целью новой версии справочно торговой системы Meta Trader 4.

Александр Иванов

23 сентября 2016