alekseifx

 
Уровень 8

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2146



РЕКОМЕНДУЮ



Подправить советник

Здравствуйте, есть советник, писался здесь, но нужно исправить один нюанс.
Появился сигнал советник вошел в рынок, сделка закрылась по ТП или в ручную и он тут же открывает на следующей свече такую же сделку, если сигнал не поменялся.
Нужно исправить открыл сделку и забыл, ждем следующего противоположного сигнала.



Slope.zip (4 Kb)
  • +1
  • Просмотров: 5686
  • 14 ноября 2014, 14:03
  • alekseifx
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Нужен торговый робот
10 ноября 2014
15 ноября 2014

Брокер для ваших роботов, 15 лет на рынке

Комментарии (32)

+
0
Еще нашел ошибку
avatar

  8  alekseifx Автор Сообщений: 179

  • 14 ноября 2014, 15:26
+
+2
Сейчас открывается именно так как вы просили.




//+------------------------------------------------------------------+
//|                                                        Renko.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2011, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Slope Directional Line expert advisor"

#define MAGICMA  20141111
//--- Inputs
extern double StopLoss    = 500; // стоп лосс ордера
extern double TakeProfit  = 500; // тейк профит ордера
extern double Lots        = 0.1; // объем позиции
//----
extern int period         = 90;  // период средней Slope Directional Line
extern int method         = 2;   // метод средней(SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int price          = 0;   // цена по которой строится средняя
//----
extern int FastPeriod     = 12;  // период быстрого макди 
extern int SlowPeriod     = 26;  // период медленного макди
extern int SignalPeriod   = 9;   // период сигнального макди
//----
extern int MACDAC         = 1;   // включение макди(1-включен,0-отключен)

bool buy=true,sell=true;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,0);
   double SlopeRed=iCustom(Symbol(),0,"Slope",period,method,price,1,0);
   double MACDGreen=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,1,0);
   double MACDRed=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,0,0);   

//--- sell conditions
   if(MACDAC==1)
    {
     if(SlopeBlue>SlopeRed && MACDGreen<MACDRed && sell==true)
      {
       res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
       sell=false;
       buy=true;
       return;
      }
//--- buy conditions
     if(SlopeRed>SlopeBlue && MACDGreen>MACDRed  && buy==true)
      {
       res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
       buy=false;
       sell=true;       
       return;
      }
     }
     else
      {
       if(SlopeBlue>SlopeRed && sell==true)
        {
         res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
         sell=false;
         buy=true;         
         return;
        }
//--- buy conditions
       if(SlopeRed>SlopeBlue && buy==true)
        {
         res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
         buy=false;
         sell=true;          
         return;
        }      
      }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,0);
   double SlopeRed=iCustom(Symbol(),0,"Slope",period,method,price,1,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(SlopeBlue>SlopeRed)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(SlopeRed>SlopeBlue)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(OrdersTotal()<1) CheckForOpen();
   else CheckForClose();
//---
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 14 ноября 2014, 15:36
+
0
Проверяю…
avatar

  8  alekseifx Автор Сообщений: 179

  • 14 ноября 2014, 15:53
+
0
вот...
avatar

  8  alekseifx Автор Сообщений: 179

  • 14 ноября 2014, 16:18
+
0
у вас макди отключен? 0 должен быть. по умолчанию 1 стоит включен значит
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 14 ноября 2014, 16:26
+
0
Да за макди забыл, но факт что он закрыл ордер при первом появлениии сигнала по slope, а он рисует, нужно открывать на следующей свече, если сигнал подтвердился.
avatar

  8  alekseifx Автор Сообщений: 179

  • 14 ноября 2014, 16:32
+
+1
подправил, сейчас как?


//+------------------------------------------------------------------+
//|                                                        Renko.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2011, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Slope Directional Line expert advisor"

#define MAGICMA  20141111
//--- Inputs
extern double StopLoss    = 500; // стоп лосс ордера
extern double TakeProfit  = 500; // тейк профит ордера
extern double Lots        = 0.1; // объем позиции
//----
extern int period         = 90;  // период средней Slope Directional Line
extern int method         = 2;   // метод средней(SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int price          = 0;   // цена по которой строится средняя
//----
extern int FastPeriod     = 12;  // период быстрого макди 
extern int SlowPeriod     = 26;  // период медленного макди
extern int SignalPeriod   = 9;   // период сигнального макди
//----
extern int MACDAC         = 1;   // включение макди(1-включен,0-отключен)

bool buy=true,sell=true;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,1);
   double SlopeRed=iCustom(Symbol(),0,"Slope",period,method,price,1,1);
   double MACDGreen=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,1,1);
   double MACDRed=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,0,1);   

//--- sell conditions
   if(MACDAC==1)
    {
     if(SlopeBlue>SlopeRed && MACDGreen<MACDRed && sell==true)
      {
       res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
       sell=false;
       buy=true;
       return;
      }
//--- buy conditions
     if(SlopeRed>SlopeBlue && MACDGreen>MACDRed  && buy==true)
      {
       res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
       buy=false;
       sell=true;       
       return;
      }
     }
     else
      {
       if(SlopeBlue>SlopeRed && sell==true)
        {
         res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGICMA,0,Red);
         sell=false;
         buy=true;         
         return;
        }
//--- buy conditions
       if(SlopeRed>SlopeBlue && buy==true)
        {
         res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGICMA,0,Blue);
         buy=false;
         sell=true;          
         return;
        }      
      }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,1);
   double SlopeRed=iCustom(Symbol(),0,"Slope",period,method,price,1,1);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(SlopeBlue>SlopeRed)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(SlopeRed>SlopeBlue)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(OrdersTotal()<1) CheckForOpen();
   else CheckForClose();
//---
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 14 ноября 2014, 16:48
+
0
Проверяю, но открывает слету, только поставил на график и сразу открыл сделку, не есть гуд..., но пока ничего не надо, отпишусь, как проверю.
avatar

  8  alekseifx Автор Сообщений: 179

  • 14 ноября 2014, 16:58
+
0
Только заметил нет magic, торгует только на одной паре…
avatar

  8  alekseifx Автор Сообщений: 179

  • 14 ноября 2014, 17:00
+
+1
измените магик в строчке с параметрами, когда на разные пары ставить будете. вынес его в настройки


//+------------------------------------------------------------------+
//|                                                        Renko.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Slope Directional Line expert advisor"


//--- Inputs
extern double StopLoss    = 500; // стоп лосс ордера
extern double TakeProfit  = 500; // тейк профит ордера
extern double Lots        = 0.1; // объем позиции
//----
extern int period         = 90;  // период средней Slope Directional Line
extern int method         = 2;   // метод средней(SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int price          = 0;   // цена по которой строится средняя
//----
extern int FastPeriod     = 12;  // период быстрого макди 
extern int SlowPeriod     = 26;  // период медленного макди
extern int SignalPeriod   = 9;   // период сигнального макди
//----
extern int MACDAC         = 1;   // включение макди(1-включен,0-отключен)
extern int MAGIC          = 2014;// магик

bool buy=true,sell=true;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,1);
   double SlopeRed=iCustom(Symbol(),0,"Slope",period,method,price,1,1);
   double MACDGreen=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,1,1);
   double MACDRed=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,0,1);   

//--- sell conditions
   if(MACDAC==1)
    {
     if(SlopeBlue>SlopeRed && MACDGreen<MACDRed && sell==true)
      {
       res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Red);
       sell=false;
       buy=true;
       return;
      }
//--- buy conditions
     if(SlopeRed>SlopeBlue && MACDGreen>MACDRed  && buy==true)
      {
       res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC,0,Blue);
       buy=false;
       sell=true;       
       return;
      }
     }
     else
      {
       if(SlopeBlue>SlopeRed && sell==true)
        {
         res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Red);
         sell=false;
         buy=true;         
         return;
        }
//--- buy conditions
       if(SlopeRed>SlopeBlue && buy==true)
        {
         res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC,0,Blue);
         buy=false;
         sell=true;          
         return;
        }      
      }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,1);
   double SlopeRed=iCustom(Symbol(),0,"Slope",period,method,price,1,1);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(SlopeBlue>SlopeRed)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(SlopeRed>SlopeBlue)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(OrdersTotal()<1) CheckForOpen();
   else CheckForClose();
//---
  }
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 14 ноября 2014, 17:10
+
0
вот
avatar

  8  alekseifx Автор Сообщений: 179

  • 14 ноября 2014, 17:35
+
0
Вы мэджик правильно прикрутили? По прежнему по одной паре торгует (изменял)
avatar

  8  alekseifx Автор Сообщений: 179

  • 14 ноября 2014, 18:34
+
0
avatar

  8  alekseifx Автор Сообщений: 179

  • 14 ноября 2014, 18:55
+
+1
сейчас советник можно установить на несколько пар. добавил к средней параметр shift с помощью которого читаем значение средней на несколько свечек вглубь при закрытии, чтобы не было перерисовки. написал функцию которая читает сделки в истории и открывает обратную позу.


//+------------------------------------------------------------------+
//|                                                        Renko.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "Slope Directional Line expert advisor"


//--- Inputs
extern double StopLoss    = 500; // стоп лосс ордера
extern double TakeProfit  = 500; // тейк профит ордера
extern double Lots        = 0.1; // объем позиции
//----
extern int period         = 90;  // период средней Slope Directional Line
extern int method         = 2;   // метод средней(SMA=0,EMA=1,SMMA=2,LWMA=3)
extern int price          = 0;   // цена по которой строится средняя
extern int shift          = 3;   // смещение средней
//----
extern int FastPeriod     = 12;  // период быстрого макди 
extern int SlowPeriod     = 26;  // период медленного макди
extern int SignalPeriod   = 9;   // период сигнального макди
//----
extern int MACDAC         = 1;   // включение макди(1-включен,0-отключен)
extern int MAGIC          = 333; // магик

//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res,b,s;
   bool sp=true,bp=true;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,1);
   double SlopeRed=iCustom(Symbol(),0,"Slope",period,method,price,1,1);
   double MACDGreen=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,1,1);
   double MACDRed=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,0,1);
      
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {
          if(OrderType()==OP_BUY) b++;sp=false;
          if(OrderType()==OP_SELL) s++;bp=false;
         }
       }  
     }         
 
   //--- sell conditions
         if(MACDAC==1)
          {
           if(SlopeBlue>SlopeRed && MACDGreen<MACDRed && s<1 && (LastDealResult()==0 || LastDealResult()==1))
            {
             res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Red);
             return;
            }
      //--- buy conditions
           if(SlopeRed>SlopeBlue && MACDGreen>MACDRed && b<1 && (LastDealResult()==0 ||LastDealResult()==2))
            {
             res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC,0,Blue);      
             return;
            }
           }
           else
            {
             if(SlopeBlue>SlopeRed && s<1&& (LastDealResult()==0 || LastDealResult()==1))
              {
               res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Red);       
               return;
              }
      //--- buy conditions
             if(SlopeRed>SlopeBlue && b<1 && (LastDealResult()==0 ||LastDealResult()==2))
              {
               res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC,0,Blue);         
               return;
              }      
            }
        
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double SlopeBlue=iCustom(Symbol(),0,"Slope",period,method,price,0,shift);
   double SlopeRed=iCustom(Symbol(),0,"Slope",period,method,price,1,shift);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(SlopeBlue>SlopeRed)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(SlopeRed>SlopeBlue)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   CheckForOpen();
   CheckForClose();
   Comment("\nResult of last deal: ", LastDealResult());
//---
  }
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int result;
   if(OrderSelect(OrdersHistoryTotal(), MODE_HISTORY)==true)
    {
     if(OrderType()==OP_BUY) result=1;
     if(OrderType()==OP_SELL) result=2;
    }
   else
    {
     Print("No deals in history");
     result=0;
    } 
   return(result);    
  }

//+------------------------------------------------------------------+

Редактирован: 14 ноября 2014, 23:02
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 14 ноября 2014, 21:44
+
0
Нашел более интересный индикатор, индикатор не перерисовывает и более плавный, сам всунул в Ваш эксперт, в понедельник буду тестить на ренко, потом отпишусь…
avatar

  8  alekseifx Автор Сообщений: 179

  • 14 ноября 2014, 23:55
+
0
Подскажите, пожалуйста, как индикатор этот называется?
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 15 ноября 2014, 02:49
+
+1
вот код


