Прибыльные советники Форекс – это миф или реальность?

Всем доброго времени суток!

Прибыльные советники Форекс – это миф или реальность?” – все чаще слышишь этот вопрос на фоне роста популярности Форекс. Волна “форексомании” захлестнула Россию и ее ближнее зарубежье. Под впечатлением от увиденного в Форекс-рекламе, в надежде на быстрое и легкое обогащение, да и еще не выходя из дома, масса людей с головой окунулась в ту стихию, которая их так манила… Но суровая реальность рынка Форекс быстро умеет остудить пыл и почистить карманы. Получив первый урок, кто-то раз и навсегда завязывает с торговлей, окрестив Форекс очередным лохотроном, кто-то продолжает испытывать удачу и глубину своего кармана, а кто-то всерьез изучает Форекс и работает с переменным результатом. Ряд трейдеров имеют стабильные результаты, некоторые из них разрабатывают собственные прибыльные торговые Форекс стратегии.

pribylnye-sovetniki-forex-2114265

Испытывать свои силы на рынке Форекс можно с понедельника по пятницу, 24 часа в сутки. Именно такой “режим работы” у валютного рынка Форекс. Естественно, что работать “по полной” в таком режиме не сможет ни один нормальный человек. И тут на помощь приходят советники Форекс.

Советник Форекс – это программа для автоматической работы на Форекс, способная осуществлять сделки без участия человека. Программа представляет собой последовательность команд, написанных на специальном языке программирования. Например, в наиболее распространенный торговый терминал MetaTrader4 уже встроен язык программирования MetaQuotes Language 4 (MQL4). MQL4 по синтаксису напоминает популярный во всем мире язык программирования Си. Так что, у людей, знающих Си, проблем с изучением MQL4, как правило, не возникает. MQL4, проще говоря, это упрощенный вариант Си, поскольку в первом просто отсутствует часть возможностей второго. В сети интернет сейчас предостаточно электронных онлайн самоучителей по программированию на этом языке, которые доступны на разных языках. Для говорящих на русском языке можем порекомендовать неплохой ресурс – , возможностями которого мы воспользовались, с легкостью вспомнив университетский курс языка Си (большое спасибо нашим дорогим кандидатам технических наук).

Форекс советник имеет следующие наиболее важные преимущества:

  • он способен работать 24 часа в сутки в рамках режима работы рынка Форекс;
  • он лишен эмоций, что защищает от поспешных и необдуманных решений;
  • он открывает и закрывает сделки строго по установленным правилам (запрограммированная торговая стратегия).

В то же время, на Форекс советник возлагаются следующие важные задачи:

  • во-первых, советник, прежде всего, должен быть прибыльным, т.е. количество прибыльных сделок должно превосходить количество убыточных сделок;
  • во-вторых, советник должен обеспечивать минимум ложных сигналов;
  • в-третьих, советник должен иметь настраиваемые параметры для проведения его оптимизации;
  • в-четвертых, советник должен показывать положительные результаты для всех основных валютных инструментов, разумеется, после проведения его оптимизации для выбранного валютного инструмента.

Форекс советники принято разделять на :

  • трендовые советники – их работа основана на совершении сделок по тренду;
  • скальперы и пипсовщики – основаны на совершении множества сделок с большим размером лота и несколькими пунктами на сделку;
  • мультивалютные советники – работают одновременно или по отдельности на разных валютных инструментах (валютных парах);
  • советники по мартингейлу – основаны на принципе пошагового увеличения размера лота после совершения убыточной сделки;
  • комбинированные советники – включают одновременно несколько из вышеуказанных видов.

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

Впрочем, теории, наверное, достаточно. Давайте перейдем к практике и попробуем сами написать прибыльный советник Форекс.

Наш трендовый советник будет основан на простейшем индикаторе Moving Average (скользящая средняя). Сигналом к открытию сделки будет служить пересечение двух разнопериодных скользящих средних. При этом:

  • сделку на покупку (BUY) мы будем совершать в том случае, если скользящая средняя с малым периодом пересечет снизу-вверх скользящую среднюю с большим периодом;
  • сделку на продажу (SELL) мы будем совершать в том случае, если скользящая средняя с малым периодом пересечет сверху-вниз скользящую среднюю с большим периодом.

signal-8803672

Существенным минусом этой торговой стратегии является значительное запаздывание сигнала на открытие сделки, что вы можете увидеть из вышеприведенного графика движения цены. Тем не менее, вполне возможно построить простейший прибыльный советник, основанный на пересечении двух разнопериодных скользящих средних, что мы собственно и сделаем. А вот и исходный код советника на языке программирования MQL4:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#property copyright "MoneyInNetwork (c)2011" 
#property link "http://moneyinnetwork.ru"
//настраиваемве переменные (для оптимизации)
extern int MagicNumber=9999; //"магический номер ордера" - метка ордера для того, чтобы отличить его от ордеров, открытых другими советниками либо вручную
extern double Lot=0.1; //размер лота
extern double TakeProfit = 82; //тейк-профит, в пунктах
extern double StopLoss = 82; //стоп-лосс, в пунктах
extern double shift = 9; //смещение скользящей средней для первой контрольной точки
extern double distance = 7; //смещение скользящей средней для второй контрольной точки
extern double per1=14; //период первой скользящей средней (малый)
extern double per2=100; //период второй скользящей средней (большой)
extern double slip = 3;//максимальное отклонение от запрошенной цены в пунктах 
 
bool init = false; //флаг инициализации советника
 
//функция инициализации параметров
int init() { if (init) return(0); //код инициализации параметров init = true; return (0);
}
 
//функция инициализации параметров
int deinit() { init = false; return (0);
}
 
int start() { int ticket = 0; int type1; int i;
  //расчет значений скользящих средних в контрольных точках double ima14_1 = iMA (Symbol(), Period(), per1, 0, 1, 0, shift+distance); double ima14_2 = iMA (Symbol(), Period(), per1, 0, 1, 0, shift); double ima100_1 = iMA (Symbol(), Period(), per2, 0, 1, 0, shift+distance); double ima100_2 = iMA (Symbol(), Period(), per2, 0, 1, 0, shift);   type1 = -1; //запрет сигнала //Проверка на наличие сигнала для входа if (ima14_1ima100_2) type1 = OP_BUY; //есть сигнал на покупку if (ima14_1>ima100_1 && ima14_2= 0; trade-- ) { if(OrderSelect(trade, SELECT_BY_POS, MODE_TRADES)) { int m = OrderType(); if ( (m == OP_BUY || m == OP_SELL) && OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol()) { i = i+1; } } } //допускаем только один открытый ордер одновременно if ( i==1 ) return (0); //если нет открытых советником ордеров, то открываем ордера в соответствии с сигналом //продаем if ( type1 == OP_SELL ) ticket = OrderSend(Symbol(), OP_SELL, Lot, NormalizeDouble(Bid, Digits), slip, NormalizeDouble(Ask+StopLoss*Point, Digits), NormalizeDouble(Bid-(TakeProfit*Point), Digits), "Sell", MagicNumber, 0, Red);   //покупаем if ( type1 == OP_BUY ) ticket = OrderSend(Symbol(), OP_BUY, Lot, NormalizeDouble(Ask, Digits), slip, NormalizeDouble(Bid-StopLoss*Point, Digits), NormalizeDouble(Ask+(TakeProfit*Point), Digits), "Buy", MagicNumber, 0, Green); //проверяем на наличие ошибки при исполнении ордеров if ( ticket