Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
iK_ex_tay_v01.1
//+------------------------------------------------------------------+
//| iK_exp_stat_v01.mq4 |
//| Ivan Katsko |
//| |
//+------------------------------------------------------------------+
#property copyright "Ivan Katsko"
#property link ""
//--------------------------------------------------------------- 1 --
#define NONE 0
extern int ShiftMode = 0; // Çàäàâàåìûé ôëàã ñäâèãà îðäåðà: 0 - íå äâèãàòü; 1 - äâèãàòü
extern double Lots = 0; // Æåñòêî çàäàííîå êîëè÷. ëîòîâ ("0" - ñîâåòíèê âûáèðàåò ñàì)
extern int Level = 10; // Ìèíèìàëüíûé óðîâåíü áëèçîñòè ê ðûíêó
extern datetime StartDateTime = D'01.01.2009'; //Íà÷àëî ðàáîòû
extern datetime FinishDateTime = D'31.12.2009'; //Êîíåö ðàáîòû
extern double Prots = 0.07; // Ïðîöåíò ñâîáîäíûõ ñðåäñòâ
extern int SlipPage = 3; // Ïðîñêàëüçûâàíèå êîòèðîêîê - â ïóíêòàõ
bool
New_Bar=false, // Ôëàã íîâîãî áàðà
End_Bar=false, // Ôëàã êîíöà áàðà
Cls=false, // Êðèòåðèé äëÿ çàêðûòèÿ
Work=true, // Ýêñïåðò áóäåò ðàáîòàòü.
Opn_R=false, // Êðèòåðèé ãîòîâíîñòè ê îòêðûòèþ îðäåðîâ
Shift_U=false, // Êðèòåðèé äëÿ ñäâèãà ââåðõ
Shift_D=false, // Êðèòåðèé äëÿ ñäâèãà âíèç
Shift_I=false, // Êðèòåðèé äëÿ èçìåíåíèÿ index_1
Tag_msg1=false, // Ôëàã ñîîáùåíèÿ 1
Tag_msg2=false, // Ôëàã ñîîáùåíèÿ 2
Tag_msg3=true;
string Symb; // Íàçâàíèå ôèíàíñ. èíñòðóìåíòà
static datetime New_Time;
int MaxLength = 30; // Ê-âî îáðàáàòûâàåìûõ âàðîâ
double TakeProfit =20, // ÒÐ äëÿ îòêðûâàåìîãî îðäåðà
StopLoss =30, // SL äëÿ îòêðûâàåìîãî îðäåðà
algoritm = NONE, // Àëãîðèòì: ">0" - "ñåãîäíÿ êàê â÷åðà"; "<0" - "ñåãîäíÿ íå êàê â÷åðà"
sum_TP, // Îæèäàåìàÿ àäàïòèðîâàííàÿ ñóììà äîõîäà
direction = NONE, // Íàïðàâëåíèå òåêóùåå : ">0" - êóïèòü; "<0" - ïðîäàòü
now_direction = NONE, // Íàïðàâëåíèå íàñòîÿùåå: ">0" - êóïèòü; "<0" - ïðîäàòü
// Level, // Ìèíèìàëüíûé óðîâåíü SL/TP
Discret, // Äèñêðåòíîñòü ïîäáîðà: 1 - êàæäàÿ ïîçèöèÿ; 2 - ÷åðåç ïîçèöèþ è ò.ä.
New_Open, // Äîñòèãíóòûé óðîâåíü öåíû
New_SL, // Óðîâåíü çàêðûòèÿ îðäåðà
index_1=2, // Ìíîæèòåëü 1 äëÿ ñäâèãà
index_2; // Ìíîæèòåëü 2 äëÿ ñäâèãà
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
Tag_msg1=true; // Ôëàã ñîîáùåíèÿ 1
New_Time=Time[0]; // Âðåìÿ òåêóùåãî áàðà
switch (Period()) // Óñòàíîâêà index_2
{
case 5: index_2 = 0.1; break; // Ïåðèîä 5-òè ìèíóòíûé
case 15: index_2 = 0.2; break; // Ïåðèîä 15-òè ìèíóòíûé
case 30: index_2 = 0.3; break; // Ïåðèîä 30-òè ìèíóòíûé
case 60: index_2 = 0.4; break; // Ïåðèîä ÷àñîâîé
case 240: index_2 = 0.5; break; // Ïåðèîä 4-õ ÷àñîâîé
case 1440: index_2 = 0.6; break; // Ïåðèîä äíåâíîé
default: break; //Ïåðèîä ÷àñîâîé
}
// Ó÷¸ò îðäåðîâ ïðè èíèöèàëèçàöèè
int
Total, // Êîëè÷åñòâî îðäåðîâ â îêíå
Ticket,
Tip=-1; // Òèï âûáðàí. îðäåðà (B=0,S=1)
double
TP,
SL,
Price; // Öåíà âûáðàííîãî îðäåðà
Symb=Symbol(); // Íàçâàíèå ôèí.èíñòð.
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(); // Òèï âûáðàííîãî îðä.
Price =OrderOpenPrice(); // Öåíà âûáðàíí. îðä.
SL =OrderStopLoss(); // SL âûáðàííîãî îðä.
TP =OrderTakeProfit(); // TP âûáðàííîãî îðä.
}
}
if (Level<MarketInfo(Symb,MODE_STOPLEVEL))
Level=MarketInfo(Symb,MODE_STOPLEVEL); // Ìèíèìàëüíûé óðîâåíü SL/TP
Discret=1; // Ñàìàÿ òî÷íàÿ äèñêðåòèçàöèÿ
if (Total==0) Opn_R=false; // â ñåðåäèíå ïåðèîäà îðäåðîâ íå îòêðûâàòü
if (Ticket>0 // Åñëè åñòü îòêðûòûé îðäåð
&& ShiftMode==0) // È ñäâèã íå óñòàíîâëåí
{
New_Open=Price; // Âíà÷àëå óðîâåíü öåíû ðàâåí ÒÐ
New_SL=SL; // à óðîâåíü çàêðûòèÿ ðàâåí SL
Alert("Èíèò. Îðäåð íå èçìåíåí. TP=",TP,", SL=",SL,": ",Symb,", ",Period());
}
if (Ticket>0 // Åñëè åñòü îòêðûòûé îðäåð
&& ShiftMode==1) // È óñòàíîâëåí ñäâèã
{
// Âîññòàíîâëåíèå ÒÐ ïðè èíèöèàëèçàöèè
if (MathAbs(Price-TP)/Point < 500
&& Tip==0)
TP=Price + New_Stop(TakeProfit+1000)*Point;
if (MathAbs(Price-TP)/Point < 500
&& Tip==1)
TP=Price - New_Stop(TakeProfit+1000)*Point;
if (OrderModify(Ticket,Price,SL,TP,0))
{
Alert("Èíèò. Îðäåð èçìåíåí. TP=",TP,", SL=",SL,": ",Symb,", ",Period());
}
else
{
Alert("Èíèò. Îðäåð íå èçìåíåí, îøèáêà ",GetLastError(),": ",Symb,", ",Period());
}
// Óñòàíîâêà New_Open è New_SL ïðè èíèöèàëèçàöèè
New_Open=0;
New_SL=0;
if (Tip==0) // îðäåð îòêðûò íà ïîêóïêó
{ // ðàçðåøåí ñäâèã
New_Open=Price + New_Stop(TakeProfit)*Point; // Âíà÷àëå óðîâåíü öåíû ðàâåí ÒÐ
New_SL=SL; // à óðîâåíü çàêðûòèÿ ðàâåí SL
if (Bid>New_Open) // íî åñëè ñäâèã óæå íà÷àëñÿ
{
New_Open=Bid; // íîâûé äîñòèãíóòûé óðîâåíü öåíû
New_SL=New_Open // íîâûé óðîâåíü çàêðûòèÿ îðäåðà
-(3*MarketInfo(Symb,MODE_SPREAD)*Point // íèæå íîâîãî óðîâíÿ íà 2 ñòîï óðîâíÿ
+index_2*(New_Open-(Price+(TakeProfit // ïëþñ 0.1 (óâåëè÷èâàåòñÿ)
-MarketInfo(Symb, MODE_SPREAD))*Point))); // ñ ó÷åòîì ñïðåäà
}
}
if (Tip==1) // îðäåð îòêðûò íà ïîêóïêó
{ // ðàçðåøåí ñäâèã
New_Open=Price - New_Stop(TakeProfit)*Point; // Âíà÷àëå óðîâåíü öåíû ðàâåí ÒÐ
New_SL=SL; // à óðîâåíü çàêðûòèÿ ðàâåí SL
if (Ask<New_Open) // íî åñëè ñäâèã óæå íà÷àëñÿ
{
New_Open=Ask; // íîâûé äîñòèãíóòûé óðîâåíü öåíû
New_SL=New_Open // íîâûé óðîâåíü çàêðûòèÿ îðäåðà
+(3*MarketInfo(Symb,MODE_SPREAD)*Point // âûøå íîâîãî óðîâíÿ íà 2 ñòîï óðîâíÿ
-index_2*(New_Open-(Price-(TakeProfit // ïëþñ èíäåêñ (óâåëè÷èâàåòñÿ)
+MarketInfo(Symb, MODE_SPREAD))*Point)));// ñ ó÷åòîì ñïðåäà
}
}
Alert("Ïðè èíèöèàëèçàöèè New_Open=",New_Open,", New_SL=",New_SL,": ",Symb,", ",Period());
// Îòðàçèòü íîâûå óðîâíè íà ãðàôèêå
ObjectDelete("New_Open");
ObjectCreate("New_Open", OBJ_HLINE, 0 , 0, New_Open);
ObjectDelete("New_SL");
ObjectCreate("New_SL", OBJ_HLINE, 0 , 0, New_SL);
} // íåò îòêðûòûõ îðäåðîâ
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
// Ó÷¸ò îðäåðîâ ïðè äåèíèöèàëèçàöèè
int
Total, // Êîëè÷åñòâî îðäåðîâ â îêíå
Tip=-1, // Òèï âûáðàí. îðäåðà (B=0,S=1)
Ticket;
double
TP,
SL,
Price; // Öåíà âûáðàííîãî îðäåðà
Symb=Symbol(); // Íàçâàíèå ôèí.èíñòð.
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(); // Òèï âûáðàííîãî îðä.
Price =OrderOpenPrice(); // Öåíà âûáðàíí. îðä.
SL =OrderStopLoss(); // SL âûáðàííîãî îðä.
}
}
if (Ticket>0 // Åñëè åñòü îòêðûòûé îðäåð
&& ShiftMode==1) // È óñòàíîâëåí ñäâèã
{
//---- ÒÐ äëÿ îòêðûòîãî íå ñäâèíóòîãî îðäåðà
if (Tip==0 // Åñëè îðäåð îòêðûò íà ïîêóïêó,
&& !(Shift_U||Shift_D)) // íå íà÷àò ñäâèã,
TP=Ask + New_Stop(TakeProfit)*Point;
if (Tip==1 // Åñëè îðäåð îòêðûò íà ïðîäàæó,
&& !(Shift_U||Shift_D)) // íå íà÷àò ñäâèã,
TP=Bid - New_Stop(TakeProfit)*Point;
//---- ÒÐ äëÿ îòêðûòîãî è ñäâèíóòîãî îðäåðà
if (Tip==0 // Åñëè îðäåð îòêðûò íà ïîêóïêó,
&& (Shift_U||Shift_D)) // íà÷àò ñäâèã,
{
TP=New_Open + New_Stop(TakeProfit)*Point;
SL=New_SL;
}
if (Tip==1 // Åñëè îðäåð îòêðûò íà ïðîäàæó,
&& (Shift_U||Shift_D)) // íà÷àò ñäâèã,
{
TP=New_Open - New_Stop(TakeProfit)*Point;
SL=New_SL;
}
//---- Óñòàíîâèòü ðåàëüíûé ÒÐ äëÿ îòêðûòîãî îðäåðà
if (OrderModify(Ticket,Price,SL,TP,0))
{
Alert("Äåèíèò. Îðäåð èçìåíåí. TP=",TP,", SL=",SL,": ",Symb,", ",Period());
return;
}
else
{
Alert("Äåèíèò. Îðäåð íå èçìåíåí, îøèáêà ",GetLastError(),": ",Symb,", ",Period());
}
} // íåò îòêðûòûõ îðäåðîâ
ObjectDelete("New_Open");
ObjectDelete("New_SL");
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
Fun_New_Bar(); // Îïðåäåëåíèå íà÷àëà íîâîãî áàðà
//----
int
Total, // Êîëè÷åñòâî îðäåðîâ â îêíå
Tip=-1, // Òèï âûáðàí. îðäåðà (B=0,S=1)
Ticket; // Íîìåð îðäåðà
datetime
Time_Begin, // Ìîìåíò íà÷àëà ðàáî÷åãî ïåðèîäà
Op_Time; // Âðåìÿ îòêðûòèÿ îðäåðà
double
Lot, // Êîëè÷. ëîòîâ â âûáðàííîì îðäåðå
Lts, // Êîëè÷. ëîòîâ â îòêðûâàåìîì îðäåðå
Min_Lot, // Ìèíèìàëüíîå êîëè÷åñòâî ëîòîâ
Step, // Øàã èçìåíåíèÿ ðàçìåðà ëîòà
Free, // Òåêóùèå ñâîáîäíûå ñðåäñòâà
One_Lot, // Ñòîèìîñòü îäíîãî ëîòà
Price, // Öåíà âûáðàííîãî îðäåðà
SL, // SL âûáðàííîãî îðäåðà
TP; // TP âûáðàííîãî îðäåðà
bool
Ans =false, // Îòâåò ñåðâåðà ïîñëå çàêðûòèÿ
Opn_B=false, // Êðèòåðèé äëÿ îòêðûòèÿ Buy
Opn_S=false; // Êðèòåðèé äëÿ îòêðûòèÿ Sell
Cls =false; // Êðèòåðèé äëÿ çàêðûòèÿ
Time_Begin=GetTickCount(); // çàñåêàåì íà÷àëî âûïîëíåíèÿ ïðîãðàììû
//------------------- Îäèí ðàç çà ïåðèîä --
if (New_Bar) // Îäèí ðàç çà ïåðèîä âûïîëíÿåòñÿ ñëåäóþùåå
{
Tag_msg1=true;
End_Bar=false;
// Opn_R=true;
// Ïðåäâàðèò.îáðàáîòêà
if(TimeCurrent()<StartDateTime) // Âðåìÿ ñòàðòà íå íàñòóïèëî
{
Alert("Âðåìÿ ñòàðòà íå íàñòóïèëî. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
if (TimeCurrent()>=FinishDateTime) //Âðåìÿ ôèíèøà íàñòóïèëî
{
Alert("Âðåìÿ ôèíèøà íàñòóïèëî. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
if(Bars < MaxLength) // Íåäîñòàòî÷íî áàðîâ
{
Alert("Íåäîñòàòî÷íî áàðîâ â îêíå. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
if(Work==false) // Êðèòè÷åñêàÿ îøèáêà
{
Alert("Êðèòè÷åñêàÿ îøèáêà. Ýêñïåðò íå ðàáîòàåò.",": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
}
//------------------- Êîíåö îäèí ðàç çà ïåðèîä --
if ((TimeCurrent()-Time[0]-50)>(Period()-1)*60 //Çà 10 ñåêóíä äî íà÷àëà ïåðèîäà
&& Tag_msg1
)
{
Alert("Âíèìàíèå! Íà÷èíàåòñÿ íîâûé ïåðèîä!",": ",Symb,", ",Period());
Tag_msg1=false;
End_Bar=true;
}
//----------------------- Ó÷¸ò îðäåðîâ
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(); // Íîìåð âûáðàíí. îðä.
Op_Time=OrderOpenTime(); // Âðåìÿ îòêðûòèÿ âûáð.îðä.
Tip =OrderType(); // Òèï âûáðàííîãî îðä.
Price =OrderOpenPrice(); // Öåíà âûáðàíí. îðä.
SL =OrderStopLoss(); // SL âûáðàííîãî îðä.
TP =OrderTakeProfit(); // TP âûáðàííîãî îðä.
Lot =OrderLots(); // Êîëè÷åñòâî ëîòîâ
}
}
// Òîðãîâûå êðèòåðèè
TakeProfit = iCustom(0, 0, "iK_tay_v01",Discret, Level, 0, 1)/Point; //îïðåäåëÿåì Òåéê Ïðîôèò
StopLoss = iCustom(0, 0, "iK_tay_v01",Discret, Level, 1, 1)/Point; //îïðåäåëÿåì Ñòîï Ëîññ
algoritm = iCustom(0, 0, "iK_tay_v01",Discret, Level, 4, 1); //îïðåäåëÿåì àëãîðèòì
sum_TP = iCustom(0, 0, "iK_tay_v01",Discret, Level, 2, 1);
direction = iCustom(0, 0, "iK_tay_v01",Discret, Level, 3, 1); //îïðåäåëÿåì òåêóùåå íàïðàâëåíèå
now_direction = iCustom(0, 0, "iK_tay_v01",Discret, Level, 3, 0); //îïðåäåëÿåì íàñòîÿùåå íàïðàâëåíèå
if (New_Bar) //  íà÷àëå íîâîãî ïåðèîäà
{
if (Total==0) // Åñëè íåò îòêðûòûõ îðäåðîâ
Opn_R=true; // ðàçðåøèòü îòêðûòèå îðäåð
else // åñëè îðäåð áûë îòêðûò
Opn_R=false; // çàïðåòèòü îòêðûòèå (ïðè çàêðûòèè òåðìèíàëîì)
}
if (Total==0) // Åñëè íåò îòêðûòûõ îðäåðîâ
{
Cls=false; // Åù¸ íå÷åãî çàêðûâàòü
Shift_U=false; // Îáíóëÿåì êðèòåðèé äëÿ ñäâèãà ââåðõ
Shift_D=false; // Îáíóëÿåì êðèòåðèé äëÿ ñäâèãà âíèç
ObjectDelete("New_Open"); // Îäàëÿåì ëèíèè
ObjectDelete("New_SL");
}
if (direction==NONE && New_Bar) // Íàïðàâëåíèå íå îïðåäåëåíî
{
Cls = true; // ðàçðåøèì çàêðûòèå îðäåðà
Alert("Íàïðàâëåíèå òîðãîâëè íå îïðåäåëåíî",": ",Symb,", ",Period());
}
if ((direction==NONE && Total==0) || // Íàïðàâëåíèå íå îïðåäåëåíî èëè
(sum_TP<=0 && Total==0)) // áóäåò îòðèöàòåëüíûé ðåçóëüòàò
{
Opn_R=false; // â ñåðåäèíå ïåðèîäà îðäåðîâ íå îòêðûâàòü
return; //Âûõîä èç start()
}
// Óñëîâèÿ îòêðûòèÿ îðäåðà
if (Total==0 // îòêðûòûõ îðäåðîâ íåò,
&& direction!=0 // îïðåäåëåíî íàïðàâëåíèå,
&& Opn_R) // îðäåð â ýòîì ïåðèîäå åù¸ íå îòêðûâàëñÿ
{
if (direction>0) // è íàïðàâëåíèå ââåðõ, òî
{
Opn_B=true; // íàäî îòêðûâàòü îðäåð íà Buy
}
else // íàïðàâëåíèå âíèç -
{
Opn_S=true; // íà Sell
}
}
// Óñëîâèÿ çàêðûòèÿ îðäåðà â êîíöå ïåðèîäà
if (Total>0 // åñòü îòêðûòûé îðäåð,
&& End_Bar // â êîíöå ïåðèîäà
// && Op_Time<Time[0] // îí îòêðûò â ïðåäûäóùèé ïåðèîä
&& !(Shift_U||Shift_D) // íå íà÷àò ñäâèã
&& ((direction!=now_direction) // ïðåäïîëàãàåòñÿ íå òî æå íàïðàâëåíèå
|| (direction==0 && now_direction==0)))// íå øòàòíàÿ ñèòóàöèÿ
{
Cls = true; // íàäî çàêðûâàòü îðäåð
}
// Óñëîâèÿ ñäâèãà îðäåðà è ñîáñòâåííî ñäâèã
if (Total>0 // Åñëè åñòü îòêðûòûé îðäåð,
&& ShiftMode==1) // óñòàíîâëåí ôëàã ñäâèãà
{
if (Tip==0 // îðäåð îòêðûò íà ïîêóïêó
&& Bid>New_Open) // äîñòèãíóòî ÒÐ
{ // òî íàäî äâèãàòü ââåðõ
index_1=3;
switch (Period()) // Óñòàíîâêà index_2
{
case 5: index_2 = 0.1; break; // Ïåðèîä 5-òè ìèíóòíûé
case 15: index_2 = 0.2; break; // Ïåðèîä 15-òè ìèíóòíûé
case 30: index_2 = 0.3; break; // Ïåðèîä 30-òè ìèíóòíûé
case 60: index_2 = 0.4; break; // Ïåðèîä ÷àñîâîé
case 240: index_2 = 0.5; break; // Ïåðèîä 4-õ ÷àñîâîé
case 1440: index_2 = 0.6; break; // Ïåðèîä äíåâíîé
default: break; //Ïåðèîä ÷àñîâîé
}
New_Open=Bid; // íîâûé äîñòèãíóòûé óðîâåíü öåíû
New_SL=New_Open // íîâûé óðîâåíü çàêðûòèÿ îðäåðà
-(index_1*MarketInfo(Symb,MODE_SPREAD)*Point // íèæå íîâîãî óðîâíÿ íà 2 ñòîï óðîâíÿ
+index_2*(New_Open-(Price+(TakeProfit // ïëþñ 0.1 (óâåëè÷èâàåòñÿ)
-MarketInfo(Symb, MODE_SPREAD))*Point))); // ñ ó÷åòîì ñïðåäà
Shift_U=true;
Alert("Îðäåð ñäâèíóò ââåðõ íà ",New_Open,", New_SL=",New_SL,": ",Symb,", ",Period());
}
if (Tip==1 // îðäåð îòêðûò íà ïðîäàæó
&& Ask<New_Open) // äîñòèãíóòî ÒÐ
{ // òî íàäî äâèãàòü âíèç
index_1=3;
switch (Period()) // Óñòàíîâêà index_2
{
case 5: index_2 = 0.1; break; // Ïåðèîä 5-òè ìèíóòíûé
case 15: index_2 = 0.2; break; // Ïåðèîä 15-òè ìèíóòíûé
case 30: index_2 = 0.3; break; // Ïåðèîä 30-òè ìèíóòíûé
case 60: index_2 = 0.4; break; // Ïåðèîä ÷àñîâîé
case 240: index_2 = 0.5; break; // Ïåðèîä 4-õ ÷àñîâîé
case 1440: index_2 = 0.6; break; // Ïåðèîä äíåâíîé
default: break; //Ïåðèîä ÷àñîâîé
}
New_Open=Ask; // íîâûé äîñòèãíóòûé óðîâåíü öåíû
New_SL=New_Open // íîâûé óðîâåíü çàêðûòèÿ îðäåðà
+(index_1*MarketInfo(Symb,MODE_SPREAD)*Point // âûøå íîâîãî óðîâíÿ íà 2 ñòîï óðîâíÿ
-index_2*(New_Open-(Price-(TakeProfit // ïëþñ 0.1 (óâåëè÷èâàåòñÿ)
+MarketInfo(Symb, MODE_SPREAD))*Point))); // ñ ó÷åòîì ñïðåäà
Shift_D=true;
Alert("Îðäåð ñäâèíóò âíèç íà ",New_Open,", New_SL=",New_SL,": ",Symb,", ",Period());
}
// Èçìåíèòü íîâûé óðîâåíü çàêðûòèÿ îðäåðà
index_1=0.99*index_1;
index_2=0.99*index_2;
if (Tip==0 // îðäåð îòêðûò íà ïîêóïêó
&& (Shift_D || Shift_U)) // áûë íà÷àò ñäâèã
{ // òî íàäî äâèãàòü ââåðõ
New_SL=New_Open // íîâûé óðîâåíü çàêðûòèÿ îðäåðà
-(index_1*MarketInfo(Symb,MODE_SPREAD)*Point// íèæå íîâîãî óðîâíÿ íà 2 ñòîï óðîâíÿ
+index_2*(New_Open-(Price+(TakeProfit // ïëþñ 0.1 (óâåëè÷èâàåòñÿ)
-MarketInfo(Symb, MODE_SPREAD))*Point))); // ñ ó÷åòîì ñïðåäà
}
if (Tip==1 // îðäåð îòêðûò íà ïðîäàæó
&& (Shift_D || Shift_U)) // áûë íà÷àò ñäâèã
{ // òî íàäî äâèãàòü âíèç
New_SL=New_Open // íîâûé óðîâåíü çàêðûòèÿ îðäåðà
+(index_1*MarketInfo(Symb,MODE_SPREAD)*Point// âûøå íîâîãî óðîâíÿ íà 2 ñòîï óðîâíÿ
-index_2*(New_Open-(Price-(TakeProfit // ïëþñ 0.1 (óâåëè÷èâàåòñÿ)
-MarketInfo(Symb, MODE_SPREAD))*Point))); // ñ ó÷åòîì ñïðåäà
}
// Îòðàçèòü íîâûå óðîâíè íà ãðàôèêå
ObjectDelete("New_Open");
ObjectCreate("New_Open", OBJ_HLINE, 0 , 0, New_Open);
ObjectDelete("New_SL");
ObjectCreate("New_SL", OBJ_HLINE, 0 , 0, New_SL);
}
//--------------------------------------------------------------- 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()
}
// Óñëîâèÿ çàêðûòèÿ îðäåðîâ ïðè ñäâèãå
if (((Tip==0) // Åñëè ïðè äâèæåíèè ââåðõ
&& Shift_U // íà÷àò ñäâèã ââåðõ
&& (Bid<New_SL)) || // óðîâåíü íèæå íîâîãî óðîâíÿ çàêðûòèÿ îðäåðà èëè
((Tip==1) // Åñëè ïðè äâèæåíèè âíèç
&& Shift_D // íà÷àò ñäâèã âíèç
&& (Ask>New_SL))) // óðîâåíü âûøå íîâîãî óðîâíÿ çàêðûòèÿ îðäåðà
{
Cls = true; // íàäî çàêðûâàòü îðäåð
Opn_R=false; // äî íà÷àëà íîâîãî ïåðèîäà îðäåðîâ íå îòêðûâàòü
}
//--------------------------------------------------------------- 6 --
// Çàêðûòèå îðäåðîâ
while(Ticket>0) // Öèêë çàêðûòèÿ îðä.
{
if (Tip==0 && Cls==true) // Îòêðûò îðäåð Buy..
{ // è åñòü êðèòåðèé çàêð
Alert("Ïîïûòêà çàêðûòü Buy ",Ticket,". Îæèäàíèå îòâåòà..",": ",Symb,", ",Period());
RefreshRates(); // Îáíîâëåíèå äàííûõ
Ans=OrderClose(Ticket,Lot,Bid,2); // Çàêðûòèå Buy
if (Ans==true) // Ïîëó÷èëîñü :)
{
Alert ("Çàêðûò îðäåð Buy ",Ticket,": ",Symb,", ",Period());
break; // Âûõîä èç öèêëà çàêð
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
{
Opn_R=false; // äî íà÷àëà íîâîãî ïåðèîäà îðäåðîâ íå îòêðûâàòü
continue; // Ïîâòîðíàÿ ïîïûòêà
}
return; // Âûõîä èç start()
}
if (Tip==1 && Cls==true) // Îòêðûò îðäåð Sell..
{ // è åñòü êðèòåðèé çàêð
Alert("Ïîïûòêà çàêðûòü Sell ",Ticket,". Îæèäàíèå îòâåòà..",": ",Symb,", ",Period());
RefreshRates(); // Îáíîâëåíèå äàííûõ
Ans=OrderClose(Ticket,Lot,Ask,2); // Çàêðûòèå Sell
if (Ans==true) // Ïîëó÷èëîñü :)
{
Alert ("Çàêðûò îðäåð Sell ",Ticket,": ",Symb,", ",Period());
break; // Âûõîä èç öèêëà çàêð
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
{
Opn_R=false; // äî íà÷àëà íîâîãî ïåðèîäà îðäåðîâ íå îòêðûâàòü
continue; // Ïîâòîðíàÿ ïîïûòêà
}
return; // Âûõîä èç start()
}
break; // Âûõîä èç while
}
//--------------------------------------------------------------- 8 --
// Îòêðûòèå îðäåðîâ
while(Opn_R) // Öèêë îòêðûòèÿ îðä.
{
if (Total==0 && Opn_B==true) // Îòêðûòûõ îðä. íåò +
{ // êðèòåðèé îòêð. Buy
RefreshRates(); // Îáíîâëåíèå äàííûõ
SL=Ask - New_Stop(StopLoss)*Point; // Âû÷èñëåíèå SL îòêð.
if (ShiftMode==0) // Âû÷èñëåíèå TP îòêð.
{TP=Ask + New_Stop(TakeProfit)*Point;}
else
{TP=Ask + New_Stop(TakeProfit+1000)*Point;}
Alert("Ïîïûòêà îòêðûòü Buy. Îæèäàíèå îòâåòà..",": ",Symb,", ",Period());
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//Îòêðûòèå Buy
if (Ticket > 0) // Ïîëó÷èëîñü :)
{
New_Open=Ask + New_Stop(TakeProfit)*Point; // Äîñòèãíóòûé óðîâåíü öåíû
New_SL=SL; // Óðîâåíü çàêðûòèÿ îðäåðà
Opn_R=false; // Áîëüøå îðäåðîâ â ýòîì ïåðèîäå íå îòêðûâàòü
Alert ("Îòêðûò îðäåð Buy ",Ticket,": ",Symb,", ",Period());
return; // Âûõîä èç start()
}
if (Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
if (Total==0 && Opn_S==true) // Îòêðûòûõ îðä. íåò +
{ // êðèòåðèé îòêð. Sell
RefreshRates(); // Îáíîâëåíèå äàííûõ
SL=Bid + New_Stop(StopLoss)*Point; // Âû÷èñëåíèå SL îòêð.
if (ShiftMode==0) // Âû÷èñëåíèå TP îòêð.
{TP=Bid - New_Stop(TakeProfit)*Point;}
else
{TP=Bid - New_Stop(TakeProfit+1000)*Point;}
Alert("Ïîïûòêà îòêðûòü Sell. Îæèäàíèå îòâåòà..",": ",Symb,", ",Period());
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);//Îòêðûòèå Sel
if (Ticket > 0) // Ïîëó÷èëîñü :)
{
New_Open=Bid - New_Stop(TakeProfit)*Point; // Äîñòèãíóòûé óðîâåíü öåíû
New_SL=SL; // Óðîâåíü çàêðûòèÿ îðäåðà
Opn_R=false; // Áîëüøå îðäåðîâ â ýòîì ïåðèîäå íå îòêðûâàòü
Alert ("Îòêðûò îðäåð Sell ",Ticket,": ",Symb,", ",Period());
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 130:Alert("Ñëèøêîì áëèçêî ñòîïû",": ",Symb,", ",Period());
Level++; // Ïðèðàñòèòü ìèíèìàëüíûé óðîâåíü SL/TP
Opn_R=false; // Îðäåðîâ â ýòîì ïåðèîäå íå îòêðûâàòü
// Sleep(5000); // Ïðîñòîå ðåøåíèå
return(1); // Âûõîä èç ôóíêöèè
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); // Âûõîä èç ôóíêöèè
}
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // Ïðîâåðêà ñòîï-ïðèê.
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// Ìèíèì. äèñòàíöèÿ
if (Parametr < Min_Dist) // Åñëè ìåíüøå äîïóñò.
{
Parametr=Min_Dist; // Óñòàíîâèì äîïóñò.
}
return(Parametr); // Âîçâðàò çíà÷åíèÿ
}
//+------------------------------------------------------------------+
void Fun_New_Bar() // Ô-èÿ îáíàðóæåíèÿ íîâîãî áàðà
{
New_Bar=false; // Íîâîãî áàðà íåò
if(New_Time!=Time[0]) // Ñðàâíèâàåì âðåìÿ
{
New_Time=Time[0]; // Òåïåðü âðåìÿ òàêîå
New_Bar=true; // Ïîéìàëñÿ íîâûé áàð
}
}
//-------------------------------------------------------------- 12 --
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
---