MQL для чайников, программирование на MQL4, MQL5
22 Янв
Сегодня разберемся, как работать в языке MQL4 с внешними индикаторами. Невозможно встроить все индикаторы форекс в терминал Metatrader. Постоянно появляются новые индикаторы Forex и усовершенствуються старые индикаторы. Поэтому разработчики терминала Metatrader4 позаботились о работе с внешними индикаторами в языке MQL.
Рассмотрим например индикатор форекс "ZigZag":
Он не встроен в терминал MT4, хотя и поставляется вместе с ним. Если взглянуть на график валютной пары, то прекрасно видно преимущества данного индикатора Forex.
Было бы здорово, если бы трейдер покупал внизу и продавать вверху точек излома индикатора ZigZagа. Стратегию я такую не нашел. Поэтому просто проверю — действительно это так или нет. Но для начала необходимо сформулировать условия торговли: — покупаем когда ZigZag рисует линию вниз. — продаем когда ZigZag рисует линию вверх. — окончание линии ZigZagа анализируем при открытии следующей свечи — стоп-лосс ставим на 5 пунктов вниз или вверх от экстремума ZigZagа — тейк-профит ставим в 5 раз больше величины стоп-лосса — при образовании нового фрактала, стоп-лосс переносим вслед за ценой
Правила сформулировали, теперь можно заняться созданием советника форекс для Metatrader 4 на языке MQL4.
(далее…)
7 Янв
На прошлом уроке «Язык MQL — Урок 2» мы научили наш первый скрипт MT4 — «test», написанный на языке MQL4 рассчитывать размер лота, а точнее запрашивать у нас размер средств которыми мы хотим рискнуть при торговле на форекс при помощи терминала Metatrader 4. В данном уроке я предлагаю заняться самим расчетом данного лота !
Для расчета желаемого лота, скрипту MT4 необходимо знать «какими средствами мы располагаем» на нашем депозите форекс. Можно конечно в ручную ему это сообщать (как мы сделали с риском), но зачем делать лишнюю работу, если в нашем распоряжении язык MQL4? Пусть наш скрипт «test» сам берет эту цифру из торгового терминала Metatrader 4 !
Для этих целей (для определения размера средств в MT4) в языке MQL4 предназначена функция — AccountFreeMargin()
Все вычислительные операции в советниках или скриптах MQL необходимо делать в функции start.
Поэтому добавим в эту функцию строчку:
double Free=AccountFreeMargin();
теперь в переменной типа double (число с плавающей точкой) и именем Free у нас будет содержаться размер свободных средств.
Еще нам необходимо знать стоимость одного лота по заданной валютной паре — для этого воспользуемся функцией MarketInfo(string symbol, int type).
Эта функция возвращает различную информацию в зависимости от переданных ей параметров. Первым идет строковый параметр для указания валюты. Можно указать напрямую (например: «EURUSD»), но мы хотим универсальности от нашего скрипта, написанного на MQL (что бы скрипт сам определял валютную пару на графике, котором он запущен).
Воспользуемся функцией Symbol() котороя вернет нам название текущей валюты.
Второй параметр функции MarketInfo используем: MODE_MARGINREQUIRED (Размер свободных средств, необходимых для открытия 1 лота)
Теперь соберем все вместе и получим:
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
Итак, переменная One_Lot будет содержать стоимость одного лота по текущей валюте.
С помощью простейших математических операций рассчитаем НАШ лот:
double Lot= Free*MaxRisk/100/One_Lot;
Free — свободные средства
MaxRisk/100 — процент(наш параметр MaxRisk надо перевести в %. Для этого его делим на 100)
One_Lot — стоимость одного лота
Пример расчета лота для EURUSD (курс для примера возьмем 1.4615):
у нас есть Free=1000$ (свободные средства)
MaxRisk= 2
2% от 1000$ это 1000*2/100=20$
стандартный размер контракта (1 лот) = 100000
при покупке 100000 EUR мы должны заплатить 100000*1.4615=146150$
но у нас есть плечо (возьмем для примера 500), соответственно мы заплатим One_Lot=146150/500=292.3$ (все эти вычисления делает MarketInfo(Symbol(),MODE_MARGINREQUIRED))
Наш лот получится: Lot=20/292.3= 0,0684
Хорошо! Оптимальный лот для открытия торговой позиции в Metatrader 4 мы рассчитали.
А как же его теперь увидеть на экране монитора?
Для этого воспользуемся функцией Alert(), в качестве параметра укажем НАШ рассчитанный лот.
//±-----------------------------------------------------------------+
//| test.mq4 |
//| Copyright © 2009, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//±-----------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#property show_inputs
extern int MaxRisk=2;
//±-----------------------------------------------------------------+
//| script program start function |
//±-----------------------------------------------------------------+
int start()
{
//----
double Free =AccountFreeMargin();
double One_Lot =MarketInfo(Symbol(),MODE_MARGINREQUIRED);
double Lot =Free*MaxRisk/100/One_Lot;
Alert(Lot);
//----
return(0);
}
//±-----------------------------------------------------------------+
Ну и теперь компилируем и запускаем наш экспериментальный скрипт МТ4 - "test" (это мы уже делать умеем из прошлого урока MQL — 2).
В итоге мы получим следующее сообщение в терминале MT4:
В следующем уроке по изучению языка MQL, мы продолжим улучшать наш скрипт для Metatrader 4 и наполнять его полезными функциями.
24 Дек
Уважаемый читатель, подписчик рассылки данного блога !
Прежде всего хочу объяснить для чего и для кого создан данный сайт и мой курс «MQL для тебя» в частности.
Как не удивительно это будет звучать, но курс «MQL для тебя» предназначен, в основном, для трейдеров форекс, желающих научиться создавать всевозможные советники форекс, пользовательские индикаторы и скрипты для торгового терминала Metatrader 4 (и в дальнейшем Metatrader 5), хотя и программисты, не знакомые с языком программирования MQL, могут почерпнуть новые для себя знания.
Давайте разберемся, почему же основная аудитория сайта — это трейдеры форекс?
Представим себе (или возможно данные ситуации у вас уже возникали при работе на форекс), вы обнаружили интересную закономерность в поведении цены или нашли новую стратегию форекс, а как проверить, что эта закономерность или стратегия, будет действительно работать, приносить вам прибыль не один день, а на протяжении длительного времени?
Можно конечно сидеть перед графиком торгового терминала и на листочке записывать все сигналы и их результаты, но на это уйдет слишком много времени и сил. А если учесть тот факт, что рынок постоянно меняется и, поэтому, те торговые стратегии или сигналы форекс, которые работали еще вчера или может пару месяцев назад и приносили прибыль, а 4−5 месяцев назад они, к сожалению приносили одни только убытки. К тому же, если вы, например, хотите проверить «с листочком» большой период на малых таймфреймах (например M5 или M15), то это отберет у вас очень много времени и сил. И даже, если вы проделали эту трудоемкую аналитическую работу, то как подобрать оптимальные параметры данной стратегии, например «Стоп-лосс» и «Тейкп-профит» или любой другой параметр торговой системы, которых иногда бывает до 10 и более? Ведь они при заключении каждой сделки, пусть немного, но могут отличаться.
Да и желание заставить компьютер зарабатывать для вас деньги, при помощи советников форекс, никто не отменял.
Вот поэтому я и предлагаю АВТОМАТИЗИРОВАТЬ торговлю трейдера !
Можно конечно заказать написание советника у опытного программиста, но это будет стоить для вас приличных денег. А представьте ситуацию, что идея окажется не рабочей... платить то, все равно прийдется! И насколько я знаю, трейдеры неохотно хотят делиться с программистом своим «Граалем» и основная причина: «...программист получит мою идею, а я ему еще и платить должен?...». (далее…)