Reiner_____GBP_USD_i9n_100y

Author: Copyright � 2011 Reiner L.T.D
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
Indicators Used
Moving average indicator
Miscellaneous
It issuies visual alerts to the screenIt plays sound alerts
0 Views
0 Downloads
0 Favorites
Reiner_____GBP_USD_i9n_100y
//+------------------------------------------------------------------+
//|                                        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

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---