MQL 4 Функционални библиотеки и тяхното използване в програми на форекс форума
- рейтинг на брокера
- рейтинг на pamm сайтове
- рейтинг на бинарни опции
- Рейтинг на борсите за криптовалута
- Форекс списание
PDA | Актуализации | Регистрация | справка | Общност |
Връзки към общността |
Потребители |
Към страницата. |
MQL 4: Библиотеки с функции и използването им в програми
MQL 4: Библиотеки с функции и тяхното използване в програми
В статията се посочва, че програми като съветник имат изключителна възможност - да извършват транзакции по време на тяхното изпълнение. Тази функция не е налична за други видове потребителски програми. Всъщност тази възможност съществува за още един вариант на MQL програми - за потребителски скриптове.
Днес, коригирайки неточността, ще създадем скрипт, който прави сделка. Смятаме, че не си струва да обясняваме на читателите как се отваря пазарна поръчка в програмата MetaTrader. Тези, които все още нямат такъв опит, могат да практикуват сами, защото всеки от изтеглилите терминала може да се регистрира на сървъра, за да получи демо акаунт. Демо сметката е в много отношения подобна на истинската и може да помогне на начинаещите да опитат силите си на финансовите пазари. Често, особено за начинаещи търговци, това може да отнеме доста дълго време. Способността за бързо отваряне на пазарни поръчки може да бъде оценена от търговци на новини, скалпери и други търговци в рамките на деня. Тази статия ще предостави пример за скрипт, който почти незабавно поставя пазарна поръчка за покупка. Едно от предимстватаотварянето на пазарна поръчка с помощта на скрипт е, че изчисляването на параметрите на поръчката като "стоп загуба", "тейк печалба" и размера на отворената позиция могат да бъдат присвоени на програмата MQL. Подобна възможност може да бъде особено полезна при бързи движения на пазара, когато всяка секунда забавяне може да бъде много скъпа в истинския смисъл на думата. Но самият скрипт днес за нас, както и за тези, които изучават MQL 4, ще бъде интересен с това, че неговият пример ще бъде използван за разглеждане на създаването и използването на библиотека от функции.
И така, нека започнем с описание на алгоритъма на скрипта: . установяване на степента на риск, тоест процента на безплатния депозит, който сме съгласни да пожертваме в случай на неуспешен за нас резултат от развитието на събитията на пазара; . разберете нивото, на което трябва да зададете "стоп загуба" в тази ситуация; . определяне на нивото на "тейк печалба"; . изчислете размера на лота, който би задоволил степента на риск и размера на "стоп загуба"; . опитайте се да изпълните пазарна поръчка с предварително получените параметри.
Програмата използва функцията MMGetLotsCount, за да изчисли размера на лота на отворената поръчка. Нищо ужасно няма да се случи, ако вградим изпълнението на тази функция в същия файл, който съдържа кода на скрипта. Но може да се окаже, че ще имаме нужда от същата функция в бъдеще, за да напишем експертен съветник. Ако не се използват трикове, тогава в EA, използващ същия алгоритъм за изчисляване на размера на партидата, ще трябва да се повтори същото, като се вгради изпълнението на тази функция в същия файл, който съдържа кода на EA. Нека си представим ситуация, когато сте преразгледали и поне частично сте променили начина на изчисляване на размера на отворената позиция. Всички MQL програми, които използват стария метод на изчисление, трябва да бъдат коригирани ипрекомпилиран. Ако се окаже, че кодът на тази функция трябва да бъде коригиран на три или четири места, тогава това не е голям проблем, можете да го направите достатъчно бързо, но по-лошо, когато се окаже, че е използван в двадесет програми - времето, прекарано за промяна на всички програми, може да бъде доста забележимо. Но това не е най-лошото, може да се случи, че в една или повече програми кодът по някаква причина няма да бъде случайно актуализиран. Тогава ще започне истински кошмар за потребителя на такива MQL програми, тъй като някои от тях ще изчислят размера на партидата по един начин, докато останалите ще го изчислят по съвсем различен начин.
За да се избегнат подобни усложнения, програмистите на MQL 4 се насърчават да създават функционални библиотеки. В тази статия ще създадем библиотека от функции MMlib (Библиотека за управление на пари), състояща се от само една функция MMGetLotsCount досега. В бъдеще ще бъде възможно да се добавят други функции към MMlib за изчисляване на определени показатели за управление на парите.
Библиотеката с функции е компилиран модул, състоящ се от функции, написани на MQL 4. Нека обясним последователността от стъпки, които трябва да бъдат изпълнени, за да създадете библиотека MMlib:
. в папката expertslibraries трябва да създадете файла mmlib.mq4, съдържащ заглавката от коментарите, както всяка друга MQL програма има; . след заглавката добавете свойството библиотека към модула:
Езиковият компилатор MQL4 е достатъчно интелигентен и не включва в компилирания модул функции, които не се извикват никъде в този модул. Свойството „библиотека“ на модула гарантира, че всички неизползвани, но внедрени функции в изходния код на модула завършват в компилирания модул.
По същия начин можете да създадете свои собствени библиотеки, съдържащи ваши собствени функции. Освен, чеизползването на функционални библиотеки помага за решаването на проблемите, описани по-горе, друго предимство на създаването на функционални библиотеки е, че те могат да бъдат разпространявани като компилирани модули, придружени от .mqh файлове. По този начин могат да се спазват правата върху интелектуалната собственост. Друго предимство на създаването на функционални библиотеки е, че ако не промените параметрите на извикването на функцията, тогава те могат да бъдат модифицирани независимо от програмите, които ги използват. Например, ако бъде открита грешка в една от библиотечните функции, тя може да бъде коригирана и само модулът, съдържащ коригираната функция, може да бъде прекомпилиран; програмата, която го използва, не трябва да се прекомпилира.
Съдържание на файла mmlib.mq4
Съдържание на файла mmlib.mqh
Съдържание на файла order_by.mq4
// меню 'Инструменти'->'Настройки' // // В нашия случай това е задължително, тъй като ще импортираме // функцията ErrorDescription(. ) от библиотеката stdlib и // функцията MMGetLotsCount(. ) от библиотеката mmlib // ///////////////// //////////////////////////// ///////////////////////////// // Включете библиотеки, съдържащи реализации на използвани функции // в този скрипт #include // съдържа функцията, от която се нуждаем ErrorDescription(. ) #include // съдържа функцията, от която се нуждаем M MGetLotsCount(. ) int start() // while(true) означава, че ще се опитаме да // направим поръчка, докато не бъде приета за изпълнение // или се окаже, че в акаунта ни няма свободни пари // . или потребителят не спира ръчно изпълнението на скрипта, например // чрез избиране на съответния елемент от контекстното меню на ценовата диаграма while(true) double dMyRisk = 20; // Нека се преструваме, чевсеки път, когато се съгласяваме да рискуваме // двадесет процента от безплатния депозит double dMyLeverage = 100; // Ливъриджът, предоставен ни от брокера // DaysLowArray е масив, който ще съдържа минималните // дневни стойности за DAYS_TO_CONSIDER от последните дни double DaysLowArray[DAYS_TO_CONSIDER]; // Копирайте DAYS_TO_CONSIDER от стойностите за ниски дни в DaysLowArray if(ArrayCopySeries(DaysLowArray, MODE_LOW, Symbol(),PERIOD_D1) Pirryanin