Форум трейдеров рынка ФОРЕКС (FOREX)


MetaQuotes Language II - учимся программировать. Урок №4

Дата:  3.3.07 | Раздел: MQL программирование

MetaQuotes Language II - учимся программировать. Урок №4

Обучение MQL II Урок №4



Халхальян Артур
fxtest.ru
artur@fxtest.ru

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

3.1. Функция SetOrder

С помощью функции SetOrder можно открывать позиции на покупку и продажу по текущей цене или расставлять отложенные ордера.

SetOrder(operation,lots,price,slippage,stoploss,takeprofit,color)

SetOrder (операция, количество лотов, цена, максимально допустимое проскальзывание, стоплосс, тейкпрофит, цвет)

3.1.1. Operation (операции)

Операции условно можно разделить 2 вида, это вход по текущей цене или установка отложенного ордера.

Для входа по текущей цене операция будет иметь вид: op_buy или op_sell.

Op_buy -покупка контракта по текущей цене, в <PRICE> должно быть указано <ASK>.

Op_sell -продажа контракта по текущей цене, в <PRICE> должно быть указано <BID>.

Для выставления отложенного ордера операция будет иметьвид: op_buylimit, op_buystop, op_selllimit илиop_sellstop.

Если мы хотим выставить отложенный ордер на покупку при условии, что текущая цена ниже цены исполнения ордера, то операция будет иметь вид op_buystop. Т.е. мы планируем, что цена пойдет дальше в том же направлении (напробой, вверх).

Если мы хотим выставить отложенный ордер на продажу при условии, что текущая цена ниже цены исполнения ордера, то операция будет иметь вид op_selllimit. Т.е. мы планируем, что цена развернется и пойдет в противоположном направлении (разворот).

Если мы хотим выставить отложенный ордер на покупку при условии, что текущая цена выше цены исполнения ордера, то операция будет иметь вид op_buylimit. Т.е. мы планируем, что цена развернется и пойдет в противоположном направлении (разворот).

Если мы хотим выставить отложенный ордер на продажу при условии, что текущая цена выше цены исполнения ордера, то операция будет иметь вид op_sellstop. Т.е. мы планируем, что цена пойдет дальше в том же направлении(напробой, вниз).

3.1.2. lots (лоты)

Для указания количества лотов в ордере, Вы можете писать конкретно число, например, 1 или 2. Я же рекомендую писать зарезервированную переменную<LOTS>, т.к. непосредственно в МТ Вы сможете поставить любое количество лотов, тем самым Ваш эксперт станет более гибким.

3.1.3.Price (цена исполнения ордера)

Для входа по текущей цене операциями op_buy или op_sell, нужно использовать цены ask и bid, соответственно. Для входа же отложенными ордерами можно или писать конкретную цену или использовать выражение такого вида: ask+30*point. Что это значит?

Это значит текущий ask (например, 1.2800), прибавить 30 пунктов, т.е. цена входа 1.2830. Point это цена пункта по конкретной валютной паре, для EURUSD point=0.0001, для USDJPY point=0.01. Цена пункта определиться сама, это МТ сделает за Вас. Можно написать итак: ask+0.0001 и это будет правильно, но чтобы подключить такой эксперт к USDJPY его придется переделывать. Для написания более гибких экспертов рекомендую всегда использовать зарезервированную переменную point.

3.1.4. Slippage (проскальзывание)

Если проскальзывание составит большую величину чем указанная, то срабатывание ордера будет отклонено. Скорее всего (если условие входа не изменятся) эксперт повторно будет пытаться открыть позицию, и откроет его только в том случае, если проскальзывание составит величину меньше указанной. Я использую 3 или 4 пункта.

3.1.5. Stoploss (лосс)

Нужно понимать, что stoploss это просто значение цены, при котором позиция закроется принудительно. Т.е в поле , можно просто написать конкретную цену.

Для указания я рекомендую оставлять переменную stoploss, а при создании эксперта (или в шапке эксперта) выставлять нужную величину. Благодаря этому Ваш эксперт станет более гибким и величину stoploss можно будет менять непосредственно в МТ в настройках эксперта. Выражение будет иметь вид: ask+stoploss*point. О переменной стоит всегда помнить! Это справедливо для постоянного стоплосса.

Если Вы хотите иметь динамический (изменяющийся) stoploss, его можно считать в переменной. Например: <sl=L[1];> это значит что stoploss равен минимальной цене прошлого бара. Ниже я расскажу об этом подробней.

3.1.6. Takeprofit (тейкпрофит)

Все что сказано в пункте 3.1.5. полностью применительно и для takeprofit. Больше сказать нечего.

3.1.7. Color (Цвет)

В этом поле указывается цвет, в который будет раскрашена стрелка в окне котировок при открытии позиции. Также стрелка появится напротив цены по которой произошло срабатывание ордера. МТ поддерживает много цветов, например: gray, gray, red, blue и т.д.

3.1.8 Примеры использования функции SetOrder.

Ордер на покупку:

SetOrder(op_buy, lots, ask, 3, bid-stoploss * point, bid + takeprofit * point, green);

Ордер на продажу:

SetOrder(op_sell,lots,bid,3,ask+stoploss*point,ask-takeprofit*point,red);

Обратите внимание стопы считаются от bid для ордера на покупку и по ask для ордера на продажу. Этот факт и меет место потому что, для исполнения реально заложенных, например 30 пунктов стопа, его нужно считать от реальной цены закрытия ордера!!! Но не удивляйтесь, если увидите в тестере, например, закрытие позиции по стоплоссу, не на 30 ти пунктах убытка, а на 35, спред никто ведь не отменял.

Отложенные ордера:

SetOrder(op_sellstop,1,bid-50*point,3, (bid-50*point) +StopLoss*Point, (bid-50*point) -TakeProfit*Point,blue);
ho=h[1];
SetOrder (op_buystop, lots, ho, 3, ho-StopLoss * Point, ho + TakeProfit * Point, blue);

3.2. Обращение к массиву котировкам.

Массивы котировок имеют следующие названия. Close (C) -цена закрытия, Open (O) -цена открытия, High (H) -максимальная цена, Low (L) -минимальная цена, Volume (V) - объем.

Вы можете использовать эти названия или сокращенные, они в скобках. Обращения к массивам котировок осуществляется, как и к обычным элементам массива через квадратные скобки. Индекс 0, это текущий бар, 1 прошлый и т.д. Т.е. c[1]-цена закрытия прошлого бара, o[0]-цена открытия текущего бара, h[2]-максимальная цена позапрошлого бара. Имейте ввиду что обращаясь к текущему бару ( индекс0) можно быть уверенным вне изменности только его цены открытия, все же остальные его параметры (H,L,V,C) могут измениться со временем. Названия массивов без индексов H, C и т.д. эксперт будет понимать как значения на текущем баре, т.е с индексом 0 (H=H[0], C=C[0]) и т.д.

Теперь создадим первый торгующий эксперт. Мы вместе по шагам создавали эксперт в первом уроке, и я думаю у Вас не возникнет проблем. Если в друг возникнут, загляните туда.

В настройках эксперта выставляем стоплос в 40 пунктов, тейкпрофит 100, количество лотов 1. Вы можете потом поэкспериментировать с другими значениями. Тестируем на Н1, например по евро.

/*[[ Name := Expert2
Author := Fxtest
Link := forextimes.ru
Lots := 1.00
Stop Loss := 40
Take Profit := 100
Trailing Stop := 0 ]]*/
if totaltrades=1 then exit; //если 1 уже есть то выходим (это кол-во открытых позиций)
if c[1]-h[2]>10*point then SetOrder(op_buy,lots,ask,3,l[1]-stoploss*point,bid+takeprofit*point,green);
if l[2]-c[1]>10*point then SetOrder(op_sell,lots,bid,3,h[1]+stoploss*point,ask-takeprofit*point,red);

Поздравляю с первым торгующим экспертом. Кроме totaltrades ничего объяснять не буду, т.к в сегодняшнем уроке есть все для понимания алгоритма, для закрепления материала настоятельно рекомендую разобраться. Также будет полезно, если Вы попытаетесь переделать его и поэкспериментиру-ете со стопами.

В следующем уроке мы разберем циклы и напишем более сложный эксперт.



Материал предоставлен : http://www.forextimes.ru/magazine




Cтатья опубликована на сайте "Форекс форум. Торговля на Forex. Cообщество трейдеров":
http://youfx.ru

Адрес статьи:
http://youfx.ru/modules/myarticles/article_storyid_4.html