ФОРЕКС 21 Четверг, 02.05.2024, 23:06
Главная | Регистрация | Вход Приветствую Вас Гость | RSS
Меню сайта

Главная » 2009 » Декабрь » 27 » Обучение MQL II. Урок 9
Обучение MQL II. Урок 9
20:44
Обучение 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. Алгоритм и код эксперта Эксперт проверяет наличие тренда и отслеживает положение цены относительно линий индикатора. Наличие тренда проверяется очень примитивно, проверятся последние три значения скользящей средней, если каждое следующее больше предыдущего тренд бычий, иначе медвежий. Если при бычьем тренде цена меньше нижней средней пользовательского индикатора, осуществляется покупка; если при медвежьем тренде цена больше верхней линии индикатора осуществляется продажа. Выход осуществляется как по стоп ордерам так и по условию, условием выхода является достижение противоположной линии пользовательского индикатора. Имеется две внешние переменные, первая -определяет период индикатора, - определяет период средних определяющих тренд. Стоит ограничение по времени на открытие позиции. Это сделано для того чтобы не открывалось несколько позиций на одном баре. Условие имеет вид: 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 ask0 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 askartur@fxtest.ru
Просмотров: 468 | Добавил: forex21 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Календарь новостей
«  Декабрь 2009  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031

Поиск

Друзья сайта


Статистика

Copyright MyCorp © 2024 Бесплатный конструктор сайтов - uCoz