Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
iK_ex_LinReg_v0
//+------------------------------------------------------------------+
//| iK_ex_LinReg.mq4 |
//| Ivan Katsko |
//| |
//+------------------------------------------------------------------+
#property copyright "Ivan Katsko"
#property link "ICQ:372739628"
//--------------------------------------------------------------- 1 --
#define NONE 0
extern string S3="Öåëü ïðè ïðîáîå îòí. øèðèíû êàíàëà";
extern double t0=2.618;
extern string S4="Èñïîëüçîâàòü äëÿ ðàñ÷¸òà Close,\n åñëè false - High/Low";
extern int StartT=5;
extern int FinishT=23;
extern int useCl=1;
extern int Rev=1;
extern datetime StartDateTime = D'01.01.2010'; //Íà÷àëî ðàáîòû
extern datetime FinishDateTime = D'31.12.2010'; //Êîíåö ðàáîòû
extern double Lots = 1; // Æåñòêî çàäàííîå êîëè÷. ëîòîâ ("0" - ñîâåòíèê âûáèðàåò ñàì)
extern double Prots = 0.07; // Ïðîöåíò ñâîáîäíûõ ñðåäñòâ
extern int SlipPage = 3; // Ïðîñêàëüçûâàíèå êîòèðîêîê - â ïóíêòàõ
bool
useClose,
LookInd=true,
Msg=true,
New_Bar=false, // Ôëàã íîâîãî áàðà
Cls=false, // Êðèòåðèé äëÿ çàêðûòèÿ
Work=true, // Ýêñïåðò áóäåò ðàáîòàòü.
First=false, // Ðàçðåøèòü ïåðâóþ ñäåëêó
Second=false, // Ðàçðåøèòü âòîðóþ ñäåëêó
Reverse=false, // Êðèòåðèé îòêðûòèÿ îáðàòíîãî îðäåðà
Opn_B=false, // Êðèòåðèé äëÿ îòêðûòèÿ Buy
Opn_S=false; // Êðèòåðèé äëÿ îòêðûòèÿ Sell
string Symb, // Íàçâàíèå ôèíàíñ. èíñòðóìåíòà
StartTime,
FinishTime,
FinTim;
int StPos;
static datetime New_Time;
double dirOpen = NONE, // Íàïðàâëåíèå òåêóùåå : ">0" - êóïèòü; "<0" - ïðîäàòü
Up, Dn, // íàïðàâëåíèå ââåðõ/âíèç
Profit,
RevUp, RevDn, RevTP, RevSL;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Fun_New_Bar(); // Îïðåäåëåíèå íà÷àëà íîâîãî áàðà
//----
int
Total, // Êîëè÷åñòâî îðäåðîâ â îêíå
Tip=-1, // Òèï âûáðàí. îðäåðà (B=0,S=1)
Ticket; // Íîìåð îðäåðà
double
Lot, // Êîëè÷. ëîòîâ â âûáðàííîì îðäåðå
Lts, // Êîëè÷. ëîòîâ â îòêðûâàåìîì îðäåðå
Min_Lot, // Ìèíèìàëüíîå êîëè÷åñòâî ëîòîâ
Step, // Øàã èçìåíåíèÿ ðàçìåðà ëîòà
Free, // Òåêóùèå ñâîáîäíûå ñðåäñòâà
One_Lot, // Ñòîèìîñòü îäíîãî ëîòà
SL, // SL âûáðàííîãî îðäåðà
TP; // TP âûáðàííîãî îðäåðà
bool
Ans =false; // Îòâåò ñåðâåðà ïîñëå çàêðûòèÿ
Cls =false; // Êðèòåðèé äëÿ çàêðûòèÿ
//------------------- Îäèí ðàç çà ïåðèîä --
if (New_Bar) // Îäèí ðàç çà ïåðèîä âûïîëíÿåòñÿ ñëåäóþùåå
{
// Ïðåäâàðèò.îáðàáîòêà
if(TimeCurrent()<StartDateTime) // Âðåìÿ ñòàðòà íå íàñòóïèëî
{
Alert("Âðåìÿ ñòàðòà íå íàñòóïèëî. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
if (TimeCurrent()>=FinishDateTime) //Âðåìÿ ôèíèøà íàñòóïèëî
{
Alert("Âðåìÿ ôèíèøà íàñòóïèëî. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
if(Work==false) // Êðèòè÷åñêàÿ îøèáêà
{
Alert("Êðèòè÷åñêàÿ îøèáêà. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
}
//----------------------- Ó÷¸ò îðäåðîâ
Symb=Symbol(); // Íàçâàíèå ôèí.èíñòð.
Total=0; // Êîëè÷åñòâî îðäåðîâ
for(int i=1; i<=OrdersTotal(); i++) // Öèêë ïåðåáîðà îðäåð
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
{ // Àíàëèç îðäåðîâ:
if (OrderSymbol()!=Symb)continue; // Íå íàø ôèí. èíñòðóì
if (OrderType()>1) // Ïîïàëñÿ îòëîæåííûé
{
Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
Total++; // Ñ÷¸ò÷èê ðûíî÷í. îðä
if (Total>1) // Íå áîëåå îäíîãî îðä
{
Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
Ticket =OrderTicket(); // Íîìåð âûáðàíí. îðä.
Tip =OrderType(); // Òèï âûáðàííîãî îðä.
SL =OrderStopLoss(); // SL âûáðàííîãî îðä.
TP =OrderTakeProfit(); // TP âûáðàííîãî îðä.
Profit =OrderProfit(); // Profit âûáðàííîãî îðä.
Lot =OrderLots(); // Êîëè÷åñòâî ëîòîâ
}
}
if(Total==0 && StartTime!="00:00"
&& (TimeCurrent()<StrToTime(TimeToStr(CurTime(), TIME_DATE)+" "+StartTime)
|| TimeCurrent()>StrToTime(TimeToStr(CurTime(), TIME_DATE)+" "+FinishTime)))
return; // Âûõîä èç start()
if(Total==0 && !First && TimeCurrent()==StrToTime(TimeToStr(CurTime(), TIME_DATE)+" "+StartTime))
{
First=true;
Second=false;
}
if(TimeCurrent()==StrToTime(TimeToStr(CurTime(), TIME_DATE)+" "+FinishTime))
{
Second=false;
LookInd=true;
}
if(!LookInd) return;
if(Total==0) // Åñëè íåò îòêðûòûõ îðäåðîâ
{
Cls=false; // Åù¸ íå÷åãî çàêðûâàòü
ObjectDelete("New_Open"); // Îäàëÿåì ëèíèè
ObjectDelete("New_SL");
}
if(Total==0 && LookInd && TimeCurrent()==StrToTime(TimeToStr(CurTime(), TIME_DATE)+" "+StartTime))
if(iCustom(0, 0, "iK_Dserg-LinReg","",t0,"",useClose,FinishTime,StartTime,0, 0)==0 &&
iCustom(0, 0, "iK_Dserg-LinReg","",t0,"",useClose,FinishTime,StartTime,3, 0)==0)
LookInd=false;
//---- Èñõîäíûå äàííûå
if(Total==0 && !Second)
{
SL = iCustom(0, 0, "iK_Dserg-LinReg","",t0,"",useClose,FinishTime,StartTime,2, 0);
Up = iCustom(0, 0, "iK_Dserg-LinReg","",t0,"",useClose,FinishTime,StartTime,5, 0);
Dn = iCustom(0, 0, "iK_Dserg-LinReg","",t0,"",useClose,FinishTime,StartTime,6, 0);
TP = iCustom(0, 0, "iK_Dserg-LinReg","",t0,"",useClose,FinishTime,StartTime,7, 0);
RevSL=SL;
RevTP=TP;
RevUp=Up;
RevDn=Dn;
}
if(Up==0 && Dn==0)
return; // Âûõîä èç start()
//----
if(Second && Total==0)
{
if(RevUp>0)
if(Profit>0)
{
TP=RevUp;
SL=RevTP+RevUp-RevSL;
Up=RevDn;
Dn=RevUp;
}
else
{
TP=/*RevSL+*/RevTP/*-RevUp*/;
SL=2*RevSL-RevUp;
Up=RevUp;
Dn=RevDn;
}
if(RevDn>0)
if(Profit>0)
{
TP=RevDn;
SL=RevTP+RevDn-RevSL;
Up=RevDn;
Dn=RevUp;
}
else
{
TP=/*RevSL-*/(/*RevDn-*/RevTP);
SL=2*RevSL-RevDn;
Up=RevUp;
Dn=RevDn;
}
}
//---- Êîììóòàòîð
if(Reverse && Total==0) // îòêðûòûõ îðäåðîâ íåò,
if(Up>0 || Dn>0)
{
if(Second)
{
LookInd=false;
Second=false;
}
if(First)
{
First=false;
Second=true;
}
}
//---- Óñëîâèÿ îòêðûòèÿ îðäåðà
if(Total==0) // îòêðûòûõ îðäåðîâ íåò,
{
Opn_B=false;
Opn_S=false;
if(Up>0)
Opn_B=true; // íàäî îòêðûâàòü îðäåð íà Buy
if(Dn>0)
Opn_S=true; // íà Sell
}
//---- Óñëîâèÿ çàêðûòèÿ îðäåðà
if((Tip==0 // îðäåð îòêðûò íà ïîêóïêó
&& Ask>=TP)
|| // èëè
(Tip==1 // îðäåð îòêðûò íà ïðîäàæó
&& Bid<=TP && Bid>0))
{
Cls = true; // íàäî çàêðûâàòü îðäåð
}
//--------------------------------------------------------------- 7 --
// Ñòîèìîñòü îðäåðîâ
RefreshRates(); // Îáíîâëåíèå äàííûõ
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Ìèíèì. êîëè÷. ëîòîâ
Free =AccountFreeMargin(); // Ñâîáîäí ñðåäñòâà
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Ñòîèìîñòü 1 ëîòà
Step =MarketInfo(Symb,MODE_LOTSTEP); // Øàã èçìåíåí ðàçìåðà
if (Lots > 0) // Åñëè çàäàíû ëîòû,òî
Lts =Lots; // ñ íèìè è ðàáîòàåì
else // % ñâîáîäíûõ ñðåäñòâ
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Äëÿ îòêðûòèÿ
if(Lts < Min_Lot) Lts=Min_Lot; // Íå ìåíüøå ìèíèìàëüí
if (Lts*One_Lot > Free && // Ëîò äîðîæå ñâîáîäí.
TimeCurrent()<(Time[0] + 2*60) && // íå ïðîøëî åù¸ áîëåå 2-õ ìèíóò
Total==0) // è îðäåð íå îòêðûò
{
Alert(" Íå õâàòàåò äåíåã íà ", Lts," ëîò",": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
//--------------------------------------------------------------- 6 --
// Çàêðûòèå îðäåðîâ
while(Ticket>0) // Öèêë çàêðûòèÿ îðä.
{
if(Tip==0 && Cls==true) // Îòêðûò îðäåð Buy..
{ // è åñòü êðèòåðèé çàêð
Alert("Ïîïûòêà çàêðûòü Buy: ",Symb,", ",Period());
RefreshRates(); // Îáíîâëåíèå äàííûõ
Ans=OrderClose(Ticket,Lot,Bid,2,Blue); // Çàêðûòèå Buy
if(Ans==true) // Ïîëó÷èëîñü :)
break; // Âûõîä èç öèêëà çàêð
if(Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
{
continue; // Ïîâòîðíàÿ ïîïûòêà
}
return; // Âûõîä èç start()
}
if(Tip==1 && Cls==true) // Îòêðûò îðäåð Sell..
{ // è åñòü êðèòåðèé çàêð
Alert("Ïîïûòêà çàêðûòü Sell: ",Symb,", ",Period());
RefreshRates(); // Îáíîâëåíèå äàííûõ
Ans=OrderClose(Ticket,Lot,Ask,2,Red); // Çàêðûòèå Sell
if(Ans==true) // Ïîëó÷èëîñü :)
break; // Âûõîä èç öèêëà çàêð
if(Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
{
continue; // Ïîâòîðíàÿ ïîïûòêà
}
return; // Âûõîä èç start()
}
break; // Âûõîä èç while
}
//---- Îòêðûòèå îðäåðîâ
while(Total==0) // Öèêë îòêðûòèÿ îðä.
{
if(Opn_B==true) // Îòêðûòûõ îðä. íåò +
{ // êðèòåðèé îòêð. Buy
RefreshRates(); // Îáíîâëåíèå äàííûõ
Alert("Ïîïûòêà îòêðûòü Buy: ",Symb,", ",Period());
Alert("Ask=",Ask," SL=",SL," TP=",TP);
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,0,0,0,Blue);//Îòêðûòèå Buy
if(Ticket > 0) // Ïîëó÷èëîñü :)
{
return; // Âûõîä èç start()
}
if(Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
if(Opn_S==true) // Îòêðûòûõ îðä. íåò +
{ // êðèòåðèé îòêð. Sell
RefreshRates(); // Îáíîâëåíèå äàííûõ
Alert("Ïîïûòêà îòêðûòü Sell: ",Symb,", ",Period());
Alert("Bid=",Bid," SL=",SL," TP=",TP);
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP,0,0,0,Red);//Îòêðûòèå Sel
if(Ticket > 0) // Ïîëó÷èëîñü :)
{
return; // Âûõîä èç start()
}
if(Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
break; // Âûõîä èç while
}
//----
return; // Âûõîä èç start()
}
//-------------------------------------------------------------- 10 --
int Fun_Error(int Error) // Ô-èÿ îáðàáîò îøèáîê
{
switch(Error)
{ // Ïðåîäîëèìûå îøèáêè
case 4: Alert("Òîðãîâûé ñåðâåð çàíÿò. Ïðîáóåì åù¸ ðàç..",": ",Symb,", ",Period());
Sleep(3000); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
case 128: Alert("Èñòåê ñðîê îæèäàíèÿ..",": ",Symb,", ",Period());
return(1); // Âûõîä èç ôóíêöèè
case 129: Alert("Íåïðàâèëüíàÿ öåíà..",": ",Symb,", ",Period());
return(1); // Âûõîä èç ôóíêöèè
case 130:Alert("Ñëèøêîì áëèçêî ñòîïû..",": ",Symb,", ",Period());
break; // Âûõîä èç ôóíêöèè
case 135:Alert("Öåíà èçìåíèëàñü. Ïðîáóåì åù¸ ðàç..",": ",Symb,", ",Period());
RefreshRates(); // Îáíîâèì äàííûå
return(1); // Âûõîä èç ôóíêöèè
case 136:Alert("Íåò öåí. Æä¸ì íîâûé òèê..",": ",Symb,", ",Period());
while(RefreshRates()==false) // Äî íîâîãî òèêà
Sleep(1); // Çàäåðæêà â öèêëå
return(1); // Âûõîä èç ôóíêöèè
case 137:Alert("Áðîêåð çàíÿò. Ïðîáóåì åù¸ ðàç..",": ",Symb,", ",Period());
Sleep(3000); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
case 138:Alert("Çàïðîøåííàÿ öåíà óñòàðåëà..",": ",Symb,", ",Period());
return(1); // Âûõîä èç ôóíêöèè
case 145:Alert("Îðäåð ñëèøêîì áëèçîê ê ðûíêó . Ïðîáóåì ÷åðåç 15ñåê.",": ",Symb,", ",Period());
Cls = false;
Sleep(15000); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
case 146:Alert("Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïðîáóåì åù¸..",": ",Symb,", ",Period());
Sleep(500); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
// Êðèòè÷åñêèå îøèáêè
case 2: Alert("Îáùàÿ îøèáêà.",": ",Symb,", ",Period());
return(0); // Âûõîä èç ôóíêöèè
case 5: Alert("Ñòàðàÿ âåðñèÿ òåðìèíàëà.",": ",Symb,", ",Period());
Work=false; // Áîëüøå íå ðàáîòàòü
return(0); // Âûõîä èç ôóíêöèè
case 64: Alert("Ñ÷åò çàáëîêèðîâàí.",": ",Symb,", ",Period());
Work=false; // Áîëüøå íå ðàáîòàòü
return(0); // Âûõîä èç ôóíêöèè
case 133:Alert("Òîðãîâëÿ çàïðåùåíà.",": ",Symb,", ",Period());
return(0); // Âûõîä èç ôóíêöèè
case 134:Alert("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè.",": ",Symb,", ",Period());
return(0); // Âûõîä èç ôóíêöèè
default: Alert("Âîçíèêëà îøèáêà ",Error,": ",Symb,", ",Period()); // Äðóãèå âàðèàíòû
return(0); // Âûõîä èç ôóíêöèè
}
}
//+------------------------------------------------------------------+
void Fun_New_Bar() // Ô-èÿ îáíàðóæåíèÿ íîâîãî áàðà
{
New_Bar=false; // Íîâîãî áàðà íåò
if(New_Time!=Time[0]) // Ñðàâíèâàåì âðåìÿ
{
New_Time=Time[0]; // Òåïåðü âðåìÿ òàêîå
New_Bar=true; // Ïîéìàëñÿ íîâûé áàð
}
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
New_Time=Time[0]; // Âðåìÿ òåêóùåãî áàðà
switch(StartT)
{
case 0: StartTime = "00:00"; break;
case 1: StartTime = "01:00"; break;
case 2: StartTime = "02:00"; break;
case 3: StartTime = "03:00"; break;
case 4: StartTime = "04:00"; break;
case 5: StartTime = "05:00"; break;
case 6: StartTime = "06:00"; break;
case 7: StartTime = "07:00"; break;
default: StartTime = "07:00"; break;
}
switch(FinishT)
{
case 16: FinishTime = "16:00"; break;
case 17: FinishTime = "17:00"; break;
case 18: FinishTime = "18:00"; break;
case 19: FinishTime = "19:00"; break;
case 20: FinishTime = "20:00"; break;
case 21: FinishTime = "21:00"; break;
case 22: FinishTime = "22:00"; break;
case 23: FinishTime = "23:00"; break;
default: FinishTime = "16:00"; break;
}
if(useCl==1) useClose = true; else useClose = false;
if(Rev==1) Reverse = true; else Reverse = false;
// Ó÷¸ò îðäåðîâ ïðè èíèöèàëèçàöèè
bool Msg=true;
int
Total, // Êîëè÷åñòâî îðäåðîâ â îêíå
Ticket,
Tip=-1; // Òèï âûáðàí. îðäåðà (B=0,S=1)
double
TP,
SL;
for(int i=1; i<=OrdersTotal(); i++) // Öèêë ïåðåáîðà îðäåð
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
{ // Àíàëèç îðäåðîâ:
if (OrderSymbol()!=Symbol())continue; // Íå íàø ôèí. èíñòðóì
if (OrderType()>1) // Ïîïàëñÿ îòëîæåííûé
{
Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.",": ",Symbol(),", ",Period());
return; // Âûõîä èç start()
}
Total++; // Ñ÷¸ò÷èê ðûíî÷í. îðä
if (Total>1) // Íå áîëåå îäíîãî îðä
{
Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.",": ",Symbol(),", ",Period());
return; // Âûõîä èç start()
}
Ticket =OrderTicket(); // Íîìåð âûáðàíí. îðä.
Tip =OrderType(); // Òèï âûáðàííîãî îðä.
SL =OrderStopLoss(); // SL âûáðàííîãî îðä.
TP =OrderTakeProfit(); // TP âûáðàííîãî îðä.
}
}
// Îòðàçèòü íîâûå óðîâíè íà ãðàôèêå
ObjectDelete("New_Open");
ObjectDelete("New_SL");
} // íåò îòêðûòûõ îðäåðîâ
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
// Ó÷¸ò îðäåðîâ ïðè äåèíèöèàëèçàöèè
int
Total, // Êîëè÷åñòâî îðäåðîâ â îêíå
Tip=-1, // Òèï âûáðàí. îðäåðà (B=0,S=1)
Ticket;
double
TP,
SL;
for(int i=1; i<=OrdersTotal(); i++) // Öèêë ïåðåáîðà îðäåð
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé
{ // Àíàëèç îðäåðîâ:
if (OrderSymbol()!=Symbol())continue; // Íå íàø ôèí. èíñòðóì
if (OrderType()>1) // Ïîïàëñÿ îòëîæåííûé
{
Alert("Îáíàðóæåí îòëîæåííûé îðäåð. Ýêñïåðò íå ðàáîòàåò.",": ",Symbol(),", ",Period());
return; // Âûõîä èç start()
}
Total++; // Ñ÷¸ò÷èê ðûíî÷í. îðä
if (Total>1) // Íå áîëåå îäíîãî îðä
{
Alert("Íåñêîëüêî ðûíî÷íûõ îðäåðîâ. Ýêñïåðò íå ðàáîòàåò.",": ",Symbol(),", ",Period());
return; // Âûõîä èç start()
}
Ticket =OrderTicket(); // Íîìåð âûáðàíí. îðä.
Tip =OrderType(); // Òèï âûáðàííîãî îðä.
SL =OrderStopLoss(); // SL âûáðàííîãî îðä.
}
}
ObjectDelete("New_Open");
ObjectDelete("New_SL");
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
---