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

 

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

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

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

Итак, алгоритм торгового робота следующий:

1) Робот проверяет наличие открытых торговых позиций, если открытые позиции есть, ничего не происходит, если открытых позиций нет, то работает дальше;

2) А дальше определяемся, с какой стороны от скользящей средней находится в данный момент цена;

3) Если цена находится ниже скользящей средней и при этом она ниже или равна цене открытия предыдущей короткой позиции, то открывается короткая позиция;

4) Если цена находится выше скользящей средней и при этом она выше или равна цене открытия предыдущей длинной позиции, то открывается длинная позиция;

5) Далее открытая позиция закрывается либо по ордеру стоп-лосс, либо по ордеру тейк-профит и цикл повторяется.

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

А вот и текст программы, который вы при желании можете скопировать и использовать, как вашей душе будет угодно. Я нежадный.

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

int 
b,s,w=0,p=20,sl=200,tp=200;

double
pos=1,v,v1,n,n1;

int start()                                   

{  
if(w=0)
{v1=Bid;
 n1=Bid;
 w=1;
}  

//--засекаем текущее значение цены
v=Bid;//для счетчика коротких позиций
n=Bid;//для счетчика длинных позиций
//--------------------------------

if(OrdersTotal()==0)//если открытых ордеров нет
{
if(Bid<iMA(NULL,0,p,0,MODE_SMA,PRICE_CLOSE,0))

   {if(v<=v1)//если текущее значение цены меньше либо равно предыдущему

         {s=OrderSend(Symbol(),OP_SELL,pos,Bid,3,Bid+sl*Point,Bid-tp*Point,0);  
          v1=Bid;//отсечка цены продажи
          n1=Bid;//обнуление для счетчика длинных позиций
         }
   }      

if(Bid>iMA(NULL,0,p,0,MODE_SMA,PRICE_CLOSE,0))
   {if(n>=n1)//если текущее значение цены больше либо равно предыдущему
         {b=OrderSend(Symbol(),OP_BUY,pos,Ask,3,Ask-sl*Point,Ask+tp*Point,0);
          n1=Bid;//отсечка цены покупки
          v1=Bid;//обнуление для счетчика коротких позиций
         }
   }      

}  
     return;                                                          
}