MQL4: Пишем советник по торговле заданных паттернов

Всем привет!

Наверняка многие из вас часто замечали, что периодически графики той или иной валютной пары повторяют свои движения. На самом деле, в большинстве случаев – это всего лишь временное явление, на котором не получится сделать достаточно много денег. Но что, если есть такие надежные ценовые движения и закономерности, о которых мы и не догадываемся? Сегодня мы напишем довольно простой советник, который поможет нам с исследованиями рынка.

Что будем писать?

В основе любого исследования всегда лежит определенная гипотеза. Сначала мы выдвигаем ее, а потом уже доказываем или опровергаем.

Сегодня мы напишем простой советник, который будет работать на дневных графиках. В основе формирования входа будет лежать некий свечной паттерн с привязкой ко дню недели. Гипотеза наша заключается в следующем: если мы видим одну медвежью свечу, а затем бычью, скажем, в среду, то в четверг свеча тоже будет бычьей. Если мы видим бычью свечу, а затем медвежью, то следующий день закроется еще ниже. Проиллюстрирую это на картинке:

Как видите, паттерн очень простой, и маловероятно, что он действительно работает. Тем не менее, на рынке действительно присутствуют подобные аномалии, на которых можно спокойно из года в год зарабатывать пусть и небольшие, но все же реальные деньги.

Конструкция нашего советника

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

Поэтому разделим тело советника на несколько частей. Первая часть – фильтр дня недели:

bool TimeFilter(){

if(!MondayTrade&&DayOfWeek()==1) return(false);

if(!TuesdayTrade&&DayOfWeek()==2) return(false);

if(!WednesdayTrade&&DayOfWeek()==3) return(false);

if(!ThursdayTrade&&DayOfWeek()==4) return(false);

if(!FridayTrade&&DayOfWeek()==5) return(false);

return(true);

}

Он будет возвращать false, если текущий день недели запрещен в настройках. Второй блок генерирует сигнал:

int Signal(){

if (!TimeFilter()) return -5;

double Close1 = iClose(_Symbol, signal_period, 1);

double Open1 = iOpen(_Symbol, signal_period, 1);

double Close2 = iClose(_Symbol, signal_period, 2);

double Open2 = iOpen(_Symbol, signal_period, 2);

 

if (Close2 > Open2 && Close1 < Open1) {

return OP_SELL;

}

if (Close2 < Open2 && Close1 > Open1) {

return OP_BUY;

}

return -5;

}

Как видите, мы просто ищем нужный нам паттерн. И этот метод вы можете переписать под поиск любого паттерна.

Дальше осталось только написать метод для открытия и закрытия позиции. И метод, сигнализирующий о том, что текущая позиция уже открыта 1 бар, и ее пора закрывать:

bool ExitTime(int dir){

for (int i = OrdersTotal(); i >= 0; i—) {

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {

continue;

}

if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic) {

continue;

}

 

if (TimeCurrent() — OrderOpenTime() > 60 * exit_bars * exit_period) {

return(true);

}

}

return(false);

}

Вот, собственно, и все. Полный код советника вы можете увидеть в видеоуроке.

Результаты

Как я уже говорил, советник, как и сам паттерн, – очень простой. Но на рынках «просто» — не всегда означает плохо и не прибыльно. Даже такие простые вещи, к нашему удивлению, могут оказаться рабочими, за что мне и нравится этот рынок. Это рынок умопомрачительных контрастов. В то время как ручные трейдеры торгуют вслепую вообще, без какого-либо подтверждения статистической значимости своих систем, новички вкладывают последние деньги в сетки и мартины, алготрейдеры изобретают все более изощренных скальперов с количеством строк кода, дающим фору «Войне и миру», порой очень простые, но прибыльные вещи лежат на поверхности, но их никто не видит. В этом есть какая-то очень изощренная ирония, не находите?

Результаты не блещут, конечно, но паттерн был взят наобум, и он крайне прост. Я уверен, что если немного подкорректировать его, — то можно добиться лучших результатов.

Заключение

Идея паттерна с двумя свечами противоположных цветов и настроенного на продолжение движения – очень простой пример. Тут не учитывается ни форма, ни волатильность, ни отношение размера теней к размеру самого тела свечи. Вы же можете придумать свои паттерны и протестировать их, – как знать, может быть, вы найдете действительно ценные и очень прибыльные возможности.

Скачать исходник советника из урока

Тема на форуме

С уважением, Дмитрий аkа Silentspec
Tlap.com

Уроки по MQL , , , , ,