//+------------------------------------------------------------------------------------+
//| Ñîâåòíèê äëÿ ïðîâåäåíèÿ èññëåäîâàíèé |
//| DC2008_revers.mq4 |
//| Copyright © DC2008, Ñåðãåé |
//+------------------------------------------------------------------------------------+
extern double Lots=0.1;
extern int Symb.magic=9001,
nORD.Buy = 5, // ìàêñ êîë-âî îðäåðîâ íà ïîêóïêó
nORD.Sell = 5; // ìàêñ êîë-âî îðäåðîâ íà ïðîäàæó
//----
double PRC.Buy,
PRC.Sell;
int ord.ticket,
nORDER,
ORD.Buy,
ORD.Sell,
max.ORD = 1, // ìàêñ êîë-âî îðäåðîâ íà îäíîì áàðå
Slippage=10;
string Name_Expert="Îðäåð ýêñïåðòà DC2008_revers";
bool Signal.Bars,
ORD.Close.Buy,
ORD.Close.Sell,
Signal.Buy,
Signal.Sell;
//+------------------------------------------------------------------------------------+
int init() {
Signal.Bars=Bars;
ORD.Close.Buy=true;
ORD.Close.Sell=true;
return(0);
}
//+------------------------------------------------------------------------------------+
void deinit() {
Comment("");
}
//+------------------------------------------------------------------------------------+
int start() {
if(AccountBalance()<1000) return(0);
Signal.Sell=false;
Signal.Buy=false;
if(OrdersTotal()==0) {
Signal.Bars=Bars;
ORD.Close.Buy=true;
ORD.Close.Sell=true;
ORD.Buy=0;
ORD.Sell=0;
}
nORDER=OrdersTotal();
//+---------------------------------------------------------------------------------+
// Ñèãíàëû íà ïîêóïêó BUY
//+---------------------------------------------------------------------------------+
if(true
&& High[0]<iLow(NULL,PERIOD_H1,1)
&& ORD.Buy<nORD.Buy
//.........................................ÔÈËÜÒÐÛ...................................
&& true
) {
//----
Signal.Buy=true;
}
//+---------------------------------------------------------------------------------+
// Ñèãíàëû íà ïðîäàæó SELL
//+---------------------------------------------------------------------------------+
if(true
&& Low[0]>iHigh(NULL,PERIOD_H1,1)
&& ORD.Sell<nORD.Sell
//.........................................ÔÈËÜÒÐÛ...................................
&& true
) {
//----
Signal.Sell=true;
}
//+---------------------------------------------------------------------------------+
if(ORD.Close.Buy==false) StopBuy(Symb.magic); // çàêðûòèå îðäåðîâ
if(ORD.Close.Sell==false) StopSell(Symb.magic); // çàêðûòèå îðäåðîâ
//+---------------------------------------------------------------------------------+
// Òîðãîâëÿ: îòêðûòèå íåñêîëüêèõ îðäåðîâ âíóòðè îäíîãî áàðà
//+---------------------------------------------------------------------------------+
if (nORDER<max.ORD) {
if (Signal.Buy) {
OpenBuy(Symb.magic);
return(0);
}
if (Signal.Sell) {
OpenSell(Symb.magic);
return(0);
}
}
//+---------------------------------------------------------------------------------+
// Òîðãîâëÿ: îòêðûòèå îäíîãî îðäåðà âíóòðè îäíîãî áàðà
//+---------------------------------------------------------------------------------+
if (nORDER>=max.ORD) {
if (Signal.Buy && Signal.Bars<Bars) {
OpenBuy(Symb.magic);
return(0);
}
if (Signal.Sell && Signal.Bars<Bars) {
OpenSell(Symb.magic);
return(0);
}
}
return (0);
}
//+------------------------------------------------------------------------------------+
void OpenBuy(int Symbol.magic) {
ORD.Close.Buy=true;
ORD.Close.Sell=false;
if(ORD.Buy>=1 && Ask>PRC.Buy-5*Point) return(0);
ord.ticket=OrderSend
(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,Name_Expert,Symbol.magic,0,Blue);
if(ord.ticket<0) {
Print("Çíà÷åíèå òèêåòà ",ord.ticket," Îøèáêà",GetLastError());
return(0);
}
PRC.Buy=Ask;
Signal.Bars=Bars;
ORD.Buy++;
ORD.Sell=0;
}
//+------------------------------------------------------------------------------------+
void OpenSell(int Symbol.magic) {
ORD.Close.Sell=true;
ORD.Close.Buy=false;
if(ORD.Sell>=1 && Bid<PRC.Sell+5*Point) return(0);
ord.ticket=OrderSend
(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,Name_Expert,Symbol.magic,0,Red);
if(ord.ticket<0) {
Print("Çíà÷åíèå òèêåòà ",ord.ticket," Îøèáêà",GetLastError());
return(0);
}
PRC.Sell=Bid;
Signal.Bars=Bars;
ORD.Sell++;
ORD.Buy=0;
}
//+------------------------------------------------------------------------------------+
void StopBuy(int Symbol.magic) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Symbol.magic) {
if (OrderType()==OP_BUY) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Blue);
}
}
}
}
}
//+------------------------------------------------------------------------------------+
void StopSell(int Symbol.magic) {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==Symbol.magic) {
if (OrderType()==OP_SELL) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Red);
}
}
}
}
}
//+------------------------------------------------------------------------------------+
Comments