Май 29

Программирование на MQL5. Модификация полуавтоматического советника.

Пример небольшой программы, которую дорабатывал, выполняя задание в рамках учебного курса «Программирование советников на языке MQL5″.

Исходный советник (vl_ea.rar) был написан Денисом Кириченко по идее одного из слушателей курса. Советник по интерфейсу визуально представляет собой красную вертикальную линию, которую можно двигать по полю графика. Линию можно передвинуть не некоторое расстояние перед графиком, когда график достигнет данной позиции, то открывается ордер на продажу. Следует обязательно задать для открываемого ордера лотаж  (размер лота с которым открывается ордер), а так же можно задать значения закрытия ордера по убытку и/или прибыли. Слушателям курса предлагалось в качестве домашнего задания модифицировать советник. “Предлагаю в качестве домашнего задания создать в коде 2-ую линию, которую тоже можно перемещать по графику. Но 2-ая линия должна быть сигналом для продаж. Ещё нужно линии отобразить разными цветами”.

Сделал две линии – на покупку красная, на продажу – синяя, индивидуальный выбор лотажа и ограничений для каждого ордера.  Модифицированный советник можно загрузить или с Яндекс.диска (http://yadi.sk/d/ElfNCo8B5BhZv) или с моего сайта (http://mctrewards.ru/files/vl_ea_modif.zip).

Курс, который слушаю, достаточно интересный и будет полезен тем, кто умеет программировать на MQL4 и думает переходить на 5-ю версию. Тем, кто не занимался программирование раньше, возможно будет достаточно трудно, но это касается тех, кто не занимался программированием вообще, а не конкретно программированием на MQL4. Языки программирования MQL4 и MQL5 похожи на языки С и С++. Можно сказать, что четверка – это специальным образом заточенный на торговлю С, а пятерка – С++. Кроме того, известно, что одно из  определений языка С++, которое привожу студентам, когда читаю курс программирования на С++, таково – язык С++ – это язык С с классами. В общем, если ничего не знаете по программированию, то понять можно, но сложно. Если знаете, то хорошо, если знаете MQL4, как максимально похожий, или С++, как достаточно близкий, языки программирования. Вообще-то, если знаешь достаточно хорошо один язык программирования, то изучить последующие – второй, третий, энный достаточно просто, так как будут все те же циклы, массивы, условные операторы и т.д. Различие будет только в формальном синтаксисе записей программных конструкций в соответствии с правилами изученного и используемого языка программирования.

Курс  по программированию на MQL5 читается в RoboForex периодически, можно его слушать в очном режиме, если живете в Санкт-Петербурге и получается по времени приехать в офис RoboForex или смотреть в виде трансляции (вебинар). Замечу, что качество трансляции не всегда бывает хорошим – соединение может “отваливаться”, пропадать звук или видео.

Экспресс-курс «Программирование советников на языке MQL5″ бесплатный.

1. Что такое язык MQL5, какие методы и инструменты есть в нем для создания торговых программ.

2. Как управлять рыночными позициями с помощью языка MQL и как самостоятельно создать торговый скрипт.

3. Как запрограммировать пользовательский индикатор, который поможет Вам в работе на Forex.

4. Как с его помощью MQL5 превратить торговую идею в торгового советника.

Первая лекция

1. Основы языка MQL5 и редактор MetaEditor

1. Назначение языка MQL5

2. Редактор кода

3. MQL5-программа и файлы

4. Основные понятия

5. Материал для самостоятельного изучения (теория)

6. Домашнее задание

Вторая лекция

1. Структура MQL5-программы

2. Выполнение MQL5-программы

3. События клиентского терминала MetaTrader5

4. Примеры реализации

5. Материал для самостоятельного изучения (теория)

6. Домашнее задание

Третья лекция

1. Типы переменных

2. Область видимости, время жизни, класс памяти

3. Массив

4. Предопределённые переменные

5. Материал для самостоятельного изучения (теория)

6. Домашнее задание

Четвертая лекция

1. Операции, виды

2. Оператор, виды

3. Функции, вызов

4. Материал для самостоятельного изучения (теория)

5. Домашнее задание

Пятая лекция

1. Торговые операции, типы

2. Обработка торговых операций

3. Торговая история, программный доступ к торговой истории

4. Материал для самостоятельного изучения (теория)

5. Домашнее задание

Шестая лекция

1. Рыночные позиции, типы

2. Закрытие позиций

3. Получение информации о счёте

4. Материал для самостоятельного изучения (теория)

5. Домашнее задание

В последнее время все больше трейдеров интересуются торговой платформой МТ5 и языком разработки программ для торгового терминала этой платформы MQL версии 5, а так же другими высокотехнологическими возможностями этой платформы. Например, можно отметить разработки для торговли с мобильных устройств iPhone/iPad – MT5 от MetaQuotes (iOS 4.0+) и Android – MT5 от MetaQuotes (OS 2.1+). Не буду останавливаться подробно на этих возможностях, но рекомендую посмотреть интересный сайт о мобильных коммуникационных устройствах и технологиях, а, именно, сайт мобильный мир.
На прочитанных вчера лекциях рассматривались вопросы открытия и управления ордерами. Возможно, что будет полезен для программирования советников и скриптов один из рассмотренных скрипов, позволяющих получать информацию о торговом счете:

//+——————————————————————+
//| Script program start function |
//+——————————————————————+
void OnStart()
{
double balance=AccountInfoDouble(ACCOUNT_BALANCE); // Баланс счёта
double credit=AccountInfoDouble(ACCOUNT_CREDIT); // Размер предоставленного кредита
double profit=AccountInfoDouble(ACCOUNT_PROFIT); // Размер текущей прибыли
double equity=AccountInfoDouble(ACCOUNT_EQUITY); // Значение собственных средств
double margin=AccountInfoDouble(ACCOUNT_MARGIN); // Размер зарезервированных залоговых средств
double free_margin=AccountInfoDouble(ACCOUNT_FREEMARGIN); // Размер свободных средств
double margin_level=AccountInfoDouble(ACCOUNT_MARGIN_LEVEL); // Уровень залоговых средств
double margin_so_call=AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL); // Уровень Margin Call
double margin_so_so=AccountInfoDouble(ACCOUNT_MARGIN_SO_SO); // Уровень Stop Out
long login=AccountInfoInteger(ACCOUNT_LOGIN); // Логин
ENUM_ACCOUNT_TRADE_MODE trade_mode=AccountInfoInteger(ACCOUNT_TRADE_MODE); // Тип счёта
long leverage=AccountInfoInteger(ACCOUNT_LEVERAGE); // Размер плеча
int orders=AccountInfoInteger(ACCOUNT_LIMIT_ORDERS); // Максимально число отложенных ордеров
ENUM_ACCOUNT_STOPOUT_MODE margin_so_mode=AccountInfoInteger(ACCOUNT_MARGIN_SO_MODE);
// Режим задания уровня залоговых средств
bool trade_allowed=AccountInfoInteger(ACCOUNT_TRADE_ALLOWED); // Разрешённость торговли
bool trade_expert=AccountInfoInteger(ACCOUNT_TRADE_EXPERT); // Разрешённость торговли для советника
string name=AccountInfoString(ACCOUNT_NAME); // Имя клиента
string server=AccountInfoString( ACCOUNT_SERVER); // Имя сервера
string currency=AccountInfoString( ACCOUNT_CURRENCY); // Валюта депозита
string company=AccountInfoString( ACCOUNT_COMPANY); // Имя компании

Print(«Баланс счёта равен «+DoubleToString(balance,2)+» «+currency);
Print(«Размер предоставленного кредита равен «+DoubleToString(credit,2)+» «+currency);
Print(«Размер прибыли равен «+DoubleToString(profit,2)+» «+currency);
Print(«Размер собственных средств равен «+DoubleToString(equity,2)+» «+currency);
Print(«Размер залога равен «+DoubleToString(margin,2)+» «+currency);
Print(«Размер свободных средств равен «+DoubleToString(free_margin,2)+» «+currency);
Print(«Уровень залога равен «+DoubleToString(margin_level,2)+»%»);
Print(«Уровень Margin Call равен «+DoubleToString(margin_so_call,2)+»%» );
Print(«Уровень Stop Out равен «+DoubleToString(margin_so_so,2)+»%»);
Print(«Логин счёта «+IntegerToString(margin_level));
switch(trade_mode)
{
case ACCOUNT_TRADE_MODE_DEMO:
Print(«Тип счёта – демо.»);
break;
case ACCOUNT_TRADE_MODE_CONTEST:
Print(«Тип счёта – конкурсный.»);
break;
default:
Print(«Тип счёта – реальный.»);
break;
}
Print(«Размер плеча равен 1:»+IntegerToString(leverage));
Print(«Максимально число отложенных ордеров составляет «+IntegerToString(orders)+» ордеров.»);
switch(margin_so_mode)
{
case ACCOUNT_STOPOUT_MODE_PERCENT:
Print(«Минимальный уровень маржи задаётся в процентах.»);
break;
case ACCOUNT_STOPOUT_MODE_MONEY:
Print(«Минимальный уровень маржи задаётся в деньгах.»);
break;
}
if(trade_allowed)
Print(«Торговля разрешена.»);
else
Print(«Торговля запрещена.»);
if(trade_expert)
Print(«Торговля советниками разрешена.»);
else
Print(«Торговля советниками запрещена.»);
Print(«Клиента зовут «+name+».»);
Print(«Имя сервера «+server+».»);
Print(«Валюта депозита – «+» «+currency+».»);
Print(«Название компании – «+company+».»);
}
//+——————————————————————+
На этом пока  все….

Поделитесь статьей со своими друзьями
Общайтесь со мной:
comments: Closed

Comments are closed.