 Группа "Программирование на MQL"
Группа "Программирование на MQL" Лучшее от AM2
Лучшее от AM2 19
 19			 0
 0
			 8
 8			 0
 0
			 24
 24			 0
 0
			 33
 33			 0
 0
			 3
 3			 0
 0
			| Как прикрутить к советнику трейлингстоп и вывод в безубыток? | 
//+------------------------------------------------------------------+  
void Trailing()
{
   for(int i=0; i<OrdersTotal(); i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==Symbol()||OrderMagicNumber()==MAGICMA)
       if(OrderType()==OP_BUY)
         {
          if(TrailingStop>0)  
            {                 
              if(Bid-OrderOpenPrice()>TrailingStop)
               {
                 if(OrderStopLoss()<Bid-TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
                  }
               }
            }
         }
         
        if(OrderType()==OP_SELL)
         {
           if(TrailingStop>0)  
            {                 
              if((OrderOpenPrice()-Ask)>TrailingStop)
               {
                 if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
                  }
               }
            }
         }   
   }
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void BU()
{
   for(int i=0; i<OrdersTotal(); i++) 
      {
       if(OrderSelect(i, SELECT_BY_POS))
        {      
         if(OrderType()==OP_BUY) 
          {
           if(OrderOpenPrice()<=(Bid-BULevel)&&OrderOpenPrice()>OrderStopLoss())
            {      
             OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
            }
           }       
 
         if(OrderType() == OP_SELL) 
           {
            if(OrderOpenPrice()>=(Ask+BULevel)&&OrderOpenPrice()<OrderStopLoss()) 
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
             }
           } 
         }
       }
}
//------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                                     alya-bob.mq4 |
//|                                           Copyright © 2011, AM2. |
//|                                             www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2."
#property link      "www.forexsystems.biz"
#define MAGICMA  20110426
extern double StopLoss           = 0.0035;
extern double TakeProfit         = 0.007;
extern double MovingPeriod       = 20;
extern double MovingShift        = 0;
extern int StochOversold         = 30;
extern int StochOverbought       = 70;
extern double Lots               = 0.1;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average   
   int    res;  
//---- 
   double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); // Значение Moving  Average на текущем баре
   double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1); // Значение Moving  Average на предыдущем баре
   double ma2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2); // Значение Moving  Average на предпредыдущем баре
   double st=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
//---- buy 
   if(ma1>ma2 && ma0>ma1  && Close[1]>ma0 && st<StochOversold)  // Moving  Average растет, Stochastic ниже уровня перепроданности и цена выше Moving  Average
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss,Ask+TakeProfit,"",MAGICMA,0,Blue);
      return;
     }      
//---- sell   
   if(ma1<ma2 && ma0<ma1 && Close[1]<ma0 && st>StochOverbought)  // Moving  Average убывает, Stochastic выше уровня перекупленности и цена ниже Moving  Average
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss,Bid-TakeProfit,"",MAGICMA,0,Red);
      return;
     }     
  }  
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
  {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
  }
//+------------------------------------------------------------------+
   if (BULevel!=0) BU();
   if (TrailingStop!=0) Trailing();  
//+------------------------------------------------------------------+
//|                                                     alya-bob.mq4 |
//|                                           Copyright © 2011, AM2. |
//|                                             www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2."
#property link      "www.forexsystems.biz"
#define MAGICMA  20110427
extern double StopLoss           = 0.0035;
extern double TakeProfit         = 0.007;
extern double BULevel            = 0.001;
extern double TrailingStop       = 0.005;
extern int    MovingPeriod       = 20;
extern int    MovingShift        = 0;
extern int StochOversold         = 30;
extern int StochOverbought       = 70;
extern double Lots               = 0.1;
//+------------------------------------------------------------------+
//|                                                     alya-bob.mq4 |
//|                                           Copyright © 2011, AM2. |
//|                                             www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, AM2."
#property link      "www.forexsystems.biz"
#define MAGICMA  20110427
extern double StopLoss           = 0.0035;
extern double TakeProfit         = 0.007;
extern double BULevel            = 0.001;
extern double TrailingStop       = 0.005;
extern int    MovingPeriod       = 20;
extern int    MovingShift        = 0;
extern int StochOversold         = 30;
extern int StochOverbought       = 70;
extern double Lots               = 0.1;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average   
   int    res;  