#property copyright "alekseifx"
#property link      "http://lux-profit.ru/"
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 DeepSkyBlue
#property indicator_width1 2
#property indicator_color2 Tomato
#property indicator_width2 2
#property indicator_color3 Teal
#property indicator_color4 Teal
//+------------------------------------------------------------------+
extern int Amplitude = 2;
extern bool UseAlert = true;        // Алерт вкл/выкл.
extern string  Sound = "alert.wav"; // Если пусто - звук выкл.
//+------------------------------------------------------------------+
int tf=0;
string txt="",sym="";
bool nexttrend;
double minh,maxl,up[],down[],trend[],atrlo[],atrhi[];
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init() 
  {
   sym=Symbol();
   txt="";
   tf=Period();
   SetIndexBuffer(0,up);SetIndexStyle(0,DRAW_LINE);SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(1,down);SetIndexStyle(1,DRAW_LINE);SetIndexEmptyValue(1,0.0);
   SetIndexBuffer(2,atrlo);SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(3,atrhi);SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(4,trend);SetIndexStyle(4,DRAW_NONE);SetIndexEmptyValue(4,0.0);
   IndicatorDigits(Digits);
   nexttrend=0;
   minh = High[Bars - 1];
   maxl = Low[Bars - 1];
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start() 
  {
   double atr,ll,hh,lma,hma;
   int workbar=1;
   int c=IndicatorCounted();
   if(c<0)return(-1);
   for(int i=Bars-1-c; i>=workbar; i --) 
     {
      ll=iLow(sym,tf,iLowest(sym,tf,MODE_LOW,Amplitude,i));
      hh=iHigh(sym,tf,iHighest(sym,tf,MODE_HIGH,Amplitude,i));
      lma = iMA (sym, 0, Amplitude, 0, MODE_SMA, PRICE_LOW, i);
      hma = iMA (sym, 0, Amplitude, 0, MODE_SMA, PRICE_HIGH, i);
      trend[i]=trend[i+1];
      atr=iATR(Symbol(),0,100,i)/2;
      if(nexttrend==1){maxl=MathMax(ll,maxl);if(hma<maxl && Close[i]<Low[i+1]){trend[i]=1;nexttrend=0;minh=hh;}}
      if(nexttrend==0){minh=MathMin(hh,minh);if(lma>minh && Close[i]>High[i+1]){trend[i]=0;nexttrend=1;maxl=ll;}}
      if(trend[i]==0.0) 
        {
         if(trend[i+1]!=0.0){up[i]=down[i+1];up[i+1]=up[i];} else up[i]=MathMax(maxl,up[i+1]);
         atrhi[i] = up[i] + atr;
         atrlo[i] = up[i] - atr;
         down[i]=0.0;
        } 
      else 
        {
         if(trend[i+1]!=1.0){down[i]=up[i+1];down[i+1]=down[i];} else down[i]=MathMin(minh,down[i+1]);
         atrhi[i] = down[i] + atr;
         atrlo[i] = down[i] - atr;
         up[i]=0.0;
        }
     }
   if(txt==""){if(up[1]==0.0)txt=" Sell ";if(down[1]==0.0)txt=" Buy ";}
   if(up[1]==0.0 && txt==" Buy "){txt=" Sell ";if(UseAlert)Alert(sym+txt);if(Sound!="")PlaySound(Sound);}
   if(down[1]==0.0 && txt==" Sell "){txt=" Buy ";if(UseAlert)Alert(sym+txt);if(Sound!="")PlaySound(Sound);}
   return(0);
  }
//+------------------------------------------------------------------+
avatar

  8  alekseifx Автор Сообщений: 179

  • 15 ноября 2014, 08:40
+
0
спасибо!
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 15 ноября 2014, 12:10
+
0
Код и что нужно сделать



//+------------------------------------------------------------------+
//|                                                        Renko.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "indalekseifx Directional Line expert advisor"


//--- Inputs
extern double StopLoss    = 2000; // стоп лосс ордера
extern double TakeProfit  = 2000; // тейк профит ордера
extern double Lots        = 0.1; // объем позиции
//----
extern int Amplitude         = 2;  // период средней indalekseifx Directional Line

extern int shift          = 2;   // смещение средней
//----
extern int FastPeriod     = 12;  // период быстрого макди 
extern int SlowPeriod     = 26;  // период медленного макди
extern int SignalPeriod   = 9;   // период сигнального макди
//----
extern int MACDAC         = 0;   // включение макди(1-включен,0-отключен)
extern int MAGIC          = 2014;// магик

//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res,b,s;
   bool sp=true,bp=true;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double indalekseifxDeepSkyBlue=iCustom(Symbol(),0,"indalekseifx",Amplitude,1,1);
   double indalekseifxTomato=iCustom(Symbol(),0,"indalekseifx",Amplitude,0,1);
   double MACDGreen=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,1,1);
   double MACDRed=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,0,1);
      
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {
          if(OrderType()==OP_BUY) b++;sp=false;
          if(OrderType()==OP_SELL) s++;bp=false;
         }
       }  
     }         
 
   //--- sell conditions
         if(MACDAC==1)
          {
           if(indalekseifxDeepSkyBlue>indalekseifxTomato && MACDGreen<MACDRed && s<1 && sp)
            {
             res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Tomato);
             return;
            }
      //--- buy conditions
           if(indalekseifxTomato>indalekseifxDeepSkyBlue && MACDGreen>MACDRed && b<1 && bp)
            {
             res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC,0,DeepSkyBlue);      
             return;
            }
           }
           else
            {
             if(indalekseifxDeepSkyBlue>indalekseifxTomato && s<1 && sp)
              {
               res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Tomato);       
               return;
              }
      //--- buy conditions
             if(indalekseifxTomato>indalekseifxDeepSkyBlue && b<1 && bp)
              {
               res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"",MAGIC,0,DeepSkyBlue);         
               return;
              }      
            }

  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   double indalekseifxDeepSkyBlue=iCustom(Symbol(),0,"indalekseifx",Amplitude,1,shift);
   double indalekseifxTomato=iCustom(Symbol(),0,"indalekseifx",Amplitude,0,shift);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(indalekseifxDeepSkyBlue>indalekseifxTomato)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(indalekseifxTomato>indalekseifxDeepSkyBlue)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   CheckForOpen();
   CheckForClose();
//---
  }
//+------------------------------------------------------------------+
avatar

  8  alekseifx Автор Сообщений: 179

  • 15 ноября 2014, 09:56
+
+2
готово.




//+------------------------------------------------------------------+
//|                                                        Renko.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "indalekseifx Directional Line expert advisor"


//--- Inputs
extern double StopLoss    = 2000; // стоп лосс ордера
extern double TakeProfit  = 2000; // тейк профит ордера
extern double Lots        = 0.1;  // объем позиции
//----
extern int Amplitude      = 2;    // период средней indalekseifx Directional Line
extern int shift          = 2;    // смещение средней
//----
extern int FastPeriod     = 12;   // период быстрого макди 
extern int SlowPeriod     = 26;   // период медленного макди
extern int SignalPeriod   = 9;    // период сигнального макди
//----
extern int MACDAC         = 0;    // включение макди(1-включен,0-отключен)
extern int MAGIC          = 2014; // магик

