Рекомендуемый ДЦ - Alpari !

Доброе время суток, Уважаемые читатели!
Хотел сегодня рассмотреть очередного советника форекс, но понял, что мне надоело копировать функции из одного советника в другой. Поэтому сегодня рассмотрим что такое «Библиотеки функций MQL» и как с ними работать.

Для создания библиотеки функций MQL4 вызываем мастера создания советников в Metaeditor-е торгового терминала MT4:

Мастер создания библиотек

Вводим имя библиотеки функций (например MyLib):

Параметры библиотеки функций

Копируем в созданную библиотеку наши функции GetLot(), NewOrder(), DelOrders(), DelOrder(), EditOrder() и CloseOrder(). Компилируем и получаем ошибку:

Ошибки компиляции

Не определены переменные TakeProfit и StopLoss. Дело в том, что мы в функции NewOrder() используем их для вычисления тейк-профита и стоп-лосса. Но они были определены не в функции NewOrder(), а как параметры экспертов. Давайте и в библиотеке их опишем как внешние для исключения ошибок.

extern int TakeProfit=0;
extern int StopLoss=0;

Компилируем. Ошибок нет. Теперь мы можем не копировать каждый раз наши функции в новые скрипты или советники Forex, а просто подключать нашу библиотеку.

Но это еще не все. Дело в том, что в MQL4 можно использовать не только свои библиотеки, но и библиотеки разработанные другими пользователями и даже системные библиотеки операционной системы DLL.

В большинстве случаев эти библиотеки уже скомпилированы и необходимо компилятору указать какие функции они содержат. Для этого создается «Заголовочный файл».

Для его создания запускаем мастер еще раз:

Мастер создания

Задаем имя (можно использовать то же имя что и у нашей библиотеки):

Параметры заголовочного файла

Внутри заголовочного файла необходимо подключить библиотеку:
#import "MyLib.ex4"
И описать какие она содержит функции:
double GetLot(int Risk);
int NewOrder(int Cmd,double Lot,double PR=0,double TP=0,double SL=0);
void DelOrders(int Cmd);
void DelOrder();
void EditOrder(double sl);
void CloseOrder();

Компилируем. Ошибок нет.

Для использования нашей библиотеки достаточно в начале каждого советника форекс или скрипта написать:
#include <MyLib.mqh>

Например наш скрипт для расчета лота и открытия ордеров с использованием библиотеки «MyLib» станет еще короче:
//±-----------------------------------------------------------------+
//| test.mq4 |
//| Copyright © 2010, MQL для тебя. |
//| http://mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright "Copyright © 2010, MQL для тебя."
#property link "http://mql4you.ru"
#property show_inputs
#include <MyLib.mqh>
extern int MaxRisk=2;
extern bool Buy=false; //для открытия ордера на покупку
extern bool Sell=false; //для открытия ордера на продажу
extern int TakeProfit=100;
extern int StopLoss=100;
//±-----------------------------------------------------------------+
int start()
{double Lot=GetLot(MaxRisk);
if(Lot==0) {Alert("Недостаточно средств!");return(0);}
RefreshRates();
if(Buy) NewOrder(OP_BUY,Lot,0,0,0);
if(Sell) NewOrder(OP_SELL,Lot,0,0,0);
return(0);}
//±-----------------------------------------------------------------+

Сразу возникает вопрос:

Возможно ли написать вирус на MQL4?

Ведь есть возможность использовать системные библиотеки DLL.
Использования DLL в языке MQL4 открывает практически неограниченные возможности, но вместе с тем таит и опасности. Вирус написать навряд ли удасться, а вот другой вредоносный код (например: для воровства паролей) вполне возможно. Поэтому разработчики из MetaQuotes ввели ограничение на запуск скриптов и советников Forex с DLL:

Параметры советника

Рекомендую не включать галочку «Разрешить импорт функций из DLL» кроме программ полученных из надежных источников и которые не могут без этого работать.

Скачать: библиотека mylib заголовочный файл mylib скрипт test