qZigZag_Levels

Author: Copyright � 2008, Xrust Solution.
Profit factor:
0.00
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
Indicators Used
Fractals
1 Views
0 Downloads
0 Favorites
qZigZag_Levels
//+--------------------------------------------------------------------------------------------------------------------------------------+
//|                                               +ZigZag_Levels.mq4                                                                     |
//|                                Copyright © 2008, Xrust Solution.                                                                     |
//|                                        http://www.xrust.ucoz.net                                                                     |
//+--------------------------------------------------------------------------------------------------------------------------------------+
//     Èäåÿ ðàáîòû ýêñïåðòà çàêëþ÷àåòñÿ â òîì ÷òî öåíà "ïîìíèò" ïðîøëûå óðîâíè ýêñòðåìóìîâ êîòîðûå ÿ âëÿþòñÿ êëþ÷åâûìè òî÷êàìè
//  ïðåîäîëåâ, èëè íå ïðåîäîëåâ êîòîðûå ìû èìååì äâà âàðèàíòà ðàçâèòèÿ ñîáûòèé - ïðîáîé èëè îòñêîê. Õàðàêòåðíîå ïîâåäåíèå
//  öåíû ìîæíî âèçóàëüíî ïðîàíàëèçèðîâàòü íà àâòîðñêîì èíäèêàòîðå " lines_XR", â äàííîì ñîâåòíèêå ðåàëèçîâàí òîðãîâûé àëãîðèòì
//  ðàçðàáîòàííûé ïðè ïîìîùè àíàëèçà ïîâåäåíèÿ öåíû èìåííî ýòèì èíäèêàòîðîì.
//     Äàííûå ýêñòðåìóìû õàðàêòåðíî ðàñïîëàãàþòñÿ âíóòðè òîðãîâîãî äíÿ, ÷òî îáóñëàâëèâàåòñÿ ñìåíîé òîðãîâûõ ñåññèé è èõ õàðàêòåðíûõ
//  îñîáåííîñòåé.Ýêñòðåìóìû â ýêñïåðòå ñ÷èòàþòñÿ ïî èíäèêàòîðàì "ÇèãÇàã" èëè "Ôðàêòàëû" êîòîðûå åñòü â êîìïëåêòå ïîñòàâêè òåðìèíàëà
//     Ýêñïåðò ïîçâîëÿåò óñòàíîâèòü äî ÷åòûðåõ ïàð îòëîæåííûõ îðäåðîâ òèïîâ "ñòîï" èëè "ëèìèò" â óñòàíîâëåííîå âðåìÿ è íà ñðîê 
//  êîðîðûé îïðåäåëÿåòñÿ â ïðîöåññå îïòèìèçàöèè ýêñïåðòà. Òàê æå âîçìîæåí âûáîð ãëóáèíû òåñòèðóåìîé èñòîðèè è òàéìôðåéìà ñ êîòîðîãî
//  ýòà èñòîðèÿ ÷èòàåòñÿ èíäèêàòîðîì, è êîòîðàÿ ìîæåò íå ñîâïàäàòü ñ ÒÔ íà êîòîðûé óñòàíîâëåí ýêñïåðò. 
//     Åñòü âîçìîæíîñòü âêëþ÷èòü àâòîìàòè÷åñêóþ êîððåêòèðîâêó òèïà îðäåðîâ, ÷òî äåéñòâåííî íà äëèííîì òðåíäå êîãäà áëàãîäàðÿ åé 
//  çàïðåùàåòñÿ óñòàíîêà îðäåðîâ ïðîòèâîïîëîæíîãî íàïðàâëåíèÿ. 
//     Åñòü òàêæå ôóíêöèÿ òðåéëèíãà òåéêïðîôèòà, ÷òî îáëåã÷àåò ðàáîòó ñîâåòíèêà âî ôëåòå. Îáùèé òðåéëèíã ñòîïëîññà íå èñïîëüçóåòñÿ, 
//  òàê êàê îí äîñòàòî÷íî ñèëüíî ñíèæàåò ïðèáûëüíîñòü ýêñïåðòà è óâåëè÷èâàò ïðîñàäêè, äîñòàòî÷íî òî÷íîãî ðàñ÷åòà óðîâíÿ ñòîïëîññà è 
//  òåéêïðîôèòà. 
//     Óðîâíè ñòîïëîññà è òåéêïðîôèòà ìîæíî çàäàòü êàê íàïðÿìóþ â ïóíêòàõ, òàê è â ïðîöåíòàõ îò øèðèíû òåêóùåãî êàíàëà óñòàíîâêè îðäåðîâ. 
//     Ðàçìåð îòêðûâàåìîãî ëîòà ìîæíî çàäàâàòü êàê íàïðÿìóþ, òàê è ïðèìåíÿòü ñèñòåìó àâòîìàòè÷åñêîãî îïðåäåëåíèÿ òîðãîâîãî ëîòà 
//  ïðîïîðöèîíàëüíîãî ïðîöåíòó îò äåïîçèòà. 
//     Âñå ïàðàìåòðû óñòàíàâëèâàþòñÿ äëÿ êàæäîãî îðäåðà îòäåëüíî,÷òî ïîçâîëÿåò òîðãîâîé ñèñòåìå áûòü î÷åíü ãèáêîé.
//+----------------------------------------------------------------------------------------------------------------------------------------+
//  Òåõíîëîãèÿ îïòèìèçàöèè : òèï âòîðîãî,òðåòüåãî è ÷åòâåðòîãî îðäåðà ñòàâèì â 0 -  îðäåðà îòêëþ÷åíû, îïòèìèçèðóåì òîëüêî ïåðâûé
//-----------------------------------------------------------------------------------------------------------------------------------------+
//  Èìÿ ïåðåìåííîé                |ìèí.çíà÷.|    øàã     |  ìàêñ. çíà÷.            |  Ïðèìå÷àíèÿ
//--------------------------------|---------|------------|-------------------------|-------------------------------------------------------+
//  òèï_îðäåðà_1                  |  -1     |     2      |  1                      |  
//  ÷àñ_îòêðûòèÿ_1                |   0     |     1      |  23                     | 
//  ìèíóòà_îòêðûòèÿ_1             |   0     | êðàòíûé ÒÔ |  ìàêñ.çíà÷.÷àñà.äëÿ ÒÔ  | 
//  âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_1     |   0     |     1      |  23                     |
//  ìèí_äèñòàíöèÿ_äî_ýêñòðåìóìà_1 |   0     |     1      |  50 - 100               |  Çàâèñèò îò ñðåäíåé âîëàòèëüíîñòè ïàðû
//  ñòîïëîññ_îðäåðà_1             | -100    |    10      |  -50                    |  Çàâèñèò îò ñðåäíåé âîëàòèëüíîñòè ïàðû
//  òåéêïðîôèò_îðäåðà_1           | -200    |    10      |  -100                   |  Çàâèñèò îò ñðåäíåé âîëàòèëüíîñòè ïàðû 
//-----------------------------------------------------------------------------------------------------------------------------------------+
//  Ïîñëå òîãî êàê ïîëó÷èëè îïòèìèçèðîâàííûå çíà÷åíèÿ ôèëüòðóåì ïî ìàêñ ïðèáûëè, áüåì åå çíà÷åíèÿ íà íåêèå áëîêè øàãîì ïî ïðåäïîëîæèì 
//  400 - 500 - 1000 $ èùåì â ýòèõ áëîêàõ íàèìåíüøóþ ïðîñàäêó â ïðîöåíòàõ, ïîñëå ñðåäè âûáðàííûõ èùåì çíà÷åíèÿ ñ íàèìåíüøèì âðåìåíåì óäåðæàíèÿ.
//  Ïåðåíîñèì ýòè çíà÷åíèÿ âî âòîðîé îðäåð ïðîäîëæàåì îïòèìèçèðîâàòü ïåðâûé. ïðè ýòîì âòîðîé îðäåð äàåò çíà÷åíèÿ ïîëó÷åííûå ïðè ïðîøëîé 
//  îïòèìèçàöèè. æåëàòåëüíî ïðè ýòîì èçìåíèòü ïðåäåëû âðåìåíè óñòàíîâêè îðäåðà è âðåìåíè óäåðæàíèÿ òàê, 
//  ÷òî áû ïåðâûé è âòîðîé åñëè è ïåðåêðûâàëèñü ïî âðåìåíè, òî ñîâñåì íåìíîãî. Ïî îêîí÷àíèè ýòîé ôàçû ïðîèçâîäèì ôèëüòðàöèþ êàê è â 
//  ïðåäûäóùåì ñëó÷àå, è ïåðåíîñèì çíà÷åíèÿ â òðåòèé îðäåð. è îïÿòü ïðîäîëæàåì ïîêà íå çàïîëíèì îðäåðà, è ïðè ýòîì îíè íå áóäóò äðóã äðóãà ïåðåêðûâàòü.
//
#property copyright "Copyright © 2008, Xrust Solution."
#property link      "http://www.xrust.ucoz.net"


extern string      ïàðàìåòðû_ïåðâîãî_îðäåðà = "";
extern int                     òèï_îðäåðà_1 = 1 ;//"-1" = ëèìèòíûå îðäåðà , "1" = ñòîð îðäåðà "0" îòêëþ÷åí
extern int                   ÷àñ_îòêðûòèÿ_1 = 21  ;//îò 0 äî 23 øàã 1
extern int                ìèíóòà_îòêðûòèÿ_1 = 40  ;//îò 0 äî 30 øàã30 íà Ì30, äî 45 øàã 15 íà Ì15, äî 55 øàã 5 íà Ì5 
extern int        âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_1 = 1  ;//îò 1 äî 23 øàã 1, åñëè "0" - òî ñåò îðäåðîâ íå èñïîëüçóåòñÿ
extern int    ìèí_äèñòàíöèÿ_äî_ýêñòðåìóìà_1 = 10 ;//äèñòàíöèÿ â ïèïñàõ ìåíüøå ñòîïëåâåëà íå ñòàâèòü
extern int                ñòîïëîññ_îðäåðà_1 = -100 ;//îòðèöàòåëüíûå çíà÷åíèÿ - øèðèíà ñòîïëîññà îòíîñèòåëüíî øèðèíû êàíàëà ïàðû îðäåðîâ
extern int              òåéêïðîôèò_îðäåðà_1 = -100 ;//â ïðîöåíòàõ, ïîëîæèòåëüíûå çíà÷åíèÿ - ïðÿìîé ðàçìåð ñòîïà è òåéêà â ïóíêòàõ 
extern double        îáüåì_îðäåðà_â_ëîòàõ_1 = 0.1;//îòðèöàòåëüíûå öåëûå çíà÷åíèÿ = ïðîöåíòû îò äåïîçèòà è àâòîëîò, ïîëîæèòåëüíîå äðîáíîå
//----                                              ïîëîæèòåëüíîå äðîáíîå çíà÷åíèå = ïðÿìîå çíà÷åíèå â äîëÿõ ëîòà ( àâòîëîò ïîêà íå àêòèâåí)
extern string      ïàðàìåòðû_âòîðîãî_îðäåðà = "";
extern int                     òèï_îðäåðà_2 = 0 ;
extern int                   ÷àñ_îòêðûòèÿ_2 = 18 ;
extern int                ìèíóòà_îòêðûòèÿ_2 = 0 ;
extern int        âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_2 = 4 ;
extern int    ìèí_äèñòàíöèÿ_äî_ýêñòðåìóìà_2 = 46;
extern int                ñòîïëîññ_îðäåðà_2 = -100 ;
extern int              òåéêïðîôèò_îðäåðà_2 = -100 ;
extern double        îáüåì_îðäåðà_â_ëîòàõ_2 = 0.1 ;
//----
extern string     ïàðàìåòðû_òðåòüåãî_îðäåðà = "";
extern int                     òèï_îðäåðà_3 = 0 ;
extern int                   ÷àñ_îòêðûòèÿ_3 = 0 ;
extern int                ìèíóòà_îòêðûòèÿ_3 = 0 ;
extern int        âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_3 = 0 ;
extern int    ìèí_äèñòàíöèÿ_äî_ýêñòðåìóìà_3 = 10;
extern int                ñòîïëîññ_îðäåðà_3 = -100 ;
extern int              òåéêïðîôèò_îðäåðà_3 = -100 ;
extern double        îáüåì_îðäåðà_â_ëîòàõ_3 = 0.1 ;
//----
extern string   ïàðàìåòðû_÷åòâåðòîãî_îðäåðà = "";
extern int                     òèï_îðäåðà_4 = 0 ;
extern int                   ÷àñ_îòêðûòèÿ_4 = 0 ;
extern int                ìèíóòà_îòêðûòèÿ_4 = 0 ;
extern int        âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_4 = 0 ;
extern int    ìèí_äèñòàíöèÿ_äî_ýêñòðåìóìà_4 = 10;
extern int                ñòîïëîññ_îðäåðà_4 = -100 ;
extern int              òåéêïðîôèò_îðäåðà_4 = -100 ;
extern double        îáüåì_îðäåðà_â_ëîòàõ_4 = 0.1 ;
//----
extern int         êîëè÷åñòâî_áàðîâ_èñòîðèè = 1000;
extern int     ÒàéìÔðåéì_ñ÷èòûâàåìûõ_äàííûõ = 0;
extern bool    Çèãçàã_Ôðàêòàë_êàê_èíäèêàòîð = true;
//----
extern bool       Êîððåêòèðîâêà_òèïà_îðäåðà = true;
extern bool           Òðåéëèíã_òåéê_ïðîôèòà = false;
extern bool           Àâòîóñòàíîâêà_âðåìåíè = false;
extern bool                  Îáùèé_Ñòîïëîññ = false;
extern bool        Óñòàíîâêà_îðäåðà_ñ_ðûíêà = true;
//----
int magic1=123,magic2=456,magic3=789,magic4=741;
//----
int mno,ZzPeriod;
//----
double step=1;
//----
double ZZ[1000];int ord[10][2];int res[4];
//----
bool Err147=false;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init(){
  if(ÒàéìÔðåéì_ñ÷èòûâàåìûõ_äàííûõ<1 ){ZzPeriod=Period();}
  if(ÒàéìÔðåéì_ñ÷èòûâàåìûõ_äàííûõ==1){ZzPeriod=1;}
  if(ÒàéìÔðåéì_ñ÷èòûâàåìûõ_äàííûõ==2){ZzPeriod=5;}
  if(ÒàéìÔðåéì_ñ÷èòûâàåìûõ_äàííûõ==3){ZzPeriod=15;}
  if(ÒàéìÔðåéì_ñ÷èòûâàåìûõ_äàííûõ==4){ZzPeriod=30;}
  if(ÒàéìÔðåéì_ñ÷èòûâàåìûõ_äàííûõ==5){ZzPeriod=60;}
  if(ÒàéìÔðåéì_ñ÷èòûâàåìûõ_äàííûõ==6){ZzPeriod=240;}
  if(ÒàéìÔðåéì_ñ÷èòûâàåìûõ_äàííûõ>=7){ZzPeriod=1440;}
if(Digits==5||Digits==3){mno=10;}else{mno=1;} 
return;}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start(){int i;
  static int mxdrdn,mxord,mxzal;
  if(AccountBalance()-AccountEquity()>mxdrdn){mxdrdn=AccountBalance()-AccountEquity();}
  if(IsVisualMode()){
  int ot;
  for(i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Symbol()){
        if(OrderType()<2){
          ot++;
        }
      }
    }
  }
  }
  if(ot>mxord){mxord=ot;}
  if(AccountMargin()>mxzal){mxzal=AccountMargin();}
  Comment("Ïðîôèò = ",AccountProfit(),"\nÇàëîã  = ",AccountMargin(),"\nMax Çàëîã  = ",mxzal,"\nÏðîñàäêà = ",mxdrdn,"\nÎðäåðîâ = ",mxord);
