//+----------------------------------------------------------------------------+
//| ExpertCLOR_2MA&StATR_v01.mq4 |
//| Ñåðãåé Çàèêèí as Vuki |
//| f_kombi@mail.ru |
//+----------------------------------------------------------------------------+
//| Ñîâåòíèê êîòîðûé: |
//| 1. Çàêðûâàåò îðäåð ïî ïåðåñå÷åíèþ 2-õ ÌÀ (5 è 7 ïî óìîë÷àíèþ); |
//| 2. Àâòîìàòè÷åñêè äâèãàåò ñòîï ïî èíäèêàòîðó StopATR_auto; |
//| 3. Ïåðåâîäèò îòêðûòóþ ïîçèöèþ â áåçóáûòîê ïðè äîñòèæåíèè çàäàííîãî óðîâíÿ|
//| |
//| ÂÍÈÌÀÍÈÅ!!! Ñîâåòíèê òîëüêî ÇÀÊÐÛÂÀÅÒ îòêðûòûå îðäåðà!!! |
//+----------------------------------------------------------------------------+
// Âõîäíûå ïàðàìåòðû:
// MA_CloseOnOff - âêëþ÷åíèå (1) èëè âûêëþ÷åíèå (0) ðåæèìà çàêðûòèÿ îðäåðà ïî ïåðåñå÷åíèþ ÌÀ
// StATR_CloseOnOff - âêëþ÷åíèå (1) èëè âûêëþ÷åíèå (0) óñòàíîâêè è èçìåíåíèÿ ñòîïà ïî èíäèêàòîðó StopATR_auto
// MA_Fast_Pe - ïåðèîä áûñòðîé ÌÀ
// MA_Fast_Ty - òèï áûñòðîé ÌÀ (0-SMA, 1-EMA, 2-SMMA(ñãëàæåííàÿ), 3-LWMA(âçâåøåííàÿ))
// MA_Fast_Pr - öåíà áûñòðîé ÌÀ (0-Close, 1-Open, 2-High, 3-Low, 4-HL/2, 5-HLC/3, 6-HLCC/4)
// MA_Slow_Pe - ïåðèîä ìåäëåííîé ÌÀ
// MA_Slow_Ty - òèï ìåäëåííîé ÌÀ (0-SMA, 1-EMA, 2-SMMA(ñãëàæåííàÿ), 3-LWMA(âçâåøåííàÿ))
// MA_Slow_Pr - öåíà ìåäëåííîé ÌÀ (0-Close, 1-Open, 2-High, 3-Low, 4-HL/2, 5-HLC/3, 6-HLCC/4)
// TimeFrame - ðàáî÷èé òàéìôðåéì (1-Ì1, 5-Ì5, 15-Ì15á 60-Í1, 240-Í4)
// BezUb - óðîâåíü ïðîôèòà â ïóíêòàõ, ïðè êîòîðîì îðäåð ïåðåâîäèòñÿ â áåçóáûòîê
// CountBarsForShift - ïàðàìåòð èí-ðà StopATR_auto - ðàññòîÿíèå â áàðàõ äëÿ âûâîäà óðîâíÿ ñòîïà íà ýêðàí
// CountBarsForAverage - ïàðàìåòð èí-ðà StopATR_auto - êîëè÷åñòâî áàðîâ óñðåäíåíèÿ äëÿ ðàññ÷åòà ñòîïà
// Target - ïàðàìåòð èí-ðà StopATR_auto - êýôôèöèåíò óâåëè÷åíèÿ çíà÷åíèÿ ñðåäíåãî áàðà äëÿ ðàññ÷åòà ñòîïà
//-----
// Èíäèêàòîð StopATR_auto ÎÁßÇÀÒÅËÜÍÎ äîëæåí áûòü â ïàïêå Indicators âàøåãî ÌÒ4
// Èíäèêàòîð StopATR_auto íà ãðàôèê ìîæíî íå âåøàòü, åãî ñîâåòíèê ñàì ïîâåñèò
//-----
#property copyright "Ñåðãåé Çàèêèí as Vuki"
#property link "f_kombi@mail.ru"
//-----
extern int MA_CloseOnOff =1;
extern int StATR_CloseOnOff =1;
extern int MA_Fast_Pe =5;
extern int MA_Fast_Ty =MODE_EMA;
extern int MA_Fast_Pr =PRICE_CLOSE;
extern int MA_Slow_Pe =7;
extern int MA_Slow_Ty =MODE_EMA;
extern int MA_Slow_Pr =PRICE_OPEN;
extern int TimeFrame =PERIOD_M5;
extern int BezUb =15;
extern int CountBarsForShift =7;
extern int CountBarsForAverage=12;
extern double Target =2.0;
//----
int Opened=0;
int OpenedBuy=0;
int OpenedSell=0;
int OpenedBuyTicket=0;
int OpenedSellTicket=0;
int CloseBuy=0;
int CloseSell=0;
int Closed=0;
double StopL;
//expert initialization function
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//expert deinitialization function
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt;
bool errbool=true;
int errint=0;
//----
CloseBuy=0; CloseSell=0;
// ïðîâåðêà, åñòü ëè îòêðûòûå ðûíî÷íûå èëè îòëîæåííûå îðäåðà
OpenedBuy=0;
OpenedSell=0;
for(cnt=0; cnt < OrdersTotal(); cnt++)
{
errbool=OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(errbool!=true) Comment("Îøèáêà âûáîðà îðäåðà ïî ïîçèöèè!","\n","\n");
if(OrderType()==OP_BUY && OrderSymbol()==Symbol()) {OpenedBuy=1; OpenedBuyTicket=OrderTicket();}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol()) {OpenedSell=1; OpenedSellTicket=OrderTicket();}
}
//åñëè åñòü ðûíî÷íûé áàé, òî èçìåíÿåì ñòîïëîññ â áó è ïî ñòîïàòð
if(OpenedBuy==1)
{
StopL=iCustom(NULL,TimeFrame,"StopATR_auto",Blue,Brown,false,CountBarsForShift,CountBarsForAverage,Target,2,0);
StopL=NormalizeDouble(StopL,Digits);
errbool=OrderSelect(OpenedBuyTicket, SELECT_BY_TICKET, MODE_TRADES);
if(errbool!=true) Comment("Îøèáêà âûáîðà îðäåðà ïî ïîçèöèè!","\n","\n");
// Ïåðåâîä â áåçóáûòîê îðäåðà Áàé
if(BezUb!=0 && (Bid - OrderOpenPrice())>=(BezUb*Point) && OrderStopLoss() < OrderOpenPrice())
{
errbool=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+Point,OrderTakeProfit(),0,White);
errint=GetLastError();
if(errbool!=true&&errint>1) Comment(errint," Îøèáêà ìîäèôèêàöèè òåêóùåãî îðäåðà Áàé ïî áåçóáûòêó!","\n","\n");
else Comment("Ñðàáîòàë ïåðåâîä òåêóùåãî îðäåðà Áàé â áåçóáûòîê!\n");
return(0);
}
// Ìîäèôèêàöèÿ ñòîïà ïî ÑòîïÀÒÐ îðäåðà Áàé
if(OrderStopLoss() < StopL && StATR_CloseOnOff==1)
{
errbool=OrderModify(OrderTicket(),OrderOpenPrice(),StopL,OrderTakeProfit(),0,White);
errint=GetLastError();
if(errbool!=true&&errint>1) Comment(errint," Îøèáêà ìîäèôèêàöèè òåêóùåãî îðäåðà Áàé ïî ÑòîïÀÒÐ!","\n","\n");
return(0);
}
}
//åñëè åñòü ðûíî÷íûé ñåëë, òî èçìåíÿåì ñòîïëîññ â áó è ïî ñòîïàòð
if(OpenedSell==1)
{
StopL=iCustom(NULL,TimeFrame,"StopATR_auto",Blue,Brown,false,CountBarsForShift,CountBarsForAverage,Target,1,0);
StopL=NormalizeDouble(StopL,Digits);
errbool=OrderSelect(OpenedSellTicket, SELECT_BY_TICKET, MODE_TRADES);
if(errbool!=true) Comment("Îøèáêà âûáîðà îðäåðà ïî ïîçèöèè!","\n","\n");
// Ïåðåâîä â áåçóáûòîê îðäåðà Ñåëë
if(BezUb!=0 && (OrderOpenPrice() - Ask)>=(BezUb*Point) && OrderStopLoss() > OrderOpenPrice())
{
errbool=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-Point,OrderTakeProfit(),0,White);
errint=GetLastError();
if(errbool!=true&&errint>1) Comment(errint," Îøèáêà ìîäèôèêàöèè òåêóùåãî îðäåðà Ñåëë ïî áåçóáûòêó!","\n","\n");
else Comment("Ñðàáîòàë ïåðåâîä òåêóùåãî îðäåðà Ñåëë â áåçóáûòîê!\n");
return(0);
}
// Ìîäèôèêàöèÿ ñòîïà ïî ÑòîïÀÒÐ îðäåðà Ñåëë
if(StATR_CloseOnOff==1)
{
// Comment("çäåñü ðàáîòàåò! StopL = ",StopL,"\n");
if(OrderStopLoss()==0 || OrderStopLoss() > StopL) {
errbool=OrderModify(OrderTicket(),OrderOpenPrice(),StopL,OrderTakeProfit(),0,White);
errint=GetLastError();
if(errbool!=true&&errint>1) Comment(errint," Îøèáêà ìîäèôèêàöèè òåêóùåãî îðäåðà Ñåëë ïî ÑòîïÀÒÐ!","\n","\n");
return(0);
}
}
}
if(MA_CloseOnOff==1) FunctionSignalClose();
// Åñëè åñòü ñèãíàë íà çàêðûòèå, çàêðûâàåì
if((OpenedBuy==1&&OpenedSell==0&&CloseBuy==1&&CloseSell==0)||(OpenedBuy==0&&OpenedSell==1&&CloseBuy==0&&CloseSell==1))
{
if(OpenedBuy==1)
{
errbool=OrderSelect(OpenedBuyTicket, SELECT_BY_TICKET, MODE_TRADES);
if(errbool!=true) Comment("Îøèáêà âûáîðà îðäåðà ïî ïîçèöèè!","\n","\n");
}
if(OpenedSell==1)
{
errbool=OrderSelect(OpenedSellTicket, SELECT_BY_TICKET, MODE_TRADES);
if(errbool!=true) Comment("Îøèáêà âûáîðà îðäåðà ïî ïîçèöèè!","\n","\n");
}
Closed=FunctionCloseTrade(OrderTicket(),OrderType(),OrderLots());
if(Closed==1) OpenedBuy=0;
if(Closed==2) OpenedSell=0;
return(0);
}
return(0);
}
// Ôóíêöèÿ ðàññ÷åòà ñèãíàëîâ Çàêðûòü Áàé, Çàêðûòü Ñåëë
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void FunctionSignalClose()
{
double maFast1,maSlow1,maFast2,maSlow2;
maFast1=iMA(NULL,TimeFrame,MA_Fast_Pe,0,MA_Fast_Ty,MA_Fast_Pr,1);
maSlow1=iMA(NULL,TimeFrame,MA_Slow_Pe,0,MA_Slow_Ty,MA_Slow_Pr,1);
maFast2=iMA(NULL,TimeFrame,MA_Fast_Pe,0,MA_Fast_Ty,MA_Fast_Pr,2);
maSlow2=iMA(NULL,TimeFrame,MA_Slow_Pe,0,MA_Slow_Ty,MA_Slow_Pr,2);
if(OpenedBuy==1)
{
if(maFast1<=maSlow1 && maFast2 > maSlow2) {CloseBuy=1; CloseSell=0;}
}
if(OpenedSell==1)
{
if(maFast1>=maSlow1 && maFast2 < maSlow2) {CloseSell=1; CloseBuy=0;}
}
return;
}
// Ôóíêöèÿ çàêðûòèÿ ïîçèöèé Áàé èëè Ñåëë. Âîçâðàùàåò 1 åñëè çàêðûë Áàé, 2 åñëè çàêðûë Ñåëë, 0 åñëè îøèáêà
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int FunctionCloseTrade(int Tic, int Type, double Lot)
{
int Ret;
double PrCl;
color ArCo;
bool errbool;
//----
if(Type==OP_BUY)
{
PrCl=Bid;
ArCo=Aqua;
Ret=1;
}
if(Type==OP_SELL)
{
PrCl=Ask;
ArCo=Aqua;
Ret=2;
}
errbool=OrderClose(Tic,Lot,PrCl,10,ArCo);
if(errbool!=true)
{
Comment("Îøèáêà ",GetLastError()," çàêðûòèÿ ðûíî÷íîãî îðäåðà!","\n","\n");
return(0);
}
return(Ret);
}
//+------------------------------------------------------------------+
Comments