//+------------------------------------------------------------------+
//| 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.