Tradersforum - форум трейдеров рынка ФОРЕКС
 
Главная Форум Блоги Статьи Файлы Рабочий кабинет Контакты
 
Календарь экономических событий для рынка Форекс

Календарь Форекс → смотреть

Понятный. Точный. Удобный. Быстрый. Информативный.

Последние дискуссии на форумах
Название темыАвторОтветовПросмотровПоследний ответ
   Аналитика от компании ФорексМарт(forexmart)
LenaForexMart132186114723.11 01:21LenaForexMart
   ВПН
Jenya72618519.11 17:48Jenya7
   ФорексМарт (forexmart)
LenaForexMart3137489619.11 17:41LenaForexMart
   Instaforex брокер
MariyaInstaForex2458397519.11 15:49IrinaInstaForex
   Аренда манипулятора в Минске
Jenya7020516.11 21:32Jenya7
   Forex4you
4EL58798899105.11 18:41veggi
   Betatransfer.net - прием платежей для High Risk проектов, интернет эквайринг и мерчант онлайн оплат
seter5412528.10 10:34seter

3.3.07 20:33 | MetaQuotes Language II - учимся программировать. Урок №7
Раздел: MQL программирование | Автор: admin | Рейтинг: 5.00 (1) Оценить | Хитов 2694
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

 

  1 2 3 4 5 6 7 8 9 10  

Родственные ссылки
» Другие статьи раздела MQL программирование
» Эта статья от пользователя admin

5 cамых читаемых статей из раздела MQL программирование:
» Программирование на MQL II. Сортировка методом пузырька
» MetaQuotes Language II - учимся программировать. Урок №1
» MetaQuotes Language II - учимся программировать. Урок №5
» Программирование на MQL II. Поиск
» MetaQuotes Language II - учимся программировать. Урок №4

5 последних статей раздела MQL программирование:
» Программирование на MQL II. Поиск
» MetaQuotes Language II - учимся программировать. Урок №7
» Программирование на MQL II. Сортировка методом пузырька
» MetaQuotes Language II - учимся программировать. Урок №5
» MetaQuotes Language II - учимся программировать. Урок №4

¤ Перевести статью в страницу для печати
¤ Послать эту cтатью другу

MyArticles 0.6 beta for RUNCMS: by RunCms.ru

Наш форекс форум один из крупнейших форумов для трейдеров в Рунете. На форуме трейдеров мы обсуждаем рынок, стратегии игры трейдеров, прогнозы.
Множество трейдеров рынка Forex делятся своими стратегиями и дают торговые сигналы в реалтайм. Лучший Форекс календарь событий в мире
- Генерация страницы: 0.025496 секунд -