TRUE Forex

Просмотр кода форекс советника e-Droba-ZigZag_V2.mq4

//+------------------------------------------------------------------+
//|                                               e-Droba-ZigZag.mq4 |
//|                                  Copyright © 2010, Michelangelo® |
//|                                                www.fxgeneral.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, Michelangelo®"
#property link      "www.fxgeneral.com"
#define MAGICMA  20100930

extern int     ExtDepth     = 12;
extern int     ExtDeviation = 5;
extern int     ExtBackstep  = 3;
extern int     _point       = 0;
extern double  _lots        = 0.01;
extern int     _takeProfit  = 70;
extern int     _stopLoss    = 80;
extern int     BBUSize      = 30;    //размер в пунктах после которого стоп переносим в безубыток
extern int     BBUSizepip   = 10;    //безубыток в пунктах

extern bool   TrailingStopFr  = true;     //если= false, то трейлинг по фракталам отключен


double _lastExtremum=0.0;
double _currentExtremum=0.0;
double _previousExtremum=0.0;
int _extType=-1;
double _workLots=0.0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int err1;
int start()
  {
   int ticket=0;
   double _sl=0.0, _tp=0.0;
   double _price=0.0;
   
   if (TrailingStopFr) TrailingStop();
   
 if(BBUSize>0){err1=BBU();}

//----
   if (Volume[0]>1) return;
   _lastExtremum=GetExtremumZZPrice(1);
   Comment (_lastExtremum);
   if (Close[0]<_lastExtremum){
      if (_extType!=OP_BUYSTOP){
         _CheckOrder(OP_BUYSTOP);
         _price=NormalizeDouble((_lastExtremum+_point*Point),Digits);
         if (_stopLoss>0) _sl=NormalizeDouble(_price-_stopLoss*Point,Digits);
         if (_takeProfit>0) _tp=NormalizeDouble(_price+_takeProfit*Point,Digits);
         _extType=OP_BUYSTOP;
         ticket=OrderSend(Symbol(),_extType,_lots,_price,5,_sl,_tp,0,MAGICMA,0,0);
      }
   }
   if (Close[0]>_lastExtremum){
      if (_extType!=OP_SELLSTOP){
         _CheckOrder(OP_SELLSTOP);
         _price=NormalizeDouble((_lastExtremum-_point*Point),Digits);
         if (_stopLoss>0) _sl=NormalizeDouble(_price+_stopLoss*Point,Digits);
         if (_takeProfit>0) _tp=NormalizeDouble(_price-_takeProfit*Point,Digits);
         _extType=OP_SELLSTOP;
         ticket=OrderSend(Symbol(),_extType,_lots,_price,5,_sl,_tp,0,MAGICMA,0,0);
      }
   }
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
double GetExtremumZZPrice(int ne=0) {
   double zz;   
   int    i, k=iBars(Symbol(), 0), ke=0;
   for (i=1; i<k; i++) {
      zz=iCustom(Symbol(),0, "ZigZag", ExtDepth,ExtDeviation,ExtBackstep,0,i);
      if (zz!=0) {
         ke++;
         if (ke>ne) return(zz);     
      }   
   }   
   return(0); 
} 
//+------------------------------------------------------------------+
int _CheckOrder(int _checkType=0){
   int i;
   if (OrdersTotal()>0){
      for (i=0; i<=OrdersTotal()-1; i++){
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
            if (OrderType()==_checkType && OrderMagicNumber()==MAGICMA) OrderDelete(OrderTicket());
         }
      }
   }
   return(0);
}
//+------------------------------------------------------------------+
int  BBU()
{//описание функции http://fxnow.ru/blog/programming_mql4/2.html
int i;bool err;
   for( i=1; i<=OrdersTotal(); i++)         
   {
      if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {   
        if(BBUSize>0 && OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA && OrderStopLoss()<OrderOpenPrice())  
        {                
         if(Bid-OrderOpenPrice()>=BBUSize*Point && BBUSize>0 )
          {
           Print("ПОРА В БезуБыток");
           err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BBUSizepip*Point,OrderTakeProfit(),0,Green);
           if(err==false){return(-1);}
          }//if(Bid-OrderOpenPrice()
         }//if(BBUSize>0
        }//if(OrderSelect(i
            
       if(OrderSelect(i-1,SELECT_BY_POS)==true) 
       {
        if(BBUSize>0 && OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA && (OrderStopLoss()>OrderOpenPrice() || OrderStopLoss()==0))  
        {        
         if(OrderOpenPrice()-Ask>=BBUSize*Point && BBUSize>0)
          {
           Print("ПОРА В БезуБыток");
           err=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BBUSizepip*Point,OrderTakeProfit(),0,Green);
           if(err==false){return(-1);}
          }//if(OrderOpenPrice()
         }//if(BBUSize>0 
       }// if(OrderSelect
    }// for( i=1;
return(0);
}

//+------------------------------------------------------------------------------+
//|                                                                 TrailingStop |
//|                                           Copyright © 2010, Хлыстов Владимир |
//|                                                            cmillion@narod.ru |
//+------------------------------------------------------------------------------+
void TrailingStop()
{
   int tip,Ticket;
   bool error;
   double StLo,OSL,OOP;
   for (int i=0; i<OrdersTotal(); i++) 
   {  if (OrderSelect(i, SELECT_BY_POS)==true)
      {  tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
         {
            OSL   = OrderStopLoss();
            OOP   = OrderOpenPrice();
            Ticket = OrderTicket();
            if (tip==OP_BUY)             
            {
               StLo = NormalizeDouble(SlLastBar(1,Bid),Digits);        
               if (StLo==0) continue;        
               if (StLo < OOP) continue;
               if (StLo > OSL)
               {  error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,DeepPink);
                  if (!error) Print("Error order ",Ticket," TrailingStop ",GetLastError(),"   ",Symbol(),"   SL ",StLo);
                  else Print("TrailingStopFR ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
               }
            }                                         
            if (tip==OP_SELL)        
            {
               StLo = NormalizeDouble(SlLastBar(-1,Ask),Digits);  
               if (StLo==0) continue;        
               if (StLo > OOP) continue;
               if (StLo < OSL || OSL==0 )
               {  error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,DeepPink);
                  if (!error) Print("Error order ",Ticket," TrailingStop ",GetLastError(),"   ",Symbol(),"   SL ",StLo);
                   else Print("TrailingStopFR "+Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
               }
            } 
         }
      }
   }
}
//--------------------------------------------------------------------
double SlLastBar(int tip,double price)
{
   double fr;
   int i;
   int    STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if (tip== 1)
   {
      for (i=2; i<100; i++) 
      {
         fr = iFractals(NULL,0,MODE_LOWER,i);
         if (fr!=0) {if (price-STOPLEVEL*Point > fr) return(fr);}
         else return(0);
      }
   }
   if (tip==-1)
   {
      for (i=2; i<100; i++) 
      {
         fr = iFractals(NULL,0,MODE_UPPER,i);
         if (fr!=0) {if (price+STOPLEVEL*Point < fr) return(fr);}
         else return(0);
      }
   }
}
//--------------------------------------------------------------------

Комментарии к исходному коду форекс советника e-Droba-ZigZag_V2.mq4
В целях безопасности и борьбы со спамом в тексте комментариев запрещено размещать html-теги и ссылки. Благодарим за понимание.

  • X
  • 0% загружено
« советник e-Droba-ZigZag_V2.01.mq4
советник e-Friday (2).mq4 »