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); // Êðèòè÷åñêàÿ îøèáêà
}
}
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:


Indicators Used:

Movement directional index



Custom Indicators Used:
Fisher_Yur4ik_Alert
LabTrend1_v2.1

Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy

Other Features:


It plays sound alerts

BackTest : EURUSD on H1

From 2010-04-01 to 2010-04-30 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-05-01 to 2010-05-31 Profit Factor:0.00 Total Net Profit:0.00

BackTest : EURUSD on H1

From 2010-06-01 to 2010-06-30 Profit Factor:0.00 Total Net Profit:0.00

Request Backtest for Laptrend_1


From : (yyyy/mm/dd) To: (yyyy/mm/dd)

Pair: Period: