ZigZaHod_v1_0

Author: Coders ZEVs
Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
Miscellaneous
Uses files from the file systemIt writes information to fileIt writes information to fileIt reads information from a fileIt reads information from a fileIt plays sound alerts
0 Views
0 Downloads
0 Favorites
ZigZaHod_v1_0
//+------------------------------------------------------------------+
//|                                               ZigZaHod v1.0.mq4  |
//|                                                                  |                             
//|                                                     Coders ZEVs  |
//|                           https://www.mql5.com/ru/users/fortorg  |
//+------------------------------------------------------------------+
#property copyright "Coders ZEVs"
#property link      "http://"
#include <stdlib.mqh>
int     BarsFr=5;
int     PervFr=3;
int     PropCandlFr=0;
extern bool      SigFractal=true;
//  extern bool     SigCandle=false;
extern int       ABminRazmer=100;      //  ìèíèìàëüíûé ðàçìåð AB
extern int       Otstup=15;            //  îòñòóï ïóíêòîâ  îòë.( ñïðåä)
extern double       OtstupProc=0.1;    // îòñòóï îòë. îò AB (0.1 = 10 %)
extern int       MaxOrder=10;          //  ìàõ. êîë-âî îðäåðîâ (íå áîëüøå 30, îãð. â ìàññèâå)
int       MaxOrdersetka   = 1;        //êîë-âî îðäåðîâ ñåòêè
int       delta       = 25;           //ðàññòîÿíèå îò òåêóùåé öåíû
extern double    KoefProfit=1.5;       //  Êîåôèöèåíò ïðîôèòà
extern double    DelKorStopOrder=0.6;  //  ãëóáèíà êîððåêöèè ïðè êîòîðîé óáèðàòü îòë.
// extern bool      TudySydy=false;
extern bool      OtmerennyiHod=true;   //  îòìåðåííûé õîä.
extern bool      OdnaStor=true;        //  Òîðãîâëÿ â îäíó ñòîðîíó.
bool      ObeStor=false;
double temp;// ABBA
extern bool      SignalDelOldOtl=false;     //  óäàëÿåò ïðåäûäóùóþ îòëîæêó ñâîåãî íàïðàâëåíèÿ ïðè ñèãíàëå
extern bool      SignalDelOldOtlAll=false;  //  óäàëÿå ÂÑÅ ñòàðûå îòëîæêè ïðè ñèãíàëå
bool    DelBS=false;
bool    DelSS=false;
//extern bool      DelBStopOrder=true;
extern bool      StopLos=false;           // âûñòàâëÿåò SL çà Â
int OpBar=0;
int OtkatBar=0;
double Hod=0;
double OtkatCena=0;
double MA,MB,MRazmer,MTime;

//----
int  TfFr,hi,lo;
double h1,h2,h3,h4,l1,l2,l3,l4;
int    hk1,hk2,hk3,hk4,lk1,lk2,lk3,lk4,kstart;
double hf,lf;
bool  NewOrder=true;
double A,B,C,D,Eh,El,AB,E,F,Up,Dn;
int k=1,i=0,Ak,Bk=0,Ck,Dk,Ek,Fk,Upk,Dnk;
int SigTfFr=0;
//----
extern string Òðàë="-=-=-";
//extern   int TipTrala=1;
extern   bool     bTrlinloss= false;  // ñëåäóåò ëè òðàëèòü íà ó÷àñòêå ëîññîâ (ìåæäó êóðñîì ñòîïëîññà è îòêðûòèÿ)
extern bool      SLSignal=false;      //  âûñòàâëÿåò SL íà óðîâíå íîâîãî ñèãíàëà ïðîòèâîïîëîæíîãî íàïðàâëåíèÿ (åñëè "îäíà ñòîðîíà" òî íå ðàáîòàåò)
extern   int      iTmfrm=240;              // ïåðèîä ãðàôèêà, íà êîòîðîì îïðåäåëÿþòñÿ ôðàêòàëû èëè òåíè (1, 5, 15, 30, 60, 240, 1440, 10080, 43200)
extern   int      iIndent=50;         // îòñòóï îò òåíè áàðà, íà êîòîðîì ðàçìåùàåòñÿ ñòîïëîññ
extern   int   Frktl_bars = 5;    // êîë-âî áàðîâ âî ôðàêòàëå
extern   int   Frktl_kol = 0;     // êîë-âî ôðàêòàëîâ ïî êîòîðûì òðàëèòü
extern   int   Bars_kol=19;   // êîë-âî áàðîâ, ïî òåíÿì êîòîðûõ ñëåäóåò òðàëèòü 
//--------
extern double TargetLoss    = 99999;                // Öåëåâîé óáûòîê
extern double TargetProfit  = 99999;                // Öåëåâàÿ ïðèáûëü
int    NumberOfTry= 5;                 // Êîëè÷åñòâî ïîïûòîê
color clCloseBuy  = Blue;              // Öâåò çíà÷êà çàêðûòèÿ ïîêóïêè
color clCloseSell = Red;               // Öâåò çíà÷êà çàêðûòèÿ ïðîäàæè
color clDelete    = Yellow;            // Öâåò çíà÷êà óäàëåíèÿ îðäåðà

bool   UseSound      = False;             // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
string SoundSuccess  = "ok.wav";          // Çâóê óñïåõà
string SoundError    = "timeout.wav";     // Çâóê îøèáêè
//-------
int iTicket;
int H_fractal=0,L_fractal=0;
int hTralFr,lTralFr;
int Tmfrm;
//---
double SelSL,BuySL;
double Target,Razmer;
int BBars=0;
bool  New_Bar=true;
string   ExpertComment="test";
int      NumberOfTries=5;
double BStp=0,SStp=0,BSsl=0,SSsl=0,BSotl=0,SSotl=0;
double Mas_Ord_Tek[31][8];  // Îáüÿâëÿåì ìàññèâ òåêóùèõ îðäåðîâ
                            // 1é èíäåêñ = ïîðÿäêîâûé íîìåð îðäåðà â ýòîì ìàññèâå
// [0][0]   Êîë-âî îòêðûòûõ îðäåðîâ
// [][1] êóðñ îòêð. îðäåðà   (àáñîëþòíîå çíà÷. êóðñà)
// [][2] StopLoss îðäåðà     (àáñîëþòíîå çíà÷. êóðñà)
// [][3] TakeProfit îðäåðà   (àáñîëþòíîå çíà÷. êóðñà)
// [][4] íîìåð îðäåðà         ticket   
// [][5] êîëè÷. ëîòîâ îðäåðà (àáñîëþòíîå çíà÷. êóðñà)
// [][6] òèï îðäåðà 0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] Ìàãè÷åñêîå ÷èñëî îðäåðà  MagicNumber
double Massiv[31][10]; // Îáüÿâëÿåì ìàññèâ -= Massiv =- Îñíîâíîé ìàññèâ
                       // 1é èíäåêñ = ïîðÿäêîâûé íîìåð îðäåðà â ýòîì ìàññèâå
// [0][1]  MagicNumber         !!! ñàìûé Íîâûé ìàãèê  !!!
// [0][2]  MinMagicNumber  îòêð. îðäåðîâ(èç áëîêà ñðàâíåíèÿ îðäåðîâ)
// [0][3]  áëèæàéøàÿ ñâîáîäíàÿ ñòðîêà
// [0][5] ñ÷åò÷èê ñîõðàíåíèé
//  Massiv[][1]; // Öåíà A  
//  Massiv[][2];  // Öåíà B
//  Massiv[][3]; // Ðàçìåð ÀB
//  Massiv[][5];  // Âðåìÿ  ÀB  
//  Massiv[][6];  // òàéìôðåéì  TfFr    

//--------------------------------------------------------------------
extern bool      Commentariy=true;
// extern bool      DelHistoryMassiv=true;
bool      DelHistoryMassiv=true;
extern bool      SaveMassiv=false;
extern int       MagicNumber=515000000;
double LotB,LotS;
extern double    Lot=0.01;
int Kol_B_S;
extern bool      LotProiz=false;   //  ;-)
double Lots;
extern int       Slippage=10;
bool BuyCondition=false,SellCondition=false;// CloseBuyCondition=false , CloseSellCondition=false;
int Magic;int MN;
bool PauseNews=false;
string Spread;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int init()
  {
//   Magic=StrToInteger(StringSubstr(DoubleToStr(MagicNumber,0), 0, 3));
//   if (SaveMassiv==false)//Massiv[0][1]=MagicNumber;
//     {
//        Massiv[0][1]=MagicNumber;
//      MN=MagicNumber;
//      if (Massiv[0][1]>MagicNumber) MagicNumber=Massiv[0][1]; // !!! ñàìûé Íîâûé ìàãèê  !!!
//      if (MagicNumber>MN+9999) MagicNumber= MN; 
//     }
   if(SaveMassiv)
     {
      FilesOpen(); // ×èòàåì Ôàéë â ìàññèâ -->-Massiv
                   //      MN=MagicNumber;
      //      if (Massiv[0][1]>MagicNumber) MagicNumber=Massiv[0][1]; // !!! ñàìûé Íîâûé ìàãèê  !!!
      //      if (Massiv[0][1]<MN) {MagicNumber=MN ; Massiv[0][1]=MagicNumber; FilesWrite();}
      //      if (MagicNumber>MN+99999) {MagicNumber= MN;Massiv[0][1]=MagicNumber;FilesWrite();} 
      //      return(0);
     }
//Magic=StrToInteger(StringSubstr(DoubleToStr(MagicNumber,0), 0, 3));
   return(0);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int deinit()
  {
//   Massiv [0][1]=Massiv [0][1]+1;
   if(SaveMassiv)
     {
      //      if (Massiv [0][1]==0)  Massiv [0][1]=MagicNumber;
      //      if (Massiv [0][1]!=MagicNumber)  
      //      Massiv [0][1]=Massiv [0][1]+1;
      FilesWrite(); //  //  Ïèøåì ìàññèâ Massiv --> â Ôàéë    
     }
   return(0);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Crossed()
  {
//  -------- Îïðåäåëÿåì íîâîñòè ... Åñëè åñòü òî íå òîðãóåì.
   int Min_Dist=MarketInfo(Symbol(),MODE_STOPLEVEL); // Ìèí. äèñòàíöèÿ STOPLEVEL
   int Min_Freez=MarketInfo(Symbol(),MODE_FREEZELEVEL); // Ìèí. äèñòàíöèÿ FREEZELEVEL
   if(PauseNews==true &&(Min_Dist>100|| Min_Freez>100)) // ïðîâåðêà íîâîñòåé
      //  -------- Ïðîâåðÿåì íîâûé áàð...     
      //    Fun_New_Bar();    // Ïðîâåðÿåì íîâûé áàð
      //    if (New_Bar==false)   return; // ..òî óõîäèì 
      NewOrder=false;
   hi=0;lo=0;A=0;B=0;C=0;D=0;E=0;F=0;Up=0;Dn=0;
   Ak=0;Bk=0;Ck=0;Dk=0;Ek=0;Fk=0;Upk=0;Dnk=0;
//      hk1=0;hk2=0;hk3=0;lk1=0;lk2=0;lk3=0;
   TfFr=0;
//   BarsFr=0;  
   kstart=PropCandlFr;
   hlFractal();  // Íàõîäèì hl ôðàêòàëû   

   if(hk1==lk1 && hk1==PervFr) return(0);  // òóäà-ñþäà 
   if(SigFractal)
     {
      if((hk1<lk1) && (hk1==PervFr) && (High[1]<High[3] && High[2]<High[3])) // && (hk2>=lk2)) // up
        {
         A=iHigh(Symbol(),TfFr,PervFr); B=l1;C=h2;D=l2;
         Ak=hk1;Bk=lk1;Ck=hk2;Dk=lk2;
         //         hi=iHighest(Symbol(),TfFr, MODE_HIGH, lk2,PropCandlFr);
         //         lo=iLowest(Symbol(),TfFr, MODE_LOW, lk2,PropCandlFr);
         //         if (iHigh(Symbol(),TfFr,hi)>A ||  iLow(Symbol(),TfFr,lo)<B){return(0);}
        }

      if((lk1<hk1) && (lk1==PervFr) && (Low[1]>Low[3] && Low[2]>Low[3]))// && (lk2>=hk2)) //
        {
         A=iLow(Symbol(),TfFr,PervFr);B=h1;C=l2;D=h2;
         Ak=lk1;Bk=hk1;Ck=lk2;Dk=hk2;
         //         lo=iLowest(Symbol(),TfFr, MODE_LOW, hk2,PropCandlFr) ;
         //         hi=iHighest(Symbol(),TfFr, MODE_HIGH, hk2,PropCandlFr) ;
         //         if (iHigh(Symbol(),TfFr,hi)>B || iLow(Symbol(),TfFr,lo)<A){ return(0);}
        }
     }

   AB=(A-B)*100000; // ??? *Point
   Razmer=AB;
   if(Razmer<0) {Razmer=-Razmer;}
   if(Razmer<ABminRazmer)return(0);

   SelSL=0;
   BuySL=0;

   if(A>B)
     {
      if((DelKorStopOrder>0) && ((B+Razmer*DelKorStopOrder*Point)>iLow(Symbol(),0,1)))return(0);
      NewOrder=true; SelSL=A;BuySL=0;
      if(ObeStor) return(5);
      return(1);//BuyCondition  return(1);
     }

   if(A<B)
     {
      if((DelKorStopOrder>0) && ((B-Razmer*DelKorStopOrder*Point)<iHigh(Symbol(),0,1)))return(0);
      NewOrder=true; BuySL=A;SelSL=0;
      if(ObeStor) return(5);
      return(2);//SellCondition  return(2);
     }

   return(0); //elsewhere
  }
//+------------------------------------------------------------------+
int start()
  {
   string st;
//  Magic=StrToInteger(StringSubstr(DoubleToStr(MagicNumber,0), 0, 3));
   if(OtstupProc==10) {OtstupProc=0.1;} // åíòî äëÿ ñîâìåñòèìîñòè ñî ñòàðîé âåðñèåé
   if(AccountProfit()<-TargetLoss || AccountProfit()>TargetProfit)
     {
      ClosePosFirstProfit();
      DeleteOrders();
     }
//  MasTekOrder (); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà 
//  SravMas();
   int cnt,ticket,total;
   BuyCondition=false; SellCondition=false;// CloseBuyCondition=false , CloseSellCondition=false;
//--- Trading conditions
   Fun_New_Bar();    // Ïðîâåðÿåì íîâûé áàð
   if(New_Bar)
     { // ..òî óõîäèì 
      if(Crossed()==1)
         BuyCondition=true;
      if(Crossed()==2)
         SellCondition=true;
      if(Crossed()==5){SellCondition=true;BuyCondition=true;}
     }
//================================================================
//  Èùåì âñå îòêðûòûå îðäåðà è Ðàáîòåì ñ íèìè... Óäàëÿåì îòëîæêè è òðàëèì
//================================================================
   Kol_B_S=0;
   DelBS=false;DelSS=false;
   LotB=0; LotS=0;
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
        {
         ticket=OrderTicket();
         iTicket=ticket;
         if((OdnaStor) && (OrderType()==1)) {DelBS=true;}  //  buy 
         if((OdnaStor) && (OrderType()==0)) {DelSS=true;}  //  sell
         if((OrderType()==1) || (OrderType()==0)) {Kol_B_S++;}  //  buy 
         if((OdnaStor)  && (BuyCondition) &&(OrderType()==1)) {BuyCondition=false;}  //  buy 
         if((OdnaStor) &&(SellCondition) &&(OrderType()==0)) {SellCondition=false;}  //  sell
         if(OrderType()==OP_BUY) {LotB=LotB+OrderLots();}
         if(OrderType()==OP_SELL) {LotS=LotS+OrderLots();}

        }
     }
//================================================================
//  Èùåì âñå îòêðûòûå îðäåðà è Ðàáîòåì ñ íèìè... Óäàëÿåì îòëîæêè è òðàëèì TP 
//       -=-=-=-=-=-=-=   Ìàñèâ...  ;-)   -=-=-=-=-=-=
//================================================================
// MasTekOrder();   
   total=OrdersTotal();
   for(cnt=0;cnt<total;cnt++)
     {
      if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
        {
         ticket=OrderTicket();
         iTicket=ticket;
         for(int h=1;h<=30;h++) //
           {
            if((Massiv[h][4]==ticket)) break; // 
           }
         MA=Massiv[h][1]; // Öåíà A  
         MB=Massiv[h][2];  // Öåíà B
         MRazmer=Massiv[h][3]; // Ðàçìåð ÀB
         MTime=Massiv[h][5];  // Âðåìÿ  ÀB         

         if(OrderType()==OP_SELLSTOP && OrderSymbol()==Symbol())
           {
            if(DelSS){CloseOrder(OrderType());}
            if((SignalDelOldOtl) && (SellCondition)) {CloseOrder(OrderType());}
            if((SignalDelOldOtlAll) && ((BuyCondition) || (SellCondition))) {CloseOrder(OrderType());}
            if((DelKorStopOrder>0) && (OtmerennyiHod==false) && ((MB-MRazmer*DelKorStopOrder*Point)<iHigh(Symbol(),0,1))){CloseOrder(OrderType());}
            //         if ((DelBStopOrder) && MB<iHigh(Symbol(),0,1)){CloseOrder (OrderType());}
            if(OtmerennyiHod) MasOtmerHod(ticket);
           }
         if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol())
            //     if(OrderType()==OP_BUYSTOP && OrderSymbol()==Symbol() && Magic==StrToInteger(StringSubstr(DoubleToStr(OrderMagicNumber(),0), 0, 3)))
           {
            if(DelBS){CloseOrder(OrderType());}
            if((SignalDelOldOtl) && (BuyCondition)) {CloseOrder(OrderType());}
            if((SignalDelOldOtlAll) && ((BuyCondition) || (SellCondition))) {CloseOrder(OrderType());}
            if((DelKorStopOrder>0) && (OtmerennyiHod==false) && ((MB+MRazmer*DelKorStopOrder*Point)>iLow(Symbol(),0,1))){CloseOrder(OrderType());}
            //         if ((DelBStopOrder)  && MB>iLow(Symbol(),0,1)){CloseOrder (OrderType());}
            if(OtmerennyiHod) MasOtmerHod(ticket);

           }

         if(OrderType()==OP_SELL && OrderSymbol()==Symbol())
           {
            if(OtmerennyiHod) MasOtmerHod(ticket);
            TrailingByZ(iTicket,iTmfrm,Bars_kol,iIndent,bTrlinloss);
           }   // Çàïóñêàåì TrailingStop       
         if(OrderType()==OP_BUY && OrderSymbol()==Symbol()) //<-- Go to short position
           {
            if(OtmerennyiHod) MasOtmerHod(ticket);
            TrailingByZ(iTicket,iTmfrm,Bars_kol,iIndent,bTrlinloss);
           }   // Çàïóñêàåì TrailingStop   
        }
     }


//================================================================
// Âûñòàâëÿåì îòëîæêè
//================================================================
   total=OrdersTotal();
   SLTP(); // Âûçûâàåì ïîäïðîãðàììó ðàñ÷åòà sl, tp,... îòêðûâàåìûõ îðäåðîâ
           //   if ((ObeStor==true)&&((BuyCondition==true)||(SellCondition==true))){BuyCondition=true;SellCondition=true;}
   Lots=Lot;
   if(LotProiz)
     {
      Lots=(Lot*(Kol_B_S+1)*2);  // ïèïåö... ÿ ñàì â øîêå  ;-)
      if(Lots==0) Lots=Lot;
     }

   if(total<MaxOrder)
     {
      if((BuyCondition))//<-- BUY condition
        {
         ticket=OpenOrder(OP_BUYSTOP); //<-- Open BUYSTOP order
         CheckError(ticket,"BUYSTOP"); // return(0);
        }
      if((SellCondition)) //<-- SELL condition
        {
         ticket=OpenOrder(OP_SELLSTOP); //<-- Open SELLSTOP order
         CheckError(ticket,"SELLSTOP"); // return(0);
        }
     }
   BuyCondition=false; SellCondition=false;// CloseBuyCondition=false ; CloseSellCondition=false;
                                           //Spread=MarketInfo(Symbol(),MODE_SPREAD); ExpertComment=MarketInfo(Symbol(),MODE_SPREAD);
//MasTekOrder (); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà 
//SravMas();

   if(Commentariy==true)
     {
      Spread=MarketInfo(Symbol(),MODE_SPREAD); ExpertComment=MarketInfo(Symbol(),MODE_SPREAD);
      st="Öåëåâîé óáûòîê="+DoubleToStr(-TargetLoss,2)+" "+AccountCurrency()+"  Òåêóù";
      if(AccountProfit()<0) st=st+"èé óáûòîê=";
      else st=st+"àÿ ïðèáûëü=";
      st=st+DoubleToStr(AccountProfit(),2)+" "+AccountCurrency()+"  Öåëåâàÿ ïðèáûëü="+DoubleToStr(TargetProfit,2)+" "+AccountCurrency();
      MasTekOrder(); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà 
      SravMas();
      Comment("",TimeToStr(Time[0],TIME_MINUTES),
              "\n ",st,
              "\n Êîë-âî îðäåðîâ= ",Mas_Ord_Tek[0][0],",Ïóñòî= ",Massiv[0][3],
              //       "\n ticket= ",Mas_Ord_Tek[1][4],", Òèï îðäåðà= ",Mas_Ord_Tek[1][6],", magik= ",Mas_Ord_Tek[1][7],
              //       "\n ticket= ",Mas_Ord_Tek[2][4],", Òèï îðäåðà= ",Mas_Ord_Tek[2][6],", magik= ",Mas_Ord_Tek[2][7],
              //       "\n ticket= ",Mas_Ord_Tek[3][4],", Òèï îðäåðà= ",Mas_Ord_Tek[3][6],", magik= ",Mas_Ord_Tek[3][7],
              "\n ticketm= ",Massiv[1][4],", Òèï îðäåðà= ",Massiv[1][6],", magik= ",Massiv[1][7],", A= ",Massiv[1][1],", B= ",Massiv[1][2],", Razmer= ",Massiv[1][3],", Time= ",Massiv[1][5],
              "\n ticketm= ",Massiv[2][4],", Òèï îðäåðà= ",Massiv[2][6],", magik= ",Massiv[2][7],", A= ",Massiv[2][1],", B= ",Massiv[2][2],", Razmer= ",Massiv[2][3],", Time= ",Massiv[2][5],
              //       "\n ticketm= ",Massiv[3][4],", Òèï îðäåðà= ",Massiv[3][6],", magik= ",Massiv[3][7],", A= ",Massiv[3][1],", B= ",Massiv[3][2],", Razmer= ",Massiv[3][3],", Time= ",Massiv[3][5],
              //       "\n ticketm= ",Massiv[4][4],", Òèï îðäåðà= ",Massiv[4][6],", magik= ",Massiv[4][7],", A= ",Massiv[4][1],", B= ",Massiv[4][2],", Razmer= ",Massiv[4][3],", Time= ",Massiv[4][5],
              //       "\n ticketm= ",Massiv[5][4],", Òèï îðäåðà= ",Massiv[5][6],", magik= ",Massiv[5][7],
              //       "\n ticketm= ",Massiv[6][4],", Òèï îðäåðà= ",Massiv[6][6],", magik= ",Massiv[6][7],
              //       "\n ticketm= ",Massiv[7][4],", Òèï îðäåðà= ",Massiv[7][6],", magik= ",Massiv[7][7],
              //       "\n MagicNumberRead= ",Massiv [0][1],", MinMagic= ",Massiv [0][2],", MagicNumber= ",MagicNumber,
              "\n Spread ",Spread,", MagicNumber= ",MagicNumber,"  Ñîõðàíåííî= ",Massiv[0][5],
              "\n A= ",Ak,"   ",A,
              "\n B= ",Bk,"   ",B,
              "\n AB= ",AB);
     }
//Massiv[0][1]=MagicNumber;
   if(AccountProfit()<-TargetLoss || AccountProfit()>TargetProfit)
     {
      ClosePosFirstProfit();
      DeleteOrders();
     }
   return(0);
  }
//+------------------------------------------------------------------+
// Êîíåö...
// äàëüøå èäóò ïîäïðîãðàììû...
//+------------------------------------------------------------------+
void Fun_New_Bar() // Ô-èÿ îáíàðóæåíèÿ ..íîâîãî áàðà
  {
   if(BBars==iBars(Symbol(),SigTfFr)) New_Bar=false;
   if(BBars!=iBars(Symbol(),SigTfFr)) {BBars=iBars(Symbol(),SigTfFr);New_Bar=true;}
  }
//+------------------------------------------------------------------+
// Ðàñ÷èòûâàåì SL TP è öåíó îòêðûòèÿ.
void SLTP() // Ðàñ÷èòûâàåì SL TP
  {
   SStp=0;SSsl=0;BStp=0;BSsl=0;BSotl=0;SSotl=0;
   if(KoefProfit>0) {SStp=A-Razmer*KoefProfit*Point;}
   SSotl=A-Otstup*0.5*Point-Razmer*OtstupProc*Point;
   if(StopLos) SSsl=B+Otstup*Point;

   if(ObeStor) {temp=B;B=A;A=temp;}

   if(KoefProfit>0) {BStp=A+Razmer*KoefProfit*Point;}
   BSotl=A+Otstup*Point+Razmer*OtstupProc*Point;
   if(StopLos) BSsl=B-Otstup/2*Point;

   if(ObeStor) {temp=B;B=A;A=temp;}
  }
//+------------------------------------------------------------------+
// Îòêðûâàåì îòëîæåííûé îðäåð
//=-=-=-=-
int OpenOrder(int type)
  {
   MasTekOrder(); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà 
   SravMas();
   int err=0;int ticket=0;int c=0;
   if(type==OP_BUYSTOP)
     {
      //   MagicNumber=Massiv[0][1];
      BSotl= NormalizeDouble(BSotl-delta*Point,Digits);
      for(i=1; i<=MaxOrdersetka; i++)
        {
         BSotl= NormalizeDouble(BSotl+delta*Point,Digits);
         for(c=0;c<NumberOfTries;c++)
           {
            ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,BSotl,Slippage,BSsl,BStp,ExpertComment,MagicNumber,0,Green);
            err=GetLastError();
            if(err==0)
              {
               ZapOrdMas(ticket);
               break;
              }
            else
              {
               if(err==4 || err==137 || err==146 || err==136) //Busy errors
                 {
                  Sleep(60);
                  continue;
                 }
               else //normal error
                 {
                  //              ZapOrdMas(ticket);
                  break;
                 }
              }
           }
        }
     }
   if(type==OP_SELLSTOP)
     {
      //   MagicNumber=Massiv[0][1]; 
      SSotl= NormalizeDouble(SSotl+delta*Point,Digits);
      for(i=1; i<=MaxOrdersetka; i++)
        {
         SSotl=NormalizeDouble(SSotl-delta*Point,Digits);
         for(c=0;c<NumberOfTries;c++)
           {
            ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,SSotl,Slippage,SSsl,SStp,ExpertComment,MagicNumber,0,Red);
            err=GetLastError();
            if(err==0)
              {
               ZapOrdMas(ticket);
               break;
              }
            else
              {
               if(err==4 || err==137 || err==146 || err==136) //Busy errors
                 {
                  Sleep(60);
                  continue;
                 }
               else //normal error
                 {
                  //              ZapOrdMas(ticket);
                  break;
                 }
              }
           }
        }
      //   }
     }
// ZapOrdMas(ticket);
//MasTekOrder (); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà 
//SravMas();
   return(ticket);
  }
//+------------------------------------------------------------------+
// Çàêðûâàåì îòëîæåííûé îðäåð
bool CloseOrder(int type)

  {
   if(type==OP_BUYSTOP)
      return(OrderDelete(OrderTicket()));
   if(type==OP_SELLSTOP)
      return(OrderDelete(OrderTicket()));
   return (0);
  }
//+------------------------------------------------------------------+
void CheckError(int ticket,string Type)
  {
   if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print(Type+" order opened : ",OrderOpenPrice());
     }
   else Print("Error opening "+Type+" order : ",ErrorDescription(GetLastError()));
  }
//+------------------------------------------------------------------+
//+-  ×èòàåì è ïèøåì â ôàéë  -=-  -----------------------------------+
//+------------------------------------------------------------------+
void FilesWrite() //  Ïèøåì  Massiv --> â Ôàéë (ðåçåðâíîå êîïèðîâàíèå)
  {
   Massiv[0][5]=Massiv[0][5]+1;
   int h=FileOpen("Massiv.bin",FILE_BIN|FILE_WRITE);
   FileWriteInteger(h,ArraySize(Massiv),LONG_VALUE);
   FileWriteArray(h,Massiv,0,ArraySize(Massiv));
   FileClose(h);
  }
//+------------------------------------------------------------------+
void FilesOpen() // ×èòàåì Ôàéë â Massiv -->-- (ðåçåðâíîå êîïèðîâàíèå)
  {
   int h=FileOpen("Massiv.bin",FILE_BIN|FILE_READ);
   if(h<1)
     {
      Print("Ôàéë Massiv.bin íå îáíàðóæåí, ïîñëåäíÿÿ îøèáêà ",GetLastError());
      return(false);
     }
   int s=FileReadInteger(h,LONG_VALUE);
   ArrayResize(Massiv,s);
   FileReadArray(h,Massiv,0,s);
   FileClose(h);
  }
//+------------------------------------------------------------------+
//+-    -=-  -----------------------------------+
//+------------------------------------------------------------------+   
void MasTekOrder() // Èùåì è çàíîñèì â Ìàññèâ "Mas_Ord_Tek" âñå îðäåðà 
  {
   int Kol=0;                         // Îáíóëåíèå ñ÷¸ò÷èêà îðäåðîâ
                                      //   Massiv[0][2]=Massiv[0][1];  //  ñàìûé ìàëûé ìàãèê = Ñàìûé áîëüøîé(ñáðîñ)
   ArrayInitialize(Mas_Ord_Tek,0);    // Îáíóëåíèå ìàññèâà
   for(i=0; i<OrdersTotal(); i++)// Àíàëèç ïî âñåì îðäåðàì òåðìèíàëà
     {
      if((OrderSelect(i,SELECT_BY_POS)==true) && (OrderSymbol()==Symbol()))// && Magic==StrToInteger(StringSubstr(DoubleToStr(OrderMagicNumber(),0), 0, 3)))) //Åñëè åñòü ñëåäóþù è íàøà âàë.ïàðà è íàø ìàãèê
        {
         Kol++;                  // Ñ÷èòàåì îáùåå êîëè÷åñòâî îðäåðîâ
         //--- Ôîðìèðîâàíèå íîâîãî ìàññèâà îðäåðîâ --
         Mas_Ord_Tek[Kol][1] = NormalizeDouble(OrderOpenPrice(),Digits); // Êóðñ îòêðûòèÿ îðäåðîâ
         Mas_Ord_Tek[Kol][2] = NormalizeDouble(OrderStopLoss(), Digits); // Êóðñ SL 
         Mas_Ord_Tek[Kol][3]= NormalizeDouble(OrderTakeProfit(),Digits); // Êóðñ ÒÐ 
         Mas_Ord_Tek[Kol][4] = OrderTicket();     // Íîìåð îðäåðà
         Mas_Ord_Tek[Kol][5] = OrderLots();       // Êîëè÷åñòâî ëîòîâ
         Mas_Ord_Tek[Kol][6] = OrderType();       // Òèï îðäåðà
         Mas_Ord_Tek[Kol][7] = OrderMagicNumber();// Ìàãè÷åñêîå ÷èñëî 
                                                  //        if (Massiv[0][2]>OrderMagicNumber()) Massiv[0][2]=OrderMagicNumber(); // Èùåì ñàìûé ìàëåíüêèé ìàãèê ñðåäè îòêðûòûõ îðäåðîâ
        }
     }
   Mas_Ord_Tek[0][0]=Kol; // Ñîõðàíÿåì â íóëåâóþ ÿ÷åå÷êó êîë-âî îðäåðîâ.
                          //   Massiv[0][2]=MinMagicNumber; // Çàíîñèì â îñíîâíîé ìàññèâ ñàìûé ìàëåíüêèé ìàãèê îòêðûòûõ îðäåðîâ
//   return();
  }
//==================================================================   
void SravMas() //==================================== Ïîèñê ïðîïàâøèõ îðäåðîâ ====
  {
   for(int oo=1;oo<=30;oo++) // Âîçüì¸ì íîìåð îðäåðà èç ñòàðîãî ìàññèâà  
      //   for (int oo=1;oo<=Massiv[0][0];oo++)   // Âîçüì¸ì íîìåð îðäåðà èç ñòàðîãî ìàññèâà  
     {
      int Sovpadenie=0;     // Äëÿ íà÷àëà îáíóëèì ôàêò ïðèçíàêà ñîâïàä.                     
      for(i=1;i<=Mas_Ord_Tek[0][0];i++) // Ïîèùåì ýòîò îðäåðîê â òåêóùåì ìàññèâå  
        {
         if(Mas_Ord_Tek[i][4]==Massiv[oo][4]) // Åñëè ñîâïàë ticket îðäåðà, òî çàïîìíèì, ò.å ïîêà æèâ
            // è âûõîäèì èç âíóòðåííåãî öèêëà
           {
            Sovpadenie=1;
            if(Massiv[oo][6]!=Mas_Ord_Tek[i][6]) Massiv[oo][6]=Mas_Ord_Tek[i][6]; //èçìåíÿåì ñòàòóñ îðäåðà                        
            break;
           }
        }
      if(Sovpadenie==1) continue;  // Ïåðåõîäèì ê ñëåäóþùåìó ñòàðîìó

      if(Massiv[oo][6]<9) Massiv[oo][6]=Massiv[oo][6]+10;  // Çàêðûò îðäåð 
     }
   Massiv[0][3]=0;    // Ñáðîñ ïóñòîé ÿ÷åéêè äëÿ çàïèñè îðäåðîâ
   for(int f=1;f<=30;f++) // Ïåðåáèðàåì âåñü ìàññèâ â ïîèñêàõ ñòàðûõ îðäåðîâ è èõ óäàëåíèÿ
     {
      if((Massiv[0][3]==0) && (Massiv[f][4]==0)) Massiv[0][3]=f; // åñëè íåò ticket çíà÷èò ñòðîêà ïóñòà
      if((DelHistoryMassiv) && (Massiv[f][6]>9)) // Åñëè îðäåðà óæå íåò 
        {
         for(int g=0;g<=7;g++) // Îáíóëÿåì âñþ ñòðîêó 
           {
            Massiv[f][g]=0;   // çàïîëíÿåì 0
            if(Massiv[0][3]==0) Massiv[0][3]=f;// Çàïîìèíàåì ïóñòóþ ñòðîêó äëÿ çàïèñè íîâûõ îðäåðîâ
           }
        }
     }
//   return();
  }
//=================================================================
void ZapOrdMas(int ticket)
  {
   MasTekOrder(); // Èùåì è çàíîñèì â Ìàññèâ Mas_Ord_Tek âñå îðäåðà 
   SravMas();
   int pusto=Massiv[0][3];
   if(pusto==0)
     {
      for(int f=1;f<=30;f++) // Ïåðåáèðàåì âåñü ìàññèâ â ïîèñêàõ ïóñòûõ ñòðîê
        {
         if((pusto==0) && (Massiv[f][4]==0)) {pusto=f; break;} // åñëè íåò ticket çíà÷èò ñòðîêà ïóñòà
        }
     }
   for(i=0; i<OrdersTotal(); i++)// Àíàëèç ïî âñåì îðäåðàì òåðìèíàëà
     {
      if((OrderSelect(i,SELECT_BY_POS)==true) && (OrderSymbol()==Symbol()) && (ticket==OrderTicket())) //Åñëè åñòü ñëåäóþù è íàøà âàë.ïàðà
        {
         if((ObeStor) && (Ak>Bk) && (OrderType()==5)) {temp=B;B=A;A=temp;}  //  buy 
         if((ObeStor) && (Ak<Bk) && (OrderType()==4)) {temp=B;B=A;A=temp;}  //  sell
                                                                            // Ak=hk1;Bk=lk1;  SelSL=A  

         Massiv[pusto][1] = A;// A
         Massiv[pusto][2] = B;// B
         Massiv[pusto][3]=Razmer;// Razmer
         Massiv[pusto][4]=OrderTicket();     // Íîìåð îðäåðà
         Massiv[pusto][5]=Time[0];// Âðåìÿ îòêðûòèÿ ñäåëêè
         Massiv[pusto][6] = OrderType();       // Òèï îðäåðà
         Massiv[pusto][7] = OrderMagicNumber();// Ìàãè÷åñêîå ÷èñëî 
                                               //         Massiv[pusto][8] =    // Ïåðèîä ãðàôèêà ïðèíÿòèÿ ðåøåíèÿ
         //         Massiv[pusto][9] = 
         Massiv[0][3]=0;
         //         MagicNumber=MagicNumber+1;
         Massiv[0][1]=MagicNumber;
         if((ObeStor) && (Ak>Bk) && (OrderType()==5)) {temp=B;B=A;A=temp;} //   buy 
         if((ObeStor) && (Ak<Bk) && (OrderType()==4)) {temp=B;B=A;A=temp;}  //  sell
         if(SaveMassiv==true)
           {
            FilesWrite();
            //          return(0);
           } //  //  Ïèøåì ìàññèâ Massiv --> â Ôàéë    
        }
     }
//SravMas();
   return;
  }
//--------------------------------------------------------------------------   
void MasOtmerHod(int ticket)
  {
   for(int m=1;m<=30;m++) //
     {
      if((Massiv[m][4]==ticket)) break; // 
     }
   for(i=0; i<OrdersTotal(); i++)// Àíàëèç ïî âñåì îðäåðàì òåðìèíàëà
     {
      if((OrderSelect(i,SELECT_BY_POS)==true) && (OrderSymbol()==Symbol()) && (ticket==OrderTicket())) //Åñëè åñòü ñëåäóþù è íàøà âàë.ïàðà
        {
         if((OtmerennyiHod) && ((Massiv[m][6]==0) || (Massiv[m][6]==4))) // buy
           {
            if((DelKorStopOrder>0) && (Massiv[m][6]==4) && ((Massiv[m][2]+Massiv[m][3]*DelKorStopOrder*Point)>iLow(Symbol(),0,1))){CloseOrder(OrderType());}
            OpBar=(iBarShift(Symbol(),0,MTime)+1);
            OtkatBar=iLowest(Symbol(),0,MODE_LOW,OpBar,1);
            OtkatCena=iLow(Symbol(),0,OtkatBar);
            //             Hod=(MB-MA)*100000; // ??? *Point
            //           DelKor
            Hod=MRazmer;
            //             if (Hod<0) {Hod=-Hod;}
            Target=OtkatCena+Hod*KoefProfit*Point;
            OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Target,0,Yellow);
           }
         if((OtmerennyiHod) && ((Massiv[m][6]==1) || (Massiv[m][6]==5))) //sell
           {
            if((DelKorStopOrder>0) && (Massiv[m][6]==5) && ((Massiv[m][2]-Massiv[m][3]*DelKorStopOrder*Point)<iHigh(Symbol(),0,1))){CloseOrder(OrderType());}
            OpBar=(iBarShift(Symbol(),0,MTime)+1);
            OtkatBar=iHighest(Symbol(),0,MODE_HIGH,OpBar,1);
            OtkatCena=iHigh(Symbol(),0,OtkatBar);
            //             Hod=(MB-MA)*100000; // ??? *Point
            Hod=MRazmer;
            //             if (Hod<0) {Hod=-Hod;}
            Target=OtkatCena-Hod*KoefProfit*Point;// A+Razmer*KoefProfit*Point;
            OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),Target,0,Yellow);
           }
        }
     }
   return;
  }
//--------------------------------------------------------------------------   
void hlFractal()
  {
//+--------------Âû÷èñëÿåì h1-h3
   hk1=0;hk2=0;hk3=0;hk4=0;hf=0;lf=0;
   k=kstart;
   while(hk1<1) //...h1
     {
      hf=iCustom(Symbol(),TfFr,"Fr",BarsFr,0,k);
      if(hf>0) {hk1=k;h1=hf;}
      k++;
     }
   k=k+1;
   while(hk2<1) //...h2
     {
      hf=iCustom(Symbol(),TfFr,"Fr",BarsFr,0,k);
      if(hf>0) {hk2=k;h2=hf;}
      k++;
     }
   k=k+1;
   while(hk3<1) //...h3
     {
      hf=iCustom(Symbol(),TfFr,"Fr",BarsFr,0,k);
      if(hf>0) {hk3=k;h3=hf;}
      k++;
     }
   k=k+1;
   while(hk4<1) //...h4
     {
      hf=iCustom(Symbol(),TfFr,"Fr",BarsFr,0,k);
      if(hf>0) {hk4=k;h4=hf;}
      k++;
     }
//+--------------Âû÷èñëÿåì l1-l3
   lk1=0;lk2=0;lk3=0;lk4=0;
   k=kstart;
   while(lk1<1) //...l1
     {
      lf=iCustom(Symbol(),TfFr,"Fr",BarsFr,1,k);
      if(lf>0) {lk1=k;l1=lf;}
      k++;
     }
   k=k+1;
   while(lk2<1) //...l2
     {
      lf=iCustom(Symbol(),TfFr,"Fr",BarsFr,1,k);
      if(lf>0) {lk2=k;l2=lf;}
      k++;
     }
   k=k+1;
   while(lk3<1) //...l3
     {
      lf=iCustom(Symbol(),TfFr,"Fr",BarsFr,1,k);
      if(lf>0) {lk3=k;l3=lf;}
      k++;
     }
   k=k+1;
   while(lk4<1) //...l4
     {
      lf=iCustom(Symbol(),TfFr,"Fr",BarsFr,1,k);
      if(lf>0) {lk4=k;l4=lf;}
      k++;
     }
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+-----------------------------------------------------TrailingStop-+
//+------------------------------------------------------------------+
void TralFractal()
  {
   k=0;hTralFr=0;
   hf=0;
   Tmfrm=iTmfrm;
   for(int a=0; a<Frktl_kol; a++) //
     {
      hTralFr=0;
      while(hTralFr<1) //...
        {
         hf=iCustom(Symbol(),Tmfrm,"Fr",Frktl_bars,0,k);
         if(hf>0) hTralFr=k;
         k++;
        }
     }
   k=0;lTralFr=0;
   lf=0;
   for(a=0; a<Frktl_kol; a++) //
     {
      lTralFr=0;
      while(lTralFr<1) //...
        {
         lf=iCustom(Symbol(),Tmfrm,"Fr",Frktl_bars,1,k);
         if(lf>0) lTralFr=k;
         k++;
        }
     }
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void TrailingByZ(int ticket,int tmfrm,int bars_n,int indent,bool trlinloss)
  {
   TralFractal();
//   int i; // counter
   double new_extremum;

// ïðîâåðÿåì ïåðåäàííûå çíà÷åíèÿ
   if((indent<0) || (ticket==0) || ((tmfrm!=1) && (tmfrm!=5) && (tmfrm!=15) && (tmfrm!=30) && (tmfrm!=60) && (tmfrm!=240) && (tmfrm!=1440) && (tmfrm!=10080) && (tmfrm!=43200)) || (!OrderSelect(ticket,SELECT_BY_TICKET)))
     {
      Print("Òðåéëèíã ôóíêöèåé TrailingByShadows() íåâîçìîæåí èç-çà íåêîððåêòíîñòè çíà÷åíèé ïåðåäàííûõ åé àðãóìåíòîâ.");
      return(0);
     }

// åñëè äëèííàÿ ïîçèöèÿ (OP_BUY), íàõîäèì ìèíèìóì bars_n ñâå÷åé
   if(OrderType()==OP_BUY)
     {
      if(Frktl_kol>0) // new_extremum = ArrayMinimum(Symbol(),tmfrm,lTralFr);
        {
         //       TralFractal();
         int IndMin=ArrayMinimum(Low,lTralFr,1); // èíäåêñ áàðà
         new_extremum=iLow(Symbol(),tmfrm,IndMin);
        }
      if(Bars_kol>0)
        {
         for(i=1;i<=bars_n;i++)
           {
            if(i==1) new_extremum=iLow(Symbol(),tmfrm,i);
            else
               if(new_extremum>iLow(Symbol(),tmfrm,i)) new_extremum=iLow(Symbol(),tmfrm,i);
           }
        }
      if((BuySL>0) && (SLSignal)) new_extremum=BuySL;

      // åñëè òðàëèì è â çîíå óáûòêîâ
      if(trlinloss==true)
        {
         // åñëè íàéäåííîå çíà÷åíèå "ëó÷øå" òåêóùåãî ñòîïëîññà ïîçèöèè, ïåðåíîñèì 
         if((((new_extremum-indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum-indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if(!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
               Print("Íå óäàëîñü ìîäèôèöèðîâàòü îðäåð ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
        }
      else
        {
         // åñëè íîâûé ñòîïëîññ íå òîëüêî ëó÷øå ïðåäûäóùåãî, íî è êóðñà îòêðûòèÿ ïîçèöèè
         if((((new_extremum-indent*Point)>OrderStopLoss()) || (OrderStopLoss()==0)) && ((new_extremum-indent*Point)>OrderOpenPrice()) && (new_extremum-indent*Point<Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if(!OrderModify(ticket,OrderOpenPrice(),new_extremum-indent*Point,OrderTakeProfit(),OrderExpiration()))
               Print("Íå óäàëîñü ìîäèôèöèðîâàòü îðäåð ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
        }
     }
// åñëè êîðîòêàÿ ïîçèöèÿ (OP_SELL), íàõîäèì ìèíèìóì bars_n ñâå÷åé
   if(OrderType()==OP_SELL)
     {
      if(Frktl_kol>0)
        {
         int IndMax=ArrayMaximum(High,hTralFr,1); // èíäåêñ áàðà
         new_extremum=iHigh(Symbol(),tmfrm,IndMax);
        }
      if(Bars_kol>0)
        {
         for(i=1;i<=bars_n;i++)
           {
            if(i==1) new_extremum=iHigh(Symbol(),tmfrm,i);
            else
               if(new_extremum<iHigh(Symbol(),tmfrm,i)) new_extremum=iHigh(Symbol(),tmfrm,i);
            //         if ((Frktl_kol>0) && new_extremum<iHigh(Symbol(),tmfrm,hTralFr)) new_extremum = iHigh(Symbol(),tmfrm,hTralFr);
            //         if (Frktl_kol>0) new_extremum = iHigh(Symbol(),tmfrm,hTralFr);
           }
        }
      if((SelSL>0) && (SLSignal)) new_extremum=SelSL;
      // åñëè òðàëèì è â çîíå óáûòêîâ
      if(trlinloss==true)
        {
         // åñëè íàéäåííîå çíà÷åíèå "ëó÷øå" òåêóùåãî ñòîïëîññà ïîçèöèè, ïåðåíîñèì 
         if((((new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss()) || (OrderStopLoss()==0)) && (new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if(!OrderModify(ticket,OrderOpenPrice(),new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
               Print("Íå óäàëîñü ìîäèôèöèðîâàòü îðäåð ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
        }
      else
        {
         // åñëè íîâûé ñòîïëîññ íå òîëüêî ëó÷øå ïðåäûäóùåãî, íî è êóðñà îòêðûòèÿ ïîçèöèè
         if((((new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderStopLoss()) || (OrderStopLoss()==0)) && ((new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point)<OrderOpenPrice()) && (new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point>Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point))
            if(!OrderModify(ticket,OrderOpenPrice(),new_extremum+(indent+MarketInfo(Symbol(),MODE_SPREAD))*Point,OrderTakeProfit(),OrderExpiration()))
               Print("Íå óäàëîñü ìîäèôèöèðîâàòü îðäåð ¹",OrderTicket(),". Îøèáêà: ",GetLastError());
        }
     }
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Àâòîð    : Êèì Èãîðü Â. aka KimIV,  http://www.kimiv.ru                   |


//+----------------------------------------------------------------------------+
//|  Âåðñèÿ  : 19.02.2008                                                      |
//|  Îïèñàíèå: Çàêðûòèå îäíîé ïðåäâàðèòåëüíî âûáðàííîé ïîçèöèè                 |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() 
  {
   bool   fc;
   color  clClose;
   double ll,pa,pb,pp;
   int    err,it;

   if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
     {
      for(it=1; it<=NumberOfTry; it++) 
        {
         if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
         while(!IsTradeAllowed()) Sleep(5000);
         RefreshRates();
         pa=MarketInfo(OrderSymbol(), MODE_ASK);
         pb=MarketInfo(OrderSymbol(), MODE_BID);
         if(OrderType()==OP_BUY) 
           {
            pp=pb; clClose=clCloseBuy;
              } else {
            pp=pa; clClose=clCloseSell;
           }
         ll=OrderLots();
         fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
         if(fc) 
           {
            if(UseSound) PlaySound(SoundSuccess); break;
              } else {
            err=GetLastError();
            if(UseSound) PlaySound(SoundError);
            if(err==146) while(IsTradeContextBusy()) Sleep(1000*11);
            Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
                  ErrorDescription(err),", try ",it);
            Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
            Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
                  "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
            Sleep(1000*5);
           }
        }
     }
   else Print("Íåêîððåêòíàÿ òîðãîâàÿ îïåðàöèÿ. Close ",GetNameOP(OrderType()));
  }
//|  Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè                      |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè                                    |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) 
  {
   switch(op) 
     {
      case OP_BUY      : return("Buy");
      case OP_SELL     : return("Sell");
      case OP_BUYLIMIT : return("BuyLimit");
      case OP_SELLLIMIT: return("SellLimit");
      case OP_BUYSTOP  : return("BuyStop");
      case OP_SELLSTOP : return("SellStop");
      default          : return("Unknown Operation");
     }
  }
//+----------------------------------------------------------------------------+
//|  Îïèñàíèå : Çàêðûòèå ïîçèöèé ïî ðûíî÷íîé öåíå ñíà÷àëà ïðèáûëüíûõ           |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáàÿ ïîçèöèÿ)                  |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="",int op=-1,int mn=-1) 
  {
   k=OrdersTotal();
   if(sy=="0") sy=Symbol();

// Ñíà÷àëà çàêðûâàåì ïðèáûëüíûå ïîçèöèè
   for(i=k-1; i>=0; i--) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) 
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
              {
               if(mn<0 || OrderMagicNumber()==mn) 
                 {
                  if(OrderProfit()+OrderSwap()>0) ClosePosBySelect();
                 }
              }
           }
        }
     }
// Ïîòîì âñå îñòàëüíûå
   k=OrdersTotal();
   for(i=k-1; i>=0; i--) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) 
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
              {
               if(mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
              }
           }
        }
     }
  }
//|  Îïèñàíèå : Óäàëåíèå îðäåðîâ                                               |
//+----------------------------------------------------------------------------+
//|  Ïàðàìåòðû:                                                                |
//|    sy - íàèìåíîâàíèå èíñòðóìåíòà   (""   - ëþáîé ñèìâîë,                   |
//|                                     NULL - òåêóùèé ñèìâîë)                 |
//|    op - îïåðàöèÿ                   (-1   - ëþáîé îðäåð)                    |
//|    mn - MagicNumber                (-1   - ëþáîé ìàãèê)                    |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="",int op=-1,int mn=-1) 
  {
   bool fd;
   int  err,it,ot;
   k=OrdersTotal();
   if(sy=="0") sy=Symbol();
   for(i=k-1; i>=0; i--) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         ot=OrderType();
         if(ot>1 && ot<6) 
           {
            if((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) 
              {
               if(mn<0 || OrderMagicNumber()==mn) 
                 {
                  for(it=1; it<=NumberOfTry; it++) 
                    {
                     if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
                     while(!IsTradeAllowed()) Sleep(5000);
                     fd=OrderDelete(OrderTicket(),clDelete);
                     if(fd) 
                       {
                        if(UseSound) PlaySound(SoundSuccess); break;
                          } else {
                        err=GetLastError();
                        if(UseSound) PlaySound(SoundError);
                        Print("Error(",err,") delete order ",GetNameOP(ot),": ",ErrorDescription(err),", try ",it);
                        Sleep(1000*5);
                       }
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+

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 ---