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

 

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

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

Author: Vladimir Khlystov

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


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

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

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


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

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


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

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

 

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

//+------------------------------------------------------------------+
//|Пробой канала определенной              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
}
//------------------------------------------------------------------+
 

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

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

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

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

Успехов!

 

демо версия?

 
Зачем код выложил? Где график тестирования красивый?
 
как разблокировать его? а то это демо версия не в тестере не по тестить и на реале не открывает ордера(((
 
kgn45:
как разблокировать его? а то это демо версия не в тестере не по тестить и на реале не открывает ордера(((

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

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

 

Значит график некрасивый :-)))
Причина обращения: