Оценка советника!

 

//+------------------------------------------------------------------+
//| H4. mq4 |
//| Copyright © 2006, MetaQuotes Software Corp. |
//| http://wolf002.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link "http://wolf002.narod.ru"
extern double TakeProfit = 77;
extern double TakeLost = 44;
extern double Lots = 0.1;
extern double koef = 0.1;
extern double Peryod = 2;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
double razn0, raz, sum;
double high_max, low_min, delta_low, delta_high;
int ticket,total;

total=OrdersTotal();
if(total<1)
{
// нет ни одного открытого ордера
for(int i=1 ;i<Peryod ; i++)
{
raz=High[i]-Low[i];
sum=sum+raz;
}
//вычисляем сумму разности Peryod в переменную sum
razn0 = High[0]-Low[0];
//вычисляем сумму разности последнего бара

sum= sum * koef;

double val_High=High[Highest(NULL,0,MODE_HIGH,Peryod,1)];
// находим наивысший предыдущий бар на Peryodе

double val_Low=Low[Lowest(NULL,0,MODE_LOW,Peryod,1)];
// находим наинизший предыдущий бар

delta_high = High[0]- val_High;
if (delta_high < 0)
{
delta_high = - delta_high;
}
//пытаемся определить куда дальше движется цена (не уверен, что это правильно)

delta_low = val_Low - Low[0];
if (delta_low < 0)
{
delta_low = - delta_low;
}

// проверяем на возможность встать в длинную позицию (BUY)
if ( razn0 > sum && delta_high > delta_low)

{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-TakeLost*Point, Ask+TakeProfit*Point, "My order #1",16384,0,Blue);
if(ticket>0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
Print("BUY order opened : ", OrderOpenPrice());
}
else Print("Error opening BUY order : ", GetLastError());
return(0);
}
// проверяем на возможность встать в короткую позицию (SELL)
if ( razn0 > sum && delta_high < delta_low)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+TakeLost*Point, Bid-TakeProfit*Point, "My order #1",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
Print("SELL order opened : ", OrderOpenPrice());
}
else Print("Error opening SELL order : ", GetLastError());
return(0);
}
return(0);
}
//----

return(0);
}
//+------------------------------------------------------------------+

Выкладываю свой первый эксперт.
Вообщем первоначальная идея была такова:
Открывать позицию по сигналу текущий бар больше двух предыдущих, т.е. High[0]-Low[0]>(High[1]-Low[1])+(High[2]-Low[2])
Дальше смотрим куда осуществился пробой вниз или вверх для этого High[0] сравниваем с double val_High=High[Highest(NULL,0,MODE_HIGH,Peryod,1)];
дальше если текущий бар идет вверх открываем по направлению
то же только на оборот с селлом.
Потом я добвил выбор кол-ва периодов и коэфициент на который сумма разности High[i]-Low[i] будет перемножаться.
Вообщем при разных входных параметрах получаем различный результат,
Я тестил на дневных периодах.

Инетесно прочитать Ваши коменты.

 
Очень полезная ссылка - 'Как вставлять код MQL-4 в пост'
 
//+------------------------------------------------------------------+
//|                                                           H4.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                          http://wolf002.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://wolf002.narod.ru"
extern double TakeProfit = 77;
extern double TakeLost = 44;
extern double Lots = 0.1;
extern double koef = 0.1;
extern double Peryod = 2;
 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
 
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
    
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
double razn0, raz, sum;
double high_max, low_min, delta_low, delta_high;
int ticket,total;
 
total=OrdersTotal();
   if(total<1) 
   {
   // нет ни одного открытого ордера
       for(int i=1 ;i<Peryod ; i++)
       {
         raz=High[i]-Low[i];
         sum=sum+raz;
       }
   //вычисляем сумму разности  Peryod в переменную   sum
   razn0 = High[0]-Low[0];
     //вычисляем сумму разности  последнего бара
 
   sum= sum * koef;
   
     double val_High=High[Highest(NULL,0,MODE_HIGH,Peryod,1)];
    // находим наивысший предыдущий бар на Peryodе
 
     double val_Low=Low[Lowest(NULL,0,MODE_LOW,Peryod,1)];
 // находим наинизший предыдущий бар
 
       delta_high = High[0]- val_High;
        if (delta_high < 0)
        {
        delta_high = - delta_high;
        }
       //пытаемся определить куда дальше движется цена (не уверен, что это правильно)
       
       delta_low =  val_Low - Low[0];
       if (delta_low < 0)
        {
        delta_low = - delta_low;
        }
        
   // проверяем на возможность встать в длинную позицию (BUY)
   if ( razn0 > sum && delta_high > delta_low)
      
         {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-TakeLost*Point,Ask+TakeProfit*Point,"My order #1",16384,0,Blue);
      if(ticket>0)
         {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("BUY order opened : ",OrderOpenPrice());
         }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
       }
    // проверяем на возможность встать в короткую позицию (SELL)
   if ( razn0 > sum && delta_high < delta_low)
      { 
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+TakeLost*Point,Bid-TakeProfit*Point,"My order #1",16384,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
      return(0);
     }
//----
 
   return(0);
  }
//+------------------------------------------------------------------+
Да простит меня telnet, взял на себя смелость сделать как написано по ссылке выше (так и правда красивее :) ).
Ну что, система на трендах показывает очень даже не плохие резы.
 
Прошу тестировать на дневках с параметрами
TP=80
TL=35
k=0.4
period=2
для графиков евро бакс