//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res,b,s;
//--- get Moving Average 
   double indalekseifxDeepSkyBlue=iCustom(Symbol(),0,"indalekseifx",Amplitude,1,1);
   double indalekseifxTomato=iCustom(Symbol(),0,"indalekseifx",Amplitude,0,1);
   double MACDGreen=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,1,1);
   double MACDRed=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,0,1);
      
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {
          if(OrderType()==OP_BUY) b++;
          if(OrderType()==OP_SELL) s++;
         }
       }  
     }         
 
   //--- sell conditions
         if(MACDAC==1)
          {
           if(indalekseifxDeepSkyBlue>indalekseifxTomato && MACDGreen<MACDRed && s<1  && (LastDealResult()==0 || LastDealResult()==1))
            {
             res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,fND(Bid+StopLoss*Point),fND(Bid-TakeProfit*Point),"",MAGIC,0,Tomato);
             if(res<0)
              {
               Print("Order Sell  error: ",GetLastError());
              }
             else
               Print("OK Order Sell");             
               return;
            }
      //--- buy conditions
           if(indalekseifxTomato>indalekseifxDeepSkyBlue && MACDGreen>MACDRed && b<1 && (LastDealResult()==0 || LastDealResult()==2))
            {
             res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,fND(Ask-StopLoss*Point),fND(Ask+TakeProfit*Point),"",MAGIC,0,DeepSkyBlue);      
             if(res<0)
              {
               Print("Order Buy  error: ",GetLastError());
              }
             else
               Print("OK Order Buy");             
               return;
            }
           }
           else
            {
             if(indalekseifxDeepSkyBlue>indalekseifxTomato && s<1 && (LastDealResult()==0 || LastDealResult()==1))
              {
               res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Tomato);
               if(res<0)
                {
                 Print("Order Sell  error: ",GetLastError());
                }
               else
               Print("OK Order Sell");             
               return;                                     
              }
      //--- buy conditions
             if(indalekseifxTomato>indalekseifxDeepSkyBlue && b<1 && (LastDealResult()==0 || LastDealResult()==2))
              {
               res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,fND(Ask-StopLoss*Point),fND(Ask+TakeProfit*Point),"",MAGIC,0,DeepSkyBlue);         
               if(res<0)
                {
                 Print("Order Buy  error: ",GetLastError());
                }
               else
               Print("OK Order Buy");             
               return;             
              }      
            }
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- get Moving Average 
   double indalekseifxDeepSkyBlue=iCustom(Symbol(),0,"indalekseifx",Amplitude,1,shift);
   double indalekseifxTomato=iCustom(Symbol(),0,"indalekseifx",Amplitude,0,shift);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(indalekseifxDeepSkyBlue>indalekseifxTomato)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(indalekseifxTomato>indalekseifxDeepSkyBlue)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
  }
//+------------------------------------------------------------------+
int LastDealResult()
  {
   int result;
   if(OrderSelect(OrdersHistoryTotal(), MODE_HISTORY)==true)
    {
     if(OrderType()==OP_BUY) result=1;
     if(OrderType()==OP_SELL) result=2;
    }
   else
    {
     result=0;
    } 
   return(result);    
  } 
//+------------------------------------------------------------------+
double fND(double d, int n=-1) 
  {  
   if (n<0) return(NormalizeDouble(d, Digits)); 
   return(NormalizeDouble(d, n)); 
  } 
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- go trading only for first tiks of new bar
   if(NewBar()==true)
    {
     Print("New Bar");
     CheckForOpen();
     CheckForClose();
    }
   Comment("\nResult of last deal: ", LastDealResult());
//---
  } 
//+------------------------------------------------------------------+  
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 15 ноября 2014, 13:07
+
0
Здравствуйте, только руки дошли протестировать, на визуализации все в порядке, а вот в реале почему то не хочет
avatar

  8  alekseifx Автор Сообщений: 179

  • 20 ноября 2014, 12:44
+
0
Или возможно советник следит только за своим ТП и СЛ, а я закрывал по своим и он следом опять сделку открывает.
avatar

  8  alekseifx Автор Сообщений: 179

  • 20 ноября 2014, 13:02
+
+1
советник смотрит на тип ордера. я буду ставить на демку и смотреть почему не работает.
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 ноября 2014, 13:05
комментарий был удален 2014-11-14 23:51:58 alekseifx

+
0
Я ставил паралельно вот этот трал как советник, все на ренко, может сразу вписать этот трал с возможностью отключения.
//+------------------------------------------------------------------+
//|                                                 SAR trail v4.mq4 |
//|                                   Copyright © 2009, Maxim Markov |
//|                                                   marmax@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Maxim Markov"
#property link      "marmax@mail.ru"

extern int DistancePoints     =1; 
extern bool AllowLoss         =FALSE;

int AccuracyPoints            =1;
double SARstep                =0.02;
double SARmaximum             =0.2;

