Обучение MQL II. Урок 9
|

Обучение MQL II. Урок 9

   Здравствуйте дорогие читатели. Сегодня мы напишем эксперт и пользовательский индикатор. Эксперт будет торговать с использованием индикатора.

   9.1. Алгоритм и код индикатора

Индикатор использует два массива данных, он состоит из двух линий. Обе линии это скользящие средние. Первая средняя строится от максимальных цен, вторая от минимальных. Для этого мы используем стандартный расширенный индикатор скользящей средней. Он имеет такой вид:
iMAEx(period, ma_method, ma_shift, applied_price, shift)

В индикаторе у нас есть одна внешняя переменная, она определяет период средних.

/*[[
Name := urovni
Author := forextimes
Link :=
artur@fxtest.ru
   Separate Window := NoFirst
Color := Blue
First Draw Type := Line
First Symbol := 217
Use Second Data := Yes
Second Color := Red
Second Draw Type := Line
Second Symbol := 218
]]*/
Inputs: per(21);

   Variable : shift(0), HMa(0), lMa(0);

   SetLoopCount(0);
// loop from first bar to current bar (with shift=0)
For shift=Bars-1 Downto 0 Begin

   HMa=iMAEx(per, MODE_EMA, 0, PRICE_HIGH, shift);
LMa=iMAEx(per, MODE_EMA, 0, PRICE_LOW, shift);

   SetIndexValue(shift, HMa);
SetIndexValue2(shift, LMa);
End;

Алгоритм очень прост, поэтому пояснения я не пишу.

  9.2. Алгоритм и код эксперта

Эксперт проверяет наличие тренда и отслеживает положение цены относительно линий индикатора. Наличие тренда проверяется очень примитивно, проверятся последние три значения скользящей средней, если каждое следующее больше предыдущего тренд бычий, иначе медвежий. Если при бычьем тренде цена меньше нижней средней пользовательского индикатора, осуществляется покупка; если при медвежьем тренде цена больше верхней линии индикатора осуществляется продажа.

Выход осуществляется как по стоп ордерам так и по условию, условием выхода является достижение противоположной линии пользовательского индикатора.

Имеется две внешние переменные, первая <per> -определяет период индикатора, <perMa> – определяет период средних определяющих тренд.

Стоит ограничение по времени на открытие позиции. Это сделано для того чтобы не открывалось несколько позиций на одном баре. Условие имеет вид:

  if curtime-LastTradeTime<4*3600 then exit;
цифра перед <*3600>, это значение таймфрема в часах

  /*[[
Name := expertUrovni
Author := forextimes
Link := fxtest.ru
Lots := 1.00
Stop Loss := 30
Take Profit := 50
Trailing Stop :=0
]]*/
defines:per(5), perMa(21);
var:HMa0(0), LMa0(0), Ma1(0), Ma2(0), Ma3(0), cnt(0);

   if curtime-LastTradeTime<4*3600 then exit;

   /*

   HMa0=iCustom(“urovni”, per, MODE_FIRST, 0);
LMa0=iCustom(“urovni”, per, MODE_SECOND, 0);

   */

   HMa0=iMAEx(per, MODE_EMA, 0, PRICE_HIGH, 0);
LMa0=iMAEx(per, MODE_EMA, 0, PRICE_LOW, 0);

   Ma1=iMAEx(perMa, MODE_EMA, 0, PRICE_close, 1);
Ma2=iMAEx(perMa, MODE_EMA, 0, PRICE_close, 2);
Ma3=iMAEx(perMa, MODE_EMA, 0, PRICE_close, 3);

   if TotalTrades=0 then {

if Ma1-Ma2>0 and Ma2-Ma3>0 and ask<LMa0
then{SetOrder(op_buy, lots, ask, 3, bid-stoploss*point, bid+takeprofit*point, blue); exit;};

   if Ma3-Ma2>0 and Ma2-Ma1>0 and bid>HMa0
then{SetOrder(op_sell, lots, bid, 3, ask+stoploss*point, ask-takeprofit*point, red); exit;};
};
if TotalTrades>0 then
{
for cnt=1 to TotalTrades
{
if OrderValue(cnt, VAL_TYPE)<=OP_SELL and
OrderValue(cnt, VAL_SYMBOL)=Symbol then
{
If OrderValue(cnt, VAL_TYPE)=OP_BUY then
{
if bid>HMa0 then
{
CloseOrder(OrderValue (cnt, VAL_TICKET), OrderValue(cnt, VAL_LOTS), Bid, 3, Violet);

   Exit;
};

};

   If OrderValue(cnt, VAL_TYPE)=OP_SELL then
{
if ask<LMa0 then
{
CloseOrder(OrderValue (cnt, VAL_TICKET), OrderValue(cnt, VAL_LOTS), ask, 3, Violet);

   Exit;
};

   };

   };
};};

Поскольку тестирование экспертов с использованием пользовательских индикаторов осуществляется очень медленно, переменные, использующие пользовательский индикатор закомментированы. Комментарии можно снять, для проверки работы индикатора.


Онлайн обучение: финансы, форекс, IT и все остальное

Интернет открывает новые возможности для получения новых знаний и компетенций по любой тематике: будь то финансовые рынки и форекс-трейдинг, или любая другая область знаний и умений (программирование, иностранные языки, школьные предметы, и тд и тп).

SEDU.ME – дает возможность оперативного обмена знаниями на взаимовыгодных условиях: продавай свое компетенции и (или) получи новые не выходя из дома. Все, что нужно – компьютер с выходом в интернет. Все остальное (видео-связь и связь голосом, удобное общее учебное поле, вспомогательные инструменты и удобную систему приема и отправки платежей в режиме онлайн) предоставит образовательный сервис SEDU.ME.


Следующий урок также будет практическим, если у Вас есть желание реализовать какой-либо интересный алгоритм, обязательно пишите.

Компания «Fxtest»
Халхальян Артур
техническая поддержка трейдеров
“>artur@fxtest.ru