Lucky1[1].2





//+---------------------------------------------------------------------------------+
//|                                                                 Lucky.v.1.2.mq4 |
//|                                          Copyright © 2007 Serg_ASV and ak97052d |
//|                                                http://codebase.mql4.com/ru/1555 |
//|     http://www.forex-tsd.com/expert-advisors-metatrader-4/10366-lucky1-1-a.html |
//|                                                                                 |
//| 10.10.2007  v.1   by Serg_ASV                                                   |
//| 25.10.2007  v.1.1 by ak97052d (WeekEndStop/TradingTime/MM/MicroLot)             |   
//| 26.10.2007  v.1.2 by ak97052d (MagicNumber/Slippage/DiferentTradingTimeByChart) |
//|                               [EURGBP][EURCHF][GBPCHF][USDCAD]                  |
//+---------------------------------------------------------------------------------+ :p
 
extern bool    MM        = true; // razmer lota avtomatitchecki chtitaetca
extern int     Risk      = 100;    // v procentax (%). minimum '1' maximum '100' 
extern double  ManLot    = 0.1;   // razmer lota ecli 'MM=false'
extern int     Shift     = 3; 
extern int     Limit     = 18;
extern int     TP        = 2;
extern int     Slippage  = 3;
extern bool    UsePersoSetting        = false; // if 'false', 'PersoMagic' 'PersoOpenHour' and 'PersoCloseHour' will be used. 
/*--------PersoSetting--------*/
extern int     PersoMagic = 261007;
int            PersoOpenHour  = 19;
int            PersoCloseHour = 7;
/*--------WeekEndStop--------*/
int            WED1      = 5;    // Day of begin
int            WEH1      = 22;   // Hour of begin
int            WED2      = 1;    // Day of end
int            WEH2      = 2;    // hour of end
//----------------------------------------------------------------------------
bool           first     = true; 
double         MaxLot    = 100;
double         MinLot    = 0.1;
int            LotsDigit = 1;
int            Magic     = 0;
double TV,SP;
//---------------------------------------------------------------------------- 
int TradingTime,WE,OpenHour,CloseHour; double a, b; 

int init()
   {
   if (UsePersoSetting == false)
      {
      if (Symbol() == "EURGBPm" || Symbol() == "EURGBP") 
         {
         Magic = 1001; OpenHour  = 19; CloseHour = 7;
         }
      if (Symbol() == "EURCHFm" || Symbol() == "EURCHF") 
         {
         Magic = 1010; OpenHour  = 19; CloseHour = 7;
         }
      if (Symbol() == "GBPCHFm" || Symbol() == "GBPCHF") 
         {
         Magic = 1011; OpenHour  = 19; CloseHour = 7;
         }
      if (Symbol() == "USDCADm" || Symbol() == "USDCAD") 
         {
         Magic = 1100; OpenHour  = 1; CloseHour = 13;
         }
// add here other chart config
      if (Magic == 0) 
         {
         Magic = 1000; OpenHour  = 19; CloseHour = 7;
         }
      }
   else 
      {
      Magic = PersoMagic; OpenHour  = PersoOpenHour; CloseHour = PersoCloseHour;
      }
   }
 
int start()
   { 
   if (WEstop() == 0 && Tradetime() == 1)
      {
      if (first) 
         {
         a=Ask; 
         b=Bid; 
         first=false; 
         return(0);
         }
       
      if (Ask-a>=Shift*Point) 
         {
         OrderSend(Symbol(),OP_SELL,GetLots(),Bid,Slippage,0,0,"Lucky",Magic,0,Red);
         }  
      if (b-Bid>=Shift*Point) 
         {
         OrderSend(Symbol(),OP_BUY,GetLots(),Ask,Slippage,0,0,"Lucky",Magic,0,Blue);
         } 
      }
   a=Ask;  
   b=Bid; 
  
   CloseAll(); 
   return(0);
   } 
//----------------------------------------------------------------------------- 
void CloseAll() 
   { 
   for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--) 
      { 
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); 
      if (OrderSymbol() == Symbol() && OrderMagicNumber()==Magic) 
         { 
         if (SecurProfit()==1 || Tradetime() == 0)
            { 
            if(OrderType()==OP_BUY)  OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue); 
            if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red); 
            } 
         else 
            { 
            if((OrderType()==OP_BUY)  && (((OrderOpenPrice()-Ask)/Point) > Limit)) 
            OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue); 
            if((OrderType()==OP_SELL) && (((Bid-OrderOpenPrice())/Point) > Limit)) 
            OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red); 
            } 
         } 
      } 
   } 
//--------------------------------------------------------------------------
int WEstop()
   {
   WE=0;
   if (TimeHour(TimeCurrent()) > WEH1 && DayOfWeek() == WED1) WE=1;
   if (TimeHour(TimeCurrent()) < WEH2 && DayOfWeek() == WED2) WE=2;
   return(WE);
   }
//-------------------------------------------------------------------------- 
int Tradetime()
   {
   TradingTime=0;
   if (TimeHour(TimeCurrent()) >= OpenHour || TimeHour(TimeCurrent())< CloseHour)   TradingTime=1;
   return(TradingTime); 
   }
//-------------------------------------------------------------------------- 
double GetLots() 
   {
   double lots,MD,RM,FMM,MinLot,MaxLot; int lotsdigit;
   MD = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2); // chag mejdu lotami (0.1 ili 0.01)pomojit nam uznat ecli eto micro accunt ili net
   RM = NormalizeDouble(MarketInfo(Symbol(), MODE_MARGINREQUIRED), 4);
   FMM = (RM+5)*100;
   if (MD==0.01) lotsdigit=2;
   else lotsdigit=1;
   LotsDigit=lotsdigit;
   if (MM==true) lots = NormalizeDouble(AccountFreeMargin()/(FMM/Risk)-0.05,LotsDigit);
   else lots=ManLot;
   MinLot=NormalizeDouble(MarketInfo(Symbol(),MODE_MINLOT),2);    // minimalnaia pozvolena stavka
   MaxLot=NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT),2);   // maximalnaia pozvolena stavka
   if (LotsDigit == 2) MinLot = 0.01; 
   if (lots < MinLot) lots = MinLot;  
   if (lots > MaxLot) lots = MaxLot;     
   return (lots);      
   }
//-------------------------------------------------------------------------
double TickValue() // 
   {
   double tv;
   tv = NormalizeDouble(MarketInfo(Symbol(), MODE_TICKVALUE), 4); // pribl za 1 pip c 1 lot
   return(tv);
   }
int SecurProfit()
   {
   int sp=0;
   if (OrderProfit()>(TickValue()*GetLots()*TP)) sp=1; // ecli pribilnix ticksov viche 'TP'. rezultat 'SecurProfit()' budit '1'
   return(sp);
   }
   
   
   
   
   
   
   



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
It automatically opens orders when conditions are reached
Checks for the total of open orders

It Closes Orders by itself

Other Features: