MetaQuotes Language II - учимся программировать. Урок №5
Дата: 3.3.07 | Раздел: MQL программирование
MetaQuotes Language II - учимся программировать. Урок №5Обучение MQL II Урок №5
Здравствуйте дорогие читатели! Сегодня мы научимся писать эксперты с использованием встроенных индикаторов. В МТ реализовано довольно много индикаторов классического теханализа, так что поле для действий довольно большое. В конце урока мы напишем эксперт.
5.1. Синтаксис индикатора в общем виде
iInd(period, mode, shift);
Ind - условное название индикатора; Period - период усреднения; Mode - чаще всего указывает какое из значений индикатора принимается (для индикаторов из двух линий) Shift - индекс указывает, какое порядковое значение индикатора брать для расчета (0 это текущее значение индикатора, 1-прошлое, 2-позапрошлое и т.д. по аналогии с индексами при котировках). Перед названием индикатора <Ind> стоит буква i, это обязательно для всех индикаторов в МТ.
5.2. Скользящие средние
Скользящие средние являются самым распространенным индикатором. Поэтому я бы хотел разобрать этот индикатор более подробно.
Moving Average (iMA) iMA(period, ma_method, shift)
period - период усреднения; ma_method - этот параметр указывается для метода вычисления средней, параметр может принимать
следующие значения: MODE_SMA, MODE_EMA, MODE_SMMA, MODE_LWMA.
Пример:
iMA(21, MODE_SMA, 1)- прошлое значение скользящей средней простого типа с периодом усреднения 21 iMA(9, MODE_EMA, 0)- текущее значение скользящей средней экспоненциального типа с периодом усреднения 9
По умолчанию индикаторы строятся от цен закрытия, поэтому значения индикаторов с индексом 0, т.е текущие значения на формирующимся баре будут все время меняться вместе с ценой.
5.3. Extended (расширенные) индикаторы Как я уже говорил, индикаторы чаще всего строятся от цен закрытия <close>. Это не всегда удовлетворяет запросам пользователей, поэтому в арсенале МТ есть extended (расширенные) индикаторы. На текущий момент существует 7 extended индикаторов:
ADX extended iADXEx (period ,applied_price, mode, shift)
CCI extended iCCIEx (period, applied_price, shift)
Bolinger bands extended iBandsEx (period, deviation, bands_shift, applied_price, mode, shift)
MACD extended iMACDEx (fast_ema_period, slow_ema_period, signal_period, applied_price, mode, shift)
Moving average extended iMAEx (period, ma_method, ma_shift, applied_price, shift)
Momentum extended iMomEx (period, applied_price, shift)
RSI extended iRSIEx (period, period2, applied_price, mode, shift)
Если Вы заметили, у любого из расширенных индикаторов есть параметр <applied_price>. Этот параметр может принимать 7 значений: PRICE_CLOSE, PRICE_OPEN, PRICE_HIGH, PRICE_LOW, PRICE_MEDIAN, PRICE_TYPICAL и PRICE_WEIGHTED. Т.е индикатор может строится от цены закрытия, цены открытия, максимальной цены, минимальной цены, PRICE_MEDIAN ( (high+low)/2), PRICE_TYPICAL ((high+low+close)/3 ), PRICE_WEIGHTED ((high+low+close+close)/4 ). Все названия расширенных индикаторов заканчиваются буквами <Ex>, и только этим отличаются от названий таких же стандартных индикаторов.
5.4. Эксперт
Для закрепления знаний, напишем эксперт. Он будет использовать 2 индикатора, скользящую среднюю с большим периодом и RSI. Если RSI выше определенной нами верхней оверзоны, развернулся вниз и средняя направлена вниз, то эксперт будет продавать. Если RSI ниже нижней оверзоны, развернулся вверх и средняя направлена вверх, то покупаем. Выход из позиции осуществляется по выставленным стопам.
/*[[ Name := Expert4 Author := Fxtest.ru Link := forextimes.ru Lots := 1.00 Stop Loss := 40 Take Profit := 40 Trailing Stop := 0 ]]*/ defines: per(7), Upzone(70), Downzone(30), BigTrend(100); //per-период RSI; Upzone, Downzone-оверзоны, BigTrend - период средней показывающей глобальный тренд var: r1(0), r2(0), m1(0), m2(0); // r1-прошлое значение RSI r2-позапрошлое значение RSI
r1=iRSI(per,1); r2=iRSI(per,2); m1=iMA(BigTrend, MODE_SMA,1); //MA простого типа (SMA) m2=iMA(BigTrend, MODE_SMA,2);
if TotalTrades<1 then { //играть если открытых позиций нет
if r2>r1 and r2>Upzone and m1<m2 then //если образовался экстремум и он выше верхней оверзоны, и глобальный
тренд вниз, продавай {SetOrder(op_sell, lots, bid, 3, ask+stoploss*point, ask-takeprofit*point, red); exit;};
if r2<r1 and r2<Downzone and m1>m2 then //если образовался экстремум и он ниже нижней оверзоны, и
глобальный тренд вверх, покупай {SetOrder(op_buy, lots, ask, 3, bid-stoploss*point, bid+takeprofit*point, green);
exit;};};
В следующем уроке мы научимся обращаться к открытыми позициям и принудительно их закрывать, при срабатывании какого-либо условия.
Компания «Fxtest» Халхальян Артур техническая поддержка трейдеров artur@fxtest.ru
Cтатья опубликована на сайте "Форекс форум. Торговля на Forex. Cообщество трейдеров": http://youfx.ru
Адрес статьи: http://youfx.ru/modules/myarticles/article_storyid_5.html |