Торговый робот «Ловец тренда 1»

 

Идея создания этого торгового робота пришла в тот момент, когда я рассматривал график цены EUR/USD, на котором происходили довольно сильные движения цены. Причем никаких видимых предпосылок (на основании технического анализа) к этому движению не было. Неплохую прибыль мог бы извлечь торговый робот, движущийся за ценой – подумал тогда я. Именно движущийся за ценой, просто вслед за ценой, без какого либо предварительного анализа и оценки вероятностей. Такой робот мог бы извлекать прибыль из любого ценового движения даже не подчиняющегося никаким законам и логике. Что греха таить, мысль о том, что движения рынка по своей природе абсолютно хаотичны, иногда приходит в голову. Особенно когда на основе тщательно проведенного технического анализа, дождавшись всех необходимых сигналов индикаторов, открываешь позиции, которые в итоге приносят убыток.

Цена никогда не стоит на месте, с большей или меньшей интенсивностью, но она всегда движется. Возьмите дневную свечу, на которой есть минимум и максимум цены за день, и, как правило, разница между этими двумя значениями довольно велика. А что если открывать позиции вслед за ценой. Например, цена проходит десять пунктов вверх, и мы открываем позицию вверх (с установленными ордерами стоп-лосс и тейк-профит по 10 пунктов). Далее если цена продолжает свое движение, то наша позиция закрывается с профитом в 10 пунктов, и мы открываем следующую длинную позицию. В итоге пока цена идет вверх она сопровождается длинными позициями, закрывающимися в профите. Когда же цена развернется вниз, то очередная наша длинная позиция закроется по стоп-лосс с небольшим убытком. И т.к. цена пошла вниз, мы вслед за ней таким же образом начинаем открывать короткие позиции, получая теперь профит с них.

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

Для того, чтобы попытаться нивелировать воздействие этих «ложных» колебаний я применил простой фильтр. Этот фильтр отслеживает последнюю цену покупки и последнюю цену продажи. Суть этого фильтра сводится к тому, чтобы не давать позиции открыться по цене ниже предыдущей для покупки и по цене выше предыдущей для продажи. Из-за этого фильтра короткие позиции открываются все ниже и ниже, а длинные – все выше и выше от начальной точки. А все колебания между ценой открытия последней длинной и последней короткой позиции попросту не учитываются (см. рис.1).

Схема работы торгового робота
Рисунок 1

Текст программы торгового робота (с комментариями) на языке MQL4 выглядит следующим образом:

#property copyright "Blokhin Oleg"
#property link      "azbukatreydera.ru"

int 
b,s,w,sl=100,tp=100;// sl и tp значения ордеров стоп-лосс и тейк-профит в пунктах

double
pos=1,v,n;// pos размер позиции

int start()                                   
{
// Задание цен на начальной точке (точке начала торговли)
//-------------
if(w==0)
{
v=Bid;
n=Bid;
w=1;// благодаря тому, что значение w поменялось на 1 этот блок 
    //срабатывает только один раз при запуске торгового робота
}
//-------------
if(OrdersTotal()==0)// если открытых ордеров нет
{
if(Bid<=v)// Если цена ниже предыдущей
          //открытие короткой позиции
          //----------
         {s=OrderSend(Symbol(),OP_SELL,pos,Bid,3,Bid+sl*Point,Bid-tp*Point,0);  
          v=Bid;
         }
          //----------

if(Bid>=n)// Если цена выше предыдущей
          //открытие длинной позиции
          //----------   
         {b=OrderSend(Symbol(),OP_BUY,pos,Ask,3,Ask-sl*Point,Ask+tp*Point,0);
          n=Bid;
         }
          //----------
}                    
     return;                                                          
}

Копируйте, пользуйтесь. Но не забывайте, что я делюсь в большей степени идеей, и эту программу перед применением рекомендуется, как минимум оптимизировать, подобрав оптимальные значения переменных sl и tp (стоп-лосс и тейк-профит), а как максимум, добавить еще несколько блоков.

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