int init()
   {
    Print("SAR Trail v.4 Copyright © 2009, Maxim Markov  marmax@mail.ru");
    return(0);
   }

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   double Distance            =DistancePoints*Point;
   double Accuracy            =AccuracyPoints*Point;
   double StopCurrent         =0;
   double StopRequired        =0;
   double StopAllowed         =0;
   double StopSet             =0;
   double Spread              =MarketInfo(Symbol(), MODE_SPREAD)*Point;
   double Minimum_Distance    =MarketInfo(Symbol(), MODE_STOPLEVEL)*Point;
   
   for(int i=0;i<OrdersTotal();i++)
      {
       if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==FALSE) break;
       if (OrderSymbol()==Symbol())
         {
          StopCurrent=OrderStopLoss();
          if ((OrderType()==OP_BUY) && (Close[0]>iSAR(NULL,0,SARstep,SARmaximum,0)))
            {
             StopRequired=iSAR(NULL,0,SARstep,SARmaximum,0)-Distance;
             StopAllowed=Close[0]-Minimum_Distance;
             StopSet=MathMin(StopAllowed, StopRequired);
             if ((StopSet > StopCurrent+Accuracy) && (StopRequired >= OrderOpenPrice()||AllowLoss))
               OrderModify(OrderTicket(),OrderOpenPrice(),StopSet,OrderTakeProfit(),0);            
            }
          if ((OrderType()==OP_SELL) && (Close[0]<iSAR(NULL,0,SARstep,SARmaximum,0)))
            {
             StopRequired=iSAR(NULL,0,SARstep,SARmaximum,0)+Spread+Distance;
             StopAllowed=Close[0]+Spread+Minimum_Distance;
             StopSet=MathMax(StopAllowed, StopRequired);
             if (((StopSet < StopCurrent-Accuracy) || (StopCurrent == 0)) && (StopRequired <= OrderOpenPrice() || AllowLoss))
               OrderModify(OrderTicket(),OrderOpenPrice(),StopSet,OrderTakeProfit(),0);
            }
         }
      }
    return(0);
  }
//+------------------------------------------------------------------+
avatar

  8  alekseifx Автор Сообщений: 179

  • 20 ноября 2014, 13:07
+
+1
да подключу.
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 ноября 2014, 13:35
+
0
Спасибо, только что проверил на обычном М1 то же самое при закрытии по тралу, на сл. свече опять открывает сделку.
avatar

  8  alekseifx Автор Сообщений: 179

  • 20 ноября 2014, 13:42
+
0
нашел вроде ошибку, исправил. не распознавал свои ордера по магику и не сохранял результат сделки в глобальную переменную. только перекомпилить сов не надо лишний раз во время торговли, т.к. глобальная переменная обнуляется. трал позже добавлю.


//+------------------------------------------------------------------+
//|                                                        Renko.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "indalekseifx Directional Line expert advisor"


//--- Inputs
extern double StopLoss    = 2000; // стоп лосс ордера
extern double TakeProfit  = 2000; // тейк профит ордера
extern double Lots        = 0.1;  // объем позиции
//----
extern int Amplitude      = 2;    // период средней indalekseifx Directional Line
extern int shift          = 2;    // смещение средней
//----
extern int FastPeriod     = 12;   // период быстрого макди 
extern int SlowPeriod     = 26;   // период медленного макди
extern int SignalPeriod   = 9;    // период сигнального макди
//----
extern int MACDAC         = 0;    // включение макди(1-включен,0-отключен)
extern int MAGIC          = 2014; // магик

int DealResult;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res,pos;
//--- get Moving Average 
   double indalekseifxDeepSkyBlue=iCustom(Symbol(),0,"indalekseifx",Amplitude,1,1);
   double indalekseifxTomato=iCustom(Symbol(),0,"indalekseifx",Amplitude,0,1);
   double MACDGreen=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,1,1);
   double MACDRed=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,0,1);
      
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {
          if(OrderType()==OP_BUY) pos++;
          if(OrderType()==OP_SELL) pos++;
         }
       }  
     }         
 
   //--- sell conditions
         if(MACDAC==1)
          {
           if(indalekseifxDeepSkyBlue>indalekseifxTomato && MACDGreen<MACDRed && pos<1  && (LastDealResult()==0 || LastDealResult()==1))
            {
             res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,fND(Bid+StopLoss*Point),fND(Bid-TakeProfit*Point),"",MAGIC,0,Tomato);
             if(res<0)
              {
               Print("Order Sell  error: ",GetLastError());
              }
             else
               Print("OK Order Sell");             
               return;
            }
      //--- buy conditions
           if(indalekseifxTomato>indalekseifxDeepSkyBlue && MACDGreen>MACDRed && pos<1 && (LastDealResult()==0 || LastDealResult()==2))
            {
             res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,fND(Ask-StopLoss*Point),fND(Ask+TakeProfit*Point),"",MAGIC,0,DeepSkyBlue);      
             if(res<0)
              {
               Print("Order Buy  error: ",GetLastError());
              }
             else
               Print("OK Order Buy");             
               return;
            }
           }
           else
            {
             if(indalekseifxDeepSkyBlue>indalekseifxTomato && pos<1 && (LastDealResult()==0 || LastDealResult()==1))
              {
               res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Tomato);
               if(res<0)
                {
                 Print("Order Sell  error: ",GetLastError());
                }
               else
               Print("OK Order Sell");             
               return;                                     
              }
      //--- buy conditions
             if(indalekseifxTomato>indalekseifxDeepSkyBlue && pos<1 && (LastDealResult()==0 || LastDealResult()==2))
              {
               res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,fND(Ask-StopLoss*Point),fND(Ask+TakeProfit*Point),"",MAGIC,0,DeepSkyBlue);         
               if(res<0)
                {
                 Print("Order Buy  error: ",GetLastError());
                }
               else
               Print("OK Order Buy");             
               return;             
              }      
            }
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- get Moving Average 
   double indalekseifxDeepSkyBlue=iCustom(Symbol(),0,"indalekseifx",Amplitude,1,shift);
   double indalekseifxTomato=iCustom(Symbol(),0,"indalekseifx",Amplitude,0,shift);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(indalekseifxDeepSkyBlue>indalekseifxTomato)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(indalekseifxTomato>indalekseifxDeepSkyBlue)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
  }
//+------------------------------------------------------------------+
int LastDealResult()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         DealResult=1;
         break;
        }
      if(OrderType()==OP_SELL)
        {
         DealResult=2;
         break;
        }
       Print("Result of last deal: ",DealResult);
     } 
   return(DealResult);    
  } 
//+------------------------------------------------------------------+
double fND(double d, int n=-1) 
  {  
   if (n<0) return(NormalizeDouble(d, Digits)); 
   return(NormalizeDouble(d, n)); 
  } 
//+------------------------------------------------------------------+
void OnTick()
  {
   Comment("\nResult of last deal: ", LastDealResult());  
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- go trading only for first tiks of new bar
   if(NewBar()==true)
    {
     Print("New Bar");
     CheckForOpen();
     CheckForClose();
    }

//---
  } 
//+------------------------------------------------------------------+  

avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 20 ноября 2014, 21:32
+
+1
подключил трал.


//+------------------------------------------------------------------+
//|                                                        Renko.mq4 |
//|                                            Copyright © 2014, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright © 2014, AM2"
#property link      "http://www.forexsystems.biz"
#property description "indalekseifx Directional Line expert advisor"


//--- Inputs
extern double StopLoss    = 2000; // стоп лосс ордера
extern double TakeProfit  = 2000; // тейк профит ордера
extern double Lots        = 0.1;  // объем позиции
//----
extern int Amplitude      = 2;    // период средней indalekseifx Directional Line
extern int shift          = 2;    // смещение средней
//----
extern int FastPeriod     = 12;   // период быстрого макди 
extern int SlowPeriod     = 26;   // период медленного макди
extern int SignalPeriod   = 9;    // период сигнального макди
//----
extern int DistancePoints = 1;    // дистанция трала
extern int Trail          = 1;    // 0-трал выключен, 1- включен
extern int MACDAC         = 0;    // включение макди(1-включен,0-отключен)
extern int MAGIC          = 2014; // магик
extern bool AllowLoss     = FALSE;

int AccuracyPoints         = 1;
double SARstep             = 0.02;
double SARmaximum          = 0.2;


int DealResult;
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   int    res,pos;
//--- get Moving Average 
   double indalekseifxDeepSkyBlue=iCustom(Symbol(),0,"indalekseifx",Amplitude,1,1);
   double indalekseifxTomato=iCustom(Symbol(),0,"indalekseifx",Amplitude,0,1);
   double MACDGreen=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,1,1);
   double MACDRed=iCustom(Symbol(),0,"MACDTraditional",FastPeriod,SlowPeriod,SignalPeriod,0,1);
      
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
       {
        if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
         {
          if(OrderType()==OP_BUY) pos++;
          if(OrderType()==OP_SELL) pos++;
         }
       }  
     }         
 
   //--- sell conditions
         if(MACDAC==1)
          {
           if(indalekseifxDeepSkyBlue>indalekseifxTomato && MACDGreen<MACDRed && pos<1  && (LastDealResult()==0 || LastDealResult()==1))
            {
             res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,fND(Bid+StopLoss*Point),fND(Bid-TakeProfit*Point),"",MAGIC,0,Tomato);
             if(res<0)
              {
               Print("Order Sell  error: ",GetLastError());
              }
             else
               Print("OK Order Sell");             
               return;
            }
      //--- buy conditions
           if(indalekseifxTomato>indalekseifxDeepSkyBlue && MACDGreen>MACDRed && pos<1 && (LastDealResult()==0 || LastDealResult()==2))
            {
             res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,fND(Ask-StopLoss*Point),fND(Ask+TakeProfit*Point),"",MAGIC,0,DeepSkyBlue);      
             if(res<0)
              {
               Print("Order Buy  error: ",GetLastError());
              }
             else
               Print("OK Order Buy");             
               return;
            }
           }
           else
            {
             if(indalekseifxDeepSkyBlue>indalekseifxTomato && pos<1 && (LastDealResult()==0 || LastDealResult()==1))
              {
               res=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"",MAGIC,0,Tomato);
               if(res<0)
                {
                 Print("Order Sell  error: ",GetLastError());
                }
               else
               Print("OK Order Sell");             
               return;                                     
              }
      //--- buy conditions
             if(indalekseifxTomato>indalekseifxDeepSkyBlue && pos<1 && (LastDealResult()==0 || LastDealResult()==2))
              {
               res=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,fND(Ask-StopLoss*Point),fND(Ask+TakeProfit*Point),"",MAGIC,0,DeepSkyBlue);         
               if(res<0)
                {
                 Print("Order Buy  error: ",GetLastError());
                }
               else
               Print("OK Order Buy");             
               return;             
              }      
            }
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
//--- get Moving Average 
   double indalekseifxDeepSkyBlue=iCustom(Symbol(),0,"indalekseifx",Amplitude,1,shift);
   double indalekseifxTomato=iCustom(Symbol(),0,"indalekseifx",Amplitude,0,shift);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(indalekseifxDeepSkyBlue>indalekseifxTomato)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(indalekseifxTomato>indalekseifxDeepSkyBlue)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime lastbar = 0;
   datetime curbar = Time[0];
   if(lastbar!=curbar)
   {
      lastbar=curbar;
      return (true);
   }
   else
   {
      return(false);
   }
  }
//+------------------------------------------------------------------+
int LastDealResult()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         DealResult=1;
         break;
        }
      if(OrderType()==OP_SELL)
        {
         DealResult=2;
         break;
        }
       Print("Result of last deal: ",DealResult);
     } 
   return(DealResult);    
  } 
//+------------------------------------------------------------------+
double fND(double d, int n=-1) 
  {  
   if (n<0) return(NormalizeDouble(d, Digits)); 
   return(NormalizeDouble(d, n)); 
  } 
//+------------------------------------------------------------------+
void trail()
  {
   double Distance            = DistancePoints*Point;
   double Accuracy            = AccuracyPoints*Point;
   double StopCurrent         = 0;
   double StopRequired        = 0;
   double StopAllowed         = 0;
   double StopSet             = 0;
   double Spread              = MarketInfo(Symbol(),MODE_SPREAD)*Point;
   double Minimum_Distance    = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
   bool mod;
   
   for(int i=0;i<OrdersTotal();i++)
      {
       if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==FALSE) break;
       if (OrderSymbol()==Symbol())
         {
          StopCurrent=OrderStopLoss();
          if ((OrderType()==OP_BUY) && (Close[0]>iSAR(NULL,0,SARstep,SARmaximum,0)))
            {
             StopRequired=iSAR(NULL,0,SARstep,SARmaximum,0)-Distance;
             StopAllowed=Close[0]-Minimum_Distance;
             StopSet=MathMin(StopAllowed, StopRequired);
             if ((StopSet > StopCurrent+Accuracy) && (StopRequired >= OrderOpenPrice()||AllowLoss))
             mod=OrderModify(OrderTicket(),OrderOpenPrice(),StopSet,OrderTakeProfit(),0);            
            }
          if ((OrderType()==OP_SELL) && (Close[0]<iSAR(NULL,0,SARstep,SARmaximum,0)))
            {
             StopRequired=iSAR(NULL,0,SARstep,SARmaximum,0)+Spread+Distance;
             StopAllowed=Close[0]+Spread+Minimum_Distance;
             StopSet=MathMax(StopAllowed, StopRequired);
             if (((StopSet < StopCurrent-Accuracy) || (StopCurrent == 0)) && (StopRequired <= OrderOpenPrice() || AllowLoss))
             mod=OrderModify(OrderTicket(),OrderOpenPrice(),StopSet,OrderTakeProfit(),0);
            }
         }
      }
    return;
  }
//+------------------------------------------------------------------+
void OnTick()
  {
   Comment("\nResult of last deal: ", LastDealResult());  
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- go trading only for first tiks of new bar
   if(NewBar()==true)
    {
     Print("New Bar");
     CheckForOpen();
     CheckForClose();
    }
    if(Trail>0) trail();

//---
  } 
//+------------------------------------------------------------------+  


Редактирован: 21 ноября 2014, 15:25
avatar

  35  AM2 Сообщений: 16266 - Андрей

  • 21 ноября 2014, 15:24
комментарий был удален 2014-11-30 13:19:33 alekseifx

комментарий был удален 2014-11-30 12:24:52 alekseifx

комментарий был удален 2014-11-30 12:24:57 alekseifx


Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий