Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Laptrend_1
//+------------------------------------------------------------------+
//| Laptrend_1.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| Ìîñêîâöåâ Ñåðãåé sergomsk@mail.ru
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+-
// Îïèñàíèå ãëîáàëüíûõ ïåðåìåííûõ
extern double Lots =0.0; // Êîëè÷åñòâî ëîòîâ
extern int Percent =0; // Ïðîöåíò âûäåëåííûõ ñðåäñòâ
extern int StopLoss =100; // StopLoss äëÿ íîâûõ îðäåðîâ (ïóíêòîâ)
extern int TakeProfit =40; // TakeProfit äëÿ íîâûõ îðäåðîâ (ïóíêòîâ)
extern int TralingStop=100; // TralingStop äëÿ ðûíî÷íûõ îðäåðîâ (ïóíê)
extern int Parol=12345; // Ïàðîëü äëÿ ðàáîòû íà ðåàëüíîì ñ÷¸òå
extern double Delta=7; //Ñêâàæíîñòü ADX
static bool SHUp, SHD, SMUp, SMD, FUp, FD, FclUp, FclD, SM1Up, SM1D;
int
Level_new, // Íîâîå çíà÷åíèå ìèíèìàëüíîé äèñòàíöèè
Level_old, // Ïðåäûäóùåå çíà÷åíèå ìèíèìàëüíîé äèñòàíöèè
Mas_Tip[6]; // Ìàññèâ òèïîâ îðäåðîâ
// [] òèï îðä: 0=B,1=S,2=BL,3=SL,4=BS,5=SS
double
Lots_New, // Êîëè÷åñòâî ëîòîâ äëÿ íîâûõ îðäåðîâ
Mas_Ord_New[31][9], // Ìàññèâ îðäåðîâ òåêóùèé ..
Mas_Ord_Old[31][9]; // .. è ñòàðûé
// 1é èíäåêñ = ïîðÿäêîâûé íîìåð îðäåðà
// [][0] íå îïðåäåëÿåòñÿ
// [][1] êóðñ îòêð. îðäåðà (àáñ.çíà÷.êóðñà)
// [][2] StopLoss îðäåðà (àáñ.çíà÷.êóðñà)
// [][3] TakeProfit îðäåðà (àáñ.çíà÷.êóðñà)
// [][4] íîìåð îðäåðà
// [][5] êîëè÷. ëîòîâ îðä. (àáñ.çíà÷.êóðñà)
// [][6] òèï îðä. 0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] ìàãè÷åñêîå ÷èñëî îðäåðà
// [][8] 0/1 ôàêò íàëè÷èÿ êîììåíòàðèÿ
int init()
{
//----
Level_old=MarketInfo(Symbol(),MODE_STOPLEVEL );//Ìèíèì. äèñòàíèöèÿ
Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ
SHUp=false;
SHD=false;
SMUp=false;
SMD=false;
FUp=false;
FD=false;
FclUp=false;
FclD=false;
return; // Âûõîä èç init()
//----
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
Inform(-1); // Äëÿ óäàëåíèÿ îáúåêòîâ
return; // Âûõîä èç deinit()
//----
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if(Check()==false) // Åñëè óñëîâèÿ èñïîëüçîâàíèÿ..
return; // ..íå âûïîëíÿþòñÿ, òî âûõîä
//PlaySound("tick.wav"); // Íà êàæäîì òèêå
Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ
Events(); // Èíôîðìàöèÿ î ñîáûòèÿõ
Trade(Criterion()); // Òîðãîâàÿ ôóíêöèÿ
Inform(0); // Äëÿ ïåðåêðàøèâàíèÿ îáúåêòîâ
return; // Âûõîä èç start()
//----
}
//+------------------------------------------------------------------+
// Ôóíêöèÿ ïðîâåðêè ëåãàëüíîñòè èñïîëüçîâàíèÿ ïðîãðàììû
// Âõîäíûå ïàðàìåòðû:
// - ãëîáàëüíàÿ ïåðåìåííàÿ Parol
// - ëîêàëüíàÿ êîíñòàíòà "SuperBank"
// Âîçâðàùàåìûå çíà÷åíèÿ:
// true - åñëè óñëîâèÿ èñïîëüçîâàíèÿ ñîáëþäåíû
// false - åñëè óñëîâèÿ èñïîëüçîâàíèÿ íàðóøåíû
bool Check() // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ
{
if (IsDemo()==true) // Åñëè ýòî äåìî-ñ÷¸ò, òî..
return(true); // .. äðóãèõ îãðàíè÷åíèé íåò
if (AccountCompany()=="SuperBank") // Äëÿ êîðïîðàòèâíûõ êëèåíòîâ..
return(true); // ..ïàðîëü íå íóæåí
int Key=AccountNumber()*2+1000001; // Âû÷èñëÿåì êëþ÷
if (Parol==Key) // Åñëè ïàðîëü âåðíûé, òî..
return(true); // ..ðàçðåøàåì ðàáîòó íà ðåàëå
Inform(14); // Ñîîáùåíèå î íåñàíêö. ðàáîòå
return(false); // Âûõîä èç ïîëüçîâ. ôóíêöèè
}
int Terminal()
{
int Qnt=0; // Ñ÷¸ò÷èê êîëè÷åñòâà îðäåðîâ
ArrayCopy(Mas_Ord_Old, Mas_Ord_New);// Ñîõðàíÿåì ïðåäûäóùóþ èñòîðèþ
Qnt=0; // Îáíóëåíèå ñ÷¸ò÷èêà îðäåðîâ
ArrayInitialize(Mas_Ord_New,0); // Îáíóëåíèå ìàññèâà
ArrayInitialize(Mas_Tip, 0); // Îáíóëåíèå ìàññèâà
for(int i=0; i<OrdersTotal(); i++) // Ïî ðûíî÷í. è îòëîæ. îðäåðàì
{
if((OrderSelect(i,SELECT_BY_POS)==true) //Åñëè åñòü ñëåäóþù.
&& (OrderSymbol()==Symbol())) //.. è íàøà âàë.ïàðà
{
Qnt++; // Êîëè÷. îðäåðîâ
Mas_Ord_New[Qnt][1]=OrderOpenPrice(); // Êóðñ îòêðûòèÿ îðä
Mas_Ord_New[Qnt][2]=OrderStopLoss(); // Êóðñ SL
Mas_Ord_New[Qnt][3]=OrderTakeProfit(); // Êóðñ ÒÐ
Mas_Ord_New[Qnt][4]=OrderTicket(); // Íîìåð îðäåðà
Mas_Ord_New[Qnt][5]=OrderLots(); // Êîëè÷åñòâî ëîòîâ
Mas_Tip[OrderType()]++; // Êîë. îðäåðîâ òèïà
Mas_Ord_New[Qnt][6]=OrderType(); // Òèï îðäåðà
Mas_Ord_New[Qnt][7]=OrderMagicNumber(); // Ìàãè÷åñêîå ÷èñëî
if (OrderComment()=="")
Mas_Ord_New[Qnt][8]=0; // Åñëè íåò êîììåíò
else
Mas_Ord_New[Qnt][8]=1; // Åñëè åñòü êîììåíò
}
}
Mas_Ord_New[0][0]=Qnt; // Êîëè÷. îðäåðîâ
return;
}
//+------------------------------------------------------------------+
// Ôóíêöèÿ âûâîäà íà ýêðàí ãðàôè÷åñêèõ ñîîáùåíèé.
int Inform(int Mess_Number, int Number=0, double Value=0.0)
{
// int Mess_Number // Íîìåð ñîîáùåíèÿ
// int Number // Ïåðåäàâàåìîå öåëîå çíà÷åíèå
// double Value // Ïåðåäàâàåìîå äåéñòâèò. çíà÷.
int Win_ind; // Íîìåð îêíà èíäèêàòîðà
string Graf_Text; // Ñòðîêà ñîîáùåíèÿ
color Color_GT; // Öâåò ñòðîêè ñîîáùåíèÿ
static int Time_Mess; // Âðåìÿ ïîñëåäíåé ïóáëèêàöèè ñîîáù.
static int Nom_Mess_Graf; // Ñ÷¸ò÷èê ãðàôè÷åñêèõ ñîîáùåíèé
static string Name_Grf_Txt[30]; // Ìàññèâ èì¸í ãðàôè÷. ñîîáùåíèé
Win_ind= WindowFind("inform"); // Èùåì íîìåð îêíà èíäèêàòîðà
if (Win_ind<0)return; // Åñëè òàêîãî îêíà íåò, óõîäèì
if (Mess_Number==0) // Ýòî ïðîèñõîäèò â êàæäîì òèêå
{
if (Time_Mess==0) return; // Åñëè óæå êðàøåíî ñåðûì
if (GetTickCount()-Time_Mess>15000)// Çà 15 ñåê öâåò óñòàðåë
{
for(int i=0;i<=29; i++) // Êðàñèì còðîêè ñåðûì
ObjectSet( Name_Grf_Txt[i], OBJPROP_COLOR, Gray);
Time_Mess=0; // Ôëàæîê: âñå ñòðîêè ñåðûå
WindowRedraw(); // Ïåðåðèñîâûâàåì îáúåêòû
}
return; // Âûõîä èç ôóíêöèè
}
if (Mess_Number==-1) // Ýòî ïðîèñõîäèò ïðè deinit()
{
for(i=0; i<=29; i++) // Ïî èíäåêñàì îáúåêòîâ
ObjectDelete(Name_Grf_Txt[i]);// Óäàëåíèå îáúåêòà
return; // Âûõîä èç ôóíêöèè
}
Nom_Mess_Graf++; // Ñ÷¸ò÷èê ãðàôè÷åñêèõ ñîîáù.
Time_Mess=GetTickCount(); // Âðåìÿ ïîñëåäíåé ïóáëèêàöèè
Color_GT=Lime;
switch(Mess_Number) // Ïåðåõîä íà ñîîáùåíèå
{
case 1:
Graf_Text="Çàêðûò îðäåð Buy "+ Number;
PlaySound("Close_order.wav"); break;
case 2:
Graf_Text="Çàêðûò îðäåð Sell "+ Number;
PlaySound("Close_order.wav"); break;
case 3:
Graf_Text="Óäàë¸í îòëîæåííûé îðäåð "+ Number;
PlaySound("Close_order.wav"); break;
case 4:
Graf_Text="Îòêðûò îðäåð Buy "+ Number;
PlaySound("Ok.wav"); break;
case 5:
Graf_Text="Îòêðûò îðäåð Sell "+ Number;
PlaySound("Ok.wav"); break;
case 6:
Graf_Text="Óñòàíîâëåí îòëîæåííûé îðäåð "+ Number;
PlaySound("Ok.wav"); break;
case 7:
Graf_Text="Îðäåð "+Number+" ïðåîáðàçîâàëñÿ â ðûíî÷íûé";
PlaySound("Transform.wav"); break;
case 8:
Graf_Text="Ïåðåîòêðûò îðäåð "+ Number; break;
PlaySound("Bulk.wav");
case 9:
Graf_Text="×àñòè÷íî çàêðûò îðäåð "+ Number;
PlaySound("Close_order.wav"); break;
case 10:
Graf_Text="Íîâàÿ ìèíèìàëüíàÿ äèñòàíöèÿ: "+ Number;
PlaySound("Inform.wav"); break;
case 11:
Graf_Text=" Íå õâàòàåò äåíåã íà "+
DoubleToStr(Value,2) + " ëîòîâ";
Color_GT=Red;
PlaySound("Oops.wav"); break;
case 12:
Graf_Text="Ïîïûòêà çàêðûòü îðäåð "+ Number;
PlaySound("expert.wav"); break;
case 13:
if (Number>0)
Graf_Text="Ïîïûòêà îòêðûòü îðäåð Sell..";
else
Graf_Text="Ïîïûòêà îòêðûòü îðäåð Buy..";
PlaySound("expert.wav"); break;
case 14:
Graf_Text="Íåïðàâèëüíûé ïàðîëü. Ýêñïåðò íå ðàáîòàåò.";
Color_GT=Red;
PlaySound("Oops.wav"); break;
case 15:
switch(Number) // Ïåðåõîä íà íîìåð îøèáêè
{
case 2: Graf_Text="Îáùàÿ îøèáêà."; break;
case 129: Graf_Text="Íåïðàâèëüíàÿ öåíà. "; break;
case 135: Graf_Text="Öåíà èçìåíèëàñü. "; break;
case 136: Graf_Text="Íåò öåí. Æä¸ì íîâûé òèê.."; break;
case 146: Graf_Text="Ïîäñèñòåìà òîðãîâëè çàíÿòà";break;
case 5 : Graf_Text="Ñòàðàÿ âåðñèÿ òåðìèíàëà."; break;
case 64: Graf_Text="Ñ÷åò çàáëîêèðîâàí."; break;
case 133: Graf_Text="Òîðãîâëÿ çàïðåùåíà"; break;
default: Graf_Text="Âîçíèêëà îøèáêà " + Number;//Äðóãèå
}
Color_GT=Red;
PlaySound("Error.wav"); break;
case 16:
Graf_Text="Ýêñïåðò ðàáîòàåò òîëüêî íà EURUSD";
Color_GT=Red;
PlaySound("Oops.wav"); break;
default:
Graf_Text="default "+ Mess_Number;
Color_GT=Red;
PlaySound("Bzrrr.wav");
}
ObjectDelete(Name_Grf_Txt[29]); // 29é(âåðõíèé) îáúåêò óäàëÿåì
for(i=29; i>=1; i--) // Öèêë ïî èíäåêñàì ìàññèâà ..
{ // .. ãðàôè÷åñêèõ îáúåêòîâ
Name_Grf_Txt[i]=Name_Grf_Txt[i-1];// Ïîäíèìàåì îáúåêòû:
ObjectSet( Name_Grf_Txt[i], OBJPROP_YDISTANCE, 2+15*i);
}
Name_Grf_Txt[0]="Inform_"+Nom_Mess_Graf+"_"+Symbol(); // Èìÿ îáúåêò
ObjectCreate (Name_Grf_Txt[0],OBJ_LABEL, Win_ind,0,0);// Ñîçäà¸ì
ObjectSet (Name_Grf_Txt[0],OBJPROP_CORNER, 3 ); // Óãîë
ObjectSet (Name_Grf_Txt[0],OBJPROP_XDISTANCE, 450);// Êîîðä. Õ
ObjectSet (Name_Grf_Txt[0],OBJPROP_YDISTANCE, 2); // Êîîðä. Y
// Òåêñòîâîå îïèñàíèå îáúåêòà
ObjectSetText(Name_Grf_Txt[0],Graf_Text,10,"Courier New",Color_GT);
WindowRedraw(); // Ïåðåðèñîâûâàåì âñå îáúåêòû
return;
}
//+------------------------------------------------------------------+
// Ôóíêöèÿ ñëåæåíèÿ çà ñîáûòèÿìè.
// Ãëîáàëüíûå ïåðåìåííûå:
// Level_new Íîâîå çíà÷åíèå ìèíèìàëüíîé äèñòàíöèè
// Level_old Ïðåäûäóùåå çíà÷åíèå ìèíèìàëüíîé äèñòàíöèè
// Mas_Ord_New[31][9] Ìàññèâ îðäåðîâ ïîñëåäíèé èçâåñòíûé
// Mas_Ord_Old[31][9] Ìàññèâ îðäåðîâ ïðåäûäóùèé (ñòàðûé)
int Events() // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ
{
bool Conc_Nom_Ord; // Ñîâïàäåíèå îðäåðîâ â ..
//.. ñòàðîì è íîâîì ìàññèâàõ
Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL );// Ïîñëåäí.èçâåñòíîå
if (Level_old!=Level_new) // Íîâîå íå ðàâíî ñòàðîìó..
{ // çíà÷èò èçìåíèëèñü óñëîâèÿ
Level_old=Level_new; // Íîâîå "ñòàðîå çíà÷åíèå"
Inform(10,Level_new); // Ñîîáùåíèå: íîâàÿ äèñòàíö.
}
// Ïîèñê ïðîïàâøèõ, ïîìåíÿâøèõ òèï, ÷àñòè÷íî çàêðûòûõ è ïåðåîòêðûòûõ
for(int old=1;old<=Mas_Ord_Old[0][0];old++)// Ïî ìàññèâó ñòàðûõ
{ // Èñõîäèì èç òîãî, ÷òî..
Conc_Nom_Ord=false; // ..îðäåðà íå ñîâïàäàþò
for(int new=1;new<=Mas_Ord_New[0][0];new++)//Öèêë ïî ìàññèâó ..
{ //..íîâûõ îðäåðîâ
if (Mas_Ord_Old[old][4]==Mas_Ord_New[new][4])// Ñîâïàë íîìåð
{ // Òèï îðäåðà ñòàë ..
if (Mas_Ord_New[new][6]!=Mas_Ord_Old[old][6])//.. äðóãèì
Inform(7,Mas_Ord_New[new][4]);// Ñîîáùåíèå: ïðåîáðàç.:)
Conc_Nom_Ord=true; // Îðäåð íàéäåí, ..
break; // ..çíà÷èò âûõîäèì èç ..
} // .. âíóòðåííåãî öèêëà
// Íå ñîâïàë íîìåð îðäåðà
if (Mas_Ord_Old[old][7]>0 && // MagicNumber åñòü, ñîâïàë
Mas_Ord_Old[old][7]==Mas_Ord_New[new][7])//.. ñî ñòàðûì
{ //çíà÷èò îí ïåðåîòêðûò èëè ÷àñòè÷íî çàêðûò
// Åñëè ëîòû ñîâïàäàþò,..
if (Mas_Ord_Old[old][5]==Mas_Ord_New[new][5])
Inform(8,Mas_Ord_Old[old][4]);// ..òî ïåðåîòêðûòèå
else // À èíà÷å ýòî áûëî..
Inform(9,Mas_Ord_Old[old][4]);// ..÷àñòè÷íîå çàêðûòèå
Conc_Nom_Ord=true; // Îðäåð íàéäåí, ..
break; // ..çíà÷èò âûõîäèì èç ..
} // .. âíóòðåííåãî öèêëà
}
if (Conc_Nom_Ord==false) // Åñëè ìû ñþäà äîøëè,..
{ // ..òî îðäåðà íåò:(
if (Mas_Ord_Old[old][6]==0)
Inform(1, Mas_Ord_Old[old][4]); // Îðäåð Buy çàêðûò
if (Mas_Ord_Old[old][6]==1)
Inform(2, Mas_Ord_Old[old][4]); // Îðäåð Sell çàêðûò
if (Mas_Ord_Old[old][6]> 1)
Inform(3, Mas_Ord_Old[old][4]); // Îòëîæåí. îðäåð óäàë¸í
}
}
// Ïîèñê íîâûõ îðäåðîâ
for(new=1; new<=Mas_Ord_New[0][0]; new++)// Ïî ìàññèâó íîâûõ îðä.
{
if (Mas_Ord_New[new][8]>0) //Ýòî íå íîâûé,à ïåðåîòêð
continue; //..èëè ÷àñòè÷íî çàêðûòûé
Conc_Nom_Ord=false; // Ïîêà ñîâïàäåíèÿ íåò
for(old=1; old<=Mas_Ord_Old[0][0]; old++)// Ïîèùåì ýòîò îðäåðîê
{ // ..â ìàññèâå ñòàðûõ
if (Mas_Ord_New[new][4]==Mas_Ord_Old[old][4])//Ñîâïàë íîìåð..
{ //.. îðäåðà
Conc_Nom_Ord=true; // Îðäåð íàéäåí, ..
break; // ..çíà÷èò âûõîäèì èç ..
} // .. âíóòðåííåãî öèêëà
}
if (Conc_Nom_Ord==false) // Åñëè ñîâïàäåíèÿ íåò,..
{ // ..òî îðäåð íîâûé :)
if (Mas_Ord_New[new][6]==0)
Inform(4, Mas_Ord_New[new][4]); // Îðäåð Buy îòêðûò
if (Mas_Ord_New[new][6]==1)
Inform(5, Mas_Ord_New[new][4]); // Îðäåð Sell îòêðûò
if (Mas_Ord_New[new][6]> 1)
Inform(6, Mas_Ord_New[new][4]); // Óñòàíîâëåí îòëîæ.îðäåð
}
}
return;
}
//+------------------------------------------------------------------+
// Ôóíêöèÿ âû÷èñëåíèÿ êîëè÷åñòâà ëîòîâ.
// Ãëîáàëüíûå ïåðåìåííûå:
// double Lots_New - êîëè÷åñòâî ëîòîâ äëÿ íîâûõ îðäåðîâ (âû÷èñëÿåòñÿ)
// double Lots - æåëàåìîå êîëè÷åñòâî ëîòîâ, çàäàííîå ïîëüçîâàòåë.
// int Percent - ïðîöåíò ñðåäñòâ, çàäàííûé ïîëüçîâàòåëåì
// Âîçâðàùàåìûå çíà÷åíèÿ:
// true - åñëè ñðåäñòâ õâàòàåò íà ìèíèìàëüíûé ëîò
// false - åñëè ñðåäñòâ íå õâàòàåò íà ìèíèìàëüíûé ëîò
bool Lot() // Ïîçîâàòåëüñêàÿ ô-èÿ
{
string Symb =Symbol(); // Ôèíàíñîâûé èíñòðóì.
double One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);//Ñòîèì. 1 ëîòà
double Min_Lot=MarketInfo(Symb,MODE_MINLOT);// Ìèí. ðàçìåð. ëîòîâ
double Step =MarketInfo(Symb,MODE_LOTSTEP);//Øàã èçìåíåí ðàçìåðà
double Free =AccountFreeMargin(); // Ñâîáîäíûå ñðåäñòâà
if (Lots>0) // Ëîòû çàäàíû ÿâíî..
{ // ..ïðîâåðèì ýòî
double Money=Lots*One_Lot; // Ñòîèìîñòü îðäåðà
if(Money<=AccountFreeMargin()) // Ñðåäñòâ õâàòàåò..
Lots_New=Lots; // ..ïðèíèìàåì çàäàííîå
else // Åñëè íå õâàòàåò..
Lots_New=MathFloor(Free/One_Lot/Step)*Step;// Ðàñ÷¸ò ëîòîâ
}
else // Åñëè ëîòû íå çàäàíû
{ // ..òî áåð¸ì ïðîöåíò
if (Percent > 100) // Çàäàíî îøèáî÷íî ..
Percent=100; // .. òî íå áîëåå 100
if (Percent==0) // Åñëè óñòàíîâëåí 0 ..
Lots_New=Min_Lot; // ..òî ìèíèìàëüíûé ëîò
else // Æåëàåì. êîëè÷.ëîòîâ:
Lots_New=MathFloor(Free*Percent/100/One_Lot/Step)*Step;//Ðàñ÷
}
if (Lots_New < Min_Lot) // Åñëè ìåíüøå äîïóñò..
Lots_New=Min_Lot; // .. òî ìèíèàìàëüíûé
if (Lots_New*One_Lot > AccountFreeMargin()) // Íå õâàòàåò äàæå..
{ // ..íà ìèíèìàëüí. ëîò:(
Inform(11,0,Min_Lot); // Ñîîáùåíèå..
return(false); // ..è âûõîä
}
return(true); // Âûõîä èç ïîëüç. ô-èè
}
//+------------------------------------------------------------------+
// Ôóíêöèÿ âû÷èñëåíèÿ òîðãîâûõ êðèòåðèåâ.
// Âîçâðàùàåìûå çíà÷åíèÿ:
// 10 - îòêðûòèå Buy
// 20 - îòêðûòèå Sell
// 11 - çàêðûòèå Buy
// 21 - çàêðûòèå Sell
// 0 - çíà÷èìûõ êðèòåðèåâ íåò
int Criterion() // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ
{
string Sym=Symbol();
int i, k, o, m, s, f;
double Fx_0n, Fx_1n, Fx_2n, Fx_0, Fx_1, Sh1, Sh2, Sh3, Sh4, Sh0, Sh00;//
// Ïàðàìåòðû ïîëüçîâàò. èíäèêàò:
double adx_m5 = iADX(Sym,15,14,PRICE_CLOSE,0,0);
double adx_1ago_m5 = iADX(NULL,15,14,PRICE_CLOSE,0,1); // ADX 5 min 1 bar ago
double di_p_m5 = iADX(NULL,15,14,PRICE_CLOSE,1,0); // DI+ 5 min
double di_m_m5 = iADX(NULL,15,14,PRICE_CLOSE,2,0); // DI- 5 min
Fx_0n=iCustom(Sym,PERIOD_M15,"Fisher_Yur4ik_Alert",10,0,0);
Fx_1n=iCustom(Sym,PERIOD_M15,"Fisher_Yur4ik_Alert",10,0,1);
Fx_2n=iCustom(Sym,PERIOD_M15,"Fisher_Yur4ik_Alert",10,0,2);
Fx_0=sglag2(Fx_0n, Fx_1n);
Fx_1=sglag2(Fx_1n, Fx_2n);
if(Fx_1<0 && Fx_0>0) {FUp=true; FD=false;}
if(Fx_1>0 && Fx_0<0) {FD=true; FUp=false;}
if(Fx_1>0.25 && Fx_0<0.25) {FclUp=true; FclD=false;}
if(Fx_1<-0.25 && Fx_0>-0.25) {FclD=true; FclUp=false;}
Tral_Stop(0); // Òðåéëèíã ñòîï Buy
Tral_Stop(1); // Òðåéëèíã ñòîï Sell
if(mod(di_p_m5,di_m_m5)<Delta && mod(adx_m5,di_p_m5)<Delta && mod(adx_m5,di_m_m5)<Delta)
{
Comment("×àñ âåðõ ",SHUp," ",Sh1," Ëàï ",i," Ìèí ââåðõ ",SMUp," ",Sh3," Ëàï ",o," FxUp ",FUp," FxUpCl ",FclUp," ×àñ âíèç ",SHD," ",Sh2," Ëàï ",k," Ìèí âíèç ",SMD," ",Sh4," Ëàï ",m," FxD ",FD," FxDCl ",FclD,
"\n ADX ",adx_m5," ADX 1 ",adx_1ago_m5," +DI ",di_p_m5," -DI ",di_m_m5," Fx íà 0 áàðå ",Fx_0," Fx íà 2 áàðå ",Fx_1," Ñèëüíûé ôëåò!!!");
FUp=false; FD=false; FclUp=false; FclD=false;
for(int l=1;l<=Mas_Ord_New[0][0];l++)
{
if(Mas_Ord_New[l][6]==0)
return(11); // Çàêðûòèå Buy
if(Mas_Ord_New[l][6]==1)
return(21); // Çàêðûòèå Sell
}
return(0);
}
for(s=0;s<3000;s++)
{
Sh0=iCustom(Symbol(),PERIOD_M1,"LabTrend1_v2.1",3,0,s);
if(Sh0<1000 && Sh0>0)
break;
}
for(f=0;f<3000;f++)
{
Sh00=iCustom(Symbol(),PERIOD_M1,"LabTrend1_v2.1",3,1,f);
if(Sh00<1000 && Sh00>0)
break;
}
for(i=0;i<3000;i++)
{
Sh1=iCustom(Symbol(),PERIOD_H1,"LabTrend1_v2.1",3,0,i);
if(Sh1<1000 && Sh1>0)
break;
}
for(k=0;k<3000;k++)
{
Sh2=iCustom(Symbol(),PERIOD_H1,"LabTrend1_v2.1",3,1,k);
if(Sh2<1000 && Sh2>0)
break;
}
for(o=0;o<3000;o++)
{
Sh3=iCustom(Symbol(),PERIOD_M15,"LabTrend1_v2.1",3,0,o);
if(Sh3<1000 && Sh3>0)
break;
}
for(m=0;m<3000;m++)
{
Sh4=iCustom(Symbol(),PERIOD_M15,"LabTrend1_v2.1",3,1,m);
if(Sh4<1000 && Sh4>0)
break;
}
if(s<f)
{
SM1Up=true;
SM1D=false;
}
if(s>f)
{
SM1Up=true;
SM1D=false;
}
if(i<k)
{
SHUp=true;
SHD=false;
}
if(o<m)
{
SMUp=true;
SMD=false;
}
if(i>k)
{
SHD=true;
SHUp=false;
}
if(o>m)
{
SMD=true;
SMUp=false;
}
Comment("×àñ âåðõ ",SHUp," ",Sh1," Ëàï ",i," Ìèí ââåðõ ",SMUp," ",Sh3," Ëàï ",o," FxUp ",FUp," FxUpCl ",FclUp," ×àñ âíèç ",SHD," ",Sh2," Ëàï ",k," Ìèí âíèç ",SMD," ",Sh4," Ëàï ",m," FxD ",FD," FxDCl ",FclD,
"\n ADX ",adx_m5," ADX1 ",adx_1ago_m5," +DI ",di_p_m5," -DI ",di_m_m5," Fx íà 0 áàðå ",Fx_0," Fx íà 2 áàðå ",Fx_1);
if(SHUp==true && SMUp==true && FUp==true && di_p_m5>di_m_m5 && adx_m5>adx_1ago_m5)
return(10); // Îòêðûòèå Buy
if(SHD==true && SMD==true && FD==true && di_p_m5<di_m_m5 && adx_m5>adx_1ago_m5)
return(20); // Îòêðûòèå Sell
if(SMD==true || FD==true || FclUp==true)
return(11); // Çàêðûòèå Buy
if(SMUp==true || FUp==true || FclD==true)
return(21); // Çàêðûòèå Sell
return(0); // Âûõîä èç ïîëüçîâ. ôóíêöèè
}
double mod(double x, double y)
{
if((x-y)<0)
return((x-y)*(-1));
return(x-y);
}
double sglag2(double x, double y) //Ôóíêöèÿ ñãëàæèâàíèÿ ñ êîô. ÌÀ=2
{return((x+y)/2);}
//+------------------------------------------------------------------+
// Òîðãîâàÿ ôóíêöèÿ.
int Trade(int Trad_Oper) // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ
{
// Trad_Oper - òèï òîðãîâîé îïåðàöèè:
// 10 - îòêðûòèå Buy
// 20 - îòêðûòèå Sell
// 11 - çàêðûòèå Buy
// 21 - çàêðûòèå Sell
// 0 - çíà÷èìûõ êðèòåðèåâ íåò
// -1 - èñïîëüçóåòñÿ äðóãîé ôèíàíñîâûé èíñòðóìåíò
switch(Trad_Oper)
{
case 10: // Òîðãîâûé êðèòåðèé = Buy
Close_All(1); // Çàêðûòü âñå Sell
if (Lot()==false) // Ñðåäñòâ íå õâàòàåò íà ìèíèì.
return; // Âûõîä èç ïîëüçîâ. ôóíêöèè
Open_Ord(0); // Îòêðûòü Buy
return; // Ïîòîðãîâàëè - óõîäèì
case 11: // Òîðã. êðèò. = çàêðûòèå Buy
Close_All(0); // Çàêðûòü âñå Buy
return; // Ïîòîðãîâàëè - óõîäèì
case 20: // Òîðãîâûé êðèòåðèé = Sell
Close_All(0); // Çàêðûòü âñå Buy
if (Lot()==false)
return; // Âûõîä èç ïîëüçîâ. ôóíêöèè
Open_Ord(1); // Îòêðûòü Sell
return; // Ïîòîðãîâàëè - óõîäèì
case 21: // Òîðã. êðèò. = çàêðûòèå Sell
Close_All(1); // Çàêðûòü âñå Sell
return; // Ïîòîðãîâàëè - óõîäèì
case 0: // Óäåðæàíèå îòêðûòûõ ïîçèöèé
Tral_Stop(0); // Òðåéëèíã ñòîï Buy
Tral_Stop(1); // Òðåéëèíã ñòîï Sell
return; // Ïîòîðãîâàëè - óõîäèì
}
}
//+------------------------------------------------------------------+
// Ôóíêöèÿ çàêðûòèÿ âñåõ ðûíî÷íûõ îðäåðîâ óêàçàííîãî òèïà
// Ãëîáàëüíûå ïåðåìåííûå:
// Mas_Ord_New Ìàññèâ îðäåðîâ ïîñëåäíèé èçâåñòíûé
// Mas_Tip Ìàññèâ òèïîâ îðäåðîâ
int Close_All(int Tip) // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ
{
// int Tip // Òèï îðäåðà
int Ticket=0; // Íîìåð îðäåðà
double Lot=0; // Êîëè÷åñòâî çàêð. ëîòîâ
double Price_Cls; // Öåíà çàêðûòèÿ îðäåðà--
while(Mas_Tip[Tip]>0) // Äî òåõ ïîð, ïîêà åñòü ..
{ //.. îðäåðà çàäàííîãî òèïà
for(int i=1; i<=Mas_Ord_New[0][0]; i++)// Öèêë ïî æèâûì îðäåðàì
{
if(Mas_Ord_New[i][6]==Tip && // Ñðåäè îðäåðîâ íàøåãî òèïà
Mas_Ord_New[i][5]>Lot) // .. âûáèðàåì ñàìûé äîðîãîé
{ // Ýòîò áîëüøå ðàíåå íàéäåí.
Lot=Mas_Ord_New[i][5]; // Íàèáîëüøèé íàéäåííûé ëîò
Ticket=Mas_Ord_New[i][4]; // Íîìåð åãî îðäåðà òàêîé
}
}
if (Tip==0) Price_Cls=Bid; // Äëÿ îðäåðîâ Buy
if (Tip==1) Price_Cls=Ask; // Äëÿ îðäåðîâ Sell
Inform(12,Ticket); // Ñîîáùåíèå î ïîïûòêå çàêð.
bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Çàêðûòü îðäåð !:)
if (Ans==false) // Íå ïîëó÷èëîñü :(
{ // Ïîèíòåðåñóåìñÿ îøèáêàìè:
if(Errors(GetLastError())==false)// Åñëè îøèáêà íåïðåîäîëèìàÿ
return; // .. òî óõîäèì.
}
Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ
Events(); // Îòñëåæèâàíèå ñîáûòèé
}
return; // Âûõîä èç ïîëüçîâ. ôóíêöèè
}
//+------------------------------------------------------------------+
// Ôóíêöèÿ îòêðûòèÿ îäíîãî ðûíî÷íîãî îðäåðà óêàçàííîãî òèïà
// Ãëîáàëüíûå ïåðåìåííûå:
// int Mas_Tip Ìàññèâ òèïîâ îðäåðîâ
// int StopLoss Çíà÷åíèå StopLoss (êîëè÷åñòâî ïóíêòîâ)
// int TakeProfit Çíà÷åíèå TakeProfit (êîëè÷åñòâî ïóíêòîâ)
int Open_Ord(int Tip)
{
int Ticket, // Íîìåð îðäåðà
MN; // MagicNumber
double SL, // StopLoss (îòíîñèò.çíà÷.öåíû)
TP; // TakeProf (îòíîñèò.çíà÷.öåíû)
while(Mas_Tip[Tip]==0) // Äî òåõ ïîð, ïîêà ..
{ //.. íå äîñòèãíóò óñïåõ
if (StopLoss<Level_new) // Åñëè ìåíüøå äîïóñòèìîãî..
StopLoss=Level_new; // .. òî äîïóñòèìûé
if (TakeProfit<Level_new) // Åñëè ìåíüøå äîïóñòèìîãî..
TakeProfit=Level_new; // ..òî äîïóñòèìûé
MN=TimeCurrent(); // Ïðîñòîé MagicNumber
Inform(13,Tip); // Ñîîáùåíèå î ïîïûòêå îòêð
if (Tip==0) // Áóäåì îòêðûâàòü Buy
{
SL=Bid - StopLoss* Point; // StopLoss (öåíà)
TP=Bid + TakeProfit*Point; // TakeProfit (öåíà)
Ticket=OrderSend(Symbol(),0,Lots_New,Ask,2,SL,TP,"",MN);
}
if (Tip==1) // Áóäåì îòêðûâàòü Sell
{
SL=Ask + StopLoss* Point; // StopLoss (öåíà)
TP=Ask - TakeProfit*Point; // TakeProfit (öåíà)
Ticket=OrderSend(Symbol(),1,Lots_New,Bid,2,SL,TP,"",MN);
}
if (Ticket<0) // Íå ïîëó÷èëîñü :(
{ // Ïîèíòåðåñóåìñÿ îøèáêàìè:
if(Errors(GetLastError())==false)// Åñëè îøèáêà íåïðåîäîëèìàÿ
return; // .. òî óõîäèì.
}
Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ
Events(); // Îòñëåæèâàíèå ñîáûòèé
}
return; // Âûõîä èç ïîëüçîâ. ôóíêöèè
}
//+------------------------------------------------------------------+
// Ôóíêöèÿ ìîäèôèêàöèè StopLoss âñåõ îðäåðîâ óêàçàííîãî òèïà
// Ãëîáàëüíûå ïåðåìåííûå:
// Mas_Ord_New Ìàññèâ îðäåðîâ ïîñëåäíèé èçâåñòíûé
// int TralingStop Çíà÷åíèå TralingStop(êîëè÷åñòâî ïóíêòîâ)
int Tral_Stop(int Tip)
{
int Ticket; // Íîìåð îðäåðà
double
Price, // Öåíà îòêðûòèÿ ðûíî÷íîãî îðäåðà
TS, // TralingStop (îòíîñèò.çíà÷.öåíû)
SL, // Çíà÷åíèå StopLoss îðäåðà
TP; // Çíà÷åíèå TakeProfit îðäåðà
bool Modify; // Ïðèçíàê íåîáõîäèìîñòè ìîäèôè.
for(int i=1;i<=Mas_Ord_New[0][0];i++) // Öèêë ïî âñåì îðäåðàì
{ // Èùåì îðäåðà çàäàí. òèïà
if (Mas_Ord_New[i][6]!=Tip) // Åñëè ýòî íå íàø òèï..
continue; //.. òî ïåðåñòóïèì îðäåð
Modify=false; // Ïîêà íå íàçíà÷åí ê ìîäèôè
Price =Mas_Ord_New[i][1]; // Öåíà îòêðûòèÿ îðäåðà
SL =Mas_Ord_New[i][2]; // Çíà÷åíèå StopLoss îðäåðà
TP =Mas_Ord_New[i][3]; // Çíà÷åíèå TakeProft îðäåðà
Ticket=Mas_Ord_New[i][4]; // Íîìåð îðäåðà
if (TralingStop<Level_new) // Åñëè ìåíüøå äîïóñòèìîãî..
TralingStop=Level_new; // .. òî äîïóñòèìûé
TS=TralingStop*Point; // Òî æå â îòíîñèò.çíà÷.öåíû
switch(Tip) // Ïåðåõîä íà òèï îðäåðà
{
case 0 : // Îðäåð Buy
if (NormalizeDouble(SL,Digits)<// Åñëè íèæå æåëàåìîãî..
NormalizeDouble(Bid-TS,Digits))
{ // ..òî ìîäèôèöèðóåì åãî:
SL=Bid-TS; // Íîâûé åãî StopLoss
Modify=true; // Íàçíà÷åí ê ìîäèôè.
}
break; // Âûõîä èç switch
case 1 : // Îðäåð Sell
if (NormalizeDouble(SL,Digits)>// Åñëè âûøå æåëàåìîãî..
NormalizeDouble(Ask+TS,Digits)||
NormalizeDouble(SL,Digits)==0)//.. èëè íóëåâîé(!)
{ // ..òî ìîäèôèöèðóåì åãî
SL=Ask+TS; // Íîâûé åãî StopLoss
Modify=true; // Íàçíà÷åí ê ìîäèôè.
}
} // Êîíåö switch
if (Modify==false) // Åñëè åãî íå íàäî ìîäèôè..
continue; // ..òî èä¸ì ïî öèêëó äàëüøå
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Ìîäèôèöèðóåì åãî!
if (Ans==false) // Íå ïîëó÷èëîñü :(
{ // Ïîèíòåðåñóåìñÿ îøèáêàìè:
if(Errors(GetLastError())==false)// Åñëè îøèáêà íåïðåîäîëèìàÿ
return; // .. òî óõîäèì.
i--; // Ïîíèæåíèå ñ÷¸ò÷èêà
}
Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ
Events(); // Îòñëåæèâàíèå ñîáûòèé
}
return; // Âûõîä èç ïîëüçîâ. ôóíêöèè
}
//+------------------------------------------------------------------+
// Ôóíêöèÿ îáðàáîòêè îøèáîê.
// Âîçâðàùàåìûå çíà÷åíèÿ:
// true - åñëè îøèáêà ïðåîäîëèìàÿ (ò.å. ìîæíî ïðîäîëæàòü ðàáîòó)
// false - åñëè îøèáêà êðèòè÷åñêàÿ (ò.å. òîðãîâàòü íåëüçÿ)
bool Errors(int Error) // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ
{
// Error // Íîìåð îøèáêè
if(Error==0)
return(false); // Íåò îøèáêè
Inform(15,Error); // Ñîîáùåíèå
switch(Error)
{ // Ïðåîäîëèìûå îøèáêè:
case 129: // Íåïðàâèëüíàÿ öåíà
case 135: // Öåíà èçìåíèëàñü
RefreshRates(); // Îáíîâèì äàííûå
return(true); // Îøèáêà ïðåîäîëèìàÿ
case 136: // Íåò öåí. Æä¸ì íîâûé òèê.
while(RefreshRates()==false) // Äî íîâîãî òèêà
Sleep(1); // Çàäåðæêà â öèêëå
return(true); // Îøèáêà ïðåîäîëèìàÿ
case 146: // Ïîäñèñòåìà òîðãîâëè çàíÿòà
Sleep(500); // Ïðîñòîå ðåøåíèå
RefreshRates(); // Îáíîâèì äàííûå
return(true); // Îøèáêà ïðåîäîëèìàÿ
// Êðèòè÷åñêèå îøèáêè:
case 2 : // Îáùàÿ îøèáêà
case 5 : // Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà
case 64: // Ñ÷åò çàáëîêèðîâàí
case 133: // Òîðãîâëÿ çàïðåùåíà
default: // Äðóãèå âàðèàíòû
return(false); // Êðèòè÷åñêàÿ îøèáêà
}
}
//+------------------------------------------------------------------+
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
---