Orders Execution
Indicators Used
Miscellaneous
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---