//----
  
//----
  if(Òðåéëèíã_òåéê_ïðîôèòà){ProfitTraling();}
//----  
  if(NewBar()){
    if(Err147){DelOldOrders();}
    if(Çèãçàã_Ôðàêòàë_êàê_èíäèêàòîð){
      ReadZZ(êîëè÷åñòâî_áàðîâ_èñòîðèè);
    }else{
      ReadFr(êîëè÷åñòâî_áàðîâ_èñòîðèè);
    } 
//----
  if(Àâòîóñòàíîâêà_âðåìåíè){TimeSetAuto();}
//---- 
  if(Àâòîóñòàíîâêà_âðåìåíè){
    ÷àñ_îòêðûòèÿ_1=res[0];
    âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_1=res[1]-res[0];
  } 
  if(Trade(÷àñ_îòêðûòèÿ_1,ìèíóòà_îòêðûòèÿ_1)){
        SetOrders(òèï_îðäåðà_1,
     âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_1,
 ìèí_äèñòàíöèÿ_äî_ýêñòðåìóìà_1,
                        magic1,
        îáüåì_îðäåðà_â_ëîòàõ_1,
             ñòîïëîññ_îðäåðà_1,
           òåéêïðîôèò_îðäåðà_1
    );
  }
  if(òèï_îðäåðà_2==0)return;
  if(Àâòîóñòàíîâêà_âðåìåíè){
    ÷àñ_îòêðûòèÿ_2=res[1];
    âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_2=res[2]-res[1];
  }  
  if(Îáùèé_Ñòîïëîññ){ñòîïëîññ_îðäåðà_2=ñòîïëîññ_îðäåðà_1;}
  if(Trade(÷àñ_îòêðûòèÿ_2,ìèíóòà_îòêðûòèÿ_2)){
        SetOrders(òèï_îðäåðà_2,
     âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_2,
 ìèí_äèñòàíöèÿ_äî_ýêñòðåìóìà_2,
                        magic2,
        îáüåì_îðäåðà_â_ëîòàõ_2,
             ñòîïëîññ_îðäåðà_2,
           òåéêïðîôèò_îðäåðà_2
    );
  }  
  if(òèï_îðäåðà_3==0)return;
  if(Àâòîóñòàíîâêà_âðåìåíè){
    ÷àñ_îòêðûòèÿ_3=res[2];
    âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_2=res[3]-res[2];
  }  
  if(Îáùèé_Ñòîïëîññ){ñòîïëîññ_îðäåðà_3=ñòîïëîññ_îðäåðà_1;}
  if(Trade(÷àñ_îòêðûòèÿ_3,ìèíóòà_îòêðûòèÿ_3)){
        SetOrders(òèï_îðäåðà_3,
     âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_3,
 ìèí_äèñòàíöèÿ_äî_ýêñòðåìóìà_3,
                        magic3,
        îáüåì_îðäåðà_â_ëîòàõ_3,
             ñòîïëîññ_îðäåðà_3,
           òåéêïðîôèò_îðäåðà_3
    );
  }  
  if(òèï_îðäåðà_4==0)return;
  if(Àâòîóñòàíîâêà_âðåìåíè){
    ÷àñ_îòêðûòèÿ_3=res[3];
    âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_3=24-res[3];
  }  
  if(Îáùèé_Ñòîïëîññ){ñòîïëîññ_îðäåðà_4=ñòîïëîññ_îðäåðà_1;}
  if(Trade(÷àñ_îòêðûòèÿ_3,ìèíóòà_îòêðûòèÿ_4)){
        SetOrders(òèï_îðäåðà_4,
     âðåìÿ_óäåðæàíèÿ_â_÷àñàõ_4,
 ìèí_äèñòàíöèÿ_äî_ýêñòðåìóìà_4,
                        magic4,
        îáüåì_îðäåðà_â_ëîòàõ_4,
             ñòîïëîññ_îðäåðà_4,
           òåéêïðîôèò_îðäåðà_4
    );
  }  
  }
return;}
//+------------------------------------------------------------------+
//|  Èùåì îðäåð âûøå\íèæå óêàçàííîé öåíû                             |
//+------------------------------------------------------------------+
double SearchPrise(int typ,double prise){double res,up=100000,dn=0;int i;
if(typ==0){
  for(i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Symbol()){
        if(OrderType()>1){
          if(OrderOpenPrice()-prise>0){
            if(OrderOpenPrice()-prise<up){
              up=OrderOpenPrice()-prise;
              res=OrderOpenPrice();
            }
          }
        }
      }
    }
  }
 return(res); 
}
if(typ==1){
  for(i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Symbol()){
        if(OrderType()>1){
          if(prise-OrderOpenPrice()>0){
            if(OrderOpenPrice()-prise<dn){
              dn=prise-OrderOpenPrice();
              res=OrderOpenPrice();
            }
          }
        }
      }
    }
  }
 return(res); 
}  
return(0);
}
//+------------------------------------------------------------------+
//| Òðåéëèíã ïðîôèòà                                                 |
//+------------------------------------------------------------------+
void ProfitTraling(){
  for(int i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Symbol()){
        if(OrderType()<2){
          int    ordticket=OrderTicket();
          double ordtype  =OrderType();
          double ordprise =OrderOpenPrice();          
          double ordtake  =NormalizeDouble(OrderTakeProfit(),Digits);
          double ordstop  =NormalizeDouble(OrderStopLoss(),Digits);
          double newtake  =NormalizeDouble(SearchPrise(ordtype,ordprise),Digits);
          if(newtake!=0){
            if(newtake!=ordtake){
              if(!OrderModify(ordticket,ordprise,ordstop,newtake,0,White)){
                Print("Error =",GetLastError());
              }
            }
          }
        }
      }
    }
  }
return;
}
//+------------------------------------------------------------------+
//|  Îïðåäåëÿåì íàèëó÷øåå âðåìÿ äëÿ óñòàíîâêè îðäåðîâ                |
//+------------------------------------------------------------------+
void TimeSetAuto(){
  if(TimeHour(TimeCurrent())==0){
    int time[24];
    for(int p=0;p<(êîëè÷åñòâî_áàðîâ_èñòîðèè/24);p++){
    for(int i=0;i<24;i++){
      if(iCustom(Symbol(),60,"Zigzag",0,(p*24)+i)!=0){
        time[i]++;
      }
    }  
    }
    for(i=0;i<4;i++){
      int re=ArrayMaximum(time);
      res[i]=re+1;
      time[re-1]=0;
      time[re]=0;
      time[re+1]=0;
      time[re+2]=0;
    }
    ArraySort(res);
  }
return;
}
//+------------------------------------------------------------------+
//|  åñëè öåíà êðàéíÿÿ                                               |
//+------------------------------------------------------------------+
int IfPrise(double up,double dn){
  ArraySort(ZZ,WHOLE_ARRAY,0,MODE_DESCEND );
  if(NormalizeDouble(up,Digits)==NormalizeDouble(ZZ[0],Digits)){return( 1);}
  ArraySort(ZZ,WHOLE_ARRAY,0,MODE_ASCEND );
  if(NormalizeDouble(dn,Digits)==NormalizeDouble(ZZ[0],Digits)){return(-1);}  
  return(0);
}
//+------------------------------------------------------------------+
//|  Ñòàâèì îòëîæêè                                                  |
//+------------------------------------------------------------------+
void SetOrders(int typ,int ordtime,int mindistanse,int magic,double lot,double sl=0,double tp=0){
  Print("trade");
  double sll,tpp;
  int ticket,err;
  double buy =NormalizeDouble(UpPrise(NormalizeDouble(Ask,Digits),mindistanse),Digits);
  double sell=NormalizeDouble(DnPrise(NormalizeDouble(Bid,Digits),mindistanse),Digits);  
  int stlw=MarketInfo(Symbol(),MODE_STOPLEVEL);
  int timecl=TimeCurrent()+ordtime*3600;
  if(Êîððåêòèðîâêà_òèïà_îðäåðà){
    int korr=IfPrise(buy,sell);
    if(korr!=0){typ=korr;}
  }  
  if(typ<0){
   if(CountOpOrd(3,magic)<1){
     if(buy!=0){
       if(OpPrise(buy)){RefreshRates();
         if(buy-Ask<stlw*Point){buy=NormalizeDouble(Ask+stlw*Point,Digits);}
         if(sl<0){sll=NormalizeDouble(buy+((buy-sell)*(sl/(-100))),Digits);}
         if(sl>0){sll=NormalizeDouble(buy+sl*Point*mno,Digits);}
         if(tp>0){tpp=NormalizeDouble(buy-tp*Point*mno,Digits);}
         if(tp<0){tpp=NormalizeDouble(buy-((buy-sell)*(-tp/100)),Digits);}
         ticket=OrderSend(Symbol(),3,lot,buy,3*mno,sll,tpp,NULL,magic,timecl,Red);
         if(ticket<1){// îáðàáîòêà îøèáîê
           err=GetLastError();
           if(err==147){// çàïðåøåíèå âðåìåíè èñòå÷åíèÿ
             Err147=true;
             ticket=OrderSend(Symbol(),3,lot,buy,3*mno,sll,tpp,NULL,magic,0,Red);
             if(ticket>0){
               WriteOrder(ticket,timecl);
             }else{
               err=GetLastError();
               if(err==130){
                 if(Óñòàíîâêà_îðäåðà_ñ_ðûíêà){
                   RefreshRates();
                   ticket=OrderSend(Symbol(),1,lot,Bid,3*mno,sll,tpp,NULL,magic,0,Red);
                   if(ticket<1){
                     err=GetLastError();
                     Print("Îøèáêà óñòàíîâêè îðäåðà ñ ðûíêà  ¹ ",err,
                           "  òèï îðäåðà = ÑÅËË  ",
                           "  Öåíà îòêðûòèÿ =",Bid,
                           "  Öåíà = ",Bid,
                           "  Ñòîïëîññ = ",sll,
                           "  Òåéêïðîôèò = ",tpp);
                   }
                 }else{
                 
                 }
               }
             }
           }
               if(err==130){
                 if(Óñòàíîâêà_îðäåðà_ñ_ðûíêà){
                   RefreshRates();
                   ticket=OrderSend(Symbol(),1,lot,Bid,3*mno,sll,tpp,NULL,magic,0,Red);
                   if(ticket<1){
                     err=GetLastError();
                     Print("Îøèáêà óñòàíîâêè îðäåðà ñ ðûíêà  ¹ ",err,
                           "  òèï îðäåðà = ÑÅËË  ",
                           "  Öåíà îòêðûòèÿ =",Bid,
                           "  Öåíà = ",Bid,
                           "  Ñòîïëîññ = ",sll,
                           "  Òåéêïðîôèò = ",tpp);
                   }
                 }else{
                 
                 }
               }           
           Print("3  Îøèáêà óñòàíîâêè îðäåðà ¹ ",err);
         }
       }
     }
   } 
   if(CountOpOrd(2,magic)<1){
     if(sell!=0){
       if(OpPrise(sell)){RefreshRates();
         if(Bid-sell<stlw*Point){NormalizeDouble(Bid-stlw*Point,Digits);}
         if(sl<0){sll=NormalizeDouble(sell-((buy-sell)*(sl/(-100))),Digits);}
         if(sl>0){sll=NormalizeDouble(sell-sl*Point*mno,Digits);}
         if(tp>0){tpp=NormalizeDouble(sell+(tp*Point*mno),Digits);}
         if(tp<0){tpp=NormalizeDouble(sell+((buy-sell)*(-tp/100)),Digits);}   
         ticket=OrderSend(Symbol(),2,lot,sell,3*mno,sll,tpp,NULL,magic,timecl, Blue);    
         if(ticket<1){// îáðàáîòêà îøèáîê
           err=GetLastError();
           if(err==147){// çàïðåøåíèå âðåìåíè èñòå÷åíèÿ
             Err147=true;
             ticket=OrderSend(Symbol(),2,lot,sell,3*mno,sll,tpp,NULL,magic,0, Blue);
             if(ticket>0){
               WriteOrder(ticket,timecl);
             }else{
               err=GetLastError();
               if(err==130){
                 if(Óñòàíîâêà_îðäåðà_ñ_ðûíêà){
                   RefreshRates();
                   ticket=OrderSend(Symbol(),0,lot,Ask,3*mno,sll,tpp,NULL,magic,0,Blue);
                   if(ticket<1){
                     err=GetLastError();
                     Print("Îøèáêà óñòàíîâêè îðäåðà ñ ðûíêà  ¹ ",err,
                           "  òèï îðäåðà = BUY  ",
                           "  Öåíà îòêðûòèÿ =",Ask,
                           "  Öåíà = ",Ask,
                           "  Ñòîïëîññ = ",sll,
                           "  Òåéêïðîôèò = ",tpp);
                   }
                 }else{
                 
                 }
               }                 
             }
           }     
               if(err==130){
                 if(Óñòàíîâêà_îðäåðà_ñ_ðûíêà){
                   RefreshRates();
                   ticket=OrderSend(Symbol(),0,lot,Ask,3*mno,sll,tpp,NULL,magic,0,Blue);
                   if(ticket<1){
                     err=GetLastError();
                     Print("Îøèáêà óñòàíîâêè îðäåðà ñ ðûíêà  ¹ ",err,
                           "  òèï îðäåðà = BUY  ",
                           "  Öåíà îòêðûòèÿ =",Ask,
                           "  Öåíà = ",Ask,
                           "  Ñòîïëîññ = ",sll,
                           "  Òåéêïðîôèò = ",tpp);
                   }
                 }else{
                 
                 }
               }                  
           Print("2  Îøèáêà óñòàíîâêè îðäåðà ¹ ",err);
         }          
       }  
     }
   }
  }
  if(typ>0){
   if(CountOpOrd(4,magic)<1){
     if(buy!=0){
       if(OpPrise(buy)){RefreshRates();
         if(buy-Ask<stlw*Point){NormalizeDouble(Ask+stlw*Point,Digits);}
         if(sl<0){sll=NormalizeDouble(buy-((buy-sell)*(sl/(-100))),Digits);}
         if(sl>0){sll=NormalizeDouble(buy-sl*Point*mno,Digits);}
         if(tp>0){tpp=NormalizeDouble(buy+tp*Point*mno,Digits);}
         if(tp<0){tpp=NormalizeDouble(buy+((buy-sell)*(-tp/100)),Digits);}
         ticket=OrderSend(Symbol(),4,lot,buy,3*mno,sll,tpp,NULL,magic,timecl,Blue);
         if(ticket<1){// îáðàáîòêà îøèáîê
           err=GetLastError();
           if(err==147){// çàïðåøåíèå âðåìåíè èñòå÷åíèÿ
             Err147=true;
             ticket=OrderSend(Symbol(),4,lot,buy,3*mno,sll,tpp,NULL,magic,0,Blue);
             if(ticket>0){
               WriteOrder(ticket,timecl);
             }else{
               err=GetLastError();
               if(err==130){
                 if(Óñòàíîâêà_îðäåðà_ñ_ðûíêà){
                   RefreshRates();
                   ticket=OrderSend(Symbol(),0,lot,Ask,3*mno,sll,tpp,NULL,magic,0,Blue);
                   if(ticket<1){
                     err=GetLastError();
                     Print("Îøèáêà óñòàíîâêè îðäåðà ñ ðûíêà  ¹ ",err,
                           "  òèï îðäåðà = BUY  ",
                           "  Öåíà îòêðûòèÿ =",Ask,
                           "  Öåíà = ",Ask,
                           "  Ñòîïëîññ = ",sll,
                           "  Òåéêïðîôèò = ",tpp);
                   }
                 }else{
                 
                 }
               }               
             }  
           }
               if(err==130){
                 if(Óñòàíîâêà_îðäåðà_ñ_ðûíêà){
                   RefreshRates();
                   ticket=OrderSend(Symbol(),0,lot,Ask,3*mno,sll,tpp,NULL,magic,0,Blue);
                   if(ticket<1){
                     err=GetLastError();
                     Print("Îøèáêà óñòàíîâêè îðäåðà ñ ðûíêà  ¹ ",err,
                           "  òèï îðäåðà = BUY  ",
                           "  Öåíà îòêðûòèÿ =",Ask,
                           "  Öåíà = ",Ask,
                           "  Ñòîïëîññ = ",sll,
                           "  Òåéêïðîôèò = ",tpp);
                   }
                 }else{
                 
                 }
               }                       
           Print("4  Îøèáêà óñòàíîâêè îðäåðà ¹ ",err);
         }         
       }
     }
   }  
   if(CountOpOrd(5,magic)<1){
     if(sell!=0){
       if(OpPrise(sell)){RefreshRates();
         if(Bid-sell<stlw*Point){NormalizeDouble(Bid-stlw*Point,Digits);}
         if(sl<0){sll=NormalizeDouble(sell+((buy-sell)*(sl/(-100))),Digits);}
         if(sl>0){sll=NormalizeDouble(sell+sl*Point*mno,Digits);}
         if(tp>0){tpp=NormalizeDouble(sell-tp*Point*mno,Digits);}
         if(tp<0){tpp=NormalizeDouble(sell-((buy-sell)*(-tp/100)),Digits);}   
         ticket=OrderSend(Symbol(),5,lot,sell,3*mno,sll,tpp,NULL,magic,timecl, Red);
         if(ticket<1){// îáðàáîòêà îøèáîê
           err=GetLastError();
           if(err==147){// çàïðåøåíèå âðåìåíè èñòå÷åíèÿ
             Err147=true;
             ticket=OrderSend(Symbol(),5,lot,sell,3*mno,sll,tpp,NULL,magic,0, Red);
             if(ticket>0){
               WriteOrder(ticket,timecl);
             }else{
               err=GetLastError();
               if(err==130){
                 if(Óñòàíîâêà_îðäåðà_ñ_ðûíêà){
                   RefreshRates();
                   ticket=OrderSend(Symbol(),1,lot,Bid,3*mno,sll,tpp,NULL,magic,0,Red);
                   if(ticket<1){
                     err=GetLastError();
                     Print("Îøèáêà óñòàíîâêè îðäåðà ñ ðûíêà  ¹ ",err,
                           "  òèï îðäåðà = SELL  ",
                           "  Öåíà îòêðûòèÿ =",Bid,
                           "  Öåíà = ",Bid,
                           "  Ñòîïëîññ = ",sll,
                           "  Òåéêïðîôèò = ",tpp);
                   }
                 }else{
                 
                 }
               }               
             }      
           } 
               if(err==130){
                 if(Óñòàíîâêà_îðäåðà_ñ_ðûíêà){
                   RefreshRates();
                   ticket=OrderSend(Symbol(),1,lot,Bid,3*mno,sll,tpp,NULL,magic,0,Red);
                   if(ticket<1){
                     err=GetLastError();
                     Print("Îøèáêà óñòàíîâêè îðäåðà ñ ðûíêà  ¹ ",err,
                           "  òèï îðäåðà = SELL  ",
                           "  Öåíà îòêðûòèÿ =",Bid,
                           "  Öåíà = ",Bid,
                           "  Ñòîïëîññ = ",sll,
                           "  Òåéêïðîôèò = ",tpp);
                   }
                 }else{
                 
                 }
               }                 
           Print("5  Îøèáêà óñòàíîâêè îðäåðà ¹ ",err);
         }                
       }  
     }
   } 
 }
return;
} 
//+------------------------------------------------------------------+
//|  Çàïèñü îðäåðà â ìàññèâ äëÿ ñâîåâðåììåíîãî óäàëåíèÿ              |
//+------------------------------------------------------------------+
void WriteOrder(int ticket,int time){int pos;
  int razm=ArrayRange(ord,1);
  for(int i=0;i<razm;i++){
    if(ord[i][0]==ticket){return;}
    if(ord[i][1]==0){pos=i;}
  }
  ord[pos][0]=ticket;
  ord[pos][1]=time;
return;
}
//+------------------------------------------------------------------+
//|  ÷èòàåò ìàññèâ îðäåðîâ è óäàëÿåò îëðäåðà ñ èñòåêøèì ñðîêîì       |
//+------------------------------------------------------------------+
void DelOldOrders(){
  int razm=ArrayRange(ord,1);
  for(int i=0;i<razm;i++){
    if(ord[i][1]!=0){
      if(ord[i][1]<=TimeCurrent()){
      int ticket=ord[i][0];
      if(OrderSelect(ticket,SELECT_BY_TICKET)){
        if(OrderCloseTime()==0){
          if(OrderType()>1){
            if(OrderDelete(OrderTicket(),White)){
              ord[i][0]=0;
              ord[i][1]=0;
            }
          }
        }else{ord[i][0]=0;ord[i][1]=0;}
      }else{ord[i][0]=0;ord[i][1]=0;}
      }
    }
  }
return;
}
//-----------------------------------------------------------------------------+
//| Ðàñ÷åò ëîòà ñîîòâ ðèñêó è áàëàíñó                                          |
//-----------------------------------------------------------------------------+
double CalcLotsAuto(double Risk){double LotOpt,LotNeOpt,Zalog;
   RefreshRates();
   //double bs=AccountBalance()+GrPorfit();
   double lott=MarketInfo(Symbol(),MODE_MARGINREQUIRED)/1000;
   double Marga=AccountFreeMargin();
   double Balans=AccountBalance();
   double LotMin=MarketInfo(Symbol(),MODE_MINLOT);
   double LotMax=MarketInfo(Symbol(),MODE_MAXLOT);
   double StepLot=MarketInfo(Symbol(),MODE_LOTSTEP);
   double StopLv=AccountStopoutLevel();
   int PrsMinLot=1000*LotMin;
   if(Risk<0)Risk=0;
   if(Risk>100)Risk=100; 
   if(StepLot==0.01){int step=2;}else{step=1;}  
//---------------------------     
   Zalog=(Balans*(Risk/100));
   LotOpt=NormalizeDouble((Zalog/1000),step);
   if(LotOpt>LotMax)LotOpt=LotMax;
   if(LotOpt<LotMin)LotOpt=LotMin;
   return(LotOpt);
}
//+------------------------------------------------------------------+
//|  Âðåìÿ óñòàíîâêè îäíîãî îòëîæåííèêà â äåíü                       |
//+------------------------------------------------------------------+
bool Trade(int ho,int min){
  if(TimeHour(TimeCurrent())==ho){
    if(TimeMinute(TimeCurrent())>=min&&TimeMinute(TimeCurrent())<min+5){
      return(true); 
    }
  }
  return(false);
} 
//-----------------------------------------------------------------------------+
// Èùåì öåíó íóæíîãî îðäåðà                                                    |
//-----------------------------------------------------------------------------+
bool OpPrise(double prise,int dist=5){return(true);
  for(int i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Symbol()){
        if(MathAbs(OrderOpenPrice()-prise)<dist*Point*mno){
          return(false);
        }
      }
    }
  }
 return(true);  
}  
//+------------------------------------------------------------------+
//|   Èùåì áëèçæàéøóþ öåíó ñâåðõó                                    |
//+------------------------------------------------------------------+
double UpPrise(double prise,int dist){double res=100000;int shift;
  int stlw=MarketInfo(Symbol(),MODE_STOPLEVEL);
  if(dist<stlw){dist=stlw;}
  int count=ArraySize(ZZ);
  ArraySort(ZZ,WHOLE_ARRAY,0,MODE_DESCEND );
  for(int i=0;i<count;i++){
    double pd=ZZ[i]-prise;
    if(pd>dist*Point*mno){
      if(pd<res){
        res=pd;
        shift=i;
      }  
    }
  }

  return(ZZ[shift]);
}
//+------------------------------------------------------------------+
//|   Èùåì áëèçæàéøóþ öåíó ñíèçó                                     |
//+------------------------------------------------------------------+
double DnPrise(double prise,int dist){double res=100000;int shift;
  int stlw=MarketInfo(Symbol(),MODE_STOPLEVEL);
  if(dist<stlw){dist=stlw;}
  int count=ArraySize(ZZ);
  ArraySort(ZZ,WHOLE_ARRAY,0,MODE_ASCEND );
  for(int i=0;i<count;i++){
    double pd=prise-ZZ[i];
    if(pd>dist*Point*mno){
      if(pd<res){
        res=pd;
        shift=i;
      }  
    }
  }
  return(ZZ[shift]);
}  
//+------------------------------------------------------------------+
//|  Çàáèâàåì ýêñòðåìóìû â ìàññèâ                                    |
//+------------------------------------------------------------------+
void ReadZZ(int per){int y;
  ArrayInitialize(ZZ,0);
  ArrayResize(ZZ,1000);
  for(int i=3;i<per;i++){
     double x = iCustom(Symbol(),ZzPeriod,"Zigzag",0,i);
     if(x!=0){ZZ[y]=NormalizeDouble(x,Digits);y++;}
  }
  ArrayResize(ZZ,y);
}  
//+------------------------------------------------------------------+
//|  Çàáèâàåì ýêñòðåìóìû ôðàêòàëîâ â ìàññèâ                          |
//+------------------------------------------------------------------+
void ReadFr(int per){int y;
  ArrayInitialize(ZZ,0);
  ArrayResize(ZZ,1000);
  for(int i=3;i<per;i++){
     double xup = iFractals(Symbol(),ZzPeriod,MODE_UPPER,i);
     double xdn = iFractals(Symbol(),ZzPeriod,MODE_LOWER,i);
     if(xup!=0){ZZ[y]=NormalizeDouble(xup,Digits);y++;xdn=0;}
     if(xdn!=0){ZZ[y]=NormalizeDouble(xdn,Digits);y++;xup=0;}
  }
  ArrayResize(ZZ,y);
}
//-------------------------------------------------------------------+
//| Ïîäñ÷èòûâàåò êîëè÷åñòâî îòêðûòûõ îðäåðîâ ñîãëàñíî óñëîâèÿì       |
//-------------------------------------------------------------------+
int CountOpOrd(int Typ=-1,int Magik=-1){int count=0;
  for(int i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()==Symbol()){
        if(OrderMagicNumber()==Magik){
          if(OrderType()==Typ){
            if(OrderCloseTime()==0){
              count++;
            }  
          }
        }
      }
    }
  }
 return(count);  
}   
//-----------------------------------------------------------------------------+
// Ôóíêöèÿ êîíòðîëÿ íîâîãî áàðà                                                |
//-----------------------------------------------------------------------------+
bool NewBar(){
   static int PrevTime=0;
   if (PrevTime==Time[0]) return(false);
   PrevTime=Time[0];
   return(true);}   

Comments