Скачать MetaTrader 5

Советники: Советник "Пробой дня"

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
182662
MetaQuotes Software Corp.  

Советник "Пробой дня":

Советник работает stop ордерами на пробой прошлого дня или временного промежутка.

Author: Vladimir Khlystov

ZZZEROXXX
768
ZZZEROXXX  
а где выходим? по трейлингу?
MQL4 Comments
16319
MQL4 Comments  
ZZZEROXXX:
а где выходим? по трейлингу?


по тейк профиту, ясно ведь сказано..

но трейлинг-стоп пределать этому советнику не помешает.

Vladimir Khlystov
11857
Vladimir Khlystov  
Valeriy.:
ZZZEROXXX:
а где выходим? по трейлингу?


по тейк профиту, ясно ведь сказано..

но трейлинг-стоп пределать этому советнику не помешает.


TrailingStop в этом советнике есть (trailing) как только прибыль будет больше этого параметра (в п) стоплосс будет передвигаться за ценой в сторону увеличения прибыли.

Дополнительно в советнике есть перевод в безубыток (NoLoss), как только прибыль достигнет значения NoLoss (в п.) стоплосс переместится на цену открытия ордера.

Andrew Kornishkin
7109
Andrew Kornishkin  

Хороший советник. Скачал, посмотрел и заодно проверил идею пробой канала определенной ширины и высоты.

//+------------------------------------------------------------------+
//|Пробой канала определенной              BreakdownLevelChannel.mq4       |
//|ширины и высоты                Copyright © 2011, Хлыстов Владимир      |
//|EURUDSD H1                                      cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, http://cmillion.narod.ru"
#property link      "cmillion@narod.ru"
//--------------------------------------------------------------------
extern int    SL           = 1100,     //Стоплосс в пунктах
              TP           = 1100,     //Тейкпрофит в пунктах
              NoLoss       = 200,      //Если 0 то нет установки безубытка
              trailing     = 800,      //Если 0 то нет трейлинга
              Delta        = 80,       //Выше или ниже экстремумов канала
              Width        = 2000,     //Ширина канала
              risk         = 0,        //Если 0 то по фиксированному лоту              
              BarsCount    = 18;       //Количество баров в канале
extern double Lot          = 1;        //используется только при risk = 0
extern bool   OpenStop     = true;     //Выставлять стоп ордера при открытом ордере
extern color  color_BAR    = DarkBlue; //цвет инфо
//--------------------------------------------------------------------
double        MaxPrice,MinPrice,Sigma;
int           STOPLEVEL,magic=123321,tip;
//--------------------------------------------------------------------
int init()
{
   STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
   if (SL < STOPLEVEL) SL = STOPLEVEL;
   if (TP < STOPLEVEL) TP = STOPLEVEL;
   if (NoLoss   < STOPLEVEL && NoLoss   != 0) NoLoss   = STOPLEVEL;
   if (trailing < STOPLEVEL && trailing != 0) trailing = STOPLEVEL;
   Comment("Copyright © 2011 cmillion@narod.ru\nУстановленные параметры BreakdownLevelDay "+"\n"+
      "Delta       " , Delta,             "\n",
      "SL           ", SL,                "\n",
      "TP          " , TP,                "\n",
      "Lot          ", DoubleToStr(Lot,2),"\n",
      "risk         ", risk,              "\n",
      "NoLoss    "   , NoLoss,            "\n",
      "trailing     ", trailing);
}
//--------------------------------------------------------------------
int start()
{
   if (OpenStop) magic=TimeDay(CurTime());
   if (!IsDemo()) {Comment("Демо версия, обратитесь cmillion@narod.ru для разблокировки");return;}
   //-----------------------------------------------------------------
   int bay,sel,error;
   bool BUY=false,SEL=false;
   for (int i=0; i<OrdersTotal(); i++)
   {  if (OrderSelect(i, SELECT_BY_POS)==true)
      {  
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
         tip=OrderType();
         if (tip==0) BUY = true;
         if (tip==1) SEL = true;
         if (tip==4) bay++;
         if (tip==5) sel++;
      }   
   }
   if ((BUY||SEL)&&(bay!=0||sel!=0)) DelAllStop();          //если есть открытый ордер удаляем стоп ордера
   if ( BUY||SEL) 
   {
      if (trailing!=0) TrailingStop(trailing);
      if (NoLoss!=0) No_Loss(NoLoss);
      return;                                               //если есть открытый ордер
   }
   
   MaxPrice=High[iHighest(NULL,0,MODE_HIGH,BarsCount,0)]+NormalizeDouble(Delta*Point,Digits);
   MinPrice=Low[iLowest(NULL,0,MODE_LOW,BarsCount,0)]-NormalizeDouble(Delta*Point,Digits);
   Sigma = MaxPrice-MinPrice;
   int expiration=CurTime()+(23-TimeHour(CurTime()))*3600+(60-TimeMinute(CurTime()))*60;  //время закрытия стоп ордера
   double TrPr,StLo;
   if (risk!=0) Lot = LOT(); 
   if (bay<1 && Sigma<Width*Point)
   {      
      if (Ask+STOPLEVEL*Point>MaxPrice) MaxPrice = NormalizeDouble(Ask+STOPLEVEL*Point,Digits);
      if (TP!=0) TrPr = NormalizeDouble(MaxPrice + TP * Point,Digits);                 
      if (SL!=0) StLo = NormalizeDouble(MaxPrice - SL * Point,Digits);                 
      error=OrderSend(Symbol(),OP_BUYSTOP ,Lot,MaxPrice,3,StLo,TrPr,"BUYSTOP BLD",magic,expiration,Blue);
      if (error==-1) Alert("Error BUYSTOP ",GetLastError(),"   ",Symbol(),"   Lot ",Lot,"   Price ",MaxPrice,"   SL ",StLo,"   TP ",TrPr,"   expiration ",expiration);
   }
   if (sel<1 && Sigma<Width*Point)
   {
      
      if (Bid-STOPLEVEL*Point<MinPrice) MinPrice = NormalizeDouble(Bid-STOPLEVEL*Point,Digits);
      if (TP!=0) TrPr = NormalizeDouble(MinPrice - TP * Point,Digits);                 
      if (SL!=0) StLo = NormalizeDouble(MinPrice + SL * Point,Digits);   
      error=OrderSend(Symbol(),OP_SELLSTOP,Lot,MinPrice,3,StLo,TrPr,"SELLSTOP BLD",magic,expiration,Red );
      if (error==-1) Alert("Error SELLSTOP ",GetLastError(),"   ",Symbol(),"   Lot ",Lot,"   Price ",MinPrice,"   SL ",StLo,"   TP ",TrPr,"   expiration ",expiration);
   }
   if (bay<1&&sel<1)
   {
      ObjectDelete("bar0");
      ObjectCreate("bar0", OBJ_RECTANGLE, 0, 0,0, 0,0);
      ObjectSet   ("bar0", OBJPROP_STYLE, STYLE_SOLID);
      ObjectSet   ("bar0", OBJPROP_COLOR, color_BAR);
      ObjectSet   ("bar0", OBJPROP_BACK,  true);
      ObjectSet   ("bar0", OBJPROP_TIME1 ,iTime( NULL, 1440, 0));
      ObjectSet   ("bar0", OBJPROP_PRICE1,MaxPrice);
      ObjectSet   ("bar0", OBJPROP_TIME2 ,CurTime());
      ObjectSet   ("bar0", OBJPROP_PRICE2,MinPrice);
   }
   return(0);
}
//--------------------------------------------------------------------
void DelAllStop()
{
   int tip;
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol()||OrderMagicNumber()!=magic) continue;
         tip=OrderType();
         if (tip==4||tip==5) OrderDelete(OrderTicket());
      }   
   }
}
//--------------------------------------------------------------------
void TrailingStop(int trailing)
{
   double TrPr,StLo;
   int tip;
   bool error;
   color col;
   for (int i=0; i<OrdersTotal(); i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS)==true)
      {
         tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol())
         {
            if (OrderMagicNumber()!=magic) continue;
            if (tip==0) //Bay               
            {  
               StLo = Bid - trailing*Point;          
               if (StLo > OrderStopLoss() && StLo > OrderOpenPrice()) 
                  {error=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(StLo,Digits),OrderTakeProfit(),0,White);Comment("Трейлинг "+OrderTicket());Sleep(500);}
            }                                         
            if (tip==1) //Sell               
            {                                         
               StLo = Ask + trailing*Point;            
               if (StLo < OrderStopLoss() && StLo < OrderOpenPrice()) 
                  {error=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(StLo,Digits),OrderTakeProfit(),0,White);Comment("Трейлинг "+OrderTicket());Sleep(500);}
            } 
            if (error==false && SL!=0) Alert("Error SELLSTOP ",GetLastError(),"   ",Symbol(),"   SL ",StLo);
         }//tip<2
      }//OrderSelect
   }//for
}
//------------------------------------------------------------------+
double LOT()
{
   double MINLOT = MarketInfo(Symbol(),MODE_MINLOT);
   double LOT = AccountFreeMargin()*risk/100/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/15;
   if (LOT>MarketInfo(Symbol(),MODE_MAXLOT)) LOT = MarketInfo(Symbol(),MODE_MAXLOT);
   if (LOT<MINLOT) LOT = MINLOT;
   if (MINLOT<0.1) LOT = NormalizeDouble(LOT,2); else LOT = NormalizeDouble(LOT,1);
   return(LOT);
}
//------------------------------------------------------------------+
void No_Loss(int NoLoss)
{
   double TrPr,StLo;
   int tip;
   bool error;
   color col;
   for (int i=0; i<OrdersTotal(); i++) 
   {
      if (OrderSelect(i, SELECT_BY_POS)==true)
      {
         tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol())
         {
            if (OrderMagicNumber()!=magic) continue;
            if (tip==0) //Bay               
            {  
               if (OrderStopLoss()>=OrderOpenPrice()) return;
               StLo = Bid - NoLoss*Point;          
               if (StLo > OrderStopLoss() && StLo > OrderOpenPrice()) 
                  {error=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(StLo,Digits),OrderTakeProfit(),0,White);Comment("Трейлинг "+OrderTicket());Sleep(500);}
            }                                         
            if (tip==1) //Sell               
            {                                         
               if (OrderStopLoss()<=OrderOpenPrice()) return;
               StLo = Ask + NoLoss*Point;            
               if (StLo < OrderStopLoss() && StLo < OrderOpenPrice()) 
                  {error=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(StLo,Digits),OrderTakeProfit(),0,White);Comment("Трейлинг "+OrderTicket());Sleep(500);}
            } 
            if (error==false && SL!=0) Alert("Error SELLSTOP ",GetLastError(),"   ",Symbol(),"   SL ",StLo);
         }//tip<2
      }//OrderSelect
   }//for
}
//------------------------------------------------------------------+
rebus
425
rebus  

Действительно неплохой советник. Посмотрел на EURUSD H1.

При определённых параметрах даже с лотом 0.1 делает больше 200% за прошлый год. И это без оптимизации.

Есть одно небольшое предложение: сделайте закрытие ордеров с усреднением для случая наличия убыточных.

Должно неплохо сработать. Общую прибыль усреднения во внешние переменные.

Успехов!

avals8
42
avals8  

демо версия?

Sergey Chalyshev
4655
Sergey Chalyshev  
Зачем код выложил? Где график тестирования красивый?
MQL4 Comments
16319
MQL4 Comments  
как разблокировать его? а то это демо версия не в тестере не по тестить и на реале не открывает ордера(((
Vladimir Khlystov
11857
Vladimir Khlystov  
kgn45:
как разблокировать его? а то это демо версия не в тестере не по тестить и на реале не открывает ордера(((

В тестере работает и не демо работает, только нужен открытый демо счет
Andrew Kornishkin
7109
Andrew Kornishkin  

Serj_Che:
Зачем код выложил? Где график тестирования красивый?

 

Значит график некрасивый :-)))
12345
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий