qZigZag_Levels

Author: Copyright � 2008, Xrust Solution.
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
0 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

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---