//---- 
   double ma0=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0); // Значение Moving  Average на текущем баре
   double ma1=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,1); // Значение Moving  Average на предыдущем баре
   double ma2=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,2); // Значение Moving  Average на предпредыдущем баре
   double st=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,0);
//---- buy 
   if(ma1>ma2 && ma0>ma1  && Close[1]>ma0 && st<StochOversold)  // Moving  Average растет, Stochastic ниже уровня перепроданности и цена выше Moving  Average
     {
      res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss,Ask+TakeProfit,"",MAGICMA,0,Blue);
      return;
     }      
//---- sell   
   if(ma1<ma2 && ma0<ma1 && Close[1]<ma0 && st>StochOverbought)  // Moving  Average убывает, Stochastic выше уровня перекупленности и цена ниже Moving  Average
     {
      res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss,Bid-TakeProfit,"",MAGICMA,0,Red);
      return;
     }     
  }  
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+
void start()
  {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   
   if (BULevel!=0) BU();
   if (TrailingStop!=0) Trailing();     
  }
//+------------------------------------------------------------------+  
void Trailing()
{
   for(int i=0; i<OrdersTotal(); i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==Symbol()||OrderMagicNumber()==MAGICMA)
       if(OrderType()==OP_BUY)
         {
          if(TrailingStop>0)  
            {                 
              if(Bid-OrderOpenPrice()>TrailingStop)
               {
                 if(OrderStopLoss()<Bid-TrailingStop)
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,Green);
                  }
               }
            }
         }
         
        if(OrderType()==OP_SELL)
         {
           if(TrailingStop>0)  
            {                 
              if((OrderOpenPrice()-Ask)>TrailingStop)
               {
                 if((OrderStopLoss()>(Ask+TrailingStop)) || (OrderStopLoss()==0))
                  {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop,OrderTakeProfit(),0,Red);
                  }
               }
            }
         }   
   }
}
//+------------------------------------------------------------------+
void BU()
{
   for(int i=0; i<OrdersTotal(); i++) 
      {
       if(OrderSelect(i, SELECT_BY_POS))
        {      
         if(OrderType()==OP_BUY) 
          {
           if(OrderOpenPrice()<=(Bid-BULevel)&&OrderOpenPrice()>OrderStopLoss())
            {      
             OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
            }
           }       
 
         if(OrderType() == OP_SELL) 
           {
            if(OrderOpenPrice()>=(Ask+BULevel)&&OrderOpenPrice()<OrderStopLoss()) 
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
             }
           } 
         }
       }
}
//------------------------------------------------------------------+
| 
	Следующая запись в группе    Эффективное использование MagicNumber ордеров для упрощения анализа при торговле советниками. | |
| 
	26 апреля 2011
 | 
	10 октября 2011
 | 
Комментарии (14)
32 Nord Сообщений: 1327 - Дмитрий
35 AM2 Автор Сообщений: 16664 - Андрей
9 amyrgan145 Сообщений: 428 - Амыр
35 AM2 Автор Сообщений: 16664 - Андрей
В таком случае Вы можете написать в своем блоге и сделать пометку с просьбой переместить в нужную группу. Я перемещу.
Inside Сообщений: 986 - модератор
Хочу создать топик как внедрить Мартингейл в советник!
Для особо агрессивных торговцев
AM2, скажите, а как вы прикрепили в топик код MQL чтобы он просматривался так красиво?
9 amyrgan145 Сообщений: 428 - Амыр
Для этого нужно вставить код в текст, выделить его и нажать кнопку code в панели форматирования.
Добавил более подробное описание функций форматирования в Справку Там же в комментариях Вы можете задавать дальнейшие вопросы по использованию сайта, созданию топика, форматированию и т.д.
Inside Сообщений: 986 - модератор
35 AM2 Автор Сообщений: 16664 - Андрей
amyrgan145 хочет полноценный мануал сделать — лишним точно не будет!
11 pilot Сообщений: 410
9 amyrgan145 Сообщений: 428 - Амыр
15 div15 Сообщений: 71 - div15
35 AM2 Автор Сообщений: 16664 - Андрей
А с новым билдом будет работать этот код БУ и Трала?
И как регулировать параметры: условие БУ, старт трала, шаг трала и расстояние до цены? Редактирован: 1 ноября 2015, 18:08
3 Lagoda Сообщений: 53
21 alex30774 Сообщений: 796
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий