//+------------------------------------------------------------------+
//|                                        Reiner 039     L.T.D .mq4 |
//|                      Copyright © 2010, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#property copyright "Copyright © 2011 Reiner L.T.D"
int             SerialNumber         =      110874357;  // Ñåðèéíûé íîìåð ñîâåòíèêà
int             MagicNumber          =       02261128;  // Íîìåðà ðàáîòû îðäåðîâ (ñâîè)
extern double   Lots                 =           0.01;  // Îáüåì ëîòîâ 
extern int      TakeProfit           =            250;  // Ðàññòîÿíèå îò óñòàíîâëåííîãî îðäåðà äî åãî ñðàáàòûâàíèÿ 
extern int      TrailingStop         =             12;  // Ðàññòîÿíèå â ïóíêòàõ äëÿ íà÷àëà àâòîìàòè÷åñêîé òîðãîâëè óñòàíîâëåííîãî îðäåðà 
int             StopLoss             =           9999;  // StopLoss(ðåêîìåíäóåòñÿ íå ïîëüçîâàòñÿ)
int             Slippage             =              3;  // Ïðîñêàëüçûâàíèå    
extern int      TrailingStep         =             35;  // Ðàññòîÿíèå ìåæäó óñòàíàâëèâàåìûìè îðäåðàìè
extern int      Otkat               =              10;  // Êîëè÷åñòâî îòêðûâàåìûõ ëîòîâ    
//---- Ind
extern int      ShortEma             =            120;
extern int      LongEma              =            340;
extern bool     BAY                  =           true;
extern bool     SELL                 =           true;
//---- Sound
extern bool     UseSound             =           true;  // Âêëþ÷åíèå/âûêëþ÷åíèå çâóêà
extern string   OpenOrderSound       =     "news.wav";  // Çâóê ïðè îòêðûòèè îðäåðà
extern string   ModifOrderSound      =  "message.wav";  // Çâóê ïðè ìîäèôèêàöèè îðäåðà
extern string   CloseOrderSound      =  "payment.wav";  // Çâóê ïðè çàêðûòèè îðäåðà
//---- Time Management
extern bool     UseHourTrade         =          false;  
extern double   FromHourTrade        =              6;
extern double   ToHourTrade          =             21;
//---- Money Management
extern bool     UseMoneyManagement   =           true;  //Use Money Management or not
//---- Settings
bool            Show_Settings        =           true;
bool            Summarized           =           true;
int             AcNumber,NewAcNumber;
bool            CorrNumber=  true;
int             OrderCnt;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
AcNumber=AccountNumber();    
CorrNumber=AcCode();    
if (CorrNumber==true)
{   
ShowCommnt();
Print("Íà÷àëî ðàáîòû ñîâåòíèêà");   
}
else
{  
Alert("Íåïðàâèëüíûé ñåðèéíûé íîìåð. Ýêñïåðò íå ðàáîòàåò.");  
} 
 return(0);   
} 
// -------------------------------------------------------------------
bool AcCode()
{
if (IsDemo()==true||IsTesting()||IsOptimization()) 
{
return(true);
}
else  
{  
int Key=(((AccountNumber()+1051)*3+233)*2)+110200031;
if (Key==SerialNumber) return(true); else  return(true);     
}
}  
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
Comment("true");
Print("Îêîí÷àíèå ðàáîòû ñîâåòíèêà");  
return(0);
}
void ShowCommnt()
{
if(Show_Settings && Summarized  == true)
Print_Details();
else if(Show_Settings && Summarized)
Print_Details_Summarized();
else Comment("");
}
// -------------------------------------------------------------------
int Crossed()
{  
double EmaLongCurrent   = iMA(NULL,-25,LongEma, -25,MODE_EMA, PRICE_CLOSE, 1);
double EmaShortCurrent  = iMA(NULL,-25,ShortEma,-25,MODE_EMA, PRICE_CLOSE, 0);	
if (EmaShortCurrent>EmaLongCurrent)return (0); 
if (EmaLongCurrent<EmaShortCurrent)return (1);
return (0);
}
// -------------------------------------------------------------------
double LotSize()
{
double lot =Lots;
// -------------------------------------------------------------------
{      
}
return(lot);
}
// -------------------------------------------------------------------
string BoolToStr ( bool value)
{
if(value) return ("True");
else return      ("true");
}
void Print_Details()
{
string sComment = "";
string sp       = "\n";
string NL       = "\n";
sComment = sp;
sComment = sComment + "Lots=" + DoubleToStr(Lots,0)                         + " | ";
sComment = sComment + "TakeProfit="         + DoubleToStr(TakeProfit,0)     + " | ";
sComment = sComment + "TrailingStop="       + DoubleToStr(TrailingStop,0)   + " | ";
//   sComment = sComment + "StopLoss="           + DoubleToStr(StopLoss,0)       + " | ";   
sComment = sComment + "Open orders ="       + OrderCnt;
sComment = sComment + sp;  
if(UseHourTrade)
{
sComment = sComment + "UseHourTrade="       + BoolToStr  (UseHourTrade)     + " | ";
sComment = sComment + "FromHourTrade="      + DoubleToStr(FromHourTrade,0)  + " | ";
sComment = sComment + "ToHourTrade="        + DoubleToStr(ToHourTrade,0)    + NL;  
}
else
{
sComment = sComment + "UseHourTrade="       + BoolToStr  (UseHourTrade)     + NL;
}   
sComment = sComment + sp;
sComment = sComment + "UseMoneyManagement=" + BoolToStr(UseMoneyManagement) + " | ";  
sComment = sComment + sp;   
Comment(sComment);
}
void Print_Details_Summarized()
{
string sComment = "";
string sp       = "\n";
string NL       = "\n";
sComment = sp;
sComment = sComment + "TF="  + DoubleToStr(TakeProfit,0)                    + " | ";
sComment = sComment + "TS="  + DoubleToStr(TrailingStop,0)                  + " | ";
sComment = sComment + "SL="  + DoubleToStr(StopLoss,0)                      + " | ";    
sComment = sComment + sp;  
if(UseHourTrade)
{
sComment = sComment + "UHT=" + BoolToStr(UseHourTrade)                      + " | ";
sComment = sComment + "FHT=" + DoubleToStr(FromHourTrade,0)                 + " | ";
sComment = sComment + "THT=" + DoubleToStr(ToHourTrade,0)                   + NL;
}
else
{
sComment = sComment + "UHT=" + BoolToStr(UseHourTrade)                      + NL;
}
sComment = sComment + sp;
sComment = sComment + "L="   + DoubleToStr(Lots,0)                          + " | ";
sComment = sComment + "MM="  + BoolToStr(UseMoneyManagement)                + " | ";
//   sComment = sComment + "AIM=" + BoolToStr(AccountIsMicro)                    + " | ";
sComment = sComment + sp;
sComment = sComment + "Îòêðûòî îðäåðîâ = "+OrderCnt;
Comment(sComment);
}
// -------------------------------------------------------------------
int OrderCount()
{
int Count=0;
int total  = OrdersTotal();   
for(int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
string selected_symbol = OrderSymbol();
if (Symbol() == selected_symbol&&OrderMagicNumber()==MagicNumber)
Count++;
}
return (Count);
}
bool EnableAddOrder(int InstrOrderCoun,int TrCmd)
{
bool res=false; 
if (InstrOrderCoun==0)
{    
if (TrCmd==OP_BUY)
{ if (Close[1]>Close[0]) return(true); }
if (TrCmd==OP_SELL)
{ if (Close[0]>Close[1]) return(true); }
} 
else
{
double op=0;
double opPrice=0;
int total  = OrdersTotal();
int otype=0;
string  current_symbol = Symbol();
for(int cnt = 0 ; cnt <total ; cnt++)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
string selected_symbol = OrderSymbol();      
if (current_symbol == selected_symbol&&OrderMagicNumber()==MagicNumber)
{
otype=OrderType();
if (otype==TrCmd)
{
opPrice = OrderOpenPrice(); 
if (op==0) op=opPrice;
else
{
if (TrCmd==OP_BUY)
{
if (op>opPrice)  op=opPrice;
}
if (TrCmd==OP_SELL)
{
if (op<opPrice)  op=opPrice;
}
}
}       
}
}      
}    
if (op>0)
{
if (TrCmd==OP_BUY)
{
if (op>(Ask+TrailingStep*Point))  res=true;
}
if (TrCmd==OP_SELL)
{
if (op<(Bid-TrailingStep*Point))  res=true;
}
}    
return(res);
}
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{  
if (UseHourTrade)
{
if (!(Hour()>=FromHourTrade && Hour()<=ToHourTrade)) 
{
Comment("Ðàáîòà ñîâåòíèêà çàâåðøåíà.Ñïîêîéíîé íî÷è !");
return(0);
} 
}
// -------------------------------------------------------------------   
if (CorrNumber==true)
{
NewAcNumber=AccountNumber();
if (AcNumber==NewAcNumber)
{
int cnt, ticket, ticket1, total;   
string comment    =  "";        
if(Bars<LongEma)
{
Print("Áàðîâ íà ãðàôèêå ìåíåå ",LongEma-240);
return(0);  
}
if(TakeProfit<1)
{
Print("TakeProfit less than 1");
return(0);  // check TakeProfit
}   
int isCrossed  = 0;
isCrossed = Crossed ();           
total=OrderCount();  
if (OrderCnt>total)
{
OrderCnt=total;
ShowCommnt();
if (UseSound) PlaySound(CloseOrderSound);       
}      
OrderCnt=total;
if(total < Otkat) 
{
if(UseMoneyManagement==true) Lots = LotSize(); 
if (Lots>0)  
{     
// Print("Ïðîâåðêà âîçìîæíîñòè íîâîãî ëîòà : ");
if(isCrossed == 0)
{ if (BAY==true)
{
if (EnableAddOrder(total,OP_BUY)==true)
{                  
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,comment,MagicNumber,0,Green);                 
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{ 
Print("Îòêðûò îðäåð BAY : ",OrderOpenPrice());
OrderCnt=OrderCount();
ShowCommnt();
if (UseSound) PlaySound(OpenOrderSound);
}
else Print("Îøèáêà ïîèñêà îòêðûòîãî îðäåðà BAY : ",GetLastError());
}
else Print("Îøèáêà ïðè îòêðûòèè îðäåðà BUY : ",GetLastError()); 
return(0);
}
} 
}         
if(isCrossed == 0)
{
if (SELL==true)
{
if (EnableAddOrder(total,OP_SELL)==true)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,comment,MagicNumber,0,Red);                    
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) 
{
Print("Îòêðûò îðäåð SELL : ",OrderOpenPrice());
OrderCnt=OrderCount();
ShowCommnt();
if (UseSound) PlaySound(OpenOrderSound);
}
else Print("Îøèáêà ïîèñêà îòêðûòîãî îðäåðà SELL : ",GetLastError());
}
else Print("Îøèáêà ïðè îòêðûòèè îðäåðà SELL : ",GetLastError());             
return(0);
}
} 
}
}         
}
// -------------------------------------------------------------------
int ttl  = OrdersTotal();
for(cnt=0;cnt<ttl;cnt++)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==true)
{
if (OrderSymbol() == Symbol())
{	      
if (OrderType()==OP_SELL) 
{ 	  	  
if (TrailingStop>0) 
{
if (OrderOpenPrice()-Ask>=(TrailingStop)*Point) 
{
if (OrderStopLoss()>(Bid+Point+Point*TrailingStop))
{
if (OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Point*TrailingStop,OrderTakeProfit(),0,Purple))
{
if (UseSound) PlaySound(ModifOrderSound);
}	  						    					
}
}
}
}   
if (OrderType()==OP_BUY)
{	  	  
if (TrailingStop>0) 
{
if (Bid-OrderOpenPrice()>=(TrailingStop)*Point) 				      
if (OrderStopLoss()<(Ask-Point-Point*TrailingStop)) 
{
if (OrderModify(OrderTicket(),0,Ask-Point*TrailingStop,OrderTakeProfit(),0,Yellow))
{
if (UseSound) PlaySound(ModifOrderSound);
}					               
}
}
}
}
}   	   
}
}  
} 
}
//  return(0);
// -------------------------------------------------------------------
 
 
             
            
            
            
Comments