Navigation:Home > Content >

IlanNEW_.mq4

Time: 2018-07-06 | Download file:IlanNEW_.mq4

//+------------------------------------------------------------------+
//|                                    bless_FiFtHeLeMeNt_noTG_1.0.1 |
//|                                   Copyright © 2007, FiFtHeLeMeNt |
//|                                         fifthelement80@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, FiFtHeLeMeNt."
#property link      "http://www.irxfx.com"

extern int MinGS=9;  // шаг открытия колен
extern int TP=12;
extern int ST=150;
extern double lot=0.01;
extern double LE=2;
extern double MaxLotSize = 0.50;    // максимальный размер лота

extern double StartLotPercent = 0;  // стартовый ордер серии в процентах от суммарного
                                    // объема ордеров противоположного направления
                                    // 0 - старт стандартным лотом lot
                                    
extern int MaxTrades=8;

extern bool   ResetLotSize = False; // если True, то при превышении размера MaxLotSize
                                    // лот сбрасывается до начального размера
                                    // False - при превышении MaxLotSize размер лота
                                    // урезается до MaxLotSize
                                    
extern bool   EveryTick = True;     // True - контроль запуска советника только на открытие
                                    // новой свечи отключен (советник запускается на каждом тике)
                                    
int magic;
double lot2;
datetime tob,tos; //Time Out Buy & Sell
datetime PrevTime = 0;

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----


   
//----
   return(0);
  }
  
int init()
  {
   if (Symbol() == "AUDCADm" || Symbol() == "AUDCAD") { magic = 211001; }
   if (Symbol() == "AUDJPYm" || Symbol() == "AUDJPY") { magic = 211002; }
   if (Symbol() == "AUDNZDm" || Symbol() == "AUDNZD") { magic = 211003; }
   if (Symbol() == "AUDUSDm" || Symbol() == "AUDUSD") { magic = 211004; }
   if (Symbol() == "CHFJPYm" || Symbol() == "CHFJPY") { magic = 211005; }
   if (Symbol() == "EURAUDm" || Symbol() == "EURAUD") { magic = 211006; }
   if (Symbol() == "EURCADm" || Symbol() == "EURCAD") { magic = 211007; }
   if (Symbol() == "EURCHFm" || Symbol() == "EURCHF") { magic = 211008; }
   if (Symbol() == "EURGBPm" || Symbol() == "EURGBP") { magic = 211009; }
   if (Symbol() == "EURJPYm" || Symbol() == "EURJPY") { magic = 211010; }
   if (Symbol() == "EURUSDm" || Symbol() == "EURUSD") { magic = 211011; }
   if (Symbol() == "GBPCHFm" || Symbol() == "GBPCHF") { magic = 211012; }
   if (Symbol() == "GBPJPYm" || Symbol() == "GBPJPY") { magic = 211013; }
   if (Symbol() == "GBPUSDm" || Symbol() == "GBPUSD") { magic = 211014; }
   if (Symbol() == "NZDJPYm" || Symbol() == "NZDJPY") { magic = 211015; }
   if (Symbol() == "NZDUSDm" || Symbol() == "NZDUSD") { magic = 211016; }
   if (Symbol() == "USDCHFm" || Symbol() == "USDCHF") { magic = 211017; }
   if (Symbol() == "USDJPYm" || Symbol() == "USDJPY") { magic = 211018; }
   if (Symbol() == "USDCADm" || Symbol() == "USDCAD") { magic = 211019; }
   if (magic == 0) { magic = 211999; }
   return (0);
   return(0);
  }

void OpenBuy()
 {
    int ticket,err;
        if (!GlobalVariableCheck("InTrade")) {
               GlobalVariableSet("InTrade", CurTime());  // set lock indicator
               ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,3,Bid-ST*Point,Ask+TP*Point,"EA Order",magic,0,Blue);
               GlobalVariableDel("InTrade");   // clear lock indicator
        }
 }

void OpenSell()
 {
    int ticket,err;
        if (!GlobalVariableCheck("InTrade")) {
               GlobalVariableSet("InTrade", CurTime());  // set lock indicator
               ticket = OrderSend(Symbol(),OP_SELL,lot2,Bid,3,Ask+ST*Point,Bid-TP*Point,"EA Order",magic,0,Red);
               GlobalVariableDel("InTrade");   // clear lock indicator
        }
 }


void ManageBuy() 
 {
   int lasttradetime = 0;
   double lastopenprice=0;
   double maxlots = 0;
   double lasttp=0;
   int lastordertype=-1;
   int lastorderticket=0;
   int y=0; 

   for (y = 0; y < OrdersTotal(); y++)
   {
      OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
      if ((OrderMagicNumber() != magic) || (OrderType()!=OP_BUY)) { continue; }
      if (OrderOpenTime() > lasttradetime) { 
        lasttradetime = OrderOpenTime();
        lastopenprice = OrderOpenPrice();
        lastordertype=OrderType();
        lastorderticket=OrderTicket();
        lasttp=OrderTakeProfit();
      }     
      if (OrderLots() > maxlots) { maxlots = OrderLots(); }
   }
   
   int lvl=MathLog(maxlots/lot)/MathLog(2)+1;

   if (lvl<0) lvl=0;
   
   lot2=lot*MathPow(2,lvl);
   //lot2=2*lot*MathPow(2,lvl);
   
   //if (lvl==0) OpenBuy();
   //=========================================
   // здесь открывается самый первый ордер
   if (lvl==0)
     {
       // вычислим суммарный размер лота ордеров направления sell
       if (StartLotPercent != 0)
       {
         double TotalSellLot = 0;
         for (y = 0; y < OrdersTotal(); y++)
         {
           OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
           if ((OrderMagicNumber() != magic) || (OrderType()!=OP_SELL)) { continue; }
           if (OrderType() == OP_SELL) { TotalSellLot += OrderLots(); }
         }
         
         if (TotalSellLot > 0) lot2 = NormalizeDouble(StartLotPercent*TotalSellLot/100, 2);
         
         if (lot2 > MaxLotSize)
         {
           if (ResetLotSize)
             lot2 = lot;
           else
             lot2 = MaxLotSize;
         }
           
         if (lot2 < lot) lot2 = lot;
       }  // if (StartLotPercent != 0)
       
       OpenBuy();
     }
   //=========================================
   
   if ((lastopenprice-Ask>MinGS*Point) && (lvl0) {
     avgp=NormalizeDouble(sump/sumlots,Digits);
     double tpp=NormalizeDouble(TP/10/sumlots*Point+avgp,Digits);
     
     for (y = 0; y < OrdersTotal(); y++)
     {
       OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
       if ((OrderMagicNumber() != magic) || (OrderType()!=OP_BUY) || (OrderTakeProfit()==tpp)) { continue; }
       OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tpp,0,Red);
     }
     
     
   }
 */  

     for (y = 0; y < OrdersTotal(); y++)
     {
       OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
       if ((OrderMagicNumber() != magic) || (OrderType()!=OP_BUY) || (OrderTakeProfit()==lasttp) || (lasttp==0)) { continue; }
       OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),lasttp,0,Red);
     }

   
}
    
void ManageSell() 
 {
   int lasttradetime = 0;
   double lastopenprice=0;
   double maxlots = 0;
   double lasttp=0;
   int lastordertype=-1;
   int lastorderticket=0;
   int y=0; 

   for (y = 0; y < OrdersTotal(); y++)
   {
      OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
      if ((OrderMagicNumber() != magic) || (OrderType()!=OP_SELL)) { continue; }
      if (OrderOpenTime() > lasttradetime) { 
        lasttradetime = OrderOpenTime();
        lastopenprice = OrderOpenPrice();
        lastordertype=OrderType();
        lastorderticket=OrderTicket();
        lasttp=OrderTakeProfit();
      }     
      if (OrderLots() > maxlots) { maxlots = OrderLots(); }
   }
   
   int lvl=MathLog(maxlots/lot)/MathLog(2)+1; // lvl - количество открытых лотов

   if (lvl<0) lvl=0;
   
   //lot2=2*lot*MathPow(2,lvl);
   lot2=lot*MathPow(2,lvl);  // объем лота следующего ордера
   
   // if (lvl==0) OpenSell();
   //=========================================
   // здесь открывается самый первый ордер
   if (lvl==0)
     {
       // вычислим суммарный лот ордеров направления buy
       if (StartLotPercent != 0)
       {
         double TotalBuyLot = 0;
         for (y = 0; y < OrdersTotal(); y++)
         {
           OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
           if ((OrderMagicNumber() != magic) || (OrderType()!=OP_BUY)) { continue; }
           if (OrderType() == OP_BUY) { TotalBuyLot += OrderLots(); }
         }
         if (TotalBuyLot > 0) lot2 = NormalizeDouble(StartLotPercent*TotalBuyLot/100, 2);
         
         if (lot2 > MaxLotSize)
         {
           if (ResetLotSize)
             lot2 = lot;
           else
             lot2 = MaxLotSize;
         }
         
         if (lot2 < lot) lot2 = lot;
       }  // if (StartLotPercent != 0)
       
       OpenSell();
     }
   //=========================================
   
   if ((Bid-lastopenprice>MinGS*Point) && (lastopenprice>0) && (lvl0) {
     avgp=NormalizeDouble(sump/sumlots,Digits);
     double tpp=NormalizeDouble(-TP/10/sumlots*Point+avgp,Digits);
     
     for (y = 0; y < OrdersTotal(); y++)
     {
       OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
       if ((OrderMagicNumber() != magic) || (OrderType()!=OP_SELL) || (OrderTakeProfit()==tpp)) { continue; }
       OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),tpp,0,Red);
     }
     
     
   }
 */ 
 
      for (y = 0; y < OrdersTotal(); y++)
     {
       OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
       if ((OrderMagicNumber() != magic) || (OrderType()!=OP_SELL) || (OrderTakeProfit()==lasttp) || (lasttp==0)) { continue; }
       OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),lasttp,0,Red);
     }
 
   
 }

  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----

  //======================================
  if (!EveryTick)
  {
    if (PrevTime == Time[0]) return(0);      
    PrevTime = Time[0];
  }
  //======================================

  ManageBuy();
  
  ManageSell();


   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Recommend