Price Data Components
Orders Execution
Indicators Used
Miscellaneous
2
Views
0
Downloads
0
Favorites
iK_3D
//+------------------------------------------------------------------+
//| iK_3D.mq4 |
//| Ivan Katsko |
//| |
//+------------------------------------------------------------------+
#property copyright "Ivan Katsko"
#property link "ICQ:372739628"
//--------------------------------------------------------------- 1 --
#define NONE 0
extern bool Shift = true; // Çàäàâàåìûé ôëàã ñäâèãà îðäåðà
extern int TrendMode = 1;
//extern bool MACD = true; // Èñïîëüçîâàòü MACD êàê èíäèêàòîð òðåíäà
//extern bool MA = true; // Èñïîëüçîâàòü MA êàê èíäèêàòîð òðåíäà
//extern bool Silense = true; // Èñïîëüçîâàòü Silense êàê èíäèêàòîð òðåíäà
//extern bool iKTrend = true; // Èñïîëüçîâàòü iKTrend êàê èíäèêàòîð òðåíäà
extern int SilenseLevel = 10; // Ïåðîä ÌÀ/MACD
extern int PeriodMA = 12; // Ïåðîä ÌÀ/MACD
extern int PeriodStoch = 3; // Çàìåäëåíèå Stochastic
extern double Lots = 1; // Æåñòêî çàäàííîå êîëè÷. ëîòîâ ("0" - ñîâåòíèê âûáèðàåò ñàì)
//extern int Discret=1; // Äèñêðåòíîñòü ïîäáîðà: 1 - êàæäàÿ ïîçèöèÿ; 2 - ÷åðåç ïîçèöèþ è ò.ä.
extern double Stop = 0;
extern double Profit = 0;
extern int Level = 10; // Ìèíèìàëüíûé óðîâåíü áëèçîñòè ê ðûíêó
extern datetime StartDateTime = D'01.01.2011'; //Íà÷àëî ðàáîòû
extern datetime FinishDateTime = D'31.12.2011'; //Êîíåö ðàáîòû
extern double Prots = 0.07; // Ïðîöåíò ñâîáîäíûõ ñðåäñòâ
extern int SlipPage = 3; // Ïðîñêàëüçûâàíèå êîòèðîêîê - â ïóíêòàõ
bool
MACD = true,
MA = true,
Silense = true,
iKTrend = true,
New_Bar=false, // Ôëàã íîâîãî áàðà
End_Bar=false, // Ôëàã êîíöà áàðà
Cls=false, // Êðèòåðèé äëÿ çàêðûòèÿ
Work=true, // Ýêñïåðò áóäåò ðàáîòàòü.
Opn_R=false, // Êðèòåðèé ãîòîâíîñòè ê îòêðûòèþ îðäåðîâ
Shift_U=false, // Êðèòåðèé äëÿ ñäâèãà ââåðõ
Shift_D=false, // Êðèòåðèé äëÿ ñäâèãà âíèç
Scalp_Up,
TrendUP, TrendDN, // Òðåíä Ââåðõ, Âíèç
FMStoch, NMStoch, SMStoch, // Ðàçðåøåíî ïåðâîå, ñëåäóþùåå è âòîðîå èçìåðåíèå Ñòîõàñòèêà
AllowBuy, AllowSell, // Ðàçðåøåíî ïîêóïàòü, ïðîäàâàòü
AllowFindForw, AllowFindBack, // Ðàçðåøèòü ïîèê Âïåðåä, Íàçàä
AllowFindTralingStop=false, // Ðàçðåøèòü ïîèñê ÒðåéëèíãÑòîïà
AllowEsc =false, // Ðàçðåøèòü ñáðîñ ïîñëå çàêðûòèÿ îðäåðà
EscStoch =false,
EscMACD =false,
EscMA =false,
EcsSilense =false,
EcsSiKTrend =false,
Tag_msg1=false, // Ôëàã ñîîáùåíèÿ 1
Tag_msg2=false, // Ôëàã ñîîáùåíèÿ 2
Tag_msg3=true;
string Symb; // Íàçâàíèå ôèíàíñ. èíñòðóìåíòà
static datetime New_Time;
int MaxLength = 30, // Ê-âî îáðàáàòûâàåìûõ âàðîâ
NPeriod, NNPeriod; // Ñëåäóþùèé è ïîñëå-ñëåäóþùèé ïåðèîä
double TakeProfit =10, // ÒÐ äëÿ îòêðûâàåìîãî îðäåðà
StopLoss =10, // SL äëÿ îòêðûâàåìîãî îðäåðà
OpenLevelUP, OpenLevelDN, // Óðîâåíü äëÿ îòêðûòèÿ Ââåðõ, Âíèç
StopTradeLevelUP, StopTradeLevelDN, // Óðîâåíü âêëþ÷åíèÿ ÑòîïÒðåéäà Ââåðõ, Âíèç
StopTradeUP, StopTradeDN, // ÑòîïÒðåéäà Ââåðõ, Âíèç
algoritm = NONE, // Àëãîðèòì: ">0" - "ñåãîäíÿ êàê â÷åðà"; "<0" - "ñåãîäíÿ íå êàê â÷åðà"
sum_TP, // Îæèäàåìàÿ àäàïòèðîâàííàÿ ñóììà äîõîäà
dirOpen = NONE, // Íàïðàâëåíèå òåêóùåå : ">0" - êóïèòü; "<0" - ïðîäàòü
Trade2 = NONE, // Íàïðàâëåíèå òîðãîâëè â òåêóùåì ÒÔ íà 1-îì áàðå
MACD1 = NONE, //
MACD0 = NONE, //
MA0 = NONE, //
MA1 = NONE, //
iK0 = NONE,
Silense0= NONE,
Silense1= NONE,
StochM = NONE,
StochM1 = NONE,
StochS = NONE,
ScalpLevel,
// now_direction = NONE, // Íàïðàâëåíèå íàñòîÿùåå: ">0" - êóïèòü; "<0" - ïðîäàòü
// Level, // Ìèíèìàëüíûé óðîâåíü SL/TP
// Discret, // Äèñêðåòíîñòü ïîäáîðà: 1 - êàæäàÿ ïîçèöèÿ; 2 - ÷åðåç ïîçèöèþ è ò.ä.
New_Open, // Äîñòèãíóòûé óðîâåíü öåíû
New_SL, // Óðîâåíü çàêðûòèÿ îðäåðà
index_1=2, // Ìíîæèòåëü 1 äëÿ ñäâèãà
index_2; // Ìíîæèòåëü 2 äëÿ ñäâèãà
//+------------------------------------------------------------------+
//| 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(); // Êîëè÷åñòâî ëîòîâ
}
}
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");
// NextTrade = iCustom(0, 0, "iK_trend_v01.6",PeriodMA,History,VerExtr,4,NextPeriod, 3, 0);
}
//---- Èñõîäíûå äàííûå
if(MACD)
{
MACD0 = iMACD(0,NNPeriod,PeriodMA,PeriodMA*2,9,PRICE_MEDIAN,MODE_MAIN,0);
MACD1 = iMACD(0,NNPeriod,PeriodMA,PeriodMA*2,9,PRICE_MEDIAN,MODE_MAIN,1);
}
if(MA)
{
MA0 = iMA(0,NNPeriod,PeriodMA,0,MODE_EMA,PRICE_MEDIAN,0);
MA1 = iMA(0,NNPeriod,PeriodMA,0,MODE_EMA,PRICE_MEDIAN,1);
}
if(Silense)
{
Silense0 = iCustom(0, NNPeriod, "Silense",PeriodMA,288, 1, 0);
Silense1 = iCustom(0, NNPeriod, "Silense",PeriodMA,288, 1, 1);
}
if(iKTrend)
iK0= iCustom(0, NNPeriod, "iK_trend_v01.6",PeriodMA,100,4,4,0, 2, 0);
StochM = iStochastic(0,NPeriod,5,3,PeriodStoch,MODE_EMA,0,MODE_MAIN,0);
StochM1 = iStochastic(0,NPeriod,5,3,PeriodStoch,MODE_EMA,0,MODE_MAIN,1);
StochS = iStochastic(0,NPeriod,5,3,PeriodStoch,MODE_EMA,0,MODE_SIGNAL,0);
//---- Ñáðîñ ïîñëå çàêðûòèÿ îðäåðà
if(AllowEsc && Total==0)
{AllowEsc=false;
TrendUP=false;
TrendDN=false;
AllowFindForw=false;
}
//---- Ñáðîñ ïðè íà÷àëå èëè èçìåíåíèè òðåíäà
if(Total==0)
{
if((AllowBuy && Bid<StopLoss)
|| (AllowSell && Ask>StopLoss))
EscStoch=true;
if(MACD
&&((MACD0>MACD1 && TrendDN)
||(MACD0<MACD1 && TrendUP)
||(!TrendUP && !TrendDN && MACD0>MACD1)
||(!TrendUP && !TrendDN && MACD0<MACD1)))
EscMACD=true;
if(MA
&&((MA0>MA1 && TrendDN)
||(MA0<MA1 && TrendUP)
||(!TrendUP && !TrendDN && MA0>MA1)
||(!TrendUP && !TrendDN && MA0<MA1)))
EscMA=true;
if(Silense
&& Silense0<=Silense1)
if(iKTrend
&& iK0==0)
EcsSiKTrend=true;
if(EscStoch
||EcsSiKTrend
||(EcsSilense
&&(MACD || MA))
||(EscMACD
&& MACD && !MA)
||(EscMA
&& !MACD && MA)
||(EscMACD && EscMA
&& MACD && MA)
)
{FMStoch =true;
NMStoch =false;
SMStoch =false;
TrendUP =false;
TrendDN =false;
AllowBuy =false;
AllowSell =false;
AllowFindTralingStop=false;
EscStoch =false;
EscMACD =false;
EscMA =false;
EcsSilense =false;
EcsSiKTrend =false;
OpenLevelDN=0.99*Low[0];
OpenLevelUP=1.01*High[0];
StopLoss=NONE;
ObjectDelete("TrendUP");
ObjectDelete("TrendDN");
ObjectDelete("OpenLevelUP");
ObjectDelete("OpenLevelDN");
ObjectDelete("StopLoss");
}
}
//---- Îïðåäåëèì òðåíä
//Alert("TrendUP=",TrendUP," TrendDN=",TrendDN," Silense=",Silense," MACD=",MACD," MA=",MA," Silense0=",Silense0);
if((TrendDN || (!TrendUP && !TrendDN))
&& ((MACD && !MA && !Silense && MACD0>MACD1)
||(MA && !MACD && !Silense && MA0>MA1)
||(MACD && MA && !Silense && MACD0>MACD1 && MA0>MA1)
||(MACD && !MA && Silense && MACD0>MACD1 && Silense0>Silense1 && Silense0>SilenseLevel)
||(!MACD && MA && Silense && MA0>MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
||(MACD && MA && Silense && MACD0>MACD1 && MA0>MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
||(iKTrend && !Silense && iK0>0)
||(iKTrend && Silense && iK0>0 && Silense0>Silense1 && Silense0>SilenseLevel)))
{TrendUP=true;
TrendDN=false;
ObjectDelete("TrendUP");
ObjectCreate("TrendUP",OBJ_VLINE,0,Time[0],0);
ObjectSet("TrendUP",OBJPROP_COLOR,Green);
}
else
if((TrendUP || (!TrendUP && !TrendDN))
&& ((MACD && !MA && !Silense && MACD0<MACD1)
||(MA && !MACD && !Silense && MA0<MA1)
||(MACD && MA && !Silense && MACD0<MACD1 && MA0<MA1)
||(MACD && !MA && Silense && MACD0<MACD1 && Silense0>Silense1 && Silense0>SilenseLevel)
||(!MACD && MA && Silense && MA0<MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
||(MACD && MA && Silense && MACD0<MACD1 && MA0<MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
||(iKTrend && !Silense && iK0<0)
||(iKTrend && Silense && iK0<0 && Silense0>Silense1 && Silense0>SilenseLevel)))
{TrendDN=true;
TrendUP=false;
ObjectDelete("TrendDN");
ObjectCreate("TrendDN",OBJ_VLINE,0,Time[0],0);
ObjectSet("TrendDN",OBJPROP_COLOR,Red);
}
else
if((MACD && !MA && !Silense && MACD0==MACD1)
||(MA && !MACD && !Silense && MA0==MA1)
||(MACD && MA && !Silense && MACD0<MACD1 && MA0>MA1)
||(MACD && MA && !Silense && MACD0>MACD1 && MA0<MA1)
||(MACD && !MA && Silense && (MACD0==MACD1 || Silense0<=Silense1))
||(!MACD && MA && Silense && (MA0==MA1 || Silense0<=Silense1))
||(MACD && MA && Silense && ((MACD0<MACD1 && MA0>MA1) || Silense0<=Silense1))
||(MACD && MA && Silense && ((MACD0>MACD1 && MA0<MA1) || Silense0<=Silense1))
||(iKTrend && !Silense && iK0==0)
||(iKTrend && Silense && (iK0==0 || Silense0<Silense1)))
{TrendUP=false;
TrendDN=false;
ObjectDelete("TrendUP");
ObjectDelete("TrendDN");
}
//---- Îïðåäåëèì ñèãíàë äëÿ âõîäà â ðûíîê
if(FMStoch //Æäåì âñòðå÷íóþ âîëíó
&&
((TrendUP && StochM>StochS)
||
(TrendDN && StochM<StochS)))
{NMStoch=true;
FMStoch=false;
SMStoch=false;
}
if(NMStoch //Ýòî âñòðå÷íàÿ âîëíà
&&
((TrendUP && StochM<StochS)
||
(TrendDN && StochM>StochS)))
{SMStoch=true;
NMStoch=false;
OpenLevelDN=0.99*Low[0];
OpenLevelUP=1.01*High[0];
}
if(SMStoch) //Ýòî îñíîâíàÿ âîëíà
{if(TrendUP && StochM<=80 && StochM>StochM1) AllowBuy=true;
else
if(TrendDN && StochM>=20 && StochM<StochM1) AllowSell=true;
else
{AllowBuy=false;
AllowSell=false;
}
}
//---- Èùåì òî÷êè âõîäà â ðûíîê
if(SMStoch && Total==0)
{if(TrendUP) //Äëÿ âõîäà ïî BUY
if(iHighest(NULL,0,MODE_HIGH,3,1)==2
&& !(iLowest(NULL,0,MODE_LOW,3,1)==2)
&& OpenLevelUP>High[iHighest(NULL,0,MODE_HIGH,3,1)])
{OpenLevelUP=High[iHighest(NULL,0,MODE_HIGH,3,1)];
StopLoss=OpenLevelUP;
AllowFindBack=true;
}
if(TrendDN) //Äëÿ âõîäà ïî SELL
if(iLowest(NULL,0,MODE_LOW,3,1)==2
&& !(iHighest(NULL,0,MODE_HIGH,3,1)==2)
&& OpenLevelDN<Low[iLowest(NULL,0,MODE_LOW,3,1)])
{OpenLevelDN=Low[iLowest(NULL,0,MODE_LOW,3,1)];
StopLoss=OpenLevelDN;
AllowFindBack=true;
}
}
//---- Èùåì Ñòîï óðîâåíü Íàçàä
if(AllowFindBack && Total==0)
{if(TrendUP)
for(i=3; i<20; i++)
{
if(StopLoss>Low[i])
StopLoss=Low[i];
else
{AllowFindBack=false;
AllowFindForw=true;
break;
}
}
if(TrendDN)
for(i=3; i<20; i++)
{
if(StopLoss<High[i])
{
StopLoss=High[i];
}
else
{AllowFindBack=false;
AllowFindForw=true;
break;
}
}
}
//---- Èùåì Ñòîï óðîâåíü Âïåðåä
if(AllowFindForw && Total==0)
{if(TrendUP)
if(StopLoss>Low[0])
StopLoss=Low[0];
if(TrendDN)
if(StopLoss<High[0])
StopLoss=High[0];
}
//---- Âêëþ÷åíèå ÑòîïÒðåéäà
if(Total==1)
{
StopTradeLevelUP=Price+(OpenLevelUP-StopLoss);
StopTradeLevelDN=Price-(StopLoss-OpenLevelDN);
if(!AllowFindTralingStop)
{if(Tip==0 && Bid>StopTradeLevelUP)
{StopLoss=Price + SlipPage*Point;
AllowFindTralingStop=true;
AllowFindForw=false;
}
if(Tip==1 && Bid<StopTradeLevelDN)
{StopLoss=Price - SlipPage*Point;
AllowFindTralingStop=true;
AllowFindForw=false;
}
}
}
//---- Ïîèñê ÒðåéëèíãÑòîïà
if(AllowFindTralingStop)
{if(Tip==1)
if(iHighest(NULL,0,MODE_HIGH,3,1)==2
&& StopLoss>High[iHighest(NULL,0,MODE_HIGH,3,1)])
StopLoss=High[iHighest(NULL,0,MODE_HIGH,3,1)];
if(Tip==0)
if(iLowest(NULL,0,MODE_LOW,3,1)==2
&& StopLoss<Low[iLowest(NULL,0,MODE_LOW,3,1)])
StopLoss=Low[iLowest(NULL,0,MODE_LOW,3,1)];
}
//---- Îòîáðàçèòü èíôîðìàöèþ
if(TrendUP)
{Comment(
"Opn_R=",Opn_R,"\n",
"TrendUP=",TrendUP,"\n",
"NMStoch=",NMStoch,"\n",
"SMStoch=",SMStoch,"\n",
"AllowFindForw=",AllowFindForw,"\n",
"AllowBuy=",AllowBuy,"\n",
"Opn_B=",Opn_B,"\n",
"SL=",(Price-StopLoss)/Point
);
ObjectDelete("OpenLevelUP");
ObjectCreate("OpenLevelUP",OBJ_HLINE,0,0,OpenLevelUP);
ObjectSet("OpenLevelUP",OBJPROP_COLOR,Green);
ObjectDelete("StopLoss");
ObjectCreate("StopLoss",OBJ_HLINE,0,Time[0],StopLoss);
ObjectSet("StopLoss",OBJPROP_COLOR,Brown);
}
else
if(TrendDN)
{Comment(
"Opn_R=",Opn_R,"\n",
"TrendDN=",TrendDN,"\n",
"NMStoch=",NMStoch,"\n",
"SMStoch=",SMStoch,"\n",
"AllowFindForw=",AllowFindForw,"\n",
"AllowSell=",AllowSell,"\n",
"Opn_S=",Opn_S,"\n",
"SL=",(StopLoss-Price)/Point
);
ObjectDelete("OpenLevelDN");
ObjectCreate("OpenLevelDN",OBJ_HLINE,0,Time[0],OpenLevelDN);
ObjectSet("OpenLevelDN",OBJPROP_COLOR,Red);
ObjectDelete("StopLoss");
ObjectCreate("StopLoss",OBJ_HLINE,0,0,StopLoss);
ObjectSet("StopLoss",OBJPROP_COLOR,Brown);
}
else
{Comment("");
ObjectDelete("OpenLevelUP");
ObjectDelete("OpenLevelDN");
ObjectDelete("StopLoss");
}
//---- Óñëîâèÿ çàêðûòèÿ îðäåðà
if((Tip==0 // îðäåð îòêðûò íà ïîêóïêó
&& Bid<StopLoss)
|| // èëè
(Tip==1 // îðäåð îòêðûò íà ïðîäàæó
&& Ask>StopLoss))
{
Cls = true; // íàäî çàêðûâàòü îðäåð
Opn_R=false; // äî íà÷àëà íîâîãî ïåðèîäà îðäåðîâ íå îòêðûâàòü
}
//---- Óñëîâèÿ îòêðûòèÿ îðäåðà
if(Total==0 // îòêðûòûõ îðäåðîâ íåò,
&& AllowFindForw
&& Opn_R) // îðäåð â ýòîì ïåðèîäå åù¸ íå îòêðûâàëñÿ
{
if(AllowBuy
&& Ask>OpenLevelUP)
Opn_B=true; // íàäî îòêðûâàòü îðäåð íà Buy
if(AllowSell
&& Bid<OpenLevelDN)
Opn_S=true; // íà Sell
}
//--------------------------------------------------------------- 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) // Îáðàáîòêà îøèáîê
{
// Opn_R=false; // äî íà÷àëà íîâîãî ïåðèîäà îðäåðîâ íå îòêðûâàòü
Opn_R=true; // ìîæíî ñíîâà îòêðûâàòü
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) // Îáðàáîòêà îøèáîê
{
// Opn_R=false; // äî íà÷àëà íîâîãî ïåðèîäà îðäåðîâ íå îòêðûâàòü
Opn_R=true; // ìîæíî ñíîâà îòêðûâàòü
continue; // Ïîâòîðíàÿ ïîïûòêà
}
return; // Âûõîä èç start()
}
break; // Âûõîä èç while
}
//---- Óñòàíîâèì ÑòîïËîññ è ÒåéêÏðîôèò
if(Opn_B)
{
if(Stop==0)
SL=Ask-New_Stop((Ask-StopLoss)/Point)*Point;
else
if((Ask-StopLoss)/Point>Stop)
SL=Ask - New_Stop(Stop)*Point;
else
SL=StopLoss;
if(Profit==0)
if(Shift)
TP=Ask+100*(Ask-StopLoss);
else
TP=Ask+New_Stop(2.5*(Ask-StopLoss)/Point)*Point;
}
if(Opn_S)
{
if(Stop==0)
SL=Bid+New_Stop((StopLoss-Bid)/Point)*Point;
else
if((StopLoss-Bid)/Point>Stop)
SL=Bid+New_Stop(Stop)*Point;
else
SL=StopLoss;
if(Profit==0)
if(Shift)
TP=Bid-100*(StopLoss-Bid);
else
TP=Bid-New_Stop(2.5*(StopLoss-Bid)/Point)*Point;
}
//---- Îòêðûòèå îðäåðîâ
while(Opn_R) // Öèêë îòêðûòèÿ îðä.
{
if(Total==0 && Opn_B==true) // Îòêðûòûõ îðä. íåò +
{ // êðèòåðèé îòêð. Buy
RefreshRates(); // Îáíîâëåíèå äàííûõ
Alert("Ïîïûòêà îòêðûòü Buy: ",Symb,", ",Period());
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,0,0,0,Blue);//Îòêðûòèå Buy
if(Ticket > 0) // Ïîëó÷èëîñü :)
{AllowEsc=true;
return; // Âûõîä èç start()
}
if(Fun_Error(GetLastError())==1) // Îáðàáîòêà îøèáîê
continue; // Ïîâòîðíàÿ ïîïûòêà
return; // Âûõîä èç start()
}
if(Total==0 && Opn_S==true) // Îòêðûòûõ îðä. íåò +
{ // êðèòåðèé îòêð. Sell
RefreshRates(); // Îáíîâëåíèå äàííûõ
Alert("Ïîïûòêà îòêðûòü Sell: ",Symb,", ",Period());
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP,0,0,0,Red);//Îòêðûòèå Sel
if(Ticket > 0) // Ïîëó÷èëîñü :)
{AllowEsc=true;
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 130:Alert("Ñëèøêîì áëèçêî ñòîïû",": ",Level,", ",Symb,", ",Period());
if (Point==0.0001) Level++; else Level=Level+10; // Ïðèðàñòèòü ìèíèìàëüíûé óðîâåíü 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(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(), MODE_SPREAD)+SlipPage;// Ìèíèì. äèñòàíöèÿ
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 --
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
Tag_msg1=true; // Ôëàã ñîîáùåíèÿ 1
New_Time=Time[0]; // Âðåìÿ òåêóùåãî áàðà
switch (Period()) // Óñòàíîâêà NextPeriod
{
case 1: NPeriod = 5; NNPeriod = 30; break; // Ïåðèîä 1-íî ìèíóòíûé
case 5: NPeriod = 30; NNPeriod = 240; break; // Ïåðèîä 5-òè ìèíóòíûé
case 15: NPeriod = 30; NNPeriod = 240; break; // Ïåðèîä 15-òè ìèíóòíûé
case 30: NPeriod = 240; NNPeriod = 1440; break; // Ïåðèîä 30-òè ìèíóòíûé
case 60: NPeriod = 240; NNPeriod = 1440; break; // Ïåðèîä ÷àñîâîé
case 240: NPeriod = 1440; NNPeriod = 10080; break; // Ïåðèîä 4-õ ÷àñîâîé
case 1440: NPeriod = 10080; NNPeriod = 43200; break; // Ïåðèîä äíåâíîé
default: break;
}
switch (TrendMode)
{
case 1: MACD=true; MA=true; Silense=false; iKTrend=false; break;
case 2: MACD=true; MA=false; Silense=false; iKTrend=false; break;
case 3: MACD=false; MA=true; Silense=false; iKTrend=false; break;
case 4: MACD=true; MA=true; Silense=true; iKTrend=false; break;
case 5: MACD=true; MA=false; Silense=true; iKTrend=false; break;
case 6: MACD=false; MA=true; Silense=true; iKTrend=false; break;
case 7: MACD=false; MA=false; Silense=false; iKTrend=true; break;
case 8: MACD=false; MA=false; Silense=true; iKTrend=true; 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 // Åñëè åñòü îòêðûòûé îðäåð
&& !Shift) // È ñäâèã íå óñòàíîâëåí
{
New_Open=Price; // Âíà÷àëå óðîâåíü öåíû ðàâåí ÒÐ
New_SL=SL; // à óðîâåíü çàêðûòèÿ ðàâåí SL
Alert("Èíèò. Îðäåð íå èçìåíåí. TP=",TP,", SL=",SL,": ",Symb,", ",Period());
}
if (Ticket>0 // Åñëè åñòü îòêðûòûé îðäåð
&& Shift) // È óñòàíîâëåí ñäâèã
{
// Âîññòàíîâëåíèå ÒÐ ïðè èíèöèàëèçàöèè
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);
} // íåò îòêðûòûõ îðäåðîâ
//---- Îïðåäåëèì òðåíä
if(!MACD && !MA && !iKTrend)
{MACD = true; MA = true;}
if((MACD || MA) && iKTrend)
iKTrend = false;
if(MACD)
{
MACD0 = iMACD(0,NNPeriod,12,26,9,PRICE_MEDIAN,MODE_MAIN,0);
MACD1 = iMACD(0,NNPeriod,12,26,9,PRICE_MEDIAN,MODE_MAIN,1);
}
if(MA)
{
MA0 = iMA(0,NNPeriod,12,0,MODE_EMA,PRICE_MEDIAN,0);
MA1 = iMA(0,NNPeriod,12,0,MODE_EMA,PRICE_MEDIAN,1);
}
if(Silense)
{
Silense0 = iCustom(0, NNPeriod, "Silense",PeriodMA,288, 1, 0);
Silense1 = iCustom(0, NNPeriod, "Silense",PeriodMA,288, 1, 1);
}
if(iKTrend)
iK0= iCustom(0, NNPeriod, "iK_trend_v01.6",PeriodMA,100,4,4,0, 2, 0);
if((MACD && !MA && !Silense && MACD0>MACD1)
|| (MA && !MACD && !Silense && MA0>MA1)
|| (MACD && MA && !Silense && MACD0>MACD1 && MA0>MA1)
|| (MACD && !MA && Silense && MACD0>MACD1 && Silense0>Silense1 && Silense0>SilenseLevel)
|| (!MACD && MA && Silense && MA0>MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
|| (MACD && MA && Silense && MACD0>MACD1 && MA0>MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
|| (iKTrend && !Silense && iK0>0)
|| (iKTrend && Silense && iK0>0 && Silense0>Silense1 && Silense0>SilenseLevel))
{TrendUP=true;
ObjectDelete("TrendUP");
ObjectCreate("TrendUP",OBJ_VLINE,0,Time[0],0);
ObjectSet("TrendUP",OBJPROP_COLOR,Green);
}
else
if((MACD && !MA && !Silense && MACD0<MACD1)
|| (MA && !MACD && !Silense && MA0<MA1)
|| (MACD && MA && !Silense && MACD0<MACD1 && MA0<MA1)
|| (MACD && !MA && Silense && MACD0<MACD1 && Silense0>Silense1 && Silense0>SilenseLevel)
|| (!MACD && MA && Silense && MA0<MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
|| (MACD && MA && Silense && MACD0<MACD1 && MA0<MA1 && Silense0>Silense1 && Silense0>SilenseLevel)
|| (iKTrend && !Silense && iK0<0)
|| (iKTrend && Silense && iK0<0 && Silense0>Silense1 && Silense0>SilenseLevel))
{TrendDN=true;
ObjectDelete("TrendDN");
ObjectCreate("TrendDN",OBJ_VLINE,0,Time[0],0);
ObjectSet("TrendDN",OBJPROP_COLOR,Red);
}
else
{TrendUP=false;
TrendDN=false;
ObjectDelete("TrendUP");
ObjectDelete("TrendDN");
}
//---- Îïðåäåëèì ñèãíàë äëÿ âõîäà â ðûíîê
StochM = iStochastic(0,NPeriod,5,3,3,MODE_EMA,0,MODE_MAIN,0);
StochS = iStochastic(0,NPeriod,5,3,3,MODE_EMA,0,MODE_SIGNAL,0);
if((TrendUP && StochM>StochS) // Æäåì âñòðå÷íóþ âîëíó
||
(TrendDN && StochM<StochS))
{FMStoch=true;
NMStoch=false;
SMStoch=false;
}
if((TrendUP && StochM<StochS) // Ýòî âñòðå÷íàÿ âîëíà
||
(TrendDN && StochM>StochS))
{FMStoch=false;
NMStoch=true;
SMStoch=false;
}
OpenLevelDN=NONE;
OpenLevelUP=NONE;
//Alert("TrendUP=",TrendUP," TrendDN=",TrendDN," StochM=",StochM," StochS=",StochS," FMStoch=",FMStoch," NMStoch=",NMStoch," SMStoch=",SMStoch);
}
//+------------------------------------------------------------------+
//| 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 // Åñëè åñòü îòêðûòûé îðäåð
&& Shift) // È óñòàíîâëåí ñäâèã
{
//---- ÒÐ äëÿ îòêðûòîãî íå ñäâèíóòîãî îðäåðà
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);
}
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
---