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


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

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

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

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



   Здравствуйте дорогие читатели! Сегодня как я и обещал, мы напишем эксперт. Писем пришло не очень много, самым интересным был алгоритм трейдера Мераба из г. Харькова.
  
   7.1. Алгоритм
  
   Суть эксперта в увеличении размера лота после закрытия убыточной сделки. Этот метод называется Мартингел. После получение убытка открывается новая позиция с увеличенным количеством лотов, и полученный профит должен перекрыть прошлые убытки. Наш эксперт будет довольно простым, но метод можно развивать до бесконечности. Сигналом к действию (к первой покупке или продажи при отсутствии открытой позиции) будет разворот индикатора MACD (быстрой MACD). Покупка осуществляется на открытии следующего бара, при отрицательном MACD, образовавшим экстремум, продажа, наоборот, соответственно. Сигнал к первой сделке был выбран случайно, можно использовать любой другой. Игра планируется на таймфрейме, М15 и соседних. После получения убытка (срабатывает стоплосс), открывается новая позиция в ту же сторону, если второй раз получен убыток, позиция открывается опять в ту же сторону, но в последний раз. Т.е. мы имеем только 3 позиции, которые могут открыться в одну сторону, это сделано на случай большого тренда. Если будет сильный и продолжительный тренд, мы получим большой убыток, но не потеряем депозит. Настраиваются периоды усреднения MACD, все 3 стоплосса, 3 тейкпрофита, и 3 количества лотов. Настройкой эксперта я не занимался, это нужно делать под конкретный инструмент и конкретный таймфрейм. Нужен ли Вам этот эксперт, решать Вам. Для меня такие методы являются крайне, психологически не комфортными. Но на тему Мартингела было большое количество разговоров на форумах, я рад что мы хоть немного коснулись этой темы. Возможно,кто-то из читателей заинтересуется им и в конечном итоге будет убежден в обратном. В данном эксперте настройка очень важна, также можно сменить сигнал к первому действию. Если у Вас, дорогие читатели, остались вопросы, обязательно пишите, я постараюсь помочь Вам.
  
   В следующем выпуске мы начнем писать собственные индикаторы.
  
   7.2. Эксперт
  
   /*[[
   Name := Expert
   7Author := fxtest.ru
   Link := forextimes.ru
   Lots := 1.00
   Stop Loss := 0
   Take Profit := 0
   Trailing Stop := 0
   ]]*/
   defines: MACDfast (12), MACDslow(26), MACDsignal(9), sl1(30), sl2(30), sl3(30), tp1(20), tp2(20), tp3(20), lot1(1), lot2(2), lot3(7);
  
   /*Описание внешних переменных, настройки MACD, стопов и количества лотов */
  
   var:macd1(0), macd2(0), macd3(0), b1(0), ss(0), sb(0), fb(0), fs(0);
   /*
   macd1-macd3 - значения быстрой MACD
   b1-баланс до открытия прошлой позиции
   ss-количество открытых позиций на продажу
   sb-количество открытых позиций на покупку
   fb-сигнал MACD к первой покупке
   fs-сигнал MACD к первой продаже
   */
  
   if FreeMargin<1000 then exit; //выход при нехватке свободной марже
  
   if TotalTrades=0 then {// при отсутствии открытых позиций
  
   if balance>b1 then {fb=0; fs=0; ss=0; sb=0;};
   /* если баланс увеличился после закрытия последней сделки то обнулить все переменные */
  
   macd1=iMACD (MACDfast, MACDslow, MACDsignal,MODE_MAIN, 1); /* расчет быстрых MACD*/
   macd2=iMACD (MACDfast, MACDslow, MACDsignal,MODE_MAIN, 2);
   macd3=iMACD (MACDfast, MACDslow, MACDsignal,MODE_MAIN, 3 );
  
   if macd1<0 and macd2<0 and macd3<0 and macd1>macd2 andmacd3>macd2 and sb=0 and ss=0 then fb=1;
   if macd1>0 and macd2>0 and macd3>0 and macd1<macd2 andmacd3<macd2 and ss=0 and sb=0 then fs=1;
  
   /*условия экстремумов */
  
   if fb=1 and sb=0 then/* если был сигнал к покупке и это первый ордер то покупать
   отменять сигнал к покупке приравнивать 1 к счетчику открытых позиций на покупку, фиксируется текущий баланс */
   {fb=0; sb=1; b1=Balance; SetOrder(op_buy, lot1, ask, 3, bid-sl1*point,bid+tp1*point, green); exit;};
  
   if Balance<b1 and sb=1 then
  
   /* если баланс уменьшился и была открыта 1 позиция, приравнивать 2 к счетчику открытых позиций на покупку и открыть 2-ю позицию */
  
   {sb=2; b1=Balance; SetOrder(op_buy, lot2, ask, 3, bid-sl2*point,bid+tp2*point, green); exit;};
  
   if balance<b1 and sb=2 then
  
   /* если баланс уменьшился и была открыта 2-я позиция, приравнивать 0 к счетчику открытых позиций на покупку и открыть 3-ю позицию
   0 приравнивается т.к. это последняя позиция в серии */
  
   {fb=0; sb=0; SetOrder(op_buy, lot3, ask, 3, bid-sl3*point,bid+tp3*point, green); exit;};
  
   // продажи
  
   if fs=1 and ss=0 then
  
   /* если был сигнал к продаже и это первый ордер то продавать отменять сигнал к продаже и приравнивать 1 к счетчику открытых позиций на продажу, фиксируется текущий баланс */
  
   {fs=0; ss=1; b1=Balance; SetOrder(op_sell, lot1, bid, 3, ask+sl1*point,ask-tp1*point, red); exit;};
  
   if Balance<b1 and ss=1 then
  
   /* если баланс уменьшился то продавать приравнивать 2 к счетчику открытых позиций на продажу, фиксируется текущий баланс */
  
   {ss=2; b1=Balance; SetOrder(op_sell, lot2, bid, 3, ask+sl2*point, ask-tp2*point, red); exit;};
  
   if balance<b1 and ss=2 then
  
   /* если баланс уменьшился то продавать в последний раз*/
  
   {ss=0; SetOrder(op_sell, lot3, bid, 3, ask+sl3*point, ask-tp3*point, red);exit;};
  
   };


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



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




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

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