Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Expert Template for MT 4
//+------------------------------------------------------------------+
//| Expert Template for MT 4.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
extern double TakeProfit = 90;
extern double Lots = 0.2;
extern double TrailingStop = 60;
extern double MACDOpenLevel=3;
extern double check=2;
extern double check2=2;
//-------------------------------------------------------------------+
// Ôóíêöèÿ âîçâðàùàþùàÿ âðåìÿ ïîñëåäíåãî îòêðûòîãî(çàêðûòîãî) îðäåðà |
// åñëè âîçâðàùåíî -1 (îøèáêà âûïîëíåíèÿ), 0-îðäåðà íå îáíàðóæåíî, |
// ïîëîæèòåëüíîå çíà÷åíèå = èñêîìîìó âðåìåíè îðäåðà |
//-------------------------------------------------------------------+
int CheckLastOrderTime (string mSymbol, int select, int mode_price)
//íà âõîäå òðè çíà÷åíèÿ
//1. íàèìåíîâàíèå èíñòðóìåíòà
//2. ñìîòðåòü â èñòîðèè(çàêðûòûå) èëè äåéñòâóþùèå îðäåðà (ñîîòâåòñòâåííî 0 è 1)
//3. ñìîòðåòü öåíó îòêðûòèÿ èëè çàêðûòèÿ (ñîîòâåòñòâåííî 0 è 1)
{
//----
int oTotal=0; //õðàíèò çíà÷åíèå êîëè÷åñòâà îðäåðîâ (èñòîðèè èëè äåéñòâóþùèå)
int co; //õðàíèò çíà÷åíèå íîìåðà òåêóùåãî îðäåðà
datetime LastTime=0;
//ïðîâåðêà êîððåêòíîñòè ïåðåäàííûõ ôóíêöèè çíà÷åíèé
if((select>1 || select<0) || (mode_price<0 || mode_price>1))
{
Print("Íåâåðíî ïåðåäàííûå ïàðàìåòðû (ôóíêöèÿ CheckLastOrderTime)");
return(-1);
}
if(select!=1) //åñëè íóæíî ñìîòðåòü â èñòîðèè çàêðûòûõ îðäåðîâ
{
oTotal=HistoryTotal();
for(co=0;co<oTotal;co++) // öèêë ïî îðäåðàì
{
if(m_OSelect(co,SELECT_BY_POS,MODE_HISTORY,100)!=-1) //äåëàåì 100 ïîïûòîê îðäåð ñåëåêò
{
if(mSymbol==OrderSymbol())
{
if(LastTime==0) LastTime=1; //îðäåð â íàëè÷èè
if(mode_price!=1) //åñëè íóæíî ñìîòðåòü íå âðåìÿ çàêðûòèÿ (îòêðûòèÿ)
{
if(LastTime<OrderOpenTime()) LastTime=OrderOpenTime();
}
else //èíà÷å ñìîòðèì âðåìÿ çàêðûòèÿ
{
if(LastTime<OrderCloseTime()) LastTime=OrderCloseTime();
}
}
}
else
{
Alert("Âîçíèêëà îøèáêà , ñì. æóðíàë!");
return(-1);
}
}
}
else //èíà÷å ñìîòðèì äåéñòâóþùèå îðäåðà
{
oTotal=OrdersTotal();
for(co=0;co<oTotal;co++) // öèêë ïî îðäåðàì
{
if(m_OSelect(co,SELECT_BY_POS,MODE_TRADES,100)!=-1) //äåëàåì 100 ïîïûòîê îðäåð ñåëåêò
{
if(mSymbol==OrderSymbol())
{
if(LastTime==0) LastTime=1; //îðäåð â íàëè÷èè
if(mode_price!=1) //åñëè íóæíî ñìîòðåòü íå âðåìÿ çàêðûòèÿ (îòêðûòèÿ)
{
if(LastTime<OrderOpenTime()) LastTime=OrderOpenTime();
}
else
{
Alert("Íåâåðíî ïåðåäàííûé ïàðàìåòð! Îðäåð åùå â äåéñòâèè.");
}
}
}
else
{
Alert("Âîçíèêëà îøèáêà , ñì. æóðíàë!");
return(-1);
}
}
}
//----
return(LastTime);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Ôóíêöèÿ äåëàåò Attempt êîëè÷åñòâî ïîïûòîê îðäåð ñåëåêò |
//+------------------------------------------------------------------+
int m_OSelect(int ct, int sel, int pool, int Attempt)
{
int i;
//----
//îðäåð ñåëåêò çà Attempt ïîïûòîê
for(i=0;i<Attempt;i++)
{
if( OrderSelect(ct,sel,pool)==1 ) //åñëè îðäåð âûáðàí
{
Print( "Ïîïûòêà îðäåð ñåëåêò óäà÷íà "+OrderTicket() );
return(1);//çàâåðøàåì ôóíêöèþ
}
}
Alert( "Êîä îøèáêè - "+GetLastError() );
Alert("Íåâîçìîæíî îðäåð ñåëåêò! Ñäåëàíî "+Attempt+" ïîïûòîê.");
//----
return(-1);
}
//-------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
double MacdCurrent, MacdPrevious, SignalCurrent,movbuffer,upbuffer,lowbuffer;
double SignalPrevious, MaCurrent, MaPrevious, PSarCurrent,RSICurrent,RSIPrevious,StocMainCurrent,StocMainPrevious,StocSigCurrent,StocSigPrevious,MovAvCur200,MovAvCur288, MovAvCur13;
int cnt=0, ticket, total;
string smb;
datetime temp1, temp2;
if(Bars<100)
{
Print("bars less than 100");
return(0);
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return(0); // check TakeProfit
}
MacdCurrent=iMACD(NULL,0,20,26,9,PRICE_CLOSE,MODE_MAIN,0);
MacdPrevious=iMACD(NULL,0,20,26,9,PRICE_CLOSE,MODE_MAIN,1);
//---Parabolic SAR
PSarCurrent= iSAR(NULL,0,0.02,0.2,0);
//---RSI
RSICurrent=iRSI(NULL,0,14,PRICE_CLOSE,0);
RSIPrevious=iRSI(NULL,0,14,PRICE_CLOSE,1);
//---Stochastic Oscillator
StocMainCurrent=iStochastic(NULL,0,5,3,3,MODE_EMA,0,MODE_MAIN,0);
StocMainPrevious=iStochastic(NULL,0,5,3,3,MODE_EMA,0,MODE_MAIN,1);
StocSigCurrent=iStochastic(NULL,0,5,3,3,MODE_EMA,0,MODE_SIGNAL,0);
StocSigPrevious=iStochastic(NULL,0,5,3,3,MODE_EMA,0,MODE_SIGNAL,1);
//---Moving Average
MovAvCur200=iMA(NULL,0,200,0,MODE_EMA,PRICE_CLOSE,0);
MovAvCur288=iMA(NULL,0,288,0,MODE_EMA,PRICE_CLOSE,0);
MovAvCur13=iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
//---Bollinger Bands
movbuffer=iCustom(NULL,0,"EMA Bands modified",0,0); //middle line value - primer ispolzovanija sobstvennogo
upbuffer=iCustom(NULL,0,"EMA Bands modified",1,0); //upper line value .. indikatora v sobstvennom eksperte
lowbuffer=iCustom(NULL,0,"EMA Bands modified",2,0); //lower line value // EMA Bands modified.mq4
total=OrdersTotal();
if(total<10)
{
// no opened orders identified
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
smb=Symbol();
// check for long position (BUY) possibility***************************************** //mozhno-li vojti v long
if(MacdCurrent>15*Point && MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MacdCurrent>MacdPrevious && RSICurrent>RSIPrevious && RSICurrent>500000*Point && Close[0]>MovAvCur288 && Close[0]>MovAvCur200 && MovAvCur288>MovAvCur200)
{
//-------EURUSD-------
if(smb=="EURUSD")
{
temp1=CheckLastOrderTime("EURUSD",1,0);
if(temp1>10)
{
if((CurTime()-temp1)>3600)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
else
{
temp2=CheckLastOrderTime("EURUSD", 0, 0);
if(temp2>10)
{
if((CurTime()-temp2)>3600)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
else ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
}
//-------EURUSD-------
//-------GBPUSD-------
if(smb=="GBPUSD")
{
temp1=CheckLastOrderTime("GBPUSD",1,0);
if(temp1>10)
{
if((CurTime()-temp1)>3600)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
else
{
temp2=CheckLastOrderTime("GBPUSD", 0, 0);
if(temp2>10)
{
if((CurTime()-temp2)>3600)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
else ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
}
//-------GBPUSD-------
//-------USDCHF-------
if(smb=="USDCHF")
{
temp1=CheckLastOrderTime("USDCHF",1,0);
if(temp1>10)
{
if((CurTime()-temp1)>3600)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
else
{
temp2=CheckLastOrderTime("USDCHF", 0, 0);
if(temp2>10)
{
if((CurTime()-temp2)>3600)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
else ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
}
//-------USDCHF-------
//-------USDJPY-------
if(smb=="USDJPY")
{
temp1=CheckLastOrderTime("USDJPY",1,0);
if(temp1>10)
{
if((CurTime()-temp1)>3600)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
else
{
temp2=CheckLastOrderTime("USDJPY", 0, 0);
if(temp2>10)
{
if((CurTime()-temp2)>3600)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
else ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-95*Point,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
}
}
//-------USDJPY-------
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
// check for short position (SELL) possibility*****************************************
if(MacdCurrent<0 && MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MacdCurrent<MacdPrevious && PSarCurrent>Close[0] && RSICurrent<RSIPrevious && RSICurrent<500000*Point && StocMainCurrent<StocMainPrevious && StocMainCurrent<StocSigCurrent && StocSigCurrent<StocSigPrevious && StocMainCurrent>300000*Point && StocSigCurrent>300000*Point && Close[0]<MovAvCur288&& Close[0]<MovAvCur200 && MovAvCur288<MovAvCur200 && (Close[0]-Low[0])>=2*Point && (MovAvCur13-Close[0])>1*Point)
{
//-------EURUSD-------
if(smb=="EURUSD")
{
temp1=CheckLastOrderTime("EURUSD",1,0);
if(temp1>10)
{
if((CurTime()-temp1)>3600)
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+95*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
}
else
{
temp2=CheckLastOrderTime("EURUSD", 0, 0);
if(temp2>10)
{
if((CurTime()-temp2)>3600)
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+95*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
}
else ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+95*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
}
}
//-------EURUSD-------
//-------GBPUSD-------
if(smb=="GBPUSD")
{
temp1=CheckLastOrderTime("GBPUSD",1,0);
if(temp1>10)
{
if((CurTime()-temp1)>3600)
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+95*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
}
else
{
temp2=CheckLastOrderTime("GBPUSD", 0, 0);
if(temp2>10)
{
if((CurTime()-temp2)>3600)
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+95*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
}
else ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+95*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
}
}
//-------GBPUSD-------
//-------USDCHF-------
if(smb=="USDCHF")
{
temp1=CheckLastOrderTime("USDCHF",1,0);
if(temp1>10)
{
if((CurTime()-temp1)>3600)
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+95*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
}
else
{
temp2=CheckLastOrderTime("GBPUSD", 0, 0);
if(temp2>10)
{
if((CurTime()-temp2)>3600)
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+95*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
}
else ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+95*Point,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
}
}
//-------USDCHF-------
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
// it is important to enter the market correctly,
// but it is more important to exit it correctly...
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
if(OrderType()==OP_BUY) // long position is opened
{
// check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
}
else // go to short position
{
// check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
return(0);
}
// the end.
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
---